Tā nu sanāca, ka jaunais gads sākās ar vairākiem neatliekamiem darbiem pie mājas un kādu nejauku vīrusu, kas mani uz vairākām nedēļām pataisīja par reālu dārzeni tāpēc neliela aizkavēšanās ar kārtējo rakstu.

Šis raksts, lielā mērā, ir tulkojums no ļoti labās instrukcijas par to kā uzsākt darbu ar FHEM un pamat terminiem, ko sistēma izmanto. Programmētāju valodā to varētu saukt kā tādu “Hello world”. Kas ir labi, tad šajā etapā jums nav obligāti jābūt pieejamām kādām ierīcēm, ko kontrolēt, jo rakstā principi ir paskaidroti izmantojot virtuālas ierīces.

Ja atceraties, tad iepriekšējā reizē sagatavojām datoru darbam ar FHEM un beidzām to ar soli, kad savā browserī varējāt atvērt FHEM kontroles paneļa lapu.
Šī lapa sastāv no sekojošām daļām:

  1. Komandas ievades lauks
  2. Konfigurācijas saglabāšanas poga (ja konfigurācija ir izmainīta un ir nepieciešama saglabāšana, tad rindas beigās būs jautājuma zīme)
  3. Saraksts ar visām ierīcēm, kas ir definētas, sagrupētas pēc istabām
  4. Dažādu komandu saites
  5. Pamata logs, kas attēlo informāciju, atbilstoši kreisajā pusē izvēlētai ierīcei vai komandai.

Jums, pirmo reizi pieslēdzoties, būs cita krāsu kombinācija lapā, bet to var ērti nomainīt nospiežot “Select style” un izvēloties “Dark”, kas man personīgi patīk labāk.

Pamata logā (5) norādītais paziņojums norāda uz to, ka nav konfigurēta droša pieeja WEB interfeisam. Par to kā to var konfigurēt, ir aprakstīts šeit.

Ierīces pievienošana

Ierīce (device) ir FHEM pamatelements. Ierīces ir, piemēram, slēdzī, lampas, temperatūras un citi sensori, radiatoru vārsti un citas ierīces. Tai pašā laikā FHEM par ierīcēm uztver arī “virtuālas” lietas, ko mēs varbūt tieši neasociējam ar ierīci, kā piemēram sistēmas WEB interfeiss, kurš arī ir “ierīce” ar tipu FHEMWEB, kas ļauj konfigurēt WEB interfeisa parametrus tāpat kā jebkurai citai ierīcei.

Tātad, katrai ierīcei ir tips, kas nosaka tās atribūtus un pazīmes. Tehniski orientēti cilvēki var skatīties FHEM katalogos, kur katram ierīces tipam ir savs Perl fails, kurā ir programmas, kas nosaka ierīces uzvedību. Faila nosaukums ir xx_tips.pl, kur xx ir skaitlis, kam mūsdienās vairs nav nozīmes un tips ir tipa nosaukums, kuru izmantoja, definējot jaunu ierīci ar šādu tipu.

Izveidosim pirmo ierīci ar tipu dummy, ar kuru modelēsim gaismas slēdzi. Dummy tips ir speciāls ierīces tips, kas ir, nu jā dummy – būtībā neko nedarošs 🙂

Vienkārši ierakstiet komandas rindā (1) sekojošo rindu un nospiediet taustiņu Enter.

mansSledzis1 ir brīvi izvēlēts ierīces nosaukums un tas var sastāvēt no simboliem a-z, A-Z, 1-9, _ (Pasvītrojums) un . (punkts), bet punkts nedrīkst būt pirmais simbols nosaukumā. Tomēr ņemiet vērā, ka punktam perl un FHEM ir speciāla nozīme, tāpēc, kaut arī ir pieļaujams, labāk izvairīties no tā izmantošanas ierīču nosaukumos.

define mansSledzis1 dummy

Ierīce tiks izveidota, konfigurācija papildināta ar informāciju, par ko liecina jautājuma zīme pie “Save config” komandas un pamata logā (5) tiek attēlota informācija par ierīci.

Pamata loga augšpusē tiek attēlots:

  • ierīces nosaukums un pamatinformācija par to
  • komandrinda ar iespēju izpildīt ar ierīci komandas
  • “Internals” sadaļa, kur attēlo ierīces iekšējos parametrus
  • “Readings” sadaļa (Šajā ekrānšāviņā tas nav redzams, jo ierīce ir tikko izveidota un tai vēl nav lasījumu), kas attēlo vērtību lasījumus ierīcei kopā ar laika zīmogu, kad tie ir pēdējo reizi lasīti
  • Atribūtu uzstādīšanas komandrinda, kas ļauj uzstādīt ierīces atribūtu vērtības
  • Atribūtu saraksts ar pašreizējām vērtībām (Šajā ekrānšāviņā to nav)
  • Saites uz dažādām komandām lai, piemēram nodzēstu ierīci, vai aplūkot pieejamie palīdzības informāciju par šīs ierīces tipu.

Istabu izveide

Istabas jēdziens FHEM ir nedaudz plašāks nekā fiziska telpa ēkā. Tas ir veids kā mēs dažādās ierīces varam loģiski grupēt un, protams, viens no veidiem ir izmantot fiziskas istabas. Piemēram Guļamistabā mums var būt gaismas slēdzis, modinātājs un radiators. Tikpat labi mēs varam definēt istabu “Laika apstākļi” kurā ir tādas ierīces kā termometrs, aerometrs, nokrišņu sensors un virtuāls sensors, kas saņemt meteoroloģisko informāciju no interneta. Istabu nosaukumu izvēle ir pilnīgi brīva jūsu izvēle.

Istaba tiek definēta vienai vai vairākām ierīcēm uzstādot atribūtu room uz vienu nosaukumu.

Mūsu gaismas slēdža gadījumā globālajā komandrindā (1) jāieraksta:

attr mansSledzis1 room Mācību telpa

To pašu var izdarīt arī no ierīces mājas lapas atribūtu uzstādīšanas komandrindas:

Tagad arī lapas kreisajā malā parādās jauna istaba Mācību telpa ar vienu ierīci mansSlēdzis1 tajā

Kā virs slēdža ir ierīces tips dummy jo pēc noklusējuma visas ierīces tiek grupētas pēc to tipiem. FHEM piedāvā vēl vienu loģiskās ierīču grupēšanas iespēju istabā un to var panākt uzstādot ierīcēm vēl vienu atribūtu group. Piemēram mēs varam mansSlēdzis1 uzstādīt grupu Slēdži vai Gaismas.

Istabas tiešā veidā nav iespējams dzēst no sistēmas, jo, būtībā, tas ir tikai atribūts pie ierīcēm. Lai “dzēstu” istabu, nepieciešams izdzēst room atribūtu pie visām ierīcēm attiecīgajā istabā un tās nosaukums sarakstā automātiski pazudīs.

Slēgšanas komandu izveide

Loģiski, ka slēdzim jāspēj būt vai nu ieslēgtā vai izslēgtā stāvoklī. To var izdarīt uzstādot citu atribūtu webCmd uz on:off vai nu galvenajā komandrindā vai ierīces atribūtu uzstādīšanas komandrindā.

attr mansSledzis1 webCmd on:off

Šī komanda ir saistīta ar ierīces iekšējo stāvokli STATE. Diemžēl, lai tas korekti strādātu ir jāizmanto angliskie statusi on un off (atdalīti ar kolu) nevis piemēram Iesl:Izsl un tas ir iekodēts sistēmā.

Pēc šī atribūta uzstādīšanas jūs ievērosiet, ka gan istabas sarakstā gan ierīces logā ir parādījušās pogas on un off un uz tām nospiežot parādās ieslēgtas un izslēgtas spuldzītes ikona, kas norāda uz slēdža pašreizējo statusu. Tāpat ierīces lapā var redzēt iekšējo ierīces statusu pie rindas STATUS un pie Readings var redzēt kad šis statuss ir pēdējo reizi mainīts (Slēdzis ieslēgts vai izslēgts).

Notikumu monitors

Atveriet vēl vienu tīmekļa pārlūka logu un novietojiet o blakus esošajam. Atveriet tajā vēlreiz FHEM sistēmu un izvēlaties no komandām (4) kreisajā pusē Event Monitor.

Pirmajā logā izvēlaties slēdža ierīces logu un vairākas reizes nospiediet ieslēgšanas un izslēgšanas pogas. Kā redzams Event monitor logā, katru reizi nospiežot pogu parādās jauns ieraksts.

FHEM ierīces komunicē savā starpā ar notikumu palīdzību. Ierīce nosūta ziņojumu par notikumu un FHEM to nosūta visām pārējām ierīcēm un katra no tām nosaka vai reaģēt uz šo notikumu un kā.

Notikums tiek reģistrēts jebkurā gadījumā, kad notiek darbība, ne tikai stāvokļa maiņas gadījumā. Pamēģiniet vairākas reizes pēc kārtas nospiest, piemēram, on un aplūkojat, ka katru reizi tiek reģistrēts notikuma ziņojums. Tas ir kā fiziskam slēdzim – notikums ir arī tad, ja jūs nospiežat uz ieslēgšanas pusi, kaut gaisma jau ir ieslēgta.

Darbība ar ierīcēm – uzstādīšana

Iepriekšējos piemēros mēs slēdzi pārslēdzām, ar peli spiežot uz attiecīgām pogām on vai off. To pašu efektu var panākt, galvenajā komandrindā ierakstot komandu

set mansSledzis1 on
vai
set mansSledzis1 off

Lai veiktu tālākās darbības, izveidosim lampas ierīci manaLampa1, kura tāpat kā slēdzis ir dummy tipa.
Lampu, tāpat kā slēdzi pievienosim istabai Mācību telpa, bet šoreiz to izdarīsim ar peles palīdzību. Atveram manaLampa1 ierīces lapu (Pašreiz tā ir zem Unsorted “istabas” kurā atrodas visas ierīces, kam nav uzstādīta istaba. Atribūtu uzstādīšanas komandrindā izvēlamies room atribūtu un nospiežam laukā, kas atrodas komandrindas labajā pusē. Atveras logs ar visām pieejamajām istabām no kurām varam izvēlēties.

Izvēlamies Mācību telpa un nospiežam OK. Pašreiz vēl atribūts nav uzstādīts. Lai to izdarītu, atliek nospiest uz attr pogas komandrindas kreisajā pusē. Varam nomainīt arī atribūtu group uz Gaismas un tagad zem Mācību telpas mēs redzam abas mūsu ierīces.

Notikumu trigeris – notify

Tagad pienācis laiks saslēgt mūsu slēdzi ar lampu – tas ir, gadījumos, kad slēdzis sūta notikuma ziņojumu, ļaut lampai to uztver un, attiecīgi, mainīt savu stāvokli.

FHEM izmanto notify “ierīci”, lai to panāktu. Tās vispārīgā forma ir:

define <NAME> notify <REGEXP> <command>

<NAME> ir “ierīces” nosaukums
<REGEXP> ir regulārā izteiksme “regular expression”, kas nosaka nosacījumus pie kuru izpildīšanās tiks izpildīta komanda. Pie katra notikuma FHEM salīdzina notikuma aprakstu ar visu notify tipa ierīču regexp un izpilda komandas tām ierīcēm, kur salīdzinājuma rezultāts ir pozitīvs. Regulārās izteiksmes ir labi pazīstamas programmētājiem un UNIX sistēmu lietotājiem, bet pagaidām sekojiet līdzi piemēriem, lai redzētu kā tās izveidot un pielietot.
<command> komanda, kas jāizpilda pie nosacījumu izpildīšanās.

Mūsu gadījumā notify definīcija būs sekojoša

define mansSledzis1_on notify mansSledzis1:on set manaLampa1 on

Regulārā izteiksme nosaka, ka mēs gaidām, kad ierīce mansSledzis1 nosūtīs notikuma ziņojumu par to, ka ir nospiests on un komanda ir uzstādīt manaLampa1 ierīces statusu arī uz on.

Tā kā arī notify ir virtuāla ierīce, tad pēc komandas izpildes atveras logs, kas mums jau ir pazīstams un satur visu informāciju par šo ierīci.

Internals informācijas blokā var redzēt DEF lauku, kurā ir attēlots definīcijā izmantotais teksts ar regulāro izteiksmi un komandu.

Šī treniņa ietvaros pievienosim šo notify ierīci pie Mācību telpas, lai gan parasti tas netiek darīt, lai WEB interfeisā attēlotu tikai nepieciešamo informāciju.

Tagad, esot istabas logā, nospiediet slēdža on pogu un redzēsiet, ka arī lampa iedegas. Tomēr kā redzam, tad nospiežot off pogu, slēdzis stāvokli maina uz izslēgtu, bet lampa paliek ieslēgta. Tas notiek tāpēc, ka mūsu regulārā izteiksme filtrēja on notikumu un izpildīja on komandu.

Lai strādātu arī izslēgšana jādefinē vēl viena notify “ierīce”

define mansSledzis1_off notify mansSledzis1:off set manaLampa1 off

Tagad strādā gan lampas ieslēgšana, gan izslēgšana, bet tam bija nepieciešams izveidot divas notify “ierīces”. Ņemot palīgā regulārās izteiksmes un FHEM sniegtās papildus iespējas, mēs to pašu efektu varam panākt arī ar vienu komandu.

define n_mansSledzis1 notify mansSledzis1 set manaLampa1 $EVENT

Kā redzams, šajā gadījumā regulārā izteiksme neskatās uz konkrētu on vai off notikumu no slēdža, bet nostrādā pie jebkura notikuma no šīs ierīces. Tāpat tiek izmantots speciāls mainīgais $EVENT, kurš satur notikuma komandu un attiecīgi komanda on vai off tiek nosūtīta lampai.

Ierīču dzēšana un deaktivēšana

Ja pie iepriekšējo komandu izpildes paskatījāties notikumu monitorā, tad redzējāt, ka lampas komadas tika izpildītas divas reizes. Tas ir tāpēc, ka pašreiz mums uz on un off ir divas notify “ierīces” kas izsauc šo komandu. FHEM pastāv divas iespējas, ko darīt ar “nevajadzīgām” ierīcēm. Tas var vai nu dzēst vai, gadījumos kad nākotnē tās būs vēl nepieciešamas, deaktivēt.

Jebkuru ierīci var dzēst ar komandu

delete <NAME>

Deaktivēt ierīci var uzstādot tās atribūtu deactive uz 1

attr <name> disable 1

Konfigurācijas saglabāšana

Visas komandas, ko līdz šim esam izpildījuši tiek saglabātas operatīvajā atmiņā, un ja mēs apstādinām FHEM sistēmu, vai izslēdzam datoru, tās būs zudušas. Lai tas nenotiktu, ir vēlams brīžos, kad sistēma ir sakonfigurēta līdz noteiktam, stabilam punktam saglabāt konfigurāciju failā, nospiežot Save config pogu. Izsaukuma zīme blakus tai norāda, ka ir veiktas izmaiņas konfigurācijā, salīdzinot pret saglabāto failu.

Fails atrodas FHEM mājas katalogā un tā nosaukums ir fhem.cfg

Esošo ierīču modificēšana – modify

Pievienosim savam ierīču sarakstam vēl vienu lampu, kas arī tiks slēgta ar mūsu slēdža palīdzību.

define manaLampa2 dummy

Pievienosim šo lampu mūsu Treniņu telpai un pieliksim tai pašai pogas ieslēgšanai un izslēgšanai caur webCmd.

Tagad modificēsim n_MansSledzis1 notify ierīci, lai tas pārslēgtu arī tikko pievienoto lampu.

Atvēram ierīces logu un nospiežam Internal sadaļā uz DEF vārda. Tas atvērs DEF pilno tekstu, ko varam modificēt.

Nomainām tekstu uz

mansSledzis1 set manaLampa1,manaLampa2 $EVENT

un nospiežam teksta ievades lauka apakšpusē esošo pogu modify, lai saglabātu modificēto tekstu. Ievērojiet, ka starp komatu un lampu nosaukumiem NEDRĪKST būt atstarpes,

Vienlaicīgs darbs ar vairākām ierīcēm

Kā jau iepriekšējā piemērā redzējām, tad FHEM ļauj kombinēt vairākas ierīces vienā komandā un pastāv divas formas kā to var darīt.

set <device1>,<device2> on

Alternatīva forma ir

set <device1> on; set <device2> on

Pietam abas formas var kombinēt, piemēram

set <device1>,<device2> on; set <device3> off

Izpildot šādas kombinētās komandas jāņem vērā, ka ievadot tās komandrindā tās tiks izpildītas kā atsevišķas komandas. Piemēram ievadot

define n1 notify mansSledzis1:on set manaLampa1,manaLampa2 on;set manaLampa3 off

sistēma izveidos notify ierīci, kas pie slēdža on notikuma ieslēgts divas lampas un neaiztiks 3. lampu, bet komanda aiz semikola tiks izpildīta uzreiz pēc Enter nospiešana – 3. lampa tiks izslēgta.
Lai šādos gadījumos pareizi definētu notify ierīci semikols define komandā jādublē

define n1 notify mansSledzis1:on set manaLampa1,manaLampa2 on;;set manaLampa3 off

Pie šādas komandas tiks izveidota notify ierīce, kas pie slēdža on notikuma ieslēgs 1. un 2. lampu UN izslēgs 3. lampu.

Ierīču pārsaukšana

Ierīces var vienkārši pārsaukt ar komandu

rename <vecaisNosaukums> <jaunaisNosaukums>

Jāņem vērā, ka tas neizmainīs notify ierīces definīcijas regulāro izteiksmju vai komandu laikos, tāpēc šīs izmaiņas pēc pārsaukšanas jāveic manuāli.

Plānotājs – at

Ja nu Tu līdz šai vietai esi izlasījis, atstāj komentāru un cepums no manis!

FHEM ļauj izpildīt komandas ne tikai iestājoties kādam notikumam, bet plānot to izpildi noteiktā laikā.

Lai to izdarītu, tāpat kā gadījumā ar notify ierīci ir speciāls ierīces tips at. Tā vispārīgā forma ir

define <nosaukums> at <laikadef> <komanda>

<nosaukums> un <komanda>, tāpat kā notify gadījumā, definē ierīces nosaukumu un komandu, kas ir izpildāma.

<laikadef> ir laika, kad komanda izpildāma definīcija un var būt gan formātā hh:mm:ss, ieskaitot sekundes, vai hh:mm nosakot tikai stundas un minūtes.
Laika definīcijai var būt vairākas formas:

DefinīcijaApraksts
+00:02:00Izpildīt vienreiz, pēc divām minūtēm
00:02:00Izpildīt vienreiz, divas minūtes pēc pusnakts
*00:02:00Izpildīt katru dienu, divas minūtes pēc pusnakts
+*00:02:00Izpildīt katras divas minūtes
+*{3}00:02Izpildīt trīs reizes, ik pēc divām minūtēm
*{3}00:02Izpildīt trīs reizes, divas minūtes pēc pusnakts
*{sunset_rel()}Izpildīt katru dienu pēc saules rieta
*{sunrise(+120)}Katru dienu, divas minūtes (120 sekundes) pēc saullēkta
  • * pievienošana nosaka bezgalīgu atkārtošanu līdz kamēr konkrētais at tiks dzēsts vai deaktivēts
  • + pievienošana norāda, ka tiek definēts nevis absolūtais laiks, bet gan laiks stundās, minūtēs un sekundēs no definēšanas brīža
  • pievienojot {n} at komanda tiks izpildīta tikai n reizes
  • funkcijas sunset_rel() un sunrise() atgrieža aptuvenu saulrieta un saullēkta laiku.

Piemēram, lai izslēgtu lampu katru rītu pēc saullēkta, varam definēt sekojošu at ierīci

define Lampa_no_rita_off at *{sunrise()} set manaLampa1 off

Kā redzam, tad šeit Latvijā, 24. janvārī lampa tiks izslēgta 8:34 no rīta

Notikuma iniciēts taimeris – notify un at

Un beigās, mēs varam kombinēt notify un at “ierīces” lai taimeris startētu nevis brīdī, kad tiek definēts, bet gan noteiktu laiku pēc notikuma.

Aplūkosim piemēru ar gaismu kāpņu telpā, kur nospiežot pogu, tai ir jāiedegas un automātiski jānodziest pēc vienas minūtes.

Vispirms definēsim mūsu ierīces:

define Sledzis dummy
attr Sledzis room Kapnes
attr Sledzis webCmd on
define Gaisma dummy
attr Gaisma Kapnes

Tagad nepieciešams izveidot notify, kas reaģē uz slēdža nospiešanu un izdara divas lietas:

  • ieslēdz gaismu
  • startē taimeri, kas pēc minūtes gaismu atkal izslēdz
define n_Sledzis notify Sledzis:on set Gaisma on;;define a1 at +00:01 set Gaisma off

Noslēgums

Tas arī šai reizei ir viss un cerams, ka sniedz labu ieskatu FHEM lietošanās. Ja ir kādi jautājumi vai vēlaties precizējumus, droši komentējiet!