Nach großem Updatesprung kein ECMD OldValue mehr?

Begonnen von duu75, 29 Dezember 2014, 11:28:33

Vorheriges Thema - Nächstes Thema

duu75

Meine alte Konfig vom AVR Input sah so aus:

define Input1 ECMDDevice INPUT

Permanente Abfrage alle 5 Sek. ändert allerdings nun auch open zu open oder closed zu closed.
define Input1_check at +*00:00:05 get Input1 ip01

define read_on_Kontakte notify Input1 {if (Value("Input1") eq "open ip01" && OldValue("Input1") eq "closed ip01") { fhem("set Kontakte offen") } elsif (Value("Input1") eq "closed ip01" && OldValue("Input1") eq "open ip01") { fhem("set Kontakte zu")}}


meine alte INPUT classdef irgendwo aus dem Netz damals expl. für Input1:

get ip01 cmd {"io set ddr 0 00\nio get pin 0"}
get ip01 postproc {\
my $retval = "closed";\
my $ipwert=substr($_, 13, 2);\
  $ipwert = hex($ipwert) & 0x01;\
$retval = "open" if ($ipwert > 0);\
\
$retval;\
}
.
.
.
.

Es funktionierte!


Dann großes FHEM Update und aus dem Wiki die neue Classdef:

get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
get value postproc {\
my $retval = "closed";\
my $hexval = hex(trim("$_"));\
my $hash = $defs{%NAME};\
$retval = "open" if ($hexval > 0);\
readingsSingleUpdate($hash, "state", $retval, 1);\
}

Nun wird nur noch open oder closed übermittelt  ohne das ip01 etc.. :-)

Die eigentliche Funktion von OPEN und CLOSED ist ja gegeben. Nur eben der OldValue wird anscheinend nicht mehr bei ECMD unterstützt?

Ich habe den Umstand jetzt mit FHEM Boardmitteln (attr Input1 event-on-change-reading value) gelöst und das Notify abgeändert.
Wobei allerdings leider der STATE durch EVENT-ON-CHANGE-READING mit dem Prefix "value-state" versehen wird (warum auch immer, habe mich mit EVent-On... noch nicht so intensiv beschäftigt)

define read_on_Kontakte notify Input1 {if (Value("Input1") eq "value state: open") { fhem("set Kontakte offen") } elsif (Value("Input1") eq "value state: closed") { fhem("set Kontakte zu")}}



Das Problem ist grundsätzlich gelöst, allerdings ist das bei einem Update schon tödlich, wenn man sich auf Funktionen wie OldValue bezieht und die auf einmal nicht mehr da sind.
Die ganze Konfig dann abzusuchen und zu ändern ist sehr mühsehlich.
So muss man nach jedem Update sämtliche Funktionen testen, ob noch alles so läuft wie man sich das vorstellt. Test sind nach Updates immer erfoderlich, ich weiß.
Aber auf grundlegende Funktionen sollte man sich schon verlassen können oder?
In meinem Fall konnte ich das Ganze neu abbilden, aber was wenn man den OldValue zum Vergleich für eine andere Steuerung benötigt?

Oder habe ich was falsch gemacht und Asche auf mein Haupt, dann nehme ich alles zurück!

P.S.
Ich weiß ich könnte die proaktive Sendemethode der Ports vom AVR nutzen.
Muss dazu allerdings komplett neu Kompilieren und Flashen.
Bisher nicht die Zeit gehabt.