FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Skipper am 17 September 2018, 11:45:57

Titel: ECMD Classdefinition
Beitrag von: Skipper am 17 September 2018, 11:45:57
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
Titel: Antw:ECMD Classdefinition
Beitrag von: Skipper am 17 September 2018, 20:49:20
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?
Titel: Antw:ECMD Classdefinition
Beitrag von: Skipper am 21 September 2018, 08:39:50
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?
Titel: Antw:ECMD Classdefinition
Beitrag von: Prof. Dr. Peter Henning am 22 September 2018, 08:29:52
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
Titel: Antw:ECMD Classdefinition
Beitrag von: Skipper am 22 September 2018, 09:57:48
Danke auf jeden Fall eine gute Idee.