Monday, July 4, 2022

Min Renovasjon inn i Homey

Jeg har lenge ønsket å få informasjon fra vårt renovasjonsselskap RIR inn i mitt smarthus slik at jeg kan få målrettet varsel om dette sammen med annen varsling som huset gir oss. I forbindelse med at Homey slapp funksjonen advanced flow 01.07.2022, kom det ett innlegg i facebook gruppen Athom Homey Norge fra Vegard Hamar som viste en metodikk for å få dette på plass. Det krevde litt spekulasjon for å kunne gjenskape dette. Legger her ut mine notater slik at kanskje flere kan ha glede av dette.

Min Renovasjon

Vårt renovasjonsselskap RIR benytter løsningen Min Renovasjon for varsling av tømmedager. Vegard Hamar skriver i sitt Facebook innlegg at han har hentet inspirasjon fra et GitHub prosjekt for Home Assistant som går mot Min Renovasjon

Variabler

Før vi kan komme i gang med selve konfigurasjonen, er det noen variabler vi bør klargjøre.

For å benytte rest API mot Min Renovasjon, trengs en API Key. Denne er funnet i nevnte GitHub prosjekt som variabelen CONST_APP_KEY_VALUE i filen "__init__.py". Denne tekststrengen legges inn i en tekst variabel i Home for gjenbruk i kodingen som kommer.

Ellers trengs noen variabler i Homey knyttet til din egen postadresse. Her kan verdier for variabler hentes ved å gjøre ett søk etter aktuell adresse i https://ws.geonorge.no/adresser/v1/#/default/get_sok. Selve søkestrengen for min del ser ut som følger "https://ws.geonorge.no/adresser/v1/sok?sok=Robinsonmarka%23", og jeg kan da lese ut aktuelle verdier og legge disse inn egne variabler i Homey.
Eksempel på hvordan kodene fremstår i søket

Oppsett avansert flow

Nå som variabler er på plass kan jeg starte oppsettet av den avanserte flowen. Den første blokken baserer seg på en "SÅ"-Logikk av følgende type:


Dette kortet fylles så ut på følgende vis hvor de forskjellige variablene som ble definert nå benyttes:

Bak den første Logikk blokken legges nå følgende "SÅ"-Logikk blokk.

Denne fylles så ut på følgende vis hvor "Svar" variabelen blir tilgjengelig når blokken kobles sammen med den første blokken:

$[?(@.FraksjonId==4)].Tommedatoer[0]



Oppstarten på denne avanserte flyten er satt til å gjøres automatisk hver dag til et gitt klokkeslett, men jeg har også lagt inn en manuell start som gjørt at jeg kan trigge starten manuelt når jeg måtte ønske. Dersom jeg trigger en manuell start, kan jeg holde musen over hver enkelt variabel for å lese av innholdet. Ved prøvekjøring av flyten, sees nå en verdi i Svar variabelen når musen holdes over variabelen:

Denne teksten kopierer jeg med meg over i en passende tekst editor og bryter den opp med linjeskift som gjør den lettere å lese. Jeg ser da at jeg kan hente ut 2 datoer pr. kildesorteringstype, første og neste hentedato:

Verdiene i FraksjonId er referanser til avfallstype, og disse kan oppløses i følgende informasjon:
1: Restavfall
2: Papir
3: Matavfall
4: Glass/Metallemballasje
5: Drikkekartonger
6: Spesialavfall
7: Plastavfall
8: Trevirke
9: Tekstiler
10: Hageavfall
11: Metaller
12: Hvitevarer/EE-avfall
13: Papp
14: Møbler
19: Plastemballasje
23: Nedgravd løsning
24: GlassIGLO
25: Farlig avfall
26: Matavfall hytter
27: Restavfall hytter
28: Papir hytter


Neste steg er å snu om på datoformatet fra Min Renovasjon for å få dette til å passe med Homey sitt datoformat. Her benyttes koden slik Vegard Hamar har presenteret den i et HomeyScript kort for kjøring av kode og returnering av en tekst.

Koden som settes inn er følgende hvor verdien som sendes inn (Opprettet tag) splittes på T og første del hentes ut og splittes videre på bindestrek. Dette sendes så tilbake som en text-tag i omvendt rekkefølge (verdi nummer 2-1-0):
// Flip the Date to dd-mm-yyyy
const arrDate = args[0].split('T')[0].split('-')
return arrDate[2] + '-' + arrDate[1] + '-' + arrDate[0]


Dette ser da slik ut hvor jeg dytter datoen som et resultat fra Homey scriptet inn i en Homey variabel som jeg senere skal benytte til andre flyter:

Raskt oppsummert gjører her to logiske operasjoner for hver avfallstype. Bildet over vises for "Restavfall" som kommer inn på FraksjonsId=1 i svaret fra den første forespørselen mot Min Renovasjon API'et. En sjekk for hver dato ([0] og [1]) som lå i linje 0 gir meg første og neste tømming. Dette kjøres gjennom koden for å snu om på dato til Homey format for så å legges ut til en egen variabel. Dette gjør jeg for alle avfallstyper jeg har interesse av, og jeg har da et totalt script som ser ut som følger - mye likt det opprinnelige scriptet hentet fra Facebook gruppen, men jeg velger å legge verdiene ut i egne variabler for gjenbruk:

De forskjellige variablene kan nå benyttes i logiske tester mot Dato variabelen i Homey:

Variablene ser slik ut etter en kjøring:

Dette skal nå benyttes videre for å utløse smarte varslinger og handlinger i smarthuset. Jeg har blant annet en "morgenrutine" som leser opp innhold fra familiens kalendere, dagens værdata fra værstasjonen og mere til hvor jeg har tenkt å hente inn også denne informasjonen nå som jeg har den tilgjengelig. Det kan være at jeg følger opp med mer informasjon om den når jeg tar meg tid til å gjøre om den rutinen fra en samling vanlige flows til den nye avanserte flow typen.

Takk igjen til Vegard Hamar som først delte dette på Facebook. Se nå at han også har delt ett oppdatert Homeyscript for Min renovasjon på Github. Håper flere kan ha nytte av dette!

Oppdatering for å få informasjon inn i morgenmeldingen

Jeg har etter hvert skrudd sammen en måte å få dette inn i morgenmeldingen vår. Har der laget en tekstvariabel som skal inneholde tekststrengen som skal leses opp når det er søppeldag.

Innholdet i variabelen "Avfall-idag" bygges opp i rutinen som henter data fra min renovasjon. Denne rutinen er nå utvidet med en sjekk pr. renovasjonstype for å sjekke om hentedatoen er lik dagens dato. Dersom dette stemmer, legges en liten tekststreng inn i en egen variabel pr. renovasjonstype. Har da f.eks. en variabel som heter Avfall-Rest-idag hvor jeg legger inn teksten "restavfall". Denne skal etterhvert inngå i en større tekst streng som jeg ønsker opplest. Dersom datoen ikke stemmer legger jeg inn ett punktum i variabelen for å tømme den slik at den ikke blir lest opp.

Disse små tekstsnuttene settes nå sammen til en større streng i variabelen "Avfall-idag" som blir lest opp i morgenrutinen. Dette gjør jeg på følgende vis:

Jeg har lagt inn en liten delay der for å være sikker på at alle variablene i leddet før er ferdig lagret. Den oppleste teksten blir da f.eks. som følger:
  • "I dag er det søppeldag. Sett ut papiravfall, Bioavfall"
Videre har jeg en løsning som tømmer variabelen "Avfall-idag" de dager hvor det ikke er søppeltømming. Denne ser slik ut:

Følgende har nå kommet til løsningen i forhold til det som var opprinnelig beskrevet. Dette gir meg nå innformasjon om søppeltømmingen i morgenrutinen vår.

Nå har jeg endelig fått hentet litt verdi ut av dette prosjektet med å få hentedatoene ut fra Min Renovasjon og inn i Homey.

No comments:

Post a Comment