Skrivet den 21 oktober 2018 kl 12:39 av Krönika9 kommentarer2905

Z-Wave – En systemarkitekts synvinkel
Jag är inte imponerad

Lite sent in i matchen kan man tycka men jag har börjat titta på smartahemlösningar den senaste tiden. Det finns ju inte så mycket att välja på; Zigbee, Plejd och Z-Wave – och några till. Jag valde Z-Wave mest för att Fibaro verkar populärt och det var mest snack om dem på nätet, med andra ord kanske enklast få support?

Hur som helst, jag har lekt de senaste dagarna med Z-Wave och det blir ju naturligt att titta på deras system ur ett perspektiv som mjukvaruarkitekt. Och för att uttrycka det milt, jag är inte imponerad.

Deras lösning på kommunikation mellan enheter är något de kallar associationsgrupper, ett gäng kommandon att skicka kan man förenklat säga. Som ett exempel, en Fibaro-knappsats (Fibaro Switch 2) kan skicka Grupp 3 (Dimmerkommandon på kanal S1) till samma grupp på tex en Fibaro Dimmer och på så sett fjärrstyra en dimmer via en knapp på väggen. På grund av den bristfälliga abstraktionen kan du enbart vara säker på att du kan prata mellan enheter om du håller dig till Fibaro – och det är inte ens säkert att saker och ting kommer fungera då.

Abstraktion kanske inte är ett ord folk utanför IT-svängen känner till men Wikipedia beskriver det bra:

”Inom datavetenskap innebär abstraktion att man döljer de tekniska detaljerna bakom ett lager av kod som erbjuder ett enklare gränssnitt mot omvärlden.”.

Enklare sagt, Enhet A producerar något som B kan använda, men varken A eller B har någon insikt i vad den andra gör.

Z-Wave har NOLL abstraktion! Noll! Som en systemarkitekt kommer detta som lite av en chock. Det är till och med ett skolexempel på hur man INTE ska designa sin arkitektur, varför ska en knappsats ha kännedom om hur en dimmer fungerar? En knappsats är binär, varken mer eller mindre. Men här har Fibaro-knappsatsen implementerat hela logiken för hur en dimmer fungerar och skickar dimmerkommandon till mottagardimmern som sedan dimrar istället för att knappsatsen skickar ett binärkommando och låter dimmern avgöra hur den ska tolka kommandot. Vi pratar arkitektur för dummies här, alla vet att detta är dålig design. Vad de borde ha gjort istället är att ha definierade enkla kommandon, tex BinaryCommand, NormalizedCommand (Värde mellan 0-1) etc, och låta dimmern avgöra hur dessa ska tolkas.

Vad som gör det ännu värre är att det inte finns något robust sätt för Knapp 1 (Vi kan kalla den för Kanal 0) att skicka sina kommandon på Kanal 0 eller Kanal 1 på dimmersidan, den är hårdkodad för Kanal 0. Grupp 3 är hårdkodad på knappsatsen för att skicka dimmerkommandon på Grupp 3 på mottagaren och Grupp 5 är hårdkodad för att skicka dimmerkommandon till Grupp 5 på mottagaren och det finns alltså inget enkelt sätt att styra om detta. Du kan lösa det genom att skicka alla kommandon genom din kontrollenhet och styra om kommandona till önskad grupp. Men detta medför grova fördröjningar vilket gör det omöjlig att dimra då du kommer dimra för mycket eller för lite på grund av fördröjningen.

Jag skulle istället byggt upp systemet såhär, varje enhet kan skicka en uppsättning inställningar till kontrollenheten som beskriver vad den kan hantera. Ett exempel på en knappsats som enbart har utdata och ingen indata skulle vara:

{
   out: [
      {
         channel: 0,
         commands: [BinaryCommand]
      },
      {
         channel: 1,
         commands: [BinaryCommand]
      }
   ],
   in: []
}

Vi säger åt kontrollenheten att vi kan producera binära kommandon på två kanaler. Kontrollenheten kan då låta dig skicka dessa kommandon på valfri kanal på mottagarsidan, tex en dimmer.

En till rolig iakttagelse jag gjort är att det finns ingen knappsats utan relä. Så om jag bara vill ha en knappsats som skickar data till andra enheter är detta omöjligt. Jag får köpa en enhet med relä som är både dyrare och onödigt stor, åter igen en indikation på att något inte tänkt.

Z-Wave – A system architects view

9 kommmentarer på Z-Wave – En systemarkitekts synvinkel

  1. Anders Malmgren skriver:

    Det skulle jag inte säga, finns inte mycket att välja på. Men det betyder inte att standarden är perfekt :)

  2. Anders Malmgren skriver:

    haha, kan du inte köra Google Home istället? :P

  3. Erik skriver:

    Gillar Gear S3 pga Samsung Pay, och med min app så är det riktigt smidigt att låsa upp dörren med klockan. Ett dubbeltryck på en knapp, och sedan ett tryck på skärmen så låser jag upp dörren när jag kommer hem :)

    Hade så jag kunde låsa upp dörren med Google Assistant förr, men då kunde man ropa in i min brevlåda för att låsa upp dörren, vilket inte var jättenice :P

  4. Eric Gustafsson skriver:

    Jag kör HC2 med en gear s3. Finns inget färdigt men man kan skapa tasks i tasker som använder rest api för att trigga scener. Dessa kan man sen komma åt I klockan med appen TaskS2 (widgeten funkar inte). Hade Google Assistant funnits hade ju röststyrningen varit självklar, men ja… Samsung…

  5. Anders Malmgren skriver:

    Måste ju ställa upp för maccan :)

  6. J:P skriver:

    Kul att se dig skriva artiklar här Malmis!

  7. steffo76 skriver:

    Intressant… så, undvik z-wave?

  8. Erik skriver:

    Har själv kört Z-Wave några år, men då med Open Source mjukvaran Domoticz + OpenZwave. Kan väl kort säga att det har varit allt annat än smidigt. Men när det väl fungerar så gör det det, tills att man gör någon ändring. Då är det som att snurra på lotterihjulet igen… :/

    Nu började jag med detta som student och hade en knaper budget, skulle jag börja om idag så skulle jag skaffa fibaro home center. Men behöver läsa på lite mer innan jag går över, vill gärna att alla prylar jag använder lirar med Home Center. Något jag kommer sakna är stöd för Samsung Gear S3 (Förlåt Anders, jag vet att du sätter mig i ett fack nu). Det finns till Domoticz, men det är för att jag byggde stödet… :P

    Jag använder ZWave till sensorer och lås, och bara som backup på lampor. Philips Hue först, och har vi en lampa där Hue inte passar in, då kör vi Zwave

  9. Fnys skriver:

    Eller bara den som skriver om det här…