Martin Koksrud Bekkelund

Martin Koksrud Bekkelund

Teknologi • Samfunn • Politikk

Homey flows

24.04.23

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.

Hva er en flow?

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.

Slik kommer du i gang med en flow

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:

  1. Først og fremst trenger du et problem du vil løse eller noe du vil automatisere eller forenkle. Er det mulig å låse bilen automatisk når jeg legger meg? Eller inngangsdøren? Hvordan kan jeg automatisere fraværsbelysning når vi er bortreist?
  2. Dernest må du finne utstyr som løser problemet ditt. Termostater. Dimmere. Dørlåser. Bevegelsessensorer.
  3. Så må du finne om det aktuelle utstyret er støttet i Homey ved hjelp av en app. Ikke kjøp noe som helst før du er helt sikker på at det finnes en app for Homey som styrer utstyret du vurderer.
  4. Du kjøper utstyret og installerer appen.
  5. Utstyret kobles til i henhold til appens anvisninger.
  6. Så bygger du logikk med utstyret ved hjelp av Flows.

To typer flows

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.

Oppbyggingen av en flow

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…
utfør en handling

For eksempel:

Når solen går ned
Og jeg er hjemme
skru på lyset i stua

Slik ser eksempelet ut i Homey:

Eksempel på Advanced Flow 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.

Hvordan lager jeg logikk?

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

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
skru på lyset i stua

Bygger vi dette use caset inn i Homey, så ser det ut som eksempelet over.

Et par nyttige tips

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.

Når, og, så

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 -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 -kort.

Logikk og variabler

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.

Starte flows fra Apple Watch og iPhone

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.

Noen smarte flows

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.

Lukk og slukk

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
skru av alt lys
lås bilen
lås inngangsdøren
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.

Batteristatus

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 %
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.

Raspberry Pi

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
SSH command sudo shutdown -h now

Send mail

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
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.

Morgenvarsel

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
send push Det er #Temperatur°C ute og ikke meldt nedbør

Hvis en Raspberry Pi er nede

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
send push-varsel

Sol opp og ned

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)
utfør SSH-kommando mysql --user=brukernavn --password=passord -e "USE databasenavn; INSERT INTO sol_maane (hendelse) VALUES ('sol_ned');"

Har du noen smarte flows?

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å.

Hvor nyttig er denne artikkelen for deg?

Hva kan bli bedre?

Jeg blir veldig glad hvis du legger igjen noen stikkord om hva du tenker!

Smarthus

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.

Gi et bidrag

Husk å abonnere på nyhetsbrevet, det er gratis og du får alle artikler rett i innboksen.

 

Nyeste artikler

Enda flere artikler? Besøk arkivet.

Om Martin

Martin Koksrud Bekkelund

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...

 

Mastodon Bluesky Facebook LinkedIn YouTube Thingiverse GitHub Vipps

© 1995-2024 Martin Koksrud Bekkelund
OpphavsrettRSS og abonnementKontaktPersonvern og informasjonskapsler