Abakaffe

Skrevet av relekang

Det hele startet med en papirlapp med klokkeslett for siste ferdige kaffekanne. Etter å ha hengt noen timer på kontoret en dag i slutten av forrige semester innså jeg at dette kan gjøres bedre. Webkom ble derfor enig om at prosessen burde automatiseres og at informasjonen burde publiseres på kaffe.abakus.no.

Dersom du er interessert i å se koden eller å bidra, finner du den på github.com/webkom/coffee.

Vi ville at oppdateringen av statusen skulle være automatisk fordi studenter med koffeinabstinenser er trolige til å glemme å trykke på en knapp. Vi gikk derfor for en løsning med en lyssensor montert på lyset som viser at trakteren er på. Sensoren er en variabel motstand styrt av lys. Den virker slik at ved mye lys vil motstanden være lavere enn ved lite lys. Dette gjør at man enkelt kan måle lys med høy nok nøyaktighet ved hjelp av en RC-krets. Kretsen ble koblet slik at signalet på GPIO-porten vil være høy når kondensatorene er ladet opp. Tiden det tar for kondesatorene å bli ladet opp vil variere basert på motstanden i lyssensoren. Etter litt testing med kretsen vi laget fant vi ut at hvis det tar mindre enn 1500 ms, så er lyset på. Nedenfor er koden som sjekker dette:

def rc_time(RCpin):
    reading = 0
    GPIO.setup(RCpin, GPIO.OUT)
    GPIO.output(RCpin, GPIO.LOW)
    time.sleep(0.1)
    GPIO.setup(RCpin, GPIO.IN)
    while (GPIO.input(RCpin) == GPIO.LOW):
        reading += 1
    return reading

while True:
    if rc_time(PIN) < 1500:
        status.update(True)
    else:
        status.update(False)

rc_time returnerer tiden det tok for siste oppladning av kondensatorene. Hver gang den returnerer oppdaterer vi status objektet. Status er en enkel klasse som abstraherer bort lagring til databasen slik at man ikke trenger å gjenta logikken og får en mer lesbar kode.

Det vil kun bli sendt oppdateringer til databasen når det er endringer. Hvis status.update(True) blir kalt to ganger etter hverandre vil det siste kallet ikke gjøre noe.

Frykten for at en Raspberry Pi ikke skulle være nok til å ta unna forespørslene fra kaffetørste studenter fikk oss til å kjøre selve apiet på den samme serveren som abakus.no kjører på. Raspberry Pi’en kjører kun det lille python scriptet som sender informasjon til Redis om at kaffetrakteren er satt på.

Det er mulig å hente ut to ting fra APIet: status og statistikk.

Hvis du synes det å lage et API til en kaffetrakter høres interessant ut så vil jeg anbefale å sjekke ut Hackerspace NTNU. De har mye kult utstyr man kan låne til å utvikle lignende prosjekter.

← Tilbake