Userreadings auf Basis von readings innerhalb eines devices mit IF Bedingung

Begonnen von kermitthefrog, 10 Oktober 2016, 21:55:34

Vorheriges Thema - Nächstes Thema

kermitthefrog

Hallo zusammen,

ich bin absoluter Perl unwissender :( und folgendes Problem, bei dem mir sicher jemand gaaanz fix helfen kann.
Ich habe meine Viessmann Heizung über VControl erfolgreich eingebunden.

Das device heißt Heizung

Ich habe ein Reading BrennerLeistung, ein Reading Pumpe und ein Reading Umschaltventil. Jetzt möchte ich 4 zusätzliches Reading erzeugen (mit userreadings? ) im Device Heizung.
Wenn Umschaltventil = 1 ist, soll BrennerLeistung im neuen Reading BrennerLeistungWW dupliziert werden ( analog Pumpe in PumpeWW). Sonst soll 0 im Reading stehen.
Wenn Umschaltventil = 3 ist, soll BrennerLeistung im neuen Reading BrennerLeistungHZ dupliziert werden ( analog Pumpe in PumpeHZ). Sonst soll 0 im Reading stehen.

Ich habe es mal soweit versucht:


attr Heizung userReadings BrennerLeistungHZ {\
my $BL=ReadingsVal("Heizung","Brennerleistung","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 3) { return $BL;;} else {return 0}\
};;\
BrennerLeistungWW {\
my $BL=ReadingsVal("Heizung","Brennerleistung","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 1) { return $BL;;} else {return 0}\
}


Es werden schon mal nicht beide neuen readings angelegt... wie muss es richtig heißen??? :(

Danke...

Otto123

Hi,

ohne Deinen Code zu kontrollieren kann ich schon mal zitieren--> (commandref):
ZitatKomma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
Du hast zwei semikolons dazwischen  ???

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kermitthefrog

Danke... Da war ich ja doch schon recht weit. Jetzt funktioniert es wie folgt :

attr Heizung userReadings BrennerLeistungHZ {\
my $BL=ReadingsVal("Heizung","BrennerLeistung","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 1) { return $BL} else {return 0}\
},BrennerLeistungWW {\
my $BL=ReadingsVal("Heizung","BrennerLeistung","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 3) { return $BL} else {return 0}\
},SolldrehzahlInternePumpeHZ {\
my $DP=ReadingsVal("Heizung","SolldrehzahlInternePumpe","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 1) { return $DP} else {return 0}\
},SolldrehzahlInternePumpeWW {\
my $DP=ReadingsVal("Heizung","SolldrehzahlInternePumpe","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 3) { return $DP} else {return 0}\
}


Vielleicht geht es noch viel schlanker oder hübscher? Das wäre aber rein optional, es läuft ja schließlich.

Schönen Tag noch...

Otto123

Moin,

naja Du fragst in jedem reading ja fast die identischen Werte ab. Du könntest das alles in eine Routine in die 99_myUtils packen und diese dann einfach mit einem Parameter aufrufen. da sparst du ein paarmal das Auslesen der Werte und hast nicht so einen langen "userreading Wurm" in der DEF.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

kermitthefrog

D.h. durch die Routine würden die "modifizierten" Daten nicht zwangsweise geloggt werden sondern für den Plot nur nach Bedarf generiert?

Da ich mit der Variantenart noch so gar nicht beschäftigt habe, kommt das ans Ende der Agenda :)

Danke trotzdem für den Hinweis...

Otto123

Von der Grundlage her steht hier alles -> http://www.fhemwiki.de/wiki/99_myUtils_anlegen
Alles was etwas mehr Platz als "eine Zeile" einnimmt packt man die diese Datei. Sie ist quasi die eigene Programmbibliothek.

Du schreibe eine Routine Namens Bla
In der Routine berechnest Du Deine vier Readings oder eines von vieren bei Bedarf.
Dort steht sinngemäß drin:
Wenn Aufruf=1 dann Reading1; Wenn Aufruf=2 dann Reading2 usw...
my $BL=ReadingsVal("Heizung","BrennerLeistung","");;\
my $DP=ReadingsVal("Heizung","SolldrehzahlInternePumpe","");;\
my $Umschalt=ReadingsVal("Heizung","Umschaltventil","");;\
if ($Umschalt == 1) { return $BL} else {return 0}\
if ($Umschalt == 3) { return $BL} else {return 0}\
if ($Umschalt == 1) { return $DP} else {return 0}\
if ($Umschalt == 3) { return $DP} else {return 0}\


Dann steht in Deiner Def
attr Heizung userReadings BrennerLeistungHZ {Bla(1)},BrennerLeistungWW {Bla(2)},SolldrehzahlInternePumpeHZ {Bla(3)},SolldrehzahlInternePumpeWW {Bla(4)}

Sieht hübscher aus  ;) lässt sich leichter verändern oder warten.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz