Smart home: éjszakai világítás, Fhem | 2. rész

S lőn világosság.

Az éjszakai világítás részeként a ház egyes részeit egész éjjel megvilágítva akarjuk tartani, figyelembe véve a naplemente-napfelkelte időpontját.

Mit kapcsoljunk?

Több úton is meghatározhatjuk, hogy milyen fogyasztókat akarunk kapcsolni. Az egyesével történő felsorolás helyett hozzáadhatjuk őket csoportokhoz is, vagy egyedi attribútum alapján tovább szűkíthetjük a csoportjainkat.

Mivel én a csoportokat az eszköz funkciója alapján hoztam létre, valamint többféle eszközt is kapcsolni akarok (aljzatot, lámpát stb) ezért a global userattr kibővítése tűnt logikus megoldásnak.

A userattr. a “global” eszköz része (http://YOURFHEM:8083/fhem?detail=global). Az attributumok végére adjuk meg az ATTRIBUTUMNÉV:ÉRTÉK1,ÉRTÉK2 formában, hogy milyen értékeket lehet hozzárendelni az eszközökhöz (a választható nemleges érték valójában fölösleges, helyette az attribútumot is lehet törölni).

attr global userattr nightlight:yes, no – vigyázz ez a parancs felülírja a meglévő beállításokat, ne használd!

A kiválasztatott eszközöknél megadtam, hogy az éjszakai világításhoz tartoznak, mint a példában szereplő Philips HUE lámpánál.

Feltételes kapcsolás

Ha az összes hozzárendeléssel megvagyunk, akkor jöhet a logika!

define doif_NIGHTLIGHT DOIF ([{sunset("REAL", 0, "16:30", "21:00")}]) ({
    fhem("set group=light:FILTER=a:nightlight=yes on");;
    fhem("set Telegram message nightlight on.");;
}) DOELSEIF ([{sunrise("REAL", 0, "5:30", "8:00")}]) ({
    fhem("set group=light:FILTER=a:nightlight=yes off");;
    fhem("set Telegram message nightlight off. ");;
})

A fenti kódot másoljuk be a FHEM felület parancssorába. Ha készen vagyunk, akkor egy új DOIF eszköz jön létre.

Figyelem: a fenti kód a FHEM saját beépített nyelvét (DOIF – DOELSEIF struktúra) kombinálja PERL hívásokkal (a {} közötti rész). Perl kódból fhem kódot a fhem() függvénnyel lehetséges.

Mit csinál a kód?

Ha emberi nyelvre lefordítjuk, akkor a következő logikát írtuk le:
– Ha lemegy a nap (de legkorábban 16:30-kor és legkésőbb 21:00-kor)
— kapcsolja fel azokat az eszközöket, ami a “light” csoportba tartozik, és a nightlight attributum meg van adva (yes értékkel)
– Ha pedig feljön a nap (de legkorábban 5:30-kor és legkésőbb 8:00-kor)
— kapcsolja le azokat az eszközöket, ami a “light” csoportba tartozik, és a nightlight attributum meg van adva (yes értékkel)

Mindezt még kiegészítettem egy telegramos üzenetküldéssel, átmenetileg.

Mit kell még tudni?

A Sunset akkor működik, ha megadtad a lakásodhoz/házadhoz megadod a hosszúsági és szélességi fokokat. Ez a Google Maps segítségével történik. Add meg a címed, klikkelj az utcára, és egy kis popup felületen kapsz két hat tizedes jeggyel rendelkező értéket, amiből az első a hosszúsági fok, a második a szélességi fok.

A Budai Vár esetében a következő parancsokat kell tehát megadni:

attr global latitude 47.502080
attr global longitude 19.034817

A {sunrise()} és {sunset()} pranacsok opcionálisan 4 paramétert kaphatnak:

  1. az első napfelkete/naplemente annak függvényében, hogy a nap hol található a horizonton:
    • “REAL”, amikor a nap a horizonton van (“HORIZON=0.0”)
    • “CIVIL”, amit szürkület van (a Nap 6 fokkal van a horizont alatt) (“HORIZON=-6.0”)
    • “NAUTIC”, amikor a Nap 12 fokkal van a horizont alatt, ez az az idő, amikor a tengerészek számára szabad szemmel láthatóvá válnak a csillagok (“HORIZON=-12.0”)
    • “ASTRONOMIC”, amikor a Nap 18 fokkal van a horizont alatt és már nem világítja meg az eget (“HORIZON=-18.0”)
    • “HORIZON=-6.0”, ha tetszőleges értéket akarunk megadni.
  2. a második, hogy ettől az időponttól hány másodperccel térjen el (offset)
  3. a harmadik és negyedik, hogy legkorábban, illetve legkésőbb mikor kell, hogy jelezzen az esemény (a fenti példában hiába kel fel a Nap 5:30 előtt, legkorábban 5:30-kor jelezzen).

A “set” parancs hajtja végre az eszközökön az utasításokat. A parancs megadhat 1-1 eszközt közvetlenül (pl. set Telegram …) , vagy valamilyen módon eszközök csoportját.

Ha több eszközt akarsz egyszerre váltani, akkor valamilyen rendszer alapján érdemes csoportosítanod őket, pl a set NAME=.*Light on pl. minden Light-ra végződő eszközt váltana, set group=light onpedig minden “light” csoporthoz hozzáadott eszközt. A legtöbb oldal javasolja a SZOBA_eszköz_TIPUS elnevezési szabályosságot, de ennek alkalmazására nem minden esetben van lehetőséged – pl. ha a lámpát egy adapterrel kapcsolsz, akkor az így nézne ki: