zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

15. Das Grundbild mit der Uhr (Stand 05.15.2018)

Nachdem nun 2 wichtige Funktionen programmiert sind und die automatische Steuerung der Ventilatoren für geringe Luftfeuchtigkeit sorgt und damit der Schimmelbildung vorbeugt, möchte ich nun das Grundbild der Bedienoberfläche zeigen und wie ich die Uhr programmiert habe.

Oben sind links und rechts die "Tasten" (ich werde diese jetzt immer so bezeichnen, auch wenn es Touchbereiche auf dem Tablet sind) zum Erdgeschoss und zum Obergeschoss unseres Hauses zu sehen. Darunter jeweils 3 Tasten, die der Anzeige der Anwesenheit dienen, was später dokumentiert wird. In einem späteren Kapitel dokumentiere ich auch noch, wie es zur Anzeige kommt, dass der Biomüll heute entleert wird. In Kapitel 13 habe ich ja schon auf die Taste zum Grundbild hingewiesen (das war die Taste mit der Uhr) und hier sieht man nun, dass auch wirklich eine Uhr angezeigt wird. Das Grundbild ist in FHEM so definiert:

define zw_anfang FLOORPLAN
   attr zw_anfang fp_arrange 0
   attr zw_anfang fp_backgroundimg 20_uhr.png
   attr zw_anfang fp_default 1
   attr zw_anfang fp_noMenu 1
   attr zw_anfang room Plan20
   attr zw_anfang stylesheet 20floorplanstyle.css

Wichtig sind hierbei insbesondere das Hintergrundbild und die css-Datei. Auf dem Hintergrundbild werden nachher alle anderen Elemente plaziert. Wer genau hinschaut kann neben den Texten für alle erforderlichen Uhrzeiten (im 5-Minuten-Takt) noch 2 weitere Texte erkennen: "ALM" wird später zum Einstellen der Weckzeit genutzt und "FHEM" zum Einstellen der Uhrzeit. Hinweis: Nur im Grundbild ist die Uhr im Zustand "alle Anzeigen aus" zu sehen, in den anderen Bildern ist wird nur die Hintergrundfarbe angezeigt.

Für die Anzeige der Zeit gibt es nun entsprechende Dummies und Ikonen mit dem Text im "eingeschalteten" Zustand. In "ausgeschaltetem" Zustand wird auf transparent umgeschaltet und somit der Hintergrund wieder sichtbar. Neben den texten gibt es noch die 4 Punkte für die Minuten. Am Beispiel der "5 Minuten" ergibt sich die Definition:

define Uhr5M dummy
   attr Uhr5M userattr UhrAuchAus UhrAuchAus_map structexclude
   attr Uhr5M UhrAuchAus UhrZwoelftel
   attr Uhr5M devStateIcon 0:UhrLeer 1:UhrFuenf
   attr Uhr5M fp_zw_anfang 0,935,0
   attr Uhr5M room Uhr

Die 2 Attribute "userattr" und "UhrAuchAus" wurden automatisch vom System ergänzt, weil ich eine Struktur definiert habe. Wenn man das für alle Anzeigeelemente gemacht hat, kann man sich der eigentlichen Zeitanzeige widmen. Immer zu einer ganzen Stunde plus 5 Minuten soll der Text "FÜNF NACH" angezeigt werden. Das macht die folgende Funktion:

define Uhr5nach at +*01:00 set UhrZwoelftel 0;; set Uhr5M 1;; set UhrNach 1;; set UhrFhem 0
   attr Uhr5nach alignTime 00:05
   attr Uhr5nach room Uhr

Die Angabe +*01:00 bedeutet zyklisch jede Stunde, das Attribut "alignTime" legt es auf die 5. Minute nach Stundenbeginn genau fest. Zuerst werden alle Minuteninformationen gelöscht, dann die "FÜNF" und das "NACH" eingeschaltet und "FHEM" wird gelöscht. Letzteres war evtl. eingeschaltet, weil das Stellen der Uhr aktiviert wurde.

Für die vollständige Uhr muss man noch einige Fleißarbeit hineinstecken, die aber am Ende mit einer wie ich finde schönen Anzeige belohnt wird. Ich habe das Grundbild auf einem alten Tablet mit defektem Touch dauerhaft laufen - und einige hundert Euro gespart.

weiter zu: 16. Die Anzeige eines Zimmers

Hier noch der vollständige Code der Uhr direkt aus fhem.cfg herauskopiert. Also nicht durch die zusätzlichen \ verwirren lassen. Und das Nacheditieren sollte man tunlichst lassen, das habe ich nur zur besseren Darstellung hier in der Dokumentation gemacht.

# Text-Uhr ********************************************************************

define UhrP1 dummy
attr UhrP1 devStateIcon 0:UhrLeer 1:UhrPunkt1
attr UhrP1 fp_zw_anfang 0,210,0
attr UhrP1 room Uhr

define UhrP2 dummy
attr UhrP2 devStateIcon 0:UhrLeer 1:UhrPunkt1
attr UhrP2 fp_zw_anfang 0,1295,0
attr UhrP2 room Uhr

define Uhr5M dummy
attr Uhr5M userattr UhrAuchAus UhrAuchAus_map structexclude
attr Uhr5M UhrAuchAus UhrZwoelftel
attr Uhr5M devStateIcon 0:UhrLeer 1:UhrFuenf
attr Uhr5M fp_zw_anfang 0,935,0
attr Uhr5M room Uhr

define Uhr10M dummy
attr Uhr10M userattr UhrAuchAus UhrAuchAus_map structexclude
attr Uhr10M UhrAuchAus UhrZwoelftel
attr Uhr10M devStateIcon 0:UhrLeer 1:UhrZehn
attr Uhr10M fp_zw_anfang 90,305,0
attr Uhr10M room Uhr

define Uhr20M dummy
attr Uhr20M userattr UhrAuchAus UhrAuchAus_map structexclude
attr Uhr20M UhrAuchAus UhrZwoelftel
attr Uhr20M devStateIcon 0:UhrLeer 1:UhrZwanzig
attr Uhr20M fp_zw_anfang 90,665,0
attr Uhr20M room Uhr

define Uhr34tel dummy
attr Uhr34tel userattr UhrAuchAus UhrAuchAus_map structexclude
attr Uhr34tel UhrAuchAus UhrZwoelftel
attr Uhr34tel devStateIcon 0:UhrLeer 1:UhrDrei
attr Uhr34tel fp_zw_anfang 180,305,0
attr Uhr34tel room Uhr

define UhrVor dummy
attr UhrVor userattr UhrAuchAus UhrAuchAus_map structexclude
attr UhrVor UhrAuchAus UhrZwoelftel
attr UhrVor devStateIcon 0:UhrLeer 1:UhrVor
attr UhrVor fp_zw_anfang 270,305,0
attr UhrVor room Uhr

define UhrNach dummy
attr UhrNach userattr UhrAuchAus UhrAuchAus_map structexclude
attr UhrNach UhrAuchAus UhrZwoelftel
attr UhrNach devStateIcon 0:UhrLeer 1:UhrNach
attr UhrNach fp_zw_anfang 270,935,0
attr UhrNach room Uhr

define UhrP3 dummy
attr UhrP3 devStateIcon 0:UhrLeer 1:UhrPunkt1
attr UhrP3 fp_zw_anfang 810,1295,0
attr UhrP3 room Uhr

define UhrP4 dummy
attr UhrP4 devStateIcon 0:UhrLeer 1:UhrPunkt1
attr UhrP4 fp_zw_anfang 810,215,0
attr UhrP4 room Uhr

define UhrHalb dummy
attr UhrHalb userattr UhrAuchAus UhrAuchAus_map structexclude
attr UhrHalb UhrAuchAus UhrZwoelftel
attr UhrHalb devStateIcon 0:UhrLeer 1:UhrHalb
attr UhrHalb fp_zw_anfang 360,305,0
attr UhrHalb room Uhr

define UhrEl dummy
attr UhrEl userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrEl UhrStundenAus UhrAlleZwoelfe
attr UhrEl devStateIcon 0:UhrLeer 1:UhrEl
attr UhrEl fp_zw_anfang 360,755,0
attr UhrEl room Uhr

define UhrUenf dummy
attr UhrUenf userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrUenf devStateIcon 0:UhrLeer 1:UhrUenf
attr UhrUenf fp_zw_anfang 360,1025,0
attr UhrUenf room Uhr

define UhrF dummy
attr UhrF userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrF UhrStundenAus UhrAlleZwoelfe
attr UhrF devStateIcon 0:UhrLeer 1:UhrF
attr UhrF fp_zw_anfang 360,935,0
attr UhrF room Uhr

define UhrEin dummy
attr UhrEin userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrEin UhrStundenAus UhrAlleZwoelfe
attr UhrEin devStateIcon 0:UhrLeer 1:UhrEin
attr UhrEin fp_zw_anfang 450,305,0
attr UhrEin room Uhr
define UhrS dummy
attr UhrS userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrS UhrStundenAus UhrAlleZwoelfe
attr UhrS devStateIcon 0:UhrLeer 1:UhrS
attr UhrS fp_zw_anfang 450,575,0
attr UhrS room Uhr

define UhrZwei dummy
attr UhrZwei userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrZwei UhrStundenAus UhrAlleZwoelfe
attr UhrZwei devStateIcon 0:UhrLeer 1:UhrZwei
attr UhrZwei fp_zw_anfang 450,935,0
attr UhrZwei room Uhr

define UhrDrei dummy
attr UhrDrei userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrDrei UhrStundenAus UhrAlleZwoelfe
attr UhrDrei devStateIcon 0:UhrLeer 1:UhrDrei
attr UhrDrei fp_zw_anfang 540,305,0
attr UhrDrei room Uhr

define UhrVier dummy
attr UhrVier userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrVier UhrStundenAus UhrAlleZwoelfe
attr UhrVier devStateIcon 0:UhrLeer 1:UhrVier
attr UhrVier fp_zw_anfang 540,935,0
attr UhrVier room Uhr

define UhrSechs dummy
attr UhrSechs userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrSechs UhrStundenAus UhrAlleZwoelfe
attr UhrSechs devStateIcon 0:UhrLeer 1:UhrSechs
attr UhrSechs fp_zw_anfang 630,305,0
attr UhrSechs room Uhr

define UhrAcht dummy
attr UhrAcht userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrAcht UhrStundenAus UhrAlleZwoelfe
attr UhrAcht devStateIcon 0:UhrLeer 1:UhrAcht
attr UhrAcht fp_zw_anfang 630,935,0
attr UhrAcht room Uhr

define UhrSieben dummy
attr UhrSieben userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrSieben UhrStundenAus UhrAlleZwoelfe
attr UhrSieben devStateIcon 0:UhrLeer 1:UhrSieben
attr UhrSieben fp_zw_anfang 720,305,0
attr UhrSieben room Uhr

define UhrZwoelf dummy
attr UhrZwoelf userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrZwoelf UhrStundenAus UhrAlleZwoelfe
attr UhrZwoelf devStateIcon 0:UhrLeer 1:UhrZwoelf
attr UhrZwoelf fp_zw_anfang 720,845,0
attr UhrZwoelf room Uhr

define UhrZeh dummy
attr UhrZeh userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrZeh UhrStundenAus UhrAlleZwoelfe
attr UhrZeh devStateIcon 0:UhrLeer 1:UhrZeh
attr UhrZeh fp_zw_anfang 810,305,0
attr UhrZeh room Uhr

define UhrN dummy
attr UhrN userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrN UhrStundenAus UhrAlleZwoelfe
attr UhrN devStateIcon 0:UhrLeer 1:UhrN
attr UhrN fp_zw_anfang 810,575,0
attr UhrN room Uhr

define UhrEun dummy
attr UhrEun userattr UhrStundenAus UhrStundenAus_map structexclude
attr UhrEun UhrStundenAus UhrAlleZwoelfe
attr UhrEun devStateIcon 0:UhrLeer 1:UhrEun
attr UhrEun fp_zw_anfang 810,665,0
attr UhrEun room Uhr

define UhrUhr dummy
attr UhrUhr userattr UhrAuchAus UhrAuchAus_map structexclude
attr UhrUhr UhrAuchAus UhrZwoelftel
attr UhrUhr devStateIcon 0:UhrLeer 1:UhrUhr
attr UhrUhr fp_zw_anfang 810,1025,0
attr UhrUhr room Uhr

define UhrM1 at +*00:05 set UhrP1 1
attr UhrM1 alignTime 00:01
attr UhrM1 room Uhr

define UhrM2 at +*00:05 set UhrP2 1
attr UhrM2 alignTime 00:02
attr UhrM2 room Uhr

define UhrM3 at +*00:05 set UhrP3 1
attr UhrM3 alignTime 00:03
attr UhrM3 room Uhr

define UhrM4 at +*00:05 set UhrP4 1
attr UhrM4 alignTime 00:04
attr UhrM4 room Uhr

define UhrM0 at +*00:05 set UhrP1,UhrP2,UhrP3,UhrP4 0
attr UhrM0 alignTime 00:00
attr UhrM0 room Uhr

define UhrZwoelftel structure UhrAuchAus Uhr5M Uhr10M Uhr20M UhrHalb UhrNach UhrUhr UhrVor Uhr4tel Uhr34tel
attr UhrZwoelftel room Uhr


define Uhr5nach at +*01:00 set UhrZwoelftel 0;; set Uhr5M 1;; set UhrNach 1;; set UhrFhem 0
attr Uhr5nach alignTime 00:05
attr Uhr5nach room Uhr

define Uhr10nach at +*01:00 set UhrZwoelftel 0;; set Uhr10M 1;; set UhrNach 1;; set UhrFhem 0
attr Uhr10nach alignTime 00:10
attr Uhr10nach room Uhr

define UhrViertelnach at +*01:00 set UhrZwoelftel 0;; set UhrNach 1;; set Uhr4tel 1;; set UhrFhem 0
attr UhrViertelnach alignTime 00:15
attr UhrViertelnach room Uhr

define Uhr4tel dummy
attr Uhr4tel userattr UhrAuchAus UhrAuchAus_map structexclude
attr Uhr4tel UhrAuchAus UhrZwoelftel
attr Uhr4tel devStateIcon 0:UhrLeer 1:UhrViertel
attr Uhr4tel fp_zw_anfang 180,665,0
attr Uhr4tel room Uhr

define Uhr20nach at +*01:00 set UhrZwoelftel 0;; set Uhr20M 1;; set UhrNach 1;; set UhrFhem 0
attr Uhr20nach alignTime 00:20
attr Uhr20nach room Uhr

define Uhr5vorhalb at +*01:00 set UhrZwoelftel 0;; set Uhr5M 1;; set UhrVor 1;;set UhrHalb 1;; set UhrFhem 0
attr Uhr5vorhalb alignTime 00:25
attr Uhr5vorhalb room Uhr

define UhrHalber at +*01:00 set UhrZwoelftel 0;; set UhrHalb 1;; set UhrFhem 0
attr UhrHalber alignTime 00:30
attr UhrHalber room Uhr

define Uhr5nachhalb at +*01:00 set UhrZwoelftel 0;; set Uhr5M 1;; set UhrNach 1;; set UhrHalb 1;; set UhrFhem 0
attr Uhr5nachhalb alignTime 00:35
attr Uhr5nachhalb room Uhr

define Uhr20vor at +*01:00 set UhrZwoelftel 0;; set Uhr20M 1;; set UhrVor 1;; set UhrFhem 0
attr Uhr20vor alignTime 00:40
attr Uhr20vor room Uhr

define UhrDrei4tel at +*01:00 set UhrZwoelftel 0;; set Uhr34tel 1;; set Uhr4tel 1;; set UhrFhem 0
attr UhrDrei4tel alignTime 00:45
attr UhrDrei4tel room Uhr

define Uhr10vor at +*01:00 set UhrZwoelftel 0;; set Uhr10M 1;; set UhrVor 1;; set UhrFhem 0
attr Uhr10vor alignTime 00:50
attr Uhr10vor room Uhr

define Uhr5vor at +*01:00 set UhrZwoelftel 0;; set Uhr5M 1;; set UhrVor 1;; set UhrFhem 0
attr Uhr5vor alignTime 00:55
attr Uhr5vor room Uhr

define UhrGanzestunde at +*01:00 set UhrZwoelftel 0;; set UhrUhr 1;; set UhrFhem 0
attr UhrGanzestunde alignTime 00:00
attr UhrGanzestunde room Uhr

define UhrStunden DOIF ([00:25] or [12:25]) (set UhrZwoelf 0)(set UhrEin 1)(set UhrS 1) DOELSEIF\
([01:25] or [13:25]) (set UhrEin 0)(set UhrS 0)(set UhrZwei 1) DOELSEIF\
([02:25] or [14:25]) (set UhrZwei 0)(set UhrEin 0)(set UhrS 0)(set UhrDrei 1) DOELSEIF\
([03:25] or [15:25]) (set UhrDrei 0)(set UhrVier 1) DOELSEIF\
([04:25] or [16:25]) (set UhrDrei 0)(set UhrVier 0)(set UhrF 1)(set UhrUenf 1) DOELSEIF\
([05:25] or [17:25]) (set UhrF 0)(set UhrUenf 0)(set UhrSechs 1) DOELSEIF\
([06:25] or [18:25]) (set UhrSechs 0)(set UhrSieben 1) DOELSEIF\
([07:25] or [19:25]) (set UhrSieben 0)(set UhrAcht 1) DOELSEIF\
([08:25] or [20:25]) (set UhrAcht 0)(set UhrN 1)(set UhrEun 1) DOELSEIF\
([09:25] or [21:25]) (set UhrEun 0)(set UhrZeh 1) DOELSEIF\
([10:25] or [22:25]) (set UhrZeh 0)(set UhrN 0)(set UhrEl 1)(set UhrF 1) DOELSEIF\
([11:25] or [23:25]) (set UhrEl 0)(set UhrF 0)(set UhrZwoelf 1)
attr UhrStunden room Uhr

define UhrEinUhr DOIF ([01:00] || [13:00]) (set UhrS 0) DOELSEIF\
([01:05] || [13:05]) (set UhrS 1)
attr UhrEinUhr room Uhr

define UhrAlleZwoelfe structure UhrStundenAus UhrZwei UhrDrei UhrVier UhrF UhrUenf UhrSechs UhrSieben UhrAcht UhrN UhrEun UhrZeh UhrEl UhrF UhrZwoelf UhrEin UhrS
attr UhrAlleZwoelfe room Uhr

define UhrFhem dummy
attr UhrFhem devStateIcon 0:UhrFhem0:1 1:UhrFhem1
attr UhrFhem fp_zw_anfang 267,575,0
attr UhrFhem room Uhr

define UhrEsist dummy
attr UhrEsist devStateIcon 0:UhrLeer 1:UhrEsist
attr UhrEsist fp_zw_anfang 0,305,0
attr UhrEsist room Uhr

define zw_g_alm weblink htmlCode { '<a href="zw_wecker"><img src="/fhem/www/images/fp20/UhrAlm.png"></a>' }
attr zw_g_alm fp_zw_anfang 447,665,0
attr zw_g_alm room Plan20

define UhrStellen notify UhrFhem:1 {\
fhem("set UhrZwoelftel 0;; set UhrAlleZwoelfe 0");;\
if (($hour==23 && $min>=25) || ($hour==0 && $min<25)) {\
fhem("set UhrEl 0);; set UhrF 0;; set UhrZwoelf 1")\
} elsif (($hour==22 && $min>=25) || ($hour==23 && $min<25)) {\
fhem("set UhrZeh 0;; set UhrN 0;; set UhrEl 1)(set UhrF 1")\
} elsif (($hour==21 && $min>=25) || ($hour==22 && $min<25)) {\
fhem("set UhrEun 0;; set UhrZeh 1")\
} elsif (($hour==20 && $min>=25) || ($hour==21 && $min<25)) {\
fhem("set UhrAcht 0;; set UhrN 1;; set UhrEun 1")\
} elsif (($hour==19 && $min>=25) || ($hour==20 && $min<25)) {\
fhem("set UhrSieben 0;; set UhrAcht 1")\
} elsif (($hour==18 && $min>=25) || ($hour==19 && $min<25)) {\
fhem("set UhrSechs 0;; set UhrSieben 1")\
} elsif (($hour==17 && $min>=25) || ($hour==18 && $min<25)) {\
fhem("set UhrF 0;; et UhrUenf 0;; set UhrSechs 1")\
} elsif (($hour==16 && $min>=25) || ($hour==17 && $min<25)) {\
fhem("set UhrDrei 0;; set UhrVier 0;; set UhrF 1;; set UhrUenf 1")\
} elsif (($hour==15 && $min>=25) || ($hour==16 && $min<25)) {\
fhem("set UhrDrei 0;; set UhrVier 1")\
} elsif (($hour==14 && $min>=25) || ($hour==15 && $min<25)) {\
fhem("set UhrZwei 0;; set UhrEin 0;; set UhrS 0;; set UhrDrei 1")\
} elsif (($hour==13 && $min>=25) || ($hour==14 && $min<25)) {\
fhem("set UhrEin 0;; set UhrS 0;; set UhrZwei 1")\
} elsif (($hour==12 && $min>=25) || ($hour==13 && $min<25)) {\
fhem("set UhrZwoelf 0;; set UhrEin 1;; set UhrS 1")\
} elsif (($hour==11 && $min>=25) || ($hour==12 && $min<25)) {\
fhem("set UhrEl 0;; set UhrF 0;; set UhrZwoelf 1")\
} elsif (($hour==10 && $min>=25) || ($hour==11 && $min<25)) {\
fhem("set UhrZeh 0;; set UhrN 0;; set UhrEl 1;; set UhrF 1")\
} elsif (($hour==9 && $min>=25) || ($hour==10 && $min<25)) {\
fhem("set UhrEun 0;; set UhrZeh 1;; set UhrN 1")\
} elsif (($hour==8 && $min>=25) || ($hour==9 && $min<25)) {\
fhem("set UhrAcht 0;; set UhrN 1;; set UhrEun 1")\
} elsif (($hour==7 && $min>=25) || ($hour==8 && $min<25)) {\
fhem("set UhrSieben 0;; set UhrAcht 1")\
} elsif (($hour==6 && $min>=25) || ($hour==7 && $min<25)) {\
fhem("set UhrSechs 0;; set UhrSieben 1")\
} elsif (($hour==5 && $min>=25) || ($hour==6 && $min<25)) {\
fhem("set UhrF 0;; set UhrUenf 0;; set UhrSechs 1")\
} elsif (($hour==4 && $min>=25) || ($hour==5 && $min<25)) {\
fhem("set UhrDrei 0;; set UhrVier 0;; set UhrF 1;; set UhrUenf 1")\
} elsif (($hour==3 && $min>=25) || ($hour==4 && $min<25)) {\
fhem("set UhrDrei 0;; set UhrVier 1")\
} elsif (($hour==2 && $min>=25) || ($hour==3 && $min<25)) {\
fhem("set UhrZwei 0;; set UhrEin 0;; set UhrS 0;; set UhrDrei 1")\
} elsif (($hour==1 && $min>=25) || ($hour==2 && $min<25)) {\
fhem("set UhrEin 0;; set UhrS 0;; set UhrZwei 1")\
} elsif (($hour==0 && $min>=25) || ($hour==1 && $min<25)) {\
fhem("set UhrZwoelf 0;; set UhrEin 1;; set UhrS 1")\
}\
}
attr UhrStellen room Uhr

# Ende Text-Uhr

Zur Erinnerung: man kann die Uhrzeit des Raspberry auch manuell stellen, z.B.:

sudo date -s "Nov 08, 2018 15:26:45"

weiter zu: 16. Die Anzeige eines Zimmers