HM-Dis-EP-WM55: Anzeige von Wetterdaten

Begonnen von Susis_Strolch, 07 Juli 2021, 09:43:27

Vorheriges Thema - Nächstes Thema

Susis_Strolch

Die Wetterstation HmIP-SWO-PL sollte an das e-Paper Display HM-Dis-EP-WM55 die drei wichtigsten Daten melden:
Temperatur
Luftfeuchtigkeit
regnet es?

Folgendes setze ich vorraus:
1. die Wetterstation ist eingebunden und liefert Werte
2. Das Display ist grundsätzlich im System vorhanden und kann angesteuert werden.

Bei mir sieht das so aus:

define Status_Display CUL_HM 51D9E9
setuuid Status_Display 60e454f6-f33f-d3fe-79a6-637c2d95911a3f18
attr Status_Display .mId 00FB
attr Status_Display IODev HMLAN
attr Status_Display autoReadReg 4_reqStatus
attr Status_Display expert rawReg
attr Status_Display firmware 1.1
attr Status_Display model HM-DIS-EP-WM55
attr Status_Display msgRepeat 1
attr Status_Display room Systemware
attr Status_Display serialNr NEQ1595384
attr Status_Display subType display
attr Status_Display webCmd getConfig:clear msgEvents

define Status_Display_Btn_01 CUL_HM 51D9E901
attr Status_Display_Btn_01 model HM-DIS-EP-WM55
attr Status_Display_Btn_01 peerIDs 00000000

define Status_Display_Btn_02 CUL_HM 51D9E902
attr Status_Display_Btn_02 model HM-DIS-EP-WM55
attr Status_Display_Btn_02 peerIDs 00000000

define Status_Display_Dis CUL_HM 51D9E903
attr Status_Display_Dis model HM-DIS-EP-WM55

Die Key-Kanäle benötige ich nicht. Die Button-Kanäle haben aktuell keine echte Funktion, ausser dass man später mit ihnen noch die Anzeige aktualisieren können soll.

Ich definiere noch dazu 2 notifys und eine at Funktion, die die Anzeige stündlich aktualisiert. Je öfter man die Anzeige aktualisiert, um so schneller werden die Batterien geleert.

define Status_Display_Btn_01_short notify Status_Display_Btn_01 {StatusDisplayAktualisierung}

define Status_Display_Btn_02_short notify Status_Display_Btn_02 {StatusDisplayAktualisierung}

define at_Status_Display_Update at +*01:00:00 {StatusDisplayAktualisierung}


In der 99_myUtils.pm ist eine weitere Funktion definiert, StatusDisplayAktualisierung, die für die Aktualisierung der Anzeige sorgt.
Es geht dabei um die Zeilen2, 3 und 4.
Zeile 1 habe ich mittels

set Status_Display_Btn_02 text Wetter

auf die Anzeige von "Wetter" gesetzt. Zeile 5 nutze ich nicht.

Die Zeilen 2-4 werden mit dieser Funktion aktualisiert:

##########################################################
# Status Display aktualisierung
# Der Wettersensor heisst Wetter_FuchsbauIP (HmIP-SWO-PL)
##########################################################
sub StatusDisplayAktualisierung()
{
my $fuchsbau_temp = ReadingsVal("Wetter_FuchsbauIP","1.ACTUAL_TEMPERATURE","defekt");
my $fuchsbau_hum = ReadingsVal("Wetter_FuchsbauIP","1.HUMIDITY","defekt");
my $fuchsbau_rain = ReadingsVal("Wetter_FuchsbauIP","1.RAINING","");
if ($fuchsbau_rain eq "yes")
{
$fuchsbau_rain="ja";
}
else
{
$fuchsbau_rain="nein";
}
fhem("set Status_Display_Dis displayEP Temp.\x5c_$fuchsbau_temp^C,noIcon:Feucht.\x5c_$fuchsbau_hum\%,noIcon:Regen\x5c_$fuchsbau_rain,noIcon:");
}

Die ersten Zeilen definieren Variablen und in diese werden die von der Wetterstation gelieferten Daten gespeichert. Das if-Konstrukt macht nichts anderes als die englischen Begriffe durch die deutschen zu ersetzen.

Die letzte Zeile ist Erklärungsbedürftig:
Temp., Feucht. und Regen sind dabei die Inahlte der drei Zeilen
\x5c ist ein Leerzeichen
^C wird zu °C
\% ist das Prozentzeichen für die Luftfeuchtigkeit
noIcon bredeutet, dass in keiner Zeile ein Icon angezeigt werden soll.

Die Anzeige sieht also grundsätzlich so aus:

      Wetter
_____________

Temp. 25,1°C
Feucht. 95%
Regen ja
_____________



Ein Druck auf die Tasten sorgt nur dafür, dass die Anzeige außerhalb der geplanten Zeit aktualisiert werden soll. Dazu dient das oben definierte notify

Migul47


tatu123

#2
Hallo,

Danke für die tolle Idee

Ich habe mir mal erlaubt das Beispiel für HMCCU umzusetzen. Vielleicht hilft es ja jemanden.


defmod at_Status_Display_Update at +*01:00:00 {
my $f_temp = ReadingsVal("log2syslog","aussentemperatur","defekt");
my $f_hum = ReadingsVal("log2syslog","rel_feuchte","defekt");
my $f_rain = ReadingsVal("log2syslog","regenmelder","");
if ($f_rain == 1)
{
$f_rain="ja";
}
else
{
$f_rain="nein";
}

# my $alles = "text1:Temp: ".sprintf("%02.2f", $f_temp).",text2:Feucht: ".sprintf("%02.2f",$f_hum).",text3:Regen: ".$f_rain;
my $alles = "text1:Temp: ".$f_temp.",text2:Feucht: ".$f_hum.",text3:Regen: ".$f_rain;


# Log 1, "set d_woh_EPAnz datapoint 3.SUBMIT \"$alles\"";
fhem("set d_woh_EPAnz datapoint 3.SUBMIT \"$alles\"");
}


VG
Heiko