Flexit Nordic S4 og Homey

Beskrivelse av hvordan man kan integrere Flexit Nordic S4 (balansert ventilasjon) inn i Homey via modbus-tilkobling.

Flexit Nordic S4 er et ventilasjonsaggregat for balansert ventilasjon i bolig. Aggregatet betjenes primært via appen Flexit Go som både kan ha en lokal og en skybasert tilkobling. I tillegg kan aggregatet betjenes via styrepanelet CI70.

Dessverre støtter ikke Flexit selv noen for for smarthusintegrasjon med anlegget. Appen og API-et er lukket og proprietært. Anlegget har imidlertid mulighet for en modbus-tilkobling dersom hovedkortet er av nyere type (produsert etter april 2019).

Basert på inspirasjon fra en guide på hjemmeautomasjon.no for et Systemair VTR-500 anlegg ble jeg nysgjerrig på om USR-TCP232-410S også kunne benyttes for å få til en integrasjon med Flexit-anlegget, noe det viste seg å kunne. USR-TCP232-410S oppretter en ModbusTCP-server som blir bindeleddet mellom appen som kjøres på Homey og Flexit-anlegget.

For å kommunisere med anlegget via modbus trenger man imidlertid et ledningssett (116405) [4] fra Flexit som kobles på hovedkortet. Dette koster en liten formue, og er en helt passiv komponent (ca 1000 kr – Tips: Vesentlig billigere å bestille dette hos forhandlere enn direkte fra Flexit). Jeg tror at man med litt oppfinnsomhet burde kunne koblet ledningene rett på hovedkort-kontakten for å spare litt penger. Merk at kabelen som alt henger ut fra anlegget merket med modbus av en eller annen uforståelig grunn ikke kan benyttes i følge teknisk support hos Flexit.

Tilkobling av ledninssettet

Først åpner man anlegget og deretter luken foran hovedkortet. Ledningssettets kontakt klemmes fast på en kontakt som kommer fra hovedkortet og så fast i sideveggen på rommet der hovedkortet ligger. Her har imidlertid Flexit bommet på plasseringen (i hvert fall i mitt anlegg), så det ene hullet kan ikke benyttes pga andre komponenter som tar opp plassen. Tilkoblingskontaktene henger greit likevel med kun ett feste. NB! Før ledningssettet monteres, kan det være lurt å montere på kablene (se under).

Jeg benyttet en gammel nettverkskabel der jeg klippet av kontaktene og avmantlet trådparene. Jeg tvinnet sammen trådparene av samme farge, men det ville nok fungert også med enkelttråder. Wago-klemmene til å feste kablene i er noe spesielle, men de “åpner” seg dersom man stikker ned et lite skrujern på toppen.

Det er “port” 16, 17 og 18 på remsen med wago-klemmer som skal benyttes. Merk hvilke farger som settes på hvilke porter. Etter at kabler er tilkoblet, tres nettverkskabelen ut gjennom en av gumminiplene på toppen, og anlegget lukkes.

Oppkobling av USR-TCP232-410S

Den andre enden av nettverkskabelen tilkobles USR-TCP232-410S (heretter omtalt som USR). Her er det svært viktig at kablene kobles som følger:

  • A(+) <=> port 16 på Flexit
  • B(-) <=> port 17 på Flexit
  • G <=> port 18 på Flexit

For å sette sette opp USR kobles det en nettverkskabel direkte mellom enheten og en laptop. Deretter settes en statisk IP på laptoppen i området 192.168.0.2 til192.168.0.254 (ikke den som står på enheten) med nettverksmasken 255.255.255.0.

Deretter kan man åpne opp enhetens IP-adresse (printet på baksiden) i en nettleser. Min hadde 192.168.0.7, mulig det er standard. Brukernavn og passord er “admin”.

I menyen Local IP Config så endres IP til en ledig statisk IP-adresse på ruterens kablede nettverk. Leg også inn ruterens adresse som DNS og default gateway. USR kan nå kobles inn i ruteren, og den midlertidige statiske IP-en på laptoppen kan slettes.

I menyen RS485 legger du inn følgende modbus-info som gjelder Flexit-anlegget og som oppretter ModbusTCP-serveren

Det finnes en rekke applikasjoner som kan teste at ModbusTCP-serveren er satt opp riktig, slik som Modbus Poll.

Utvikling av Homey-app

Til slutt ble det utviklet en app for Homey som ved hjelp av bibliotektet jsmodbus snakker med modbusTCP-serveren. Appen ble utviklet i Homey sitt SDK.

Appen var forholdsvis rett frem å utvikle basert på Homey sin SDK. Det var imidlertid en del utfordringer knyttet til lesing, skriving og tolking av modbus-data fra Flexit-anlegget. Her vil de største utfordringene gjennomgås

Dekode og kode float verdier

Modbus er en såpass gammel standard at den kun støtter heltall i registrene. Flyttall er løst ved å kode de inn som heltall i flere registre. I Flexit-aggregatet må man da lese to verdier (registeret som står i oversikten [2] og også neste register) for så å omforme disse til et flyttall (koden er basert på [7]):

toFloat(data) {
    let pay = data;
    const buf = Buffer.allocUnsafe(4); 
    buf.writeUInt16BE(pay[0]);
    //evt. noe annet enn 0 om desimaler ønskes
     return Number(buf.readFloatBE(0).toFixed(0));  
}

Skal man skrive en float til Flexit-registeret må denne konverteres til to hetall (koden er basert på [8]):

fromFloat(data) {
	var farr = new Float32Array(1);
	farr[0] = data;
	var barr = new Int16Array(farr.buffer);
	return [barr[1],barr[0]];
	}

Set rapid/fireplace ventilation runtime

I Flexit sin modbus-oversikt [2] står det at verdiene for rapid og fireplace ventilation runtime skal leses/skrives til registrene 1003 og 1005. Det korrekte er at verdiene man ønsker ligger i 1004 og 1006. Riktignok må man skrive en 0 til 1003 og en 0 til 1005 samtidig som man skriver verdier til 1004 og 1006 for at anlegget skal akseptere verdiene.

Fordeler med denne appen i Homey fremfor Flexit Go

Kan kobles opp mot resten av smarthuset

Per nå styres bl.a. anleggets hastighet basert på radonmålinger og luftkvalitet.

Anlegget starter også “ubalansert” ventilasjon dersom kjøkkenviten starter. Monitoreringen av kjøkkenvifte er beskrevet som et eget prosjekt, og er en vesentlig billigere og enklere løsning enn trykkvakten som er tilleggsutstyr til ventilasjonsanlegget.

Effektivitet og stabilitet

Å betjene anlegget via Homey/modbus viser seg å være vesentlig raskere i respons og mer stabilt enn Flexit Go-appen.

Strømsparing/smartstyring av temperatur

Jeg ser på mulighetene for å få Tibber til å håndtere anlegget som en termostat. Dermed kan man benytte Tibbers algoritmer for smart strømstyring til å justere setpoint-temperaturen opp og ned sammen med andre varmekilder i huset. Slik anlegget jobber til vanlig så “motarbeides” smartsyring av temperatur ved at anlegget alltid forsøker opprettholde setpoint-temperatur.

Dette ville også kunne blitt en forlengelse av dag/nattsenking og “feriemodus” i Tibber-appen. Denne integrasjonen er foreløpig ikke helt klar, og midlertidig aktiveres bare home/away i anlegget basert på tilstedeværelse.

Kildekode/app

Planen er å etter hvert kunne tilgjengeliggjøre kildekoden etter litt opprydding og finpuss. Appen vil imidlertid bli tilbud uten noen for for support eller lovnader om videreutvikling.

En foreløpig versjon ligger ute her. Denne har flere bugs som vil bli fikset i tiden fremover: https://github.com/tomhnatt/net.tomheine.flexit

Aller helst burde Flexit selv utviklet denne appen og tilbudt sine kunder, men det virker de svært lite interessert i.

Ressurser som er benyttet

[1] Mini-guide: Hvordan bruke Modbus (med HomeSeer)

[2] Flexit Nordic S4 modbus-register

[3] USR-TCP232-410S

[4] Flexit ledningssett (artnr: 116405, Flexit sine egne nettsider mangler nå produktet, derfor link til nettbutikk)

[5] jsmodbus

[6] Homey SDK

[7] Node-red: Convert modbus float [array] register to value

[8] Stack overflow: Convert float to array of bytes in PHP