System · Småbruket i Vevring
Drivhuset
I drift
Tunnelen måler seg selv og bestemmer selv når taket skal åpnes. Panelet under leser den siste avlesningen. Det er ikke et bilde, og det er ikke skrevet på forhånd.
Fakta
- Status
- I drift
- Stack
- Homey · Python · PyRunner DataStore · Next.js 15
- Kadens
- Øyeblikksbilde hvert kvarter
- Sensorer
- Værstasjon, fire tunnelfølere, jordfukt, takvindu, vifte
- Hemmeligheter
- Kun i den planlagte jobben, aldri i nettstedet
- Bevis
- Panelet under, med tidsstempel
Live fra småbruket
Drivhuset akkurat nå
Sensorene i tunnelen rapporterer til en Homey hjemme i Vevring. En planlagt jobb leser dem hvert kvarter og dytter et øyeblikksbilde hit. Ingenting under er skrevet på forhånd. Det er systemet som åpner taket og starter viften, ikke jeg.
Problemet
Et drivhus i Vestland svinger fort. Sol gjennom plast tar tunnelen fra tolv til nærmere tretti grader på under en time, og det er ingen hjemme til å åpne taket midt på dagen. Så tunnelen måtte gjøre det selv.
Den delen er egentlig grei. Det vanskelige var å vise fram at den gjør det, uten å gjøre nettstedet avhengig av at gården er på nett.
Hvorfor jobben dytter i stedet for at nettstedet henter
Den åpenbare løsningen er at nettstedet spør Homey direkte. Den løsningen krever at et API-token for hjemmeautomasjonen ligger på en offentlig webserver, og at hver besøkende venter på at hjemmenettet mitt svarer.
I stedet leser en planlagt jobb sensorene hvert kvarter og skriver et lite øyeblikksbilde til et datalager. Nettstedet leser bare det bildet. Tokenet finnes aldri utenfor jobben, og en ruter som starter på nytt gir en gammel avlesning i stedet for en feilmelding.
Det er samme grep som i NDA-signeringen: legg nøklene der jobben kjører, aldri der publikum lander.
Sensorene lyver, så koden antar det
Fire følere måler inne i tunnelen, og de er ikke enige. Én sier 19 grader, en annen 26. Tre av dem er billige Sonoff-enheter som melder ett prosent batteri og har gjort det lenge.
Jobben går derfor gjennom en prioritert liste og tar den første som gir et fysisk troverdig tall, i stedet for å stole på én bestemt føler. Verdier utenfor rimelige grenser forkastes. Mangler ett felt, blir det feltet stående tomt i panelet, og resten vises som normalt.
Hvis ingen av dem gir en brukbar temperatur, skriver jobben ingenting. Da blir forrige avlesning gammel og merker seg selv som gammel, noe som er mer ærlig enn et tomt panel som ser selvsikkert ut.
Hva som skjer når noe svikter
Panelet har fire tilstander, og tre av dem er feiltilstander. Fersk avlesning viser tallene med et tidsstempel. Eldre enn halvannen time sier det rett ut og viser siste kjente verdi. Får nettstedet ikke kontakt, sier det det. Er kilden ikke satt opp i det hele tatt, viser panelet ingenting, for da finnes det ikke noe ærlig å vise.
Kallet mot datalageret har to og et halvt sekund på seg og deles av alle besøkende i et minutt av gangen, så trafikk mot forsiden aldri blir trafikk mot gården.
Hva dette ikke er
Det er ett drivhus. Ingen flerbruker, ingen historikk i panelet, ingen varsling. Målehistorikken finnes i Homey, men minst én av følerne har en logg som ikke stemmer med sanntidsverdien, og den er ikke funnet ut av ennå. Derfor viser panelet et øyeblikksbilde og ikke en kurve.
Vifta og takvinduet styres av regler i Homey, ikke av noe jeg har skrevet. Det interessante her er datastien og feilhåndteringen, ikke klimastyringen.