ECMD Classdefinition

Begonnen von Skipper, 17 September 2018, 11:45:57

Vorheriges Thema - Nächstes Thema

Skipper

Hallo,

ich habe da mal eine Frage die von euch bestimmt ganz leicht zu beantworten ist.
Ich habe meine Heizung nun per ebusd angeschlossen und habe sie auch in FHEM eingebunden.
Das ECMD Classdef ist also vorhanden. Wenn ich das richtig verstanden habe, kann man in dem Definition File mit dem Postprocessor die Readings aufbereiten.
Ich möchte die Nachricht meiner Heizung mit der Information der Uhrzeit und des Datums welche wie folgt übertragen wird:
<Außentemp>;<Sekunde>;<Minute>;<Stunde>;<Tag>;<Monat>;<Wochentag>;<Jahr> nutzen um sie in einen Unixtimestamp umzuwandeln diesen mit der aktuellen Zeit zu vergleichen und dann wie folgt auszugeben<Stunde>:<Minute> <Tag>.<Monta>.<Jahr> <OK | NOK>
Somit will ich feststellen, ob ich die Uhrzeit wieder einstellen muss. Denn manchmal, ich wieß noch nicht warum vertsellt sich die Uhr. .... Nicht auszuschließen, dass jemand dran kommt, ist aber ein anderes Thema.

Wie würdet ihr das im Postproc machen? Meine Versuche sind gescheitert bzw. meine postproc Formulierungen haben keine Auswirkungen.
Danke

Skipper

Mein Anfang sieht so aus:

get Datum_Zeit postproc { use Time::Local;
my @values=split(';',$_);
my $time = timelocal($values[1],$values[2],$values[3],$values[4],$values[5]-1,$values[7]);
$time
}


aber das funzt nicht warum?

Skipper

Hallo,

leider konnte ich erst jetzt weiter forschen.
Mir ist aufgefallen, dass mein Code funktioniert wenn ich ihn in eine einzige Zeile packe.
Also so get Datum_Zeit postproc { use Time::Local; my @values=split(';',$_); my $time = timelocal($values[1],$values[2],$values[3],$values[4],$values[5]-1,$values[7]); $time}
Ich dachte eigentlich, dass genau dafür die geschwungenen Klammern {} sind.
Aber der Parser scheint das zu ignorieren und nur die eine Zeile abzuarbeiten.
Oder habe ich einen anderen Fehler?

Prof. Dr. Peter Henning

Vielleicht ein Tipp von demjenigen, der das zuerst umgesetzt hat:

Routinen zur Auswertung in eine eigene 99_HeatingUtils.pm auslagern. Und dann die ECMD-Konfiguration nur noch zum Aufruf dieser Routinen benutzen.

#-- mode = Mode Heizkeis hc
get mode cmd {"read -c hc Mode\n\000read -c hc Param\n\000read HCName1\n"}
get mode expect ".*\n*"
get mode postproc { Vaillant_HC_mode_postproc("%NAME",$_,1) }


LG

pah

Skipper

Danke auf jeden Fall eine gute Idee.