I serien om smarthus har jeg skrevet mye om logikken jeg har lagt til grunn for å styre varme, lys og sikkerhet i huset. Denne gangen tenkte jeg å dele noen helt frittstående tips om Homey Flows.
Jeg benytter en Homey som smarthussentral og «Flows» er en sentral funksjon for å bygge logikken i smarthuset.
En flow er ganske enkelt et slags flytskjema som lar deg bygge logikk og automatiserte handlinger som Homey så utfører enten automatisk, eller som en konsekvens av at du gjør noe. Det kan for eksempel være noe som inntreffer hver kveld klokken 22.00, eller som en konsekvens av at noen åpner en dør.
I Homey er flows bindeleddet mellom flere forskjellige funksjoner. Det binder sammen utstyr du har i huset med funksjonalitet for tidsstyring, det finnes forskjellige typer variabler, det er alarmer, talestyring og mye, mye mer.
Flows består av forskjellige kort, noe du enkelt forstår når du ser brukergrensesnittet. Mer om kort senere.
Når man kjøper en Homey, tar den ut av boksen, kobler den til og setter den opp, så gjør den ingen verdens ting på egenhånd. Absolutt alt du vil ha den til å gjøre må du lage logikk for. På den ene siden er det frustrerende å ikke få spesielt mye starthjelp, men på den andre siden er det befriende deilig å ikke være låst til produsentens tankesett om hvordan logikk skal bygges. Dessuten er brukergrensesnittet fantastisk intuitivt og enkelt, og du vil raskt oppleve at den begrensende faktoren som oftest er fantasien og kunnskapen din.
Å komme i gang med Homey og flows er enkelt, og prosessen er omtrent som følger:
I Homey finnes det to typer flows: «Basic» og «Advanced». Basic er den originale funksjonaliteten som Homey opprinnelig ble levert med, mens Advanced er relativt ny. Per i dag må du betale for Advanced, mens den følger med gratis for den nye utgaven av Homey som sendes ut på markedet om ikke lenge. Mitt tips er at Basic kommer til å bli avviklet til fordel for Advanced, og de igjen kun sitter tilbake med Flows. Jeg bruker for det meste Advanced flows til alt jeg lager, med noen få enkle unntak.
En flow er en slags forenklet og visualisert form for programmering. Et flytskjema som utløses av noe som inntreffer og deretter finner sin vei igjennom skjemaet basert på de vilkår og den logikk du har bygget inn i det.
Når
en hendelse inntreffer…
Og
en betingelse er sann eller usann…
Så
utfør en handling
For eksempel:
Når
solen går ned
Og
jeg er hjemme
Så
skru på lyset i stua
Slik ser eksempelet ut i Homey:
Har du en Homey er du sikkert kjent med oppbyggingen fra før. Da vet du sikkert også at selv om konseptet er enkelt, så ligger kompleksiteten først og fremst i å tenke logikken fullt ut, slik at den kan omsettes i en flow.
Selv om konseptet som nevnt er enkelt, ligger kompleksiteten i å lage en logikk som tar høyde for det du faktisk ønsker å løse. Jeg har flows jeg har brukt måneder på å videreutvikle, fordi logikken ikke var optimal fra starten. Den andre artikkelen om varmestyring, der jeg skrev om logikken fra bunnen av, er et resultat av dette.
Når jeg skal lage logikk prøver jeg som oftest å starte med en happy path, det vil si å bygge forventet oppførsel først, men å ikke ta høyde for avvikene. Kompleksiteten ligger ofte i avvikshåndteringen.
Jeg pleier å lage et use case eller en brukerhistorie først, altså en enkel beskrivelse som forteller hva jeg ønsker å løse. Når man beskriver et bruksscenario, er det også enklere å forestille seg hvilke unntak og avvik som vil forekomme. Brukerhistoriene skriver jeg på et eget Trello-board, så har jeg dokumentert hva jeg har tenkt og en liste over hva som er laget og hva jeg ønsker å lage.
Et use case starter for meg oftest med litt enkel prosatekst, for eksempel noe som dette:
Når solen går ned ønsker jeg at lyset i stua skal skru seg på automatisk, dersom jeg er hjemme.
Oversatt til en flow kan den se ut som følger:
Når
solen går ned
Og
jeg er hjemme
Så
skru på lyset i stua
Bygger vi dette use caset inn i Homey, så ser det ut som eksempelet over.
Flows kan altså startes når en handling inntreffer. En slik handling kan for eksempel være at man starter en flow manuelt. Men selv forsøker jeg i det aller lengste å unngå å lage slike flows. Jeg ønsker ikke at verken kona eller jeg må opp med telefonen, finne riktig flow og så kjøre den.
Jeg tilstreber så langt det lar seg gjøre, og litt til, å starte flows automatisk eller som en konsekvens av noe annet som inntreffer.
Per i dag har jeg over 100 flows, men kun 3 av disse startes manuelt på telefonen i den daglige driften av huset. En for å si at vi reiser bort i helgen. En for å si at vi reiser på ferie. Og en for å si at vi er hjemme igjen. Jeg har en lang rekke flows som startes manuelt, men disse er av teknisk karakter som ikke er i bruk i hverdagen. For eksempel å bruke Homey til å ta ned samtlige Raspberry Pis i huset.
Et annet nyttig tips er at Homey har en såkalt tidslinje der du kan logge ting. Jeg logger svært lite til denne tidslinjen, og forsøker å holde den til informasjon jeg faktisk trenger å ta stilling til, men som ikke haster. Eller for å sjekke at flows kjører som de skal. Ikke la viktig informasjon drukne i en overfylt tidslinje.
Det er en lang rekke hendelser, betingelser og handlinger man kan bygge med en flow. Homey kommer som nevnt med masse logikk for alt fra datoer og klokkeslett, alarmer, tilstedeværelse og sikkerhet, til de mer avansert som egendefinerte variabler og webhooks.
I tillegg kommer funksjonalitet fra appene som skal styre enhetene man legger til i Homey. Legger man for eksempel til en termostat fra ELKO, følger det masse funksjonalitet for hendelser, betingelser og handlinger nettopp for denne enheten.
Som du ser ut av logikken over, starter enhver flow med et når
-kort. Det er alltid en hendelse som utløser en flow. Videre kan du legge til og
-kort, slik at du kan legge til flere betingelser. Og sammen med og-kortet følger også avvik. Altså hvis noe inntreffer og en annen betingelse må være oppfylt, kan vi lage kort for avvik. Bruker vi eksempelet over så skal lyset skru seg på ved solnedgang dersom jeg er hjemme. Men hva hvis jeg ikke er hjemme? Da lar du sikkert lyset forbli av, men poenget er at du kan lage logikk dersom en betingelse ikke er oppfylt. Og til slutt har vi så-kortet, altså handlingen som skal utføres når alle betingelsene er oppfylt.
En fantastisk funksjon i Homey er at en flow kan ha flere når
-kort, flere og
-kort og flere så
-kort.
Har du programmert kjenner du verdien av variabler. En variabel er, enkelt forklart, en container som holder en verdi. Jeg har for eksempel en variabel som heter Date.DayOfWeek
og som inneholder gjeldende dag, for eksempel Lørdag
. Det finnes forskjellige typer variabler, og i Homey finner du tre stykker: tekst, tall og Date.DayOfWeek (ja/nei).
Jeg bruker slike variabler i utstrakt grad, både til å holde verdier om tilstanden i huset og til å registrere endringer i en variabel og utføre handlinger når variabelen endres. For eksempel har jeg en boolsk variabel som heter Security.Alarm
som registrerer hendelser som skal utløse en alarm. Denne står til nei
, men hvis for eksempel vannsensoren registrer vann, endres den til ja
og deretter utføres et sett handlinger.
Fordelen ved å bruke variabler er at man i større grad kan frikoble utstyret fra logikken som bygges. Jeg kunne gjerne bygget en flow som utløser et sett handlinger dersom vannsensoren registrerer lekkasje, men hvis jeg ønsker å bytte vannsensoren er det mindre jobb når vannsensoren kun endrer en variabel.
Utover dette gjør jeg også prisberegninger med variabler. Det er mulig å utføre et regnestykke med andre variabler som input og lagre dette i en separat variabel. Slik beregner jeg antatt netto strømpris etter strømstøtte, slik jeg har skrevet om tidligere. Regnestykker kan ved første øyekast virke noe komplisert, for de må skrives mellom {{
og }}
for å fungere. Og slike regnestykker tar variabler som input og output. For eksempel har jeg en variabel som heter PowerPricing.NetPowerPrice
og som beregnes med formelen {{(Current price-((PowerPricing.AveragePowerPrice-0.875)*0.9))+PowerPrice.CurrentGridTariff}}
. All tekst du ser i regnestykket er variabler.
For en stund siden lanserte Homey muligheten for å starte flows fra Apple Watch. Du trenger WatchOS 7 eller nyere.
Tilsvarende på iPhone. Du sveiper fra venstre mot høyre på hjem-skjermen, hvor du har mulighet for å vise dine favoritt-flows og starte dem herfra.
Begge deler er praktisk for flows du kjører ofte, selv om jeg som nevnt anbefaler å unngå å bli avhengig av å kjøre flows manuelt fra telefonen.
Her følger noen flows utenom det vanlige, som jeg selv synes er ganske smarte, og som du kanskje kan la deg inspirere av. Jeg har som nevnt over 100 flows, og de fleste inngår i artikler jeg allerede har skrevet eller kommer i fremtidige artikler. De du leser om under er flows som ikke passer helt inn i andre kategorier, men allikevel fortjener egen omtale.
Ved sengen har vi en Aqara-bryter som vi trykker på når vi skal sove.
Når
nattbryter er trykket
Og
ingen dører eller vinduer er åpne
Og
klokken er mellom 20.00 og 06.00
Så
skru av alt lys
Så
lås bilen
Så
lås inngangsdøren
Så
skru på nattbelysning
Grunnen til at bryteren kun er aktiv mellom 20.00 og 06.00 er at barna fra tid til annen er innom soverommet og trykker på knappen, og da gidder jeg ikke at hele logikken skal utføres.
Etter at alt lyset er skrudd av kjøres en egen flow som heter nattbelysning. Den skrur på lyset på badet til barna og dimmer det lavt. Det samme i gangen mellom badet og rommene deres.
Mange enheter går på batteri og de har ingen annen måte å fortelle om batteristatus enn å rapportere den til Homey. Da er det greit å få beskjed om det. Dette er innebygget funksjonalitet i Homey og krever ingen apper.
Når
en batteriverdi er endret
Og
verdien er under 15 %
Så
send push-varsel
Denne fungerer også på bilen. Vi har en Audi e-tron, som har en egen Homey-app, og faller batteriprosenten under 15 % så er det greit med en påminnelse om at den skal plugges i laderen.
Jeg har en god del Raspberry Pis stående hjemme. Stort sett klarer disse seg selv, men av og til trenger jeg å ta dem kontrollert ned eller gi dem en omstart. I stedet for å logge meg på med en terminal via Mac-en så kan jeg gjøre dette via flows fra mobilen. Krever appen SSH Client, som for øvrig er fantastisk til mange andre formål.
Når
denne flow er startet
Så
SSH command sudo shutdown -h now
Med tidligere nevnte app SSH Client kan man sende en SSH-kommando til en Raspberry Pi, som igjen utfører en kommando for å sende en mail.
Når
denne flow er startet
Så
SSH command curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd --mail-from 'fra@adresse.no' --mail-rcpt 'til@adresse.no' --upload-file mail.txt --user 'brukernavn:passord'
Denne kommandoen bruker Gmail for utsendelse og du må ha opprettet et app-passord for formålet. Det er ikke optimalt sikkerhetsmessig, så bruk det kun der det er nødvendig.
Dette er ikke mitt stolteste påfunn, men foreløpig har jeg ikke et display i entreen som forteller oss om utetemperatur, vær og status i kollektivtransporten. Jeg har en langsiktig plan om et slikt display, og det kommer i så fall i en egen artikkel. Tips meg gjerne dersom du har en smart løsning for dette. Derfor opererer jeg inntil videre med et morgenvarsel som sendes som push-varsel til telefonen.
Når
klokken er 07.00
Og
#Presence.Status
er nøyaktig Hjemme
Og
i dag er en hverdag
Og
Er regn neste 6 timer under 0.1 mm
Så
send push Det er #Temperatur°C ute og ikke meldt nedbør
Det hender at en Raspberry Pi henger seg uten at jeg merker det. Stort sett er de stabile og drifter seg selv, men skulle det inntreffe så er det greit å få et varsel.
Når
en SSH-kommando returnerer feilmelding
Så
send push-varsel
Strengt tatt ikke noe jeg benytter i smarthuset, men jeg synes det er moro å se hvor mye kortere eller lengre dagen i dag er sammenliknet med gårsdagen. Eller siden siste solverv. Derfor logger jeg hver soloppgang og solnedgang til en database, noe jeg har skrevet om tidligere.
Når
solen går ned (eller står opp)
Så
utfør SSH-kommando mysql --user=brukernavn --password=passord -e "USE databasenavn; INSERT INTO sol_maane (hendelse) VALUES ('sol_ned');"
Send meg gjerne tips med smarte flows som er så generiske at hvem som helst kan bruke dem, så oppdaterer jeg artikkelen sammen med en liten takk (dersom du ønsker det). De må ikke være omfattende eller krevende å forstå.
Som leser kan du gi et bidrag til produksjonen, til driften og til å skaffe utstyr til testing for å sikre regelmessige, uavhengige artikler, tester og vurderinger av høy kvalitet.
Husk å abonnere på nyhetsbrevet, det er gratis og du får alle artikler rett i innboksen.
Enda flere artikler? Besøk arkivet.
Dette er Martin Koksrud Bekkelund sitt private nettsted, hvor han skriver om forbrukerteknologi, teknologiledelse og hvordan teknologi, samfunn og politikk påvirker hverandre. Martin er innehaver av konsulentselskapet Nivlheim. Les mer...
© 1995-2024 Martin Koksrud Bekkelund
Opphavsrett • RSS og abonnement • Kontakt • Personvern og informasjonskapsler