Userreading mehrer readings ein Status

Begonnen von Freee84neu, 05 Juni 2020, 18:39:06

Vorheriges Thema - Nächstes Thema

Freee84neu

Hallo

Ich habe einen Sonoff 4CH der über MQTT2 in FHEM eingebunden ist mit dem ich eine Leinwand hoch und runter fahre.
Über der Channel 3(Reading "POWER3" ON/OFF) fahre ich sie runter über Channel 4(Reading "POWER4" ON/OFF) fahre ich sie wieder hoch. Jetzt wollte ich mir mit einem userreading ein Reading erstellen welches speichert, welches Reading als letztes "ON" war.

statePosition {if(ReadingsVal("Leinwand","POWER3","") eq "ON") {return 1} if (ReadingsVal("Leinwand","POWER4","") eq "ON") {return 2} }

Das Reading sieht jetzt so aus. Es funktioniert auch eigentlich jedoch sobald die Readings wieder beide OFF sind ist das userreading leer. Wie kann ich das verhindern ?

Gruß

Otto123

Hi,

nach meiner Erfahrung geht das so nicht. Du musst das mit einem notify und setreading machen.
Begründung: Irgendwas liefert der Code {} immer zurück - wenn nichts dann eben nichts ;)

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

Freee84neu

#2
Hmm... 

Hab es mal mit einem setreading probiert

Runter:POWER3:.ON {fhem ("setreading Leinwand statePosition Unten")},Hoch:POWER4:.ON {fhem ("setreading Leinwand statePosition Oben")}

Bekomme aber die Meldung

'setreading Leinwand statePosition Unten' called form userReadings is prohibited


Otto123

Du musst das mit einem notify und setreading ...

Ich habe gesagt: es geht nicht mit einem userReadings - aber Du musst es nicht glauben.

Das ist nur geraten, genauer geht es mit dem Eventmonitor
define n_bla notify Leinwand:(POWER3:|POWER4:).ON setreading Leinwand statePosition $EVTPART0

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

Freee84neu

Hmm

Wollte es eigentlich in dem device lassen und nicht wieder was extra machen.
So wie es jetzt drin steht kann ich es in ein dummy rein schreiben aber nicht ins eigene device ...


Otto123

#5
Verstehe ich nicht. Du hat ein notify extra und schreibst ein reading in deinem device.

Bessere Variante:
define n_bla notify Leinwand:(POWER3|POWER4):.ON setreading Leinwand statePosition {("$EVTPART0" eq "POWER3:" ? "unten" : "oben")}

Aber Dein System :)

Edit: Dein nicht funktionierendes userReadings musst Du natürlich löschen. ;)
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

Freee84neu

Erstmal danke für deine Hilfe.

Du hast ja recht ist nur ein notify. Aber dachte halt das es auch so geht. Da ich es ja auch so in ein Dummy schreiben kann.

Und naja zu meinem System. Ich denke wenn da irgendeiner von hier mal reinschauen würde. Der würde vor Lachen zusammenbrechen😉 ...


Otto123

Naja ich sage mal, mit einem Trigger könnte es als userReadings gehen, mit deinem Code:
Position:(POWER3|POWER4):.ON {if(ReadingsVal("Leinwand","POWER3","") eq "ON") {return 1} if (ReadingsVal("Leinwand","POWER4","") eq "ON") {return 2}}

Aber natürlich nur wenn POWERx auch wieder !ON gesetzt wird.
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

Freee84neu

#8
Super genau so gehts ...

Das Reading POWERX wird immer neu auf ON gesetzt sobald der motor fährt und das egal ob ich ihn per Hand fahre oder über FHEM

Also hab ich am Anfang den Trigger vergessen ...
Super vielen vielen Dank

Freee84neu

Wollte gerade nochmal versuchen darzustellen Leinwand in Mittelstellung. Also wenn einer die Leinwand vorher gestopft hat.

statePosition:((POWER3|POWER4):.ON|state:.Stop) {if(ReadingsVal("Leinwand","POWER3","") eq "ON") {return 1} if (ReadingsVal("Leinwand","POWER4","") eq "ON") {return 2} if (ReadingVal("Leinwand","state","") eq "Stop") {return 3}}

Wenn jemand die Leinwand stoppt habe ich im state Stop stehen. Und wollte dann zusätzlich darauf noch triggern. Aber das möchte es irgendwie nicht.

Otto123

Siehst Du denn den entsprechenden Event im Eventmonitor? "state" fehlt normalerweise im Event.
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

Freee84neu

Im Event Montitor ist nix zu sehen ...


2020-06-06 23:42:33 MQTT2_DEVICE Leinwand on3
2020-06-06 23:42:34 MQTT2_DEVICE Leinwand POWER3: ON
2020-06-06 23:42:34 MQTT2_DEVICE Leinwand statePosition: 1
2020-06-06 23:42:35 structure Licht_Gruppe_Aussenbeleuchtung ON
2020-06-06 23:42:35 MQTT2_DEVICE Aussenbeleuchtung_Hinten Time: 2020-06-06T22:42:34
2020-06-06 23:42:35 MQTT2_DEVICE Aussenbeleuchtung_Hinten Uptime: 14T03:57:49
2020-06-06 23:42:35 MQTT2_DEVICE Aussenbeleuchtung_Hinten Wifi_RSSI: 66
2020-06-06 23:42:35 MQTT2_DEVICE Aussenbeleuchtung_Hinten UptimeSec: 1223869
2020-06-06 23:42:35 MQTT2_DEVICE Aussenbeleuchtung_Hinten Wifi_Signal: -67
2020-06-06 23:42:35 MQTT2_DEVICE Huette_Kuehlschrank Time: 2020-06-06T22:42:35
2020-06-06 23:42:35 MQTT2_DEVICE Huette_Kuehlschrank Uptime: 14T03:57:46
2020-06-06 23:42:35 MQTT2_DEVICE Huette_Kuehlschrank Wifi_RSSI: 74
2020-06-06 23:42:35 MQTT2_DEVICE Huette_Kuehlschrank UptimeSec: 1223866
2020-06-06 23:42:35 MQTT2_DEVICE Huette_Kuehlschrank Wifi_Signal: -63
2020-06-06 23:42:36 MQTT2_DEVICE Leinwand Stop
2020-06-06 23:42:36 MQTT2_DEVICE Leinwand POWER3: OFF



Kann man das irgendwie einschalten oder so ?



Freee84neu

Hmm wollte jetzt das state in ein andere Reading "State schreiben, um ein Event zu bekommen.

State { ReadingsVal("Leinwand","state",0) }, statePosition:((POWER3|POWER4):.ON|State:.Stop) {if(ReadingsVal("Leinwand","POWER3","") eq "ON") {return 1} if (ReadingsVal("Leinwand","POWER4","") eq "ON") {return 2} if (ReadingVal("Leinwand","State","") eq "Stop") {return 3}}

2020-06-07 00:02:24 MQTT2_DEVICE Leinwand on4
2020-06-07 00:02:24 MQTT2_DEVICE Leinwand State: on4
2020-06-07 00:02:24 MQTT2_DEVICE Leinwand POWER4: ON
2020-06-07 00:02:24 MQTT2_DEVICE Leinwand statePosition: 2
2020-06-07 00:02:24 MQTT2_SERVER MQTT2_Server nrclients: 61
2020-06-07 00:02:27 MQTT2_DEVICE Leinwand Stop
2020-06-07 00:02:27 MQTT2_DEVICE Leinwand State: Stop
2020-06-07 00:02:27 MQTT2_DEVICE Leinwand POWER4: OFF


Klappt aber leider auch nicht trotz Event

amenomade

Was willst Du genau erreichen?

POWER4: ON triggert das userReading statePostion. Das 2. if im Perl Code ist wahr. Dann sollte dein statePosition auf 2 springen. Man sieht das auch.

Dann kommt Stop. Das triggert auch das userReading. Das 2. if im Perl Code ist immer noch wahr. Dann bleibt statePosition auf 2.

Erst dann kommt POWER4 OFF. Das triggert aber nicht das userReading. Passiert nix
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Freee84neu

Ja macht Sinn die Aktion kommt vor der Reaktion.

War wohl gestern Abend zu spät.

Ich möchte erreichen das wenn ich auf Stop gehe. Eine neue Position gemeldet wird. Aber da state bzw. State von fhem gesetzt wir (Aktion) und das Reading POWER vom MQTT Device (Reaktion) ist mein Trigger so nicht möglich.

Hmm sehe da jetzt gerade auch keine Möglichkeit...