UTVIKLING

Satt og frøys: Da lagde Simen en Slack-bot som logger temperaturen på kontoret

Har du et hobbyprosjekt? Fortell oss om det!

Slik ser Slack-boten til digi ut i bruk.
Slik ser Slack-boten til digi ut i bruk. Bilde: Skjermdump
8. sep. 2017 - 16:02

IT-bransjen er full av kreative sjeler, og svært mange har sine små hobbyprosjekter – enten hjemme eller på kontoret. 

Har du eller noen du kjenner et prosjekt vi kan dele med leserne? Send det på mail til erlend@digi.no – gjerne med bilder eller skjermdumper.

Det kalde kontoret

Digi.no deler kontorlandskap med en rekke andre redaksjoner. Blant dem er Teknisk Ukeblad, Gamer.no og Inside Telecom. I tillegg har vi salg, administrasjon og IT.

Men med store landskap kommer store utfordringer. Nærmere bestemt: Temperaturtrøbbel.

Ikke bare har folk ulike ønsker for temperaturen, men hos oss har det oppstått variasjoner i temperaturen på ulike steder i bygget og til ulike tider av døgnet. 

En dag da IT-avdelingen satt og frøys, bestemte CMS-gud Simen Graaten seg for å ta grep. Han hadde fått nok av spekulasjoner om hva temperaturen faktisk var.

Han gjorde som utviklerne ofte gjør: Laget en bot (og drakk kaffe).  Her er hans historie:

Simen skriver: 

Når det kjennes kaldt ut på kontoret er det bare en ting å gjøre, logge litt data.

Vi bruker Slack, og her har vi mulighet til å sette opp egendefinerte kommandoer , som for eksempel kan levere temperaturen akkurat nå hvis man lager et lite skript.

Maskinvare

Først behøver man noe maskinvare for å gjøre selve loggingen og overføringen til en PC eller en Raspberry Pi.

Temperatursensor

På Clas Ohlson får man kjøpt en temperatursensor med radiosender til rundt en hundrings.

Denne sender på 433MHz som har vært standardfrekvensen til slik hjemmeutstyr før ting begynte å få innebygget WLAN eller Bluetooth. 

Dette er nok ikke verdens mest nøyaktige måler, men den duger nok til dette prosjektet.

SDR

På ymse nettbutikker kan man finne noe som kalles for en software defined radio (SDR).

Dette er en programmerbar mottaker som sitter i endel radio/tv-mottakere som med usb-tilknytning kan kobles til PC-er, nettbrett og telefoner.

Disse kan programmeres til å motta radiosignaler innenfor et ganske stort spekter av frekvenser inkludert 433MHz og koster også ca. hundre kroner.

Siden jeg allerede hadde bestilt en slik tidligere (RTL2832U + FC0012 Mini DVB-T + DAB + FM USB Digital TV Dongle) for et lignende formål sjekket jeg om det fantes en dekoder for denne som kunne tolke signalene fra temperaturmåleren.

Det finnes en blogg som skriver om SDR og andre prosjekter som bruker slike.

Artikkelen fortsetter under bildet

Temperatursensor som sender oppdateringer på 433MHz-båndet en gang i minuttet sammen med en DVB-T/FM/DAB-tuner som kan justere mottakerfrekvens via programvare
Temperatursensor som sender oppdateringer på 433MHz-båndet en gang i minuttet sammen med en DVB-T/FM/DAB-tuner som kan justere mottakerfrekvens via programvare Foto: Erlend Tangeraas Lygre
PC

Her brukte jeg rett og slett min egen arbeidsstasjon siden denne allerede står ved arbeidsplassen min der sensoren måler.

Programvare

Vi behøver noe som snakker med SDR-enheten og stiller den til riktig frekvens: En sak som dekoder signalene fra sensoren og noe som putter det i en database vi kan bruke til å lage en graf senere.

Dekoding av signalet

For temperatursensorer og diverse annet trådløst utstyr er det noen som har laget et verktøy som analyserer alt på 433MHz-båndet og har et knippe dekodere som leter etter kjente mønster.

Dette programmet støttet protokollen som sensoren fra Clas Ohlson bruker og har støtte for å dumpe en liten JSON-struktur hver gang den mottar en temperaturverdi.

Sample rate set to 250000.
Bit detection level set to 0 (Auto).
Tuner gain set to Auto.
Reading samples in async mode...
Tuned to 433920000 Hz.
{
"time" : "2017-08-31 12:57:14",
"model" : "WT450 sensor",
"id" : 1,
"channel" : 1,
"battery" : "OK",
"temperature_C" : 22.090,
"humidity" : 50
}
{
"time" : "2017-08-31 12:57:14",
"model" : "WT450 sensor",
"id" : 1,
"channel" : 1,
"battery" : "OK",
"temperature_C" : 22.110,
"humidity" : 50
}
{
"time" : "2017-08-31 12:57:14",
"model" : "WT450 sensor",
"id" : 1,
"channel" : 1,
"battery" : "OK",
"temperature_C" : 22.120,
"humidity" : 50
}

Logging til en database

Jeg skrev et enkelt skript som leser JSON-strukturen fra rtl_433-programmet og logger dataene til en database. Vi har allerede satt opp en Linode-maskin som kjører Nginx for å levere data til ulike Slack-funksjoner. 

Man kan sette opp kanal på sensorene slik at man kan ha flere som sender til samme mottaker.

Det ser ut til at vi får tre verdier hvert minutt fra sensoren. Det virket som om disse alltid var stigende, så jeg antar det er minimum, gjennomsnitt og maksimumsmålinger siden siste overføring og logger kun den midtre verdien som er antatt å være gjennomsnittet.

Vise temperaturen
Unicode-graf av temperaturen siste 24 timer
Unicode-graf av temperaturen siste 24 timer

Ved å sette opp kommandoen /temp kan man be Slack om å gjøre et HTTPS-kall mot Linode-maskinen.

Her kjører et enkelt skript som henter ut data fra databasen med målinger og returnerer en JSON-struktur til Slack som denne dytter ut i vinduet man kjørte kommandoen /temp fra.

 

Har du et prosjekt du vil dele med leserne? Send det på mail til erlend@digi.no -gjerne med bilder eller screenshots. 

Les mer om:
Del
Kommentarer:
Du kan kommentere under fullt navn eller med kallenavn. Bruk BankID for automatisk oppretting av brukerkonto.