Hi!
Nach dem Update werden beim Neustart immer zwei state Readings angelegt. "STATE" und "state". Das STATE Reading wird danach aber nie wieder aktualisiert. Ich vermute das daher auch mein Problem mit den Userreadings aus dem anderen Thread stammt. Bitte mal prüfen.
Wenn ich fhem beende und fhem.save lösche ist beim nächsten Start nur das Reading "state" vorhanden. Nach dem nächsten Restart sind dann wieder beide da.
Hallo Superrakete,
dass beides vorhanden ist, hat schon seine Richtigkeit. Bitte lies mal die Einsteiger-Doku von Fhem durch.
Viele Grüße Gisbert
Zitat von: Gisbert am 03 Juni 2018, 09:53:03
Hallo Superrakete,
dass beides vorhanden ist, hat schon seine Richtigkeit. Bitte lies mal die Einsteiger-Doku von Fhem durch.
Viele Grüße Gisbert
Sorry, aber das ist so nicht richtig. Hier wird STATE als Readings generiert. Das STATE, das Du meinst, in ein Internals. Ich vermute, dass der Maintainer selber STATE setzt - was nach Entwicklerregeln nicht zulässig ist, da STATE durch state gesetzt wird, sofern das Attribut stateFormat nicht gesetzt wird - dies allerdings mit der Sub readings...Update, was dann auch nicht richtig wäre, oder er hat sich einfach verschrieben.
Grüße Jörg
Servus!
Ist nicht der Fall. Woher STATE kommt entzieht sich meiner Kenntnis...
Ich habe lediglich an zwei Stellen ein Update auf "state" per ReadingsBulkUpdate...
Grüße, Andi
Hallo Andi,
ich habe in 10_eib.pm folgendes gefunden:
in Zeile 587 ist folgender Aufruf:
my $tmp = EIB_EncodeByDatapointType($hash, $n, $lh->{STATE}, $gnr);
In EIB_EncodeByDatapointType($$$$) wird der Parameter 3 an - my ($hash, $name, $value, $gnr) = @_; - an $value übergeben. In der Sub wird $value an verschiedenen Stellen verändert. Sofern $lh->{STATE} als Referenz übergeben wird, wird $lh->{STATE} natürlich auch verändert. Problematisch ist die Nutzung $lh->{STATE} wenn der User stateFormat nutzt.
Da ich mir nicht alles angesehen habe, könnte ich natürlich auch komplett falsch liegen.
Grüße Jörg
Servus!
Das mag sein - 10_EIB warte ich nicht mehr.
Unter 10_KNX dürftest Du nichts finden - zumindest hätte ich dann echt schlampig gesucht :-)
Grüße, Andi
Hallo Andi,
keinen Stress. Wollte nur wissen ob meine grauen Zellen mit 59 noch zu etwas taugen. Ist mein Gehirn Jogging.
Grüße Jörg
Hi!
Ich habe zur Probe mal 10_EIB.pm gelöscht. Das Problem mit dem doppelten Reading bleibt.
Hi!
Ich habe glaube herausgefunden wo das Problem liegt:
#In case setstate is executed, a readingsupdate is initiated
#############################
sub
KNX_State($$$$) {
my ($hash, $time, $reading, $value) = @_;
my $name = $hash->{NAME};
my $tempStr = join (", ", @_);
Log3 ($name, 5, "enter state: hash: $hash name: $name, attributes: $tempStr");
#in some cases state is submitted within value - if found, take only the stuff after state
#my @strings = split("[sS][tT][aA][tT][eE]", $val);
#$val = $strings[int(@strings) - 1];
return undef if (not (defined($value)));
return undef if (not (defined($reading)));
#remove whitespaces
$value =~ s/^\s+|\s+$//gi;
$reading =~ s/^\s+|\s+$//gi;
$reading = lc ($reading) if ($reading =~ m/[sS][tT][aA][tT][eE]/);
#$reading = $reading if ($reading =~ m/state/i);
Log3 ($name, 5, "state $name: update $reading with value: $value");
#write value and update reading
readingsSingleUpdate($hash, $reading, $value, 1);
return undef;
}
Wenn man in der Routine $reading = $reading if ($reading =~ m/state/i);
wieder in $reading = lc ($reading) if ($reading =~ m/[sS][tT][aA][tT][eE]/);
ändert so wie es vor dem Update war gibt es auch das doppelte STATE nicht mehr. Bitte mal prüfen.
Ja, das mag sein.
Bereits 2017 habe ich umgestellt von manipulierenden Readings auf korrekte regular Expressions. Ich manipuliere also nichts mehr was reinkommt (in diesem Falle state), sondern ignoriere einfach die Schreibweise.
Siehe Kommentar im Sourcecode:
# ABU 20171212 migrated to case-insensitive regex
Das bedeutet aber, es frägt jemand von außen möchte das Reading STATE aktualisieren, und nicht das Reading state. - beispielsweise irgendwas mit DBLog...
Ich werde es nicht wieder zurückändern und damit Anfragen von außen maskieren / verbiegen...