[gelöst]set magic im notify nimmt falsches reading

Begonnen von frober, 26 Februar 2021, 18:17:21

Vorheriges Thema - Nächstes Thema

frober

Hallo zusammen,

ich habe mein notify von Perl auf Fhem umgestellt:
defmod n_Luft_aussen notify MYSENSOR_4:(temperature2|humidity2).* setreading Luft_aussen temperature [MYSENSOR_4:temperature2];; setreading Luft_aussen humidity [MYSENSOR_4:humidity2]


Nun habe die eine Vermischung der Werte von 2 Sensoren im dbLog:
2021-02-26 17:57:08   2021-02-26_17-55-08__1__Luft_aussen__DHT T: 7.1 H: 99.9
2021-02-26 17:57:08   2021-02-26_17-55-08__1__Luft_aussen__DHT_1 T: 7.1 H: 41.7
2021-02-26 17:57:08   2021-02-26_17-55-11__1__Luft_aussen__DHT T: 20.6 H: 41.7
2021-02-26 17:57:08   2021-02-26_17-55-11__1__Luft_aussen__DHT_1 T: 20.6 H: 99.9
2021-02-26 17:57:08   2021-02-26_17-55-18__1__Luft_aussen__DHT T: 7.1 H: 99.9
2021-02-26 17:57:08   2021-02-26_17-55-18__1__Luft_aussen__DHT_1 T: 7.1 H: 41.7


Die Ausgabe von DHT_1 ist nur die Anzeige von dbLog, wg. des gleichen Zeitstempels. Alles readings heißen DHT.

Beide Sensoren sind im gleichen Device (MySensor-Node):
Internals:
   DEF        4
   FUUID      5fd64147-f33f-ff70-c307-fb28083d2e61c114
   FVERSION   10_MYSENSORS_DEVICE.pm:0.232570/2020-11-29
   IODev      MyGW_RS485
   NAME       MYSENSOR_4
   NR         385
   STATE      received presentation
   TYPE       MYSENSORS_DEVICE
   ack        0
   radioId    4
   repeater   0
   OLDREADINGS:
     2021-02-26 17:58:10   temperature20   27.2
   READINGS:
     2021-01-19 19:03:38   SKETCH_NAME     MySensHWR
     2021-01-14 21:26:56   SKETCH_VERSION  1.2
     2021-02-26 17:36:59   humidity1       41.7
     2021-02-26 14:46:49   humidity2       99.9
     2021-01-19 19:03:38   id10            2874700A05000019
     2021-01-19 19:03:38   id11            28397C0B05000088
     2021-01-19 19:03:38   id12            289F172C06000015
     2021-01-19 19:03:38   id13            28FFFF740217048B
     2021-01-19 19:03:38   id20            28FF0875021704F3
     2021-01-19 19:03:38   id21            28FF9CD301170541
     2021-01-19 19:03:38   parentId        0
     2021-01-19 19:03:38   state           received presentation
     2021-02-26 17:36:59   temperature1    20.6
     2021-02-26 17:30:52   temperature10   17.9
     2021-02-26 17:24:48   temperature11   17.0
     2021-02-26 17:55:11   temperature12   5.7
     2021-02-26 17:18:43   temperature13   6.0
     2021-02-26 17:57:00   temperature2    7.2
     2021-02-26 17:58:20   temperature20   27.5
     2021-02-26 17:37:30   temperature21   43.0


Dass ich die Werte so (T: 7.1 H: 41.7) logge, ist historisch bedingt, die Sensoren waren früher anders angeschlossen.

Wieso werden die readings temperature1 und temperature2, bzw. humidity1 und humidity2 vermischt?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Otto123

Hi,

sorry aber ich kann keinen Zusammenhang zwischen Deinem notify deinem dbLog  Auszug und deinem Device erkennen.

Da muss es eine unsichtbare Komponente geben.

Aber: mit deinem notify werden nun beide Werte immer doppelt nach Luft_aussen geschrieben - ist das sinnvoll?

Das sieht nach Datenschubse aus  ::) kann man vielleicht effektiver lösen - wenn man wüsste was insgesamt passiert ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frober

#2
Hallo Otto,

du schon wieder ;)

Ja es gibt ein userReading, das ist jedoch nicht der Auslöser, das habe ich getestet. Deshalb auch erst nicht gepostet.
Ich musste schnell weg, da ist mir dann auch aufgefallen, dass der Zusammenhang fehlt. :(

Richtig:
Internals:
   FUUID      5ffb3a85-f33f-ff70-8057-0d016672d081d7ab
   NAME       Luft_aussen
   NR         415
   STATE      6.9°C 99.9%
   TYPE       dummy
   Helper:
     DBLOG:
       DHT:
         logdb:
           TIME       1614367629.02019
           VALUE      T: 6.9 H: 99.9
   READINGS:
     2021-02-26 20:34:34   DHT             T: 6.9 H: 99.9
     2021-02-26 20:27:09   dewpoint        6.9
     2021-02-26 20:34:34   humidity        99.9
     2021-02-26 20:34:34   temperature     6.9
Attributes:
   DbLogInclude DHT.*
   event-min-interval .*:3600
   event-on-change-reading .*
   group      ConfoAir
   room       Technik->ConfoAir
   stateFormat { sprintf("%s°C %s%%", ReadingsVal("Luft_aussen","temperature",0), ReadingsVal("Luft_aussen","humidity",0)) ; }

   userReadings DHT {my $tem= ReadingsNum("Luft_aussen","temperature",0); my $hum= ReadingsNum("Luft_aussen","humidity",0); sprintf("T: %s H: %s", $tem, $hum) if ($tem || $hum) ne "NAN";}


Falsch:
Internals:
   FUUID      5ffb3a85-f33f-ff70-8057-0d016672d081d7ab
   NAME       Luft_aussen
   NR         415
   STATE      20.4°C 41.5%
   TYPE       dummy
   Helper:
     DBLOG:
       DHT:
         logdb:
           TIME       1614368229.58484
           VALUE      T: 20.4 H: 41.5
   READINGS:
     2021-02-26 20:37:09   DHT             T: 20.4 H: 41.5
     2021-02-26 20:37:09   dewpoint        6.9
     2021-02-26 20:37:09   humidity        41.5
     2021-02-26 20:37:09   temperature     20.4
Attributes:
   DbLogInclude DHT.*
   event-min-interval .*:3600
   event-on-change-reading .*
   group      ConfoAir
   room       Technik->ConfoAir
   stateFormat { sprintf("%s°C %s%%", ReadingsVal("Luft_aussen","temperature",0), ReadingsVal("Luft_aussen","humidity",0)) ; }

   userReadings DHT {my $tem= ReadingsNum("Luft_aussen","temperature",0); my $hum= ReadingsNum("Luft_aussen","humidity",0); sprintf("T: %s H: %s", $tem, $hum) if ($tem || $hum) ne "NAN";}


Bezgl. doppeltes Schreiben in dbLog, ich möchte ja jede Temperatur- und Feuchteänderung erfassen. MySensor sendet nur Werte, die sich geändert habe, das sollte nicht tragisch sein. Wenn es aber besser geht, gerne...

Gruß und Danke
Bernd
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

#3
Sorry, mein Fehler.

Ich habe das gleiche notify und Dummy für den 2. Sensor. Mit c&p geändert und die Hälfte beim anpassen übersehen. ;D
D.h. das 2. notify schreibt in diesen Dummy, anstatt in den Anderen (Kopf schlag).

Wie war das mit Wald und Bäume...

Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Otto123

Du schreibst aber bei eine Temp Änderung die Temp und Hum und bei einer Hum Änderung die Temp und Hum. Also alles doppelt.
Mach mal erstmal lieber zwei notify
defmod n_Luft_aussen1 notify MYSENSOR_4:humidity2.* setreading Luft_aussen humidity $EVTPART1
defmod n_Luft_aussen2 notify MYSENSOR_4:temperature2.* setreading Luft_aussen temperature $EVTPART1


Aber wozu musst Du die Daten erst in den Dummy schubsen? Warum machst Du das userReadings nicht gleich im MYSENSOR_4?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frober

Zitat von: Otto123 am 26 Februar 2021, 21:01:56
Du schreibst aber bei eine Temp Änderung die Temp und Hum und bei einer Hum Änderung die Temp und Hum. Also alles doppelt.
Mach mal erstmal lieber zwei notify
defmod n_Luft_aussen1 notify MYSENSOR_4:humidity2.* setreading Luft_aussen humidity $EVTPART1
defmod n_Luft_aussen2 notify MYSENSOR_4:temperature2.* setreading Luft_aussen temperature $EVTPART1


Aber wozu musst Du die Daten erst in den Dummy schubsen? Warum machst Du das userReadings nicht gleich im MYSENSOR_4?

Mit 2 notify ist es besser, habe es gerade in der Datenbank gesehen.

Wie schon erwähnt, die Sensoren waren zuvor anders (AVR NetIO mit Ethersex über ECMD) angebunden. Um nicht rückwirkend die Datenbank anzupassen usw. habe ich das pragmatisch erstmal so gelöst.

Zudem habe ich gerne einzelne Devices, besserer Überblick, Verteilung in versch. Räume, STATE ist entsprechend anpassbar.
Wenn du die readings im MYSENSOR_4-Device siehts, das sind "eigentlich" 5 verschiedene Devices zusammengefasst (PV-Temp, Vor- und Rücklauf EWT, Diff.Temp. bei Sonnenschein, Temp u. Feuchte Lüftung, Temp u. Feuchte HWR).
3 Nodes habe ich noch gar nicht aktiv, da sieht es noch "schlimmer" aus. ;D
"Schalter" mache ich mit readingsProxy...da gibt es keine Events, daher hierfür nicht geeignet.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

Ich musste das notify so schreiben:

defmod n_Luft_aussen_Temp notify MYSENSOR_4:temperature2.* setreading Luft_aussen temperature [MYSENSOR_4:temperature2]


Sobald ich $EVTPART1 benutze werden auch die temperature20 und 21 ins Reading geschrieben. Ist logisch, da regex:  temperature2.*

Wie kann man das regex auf die 2 beschränken?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Otto123

Klar, denn das Reading ist doch im Event mit Doppelpunkt begrenzt? Immer im Eventmonitor schauen!
temperature2.* triggert alles was mit temperature2 beginnt.
temperature2:.* triggert alles was mit temperature2: beginnt. $EVTPARTx wird am Leerzeichen getrennt.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frober

Zitat von: Otto123 am 27 Februar 2021, 00:18:36
Klar, denn das Reading ist doch im Event mit Doppelpunkt begrenzt? Immer im Eventmonitor schauen!
temperature2.* triggert alles was mit temperature2 beginnt.
temperature2:.* triggert alles was mit temperature2: beginnt. $EVTPARTx wird am Leerzeichen getrennt.

Danke Otto, ich habe zu kompliziert gedacht. Eventmonitor, klar, war Gestern wohl schon zu spät. ::)

Allerdings hatte ich schon mehrmals notifys, da hat es mit dem Doppelpunkt nicht funktioniert -> und wieder der Eventmonitor. :o
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

Nochmal als Info:
Das Trennen auf 2 notify erzeugt weiterhin doppelte Einträge in der Datenbank, sobald sich Temperatur und Feuchte gleichzeitig ändern. Der Grund liegt darin, dass beim auslesen des DHT22 beides "gleichzeitig" abgefragt und bei Änderungen auch beides übertragen wird.

Da die Feuchte nicht so wichtig ist, triggere ich nun nur noch auf die Temperatur und übertrage damit beide Sensorwerte:
defmod n_Luft_aussen_Temp notify MYSENSOR_4:temperature2:.* setreading Luft_aussen temperature $EVTPART1;; setreading Luft_aussen humidity [MYSENSOR_4:humidity2]


Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...