FHEM Forum

FHEM - Hausautomations-Systeme => KNX/EIB => Thema gestartet von: Superrakete am 03 Juni 2018, 08:47:36

Titel: Readings state doppelt vorhanden
Beitrag von: Superrakete am 03 Juni 2018, 08:47:36
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.

Titel: Antw:Readings state doppelt vorhanden
Beitrag 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​
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: JoWiemann am 03 Juni 2018, 10:01:14
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
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: Andi291 am 03 Juni 2018, 19:55:00
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
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: JoWiemann am 03 Juni 2018, 20:24:06
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
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: Andi291 am 03 Juni 2018, 20:50:06
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
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: JoWiemann am 03 Juni 2018, 20:55:22
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
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: Superrakete am 04 Juni 2018, 20:04:51
Hi!

Ich habe zur Probe mal 10_EIB.pm gelöscht. Das Problem mit dem doppelten Reading bleibt.
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: Superrakete am 05 Juni 2018, 17:27:59
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.
Titel: Antw:Readings state doppelt vorhanden
Beitrag von: Andi291 am 05 Juni 2018, 17:47:01
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...