Vielleicht hat jemand von Euch eine Idee?
Ich lese per Modbus meine Heizung aus.
Der Kesselstatus gibt einen Integer zurück, der wiederum verschiedene Status beschreibt:
1 Heizung Aus
2 Bereit
3 Zündvorbereiten
4 Vorbelüften
5 Kaltstart
6 Anbrennphase
uvm.
Wie kann ich jetzt am einfachsten rund 16 Zahlen im Reading-Wert durch die entsprechenden Strings ersetzen?
Ich habe es schon per UserReading probiert, aber irgendwie klappt das einfach nicht:
attr Pelletheizung Kessel userReadings KesselStatus:.* {
if (ReadingsVal("$SELF", "KesselStatus", 0) == 1)
return "Heizung aus";
elsif (ReadingsVal("$SELF", "KesselStatus", 0) == 3)
return "Bereit";
else
return ReadingsVal("$SELF", "KesselStatus", 0);
}
Das Modbus-Modul erlaubt auch Werte per Regex zu manipulieren - das wäre natürlich das genialste, wenn es einen OneLine gibt der mehrere Werte ersetzen kann (Google hat nichts funktionierendes ausgespuckt).
Pseudocode mäßig wie folgt:
s/(1|2)/(Heizung aus|Bereit)/
Habt Ihr irgendwelche Ideen?
ZitatWie kann ich jetzt am einfachsten rund 16 Zahlen im Reading-Wert durch die entsprechenden Strings ersetzen?
Sowas kann man unter Zuhilfenahme eines Hash umsetzen:
attr Pelletheizung userReadings KesselStatusasstring:KesselStatus.* {\
my %int2str = (\
1 => 'Heizung Aus',\
2 => 'Bereit',\
3 => 'Zündvorbereiten',\
4 => 'Vorbelüften',\
5 => 'Kaltstart',\
6 => ' Anbrennphase');;\
return $int2str{ReadingsNum($NAME,'KesselStatus',1)}\
}
Das ist gemein! Ich hab den ganzen Abend gesucht und an Hash hab ich auch schon gedacht, aber mein Perl-Knowhow ist sehr limitiert...
Aber was soll ich sagen? Es funktioniert!
Vielen Dank!
Zitat... an Hash hab ich auch schon gedacht, aber mein Perl-Knowhow ist sehr limitiert...
http://www.mathe2.uni-bayreuth.de/perl/GK/hashes.htm