FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Cybers am 04 März 2021, 08:45:41

Titel: Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 08:45:41
Hallo,

aktuell verzweifle ich ich bei einem userReading. Problem: das Reading wird nicht aktualisiert wenn das Reading aus dem Hautpdevice gesetzt wird, sondern erst wenn das Device, wo das userReading drin ist, geschaltet wird.

So ist das Device "Garagentor-Schalter" angelegt:
defmod EnO_01879635 EnOcean 01879635
attr EnO_01879635 IODev ESP3
attr EnO_01879635 alias Garagentor
attr EnO_01879635 devStateIcon .*:control_on_off
attr EnO_01879635 eventMap on-for-timer:on-for-timer BI:off B0:on
attr EnO_01879635 genericDeviceType garage
attr EnO_01879635 group Schaltaktor FSR61/8-24V UC
attr EnO_01879635 homebridgeMapping CurrentDoorState:Status,values=off:CLOSED;;on:OPEN TargetDoorState:CurrentDoorState,cmds=OPEN:on;;CLOSED:off
attr EnO_01879635 icon fts_garage
attr EnO_01879635 manufID 00D
attr EnO_01879635 room Garage,Homekit,Schaltschrank
attr EnO_01879635 stateFormat {ReadingsVal("EnO_FEFA7CE5","Status",0)}
attr EnO_01879635 subDef FFD6FC81
attr EnO_01879635 subType switch
attr EnO_01879635 switchMode pushbutton
attr EnO_01879635 userReadings Status { if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") {return "offen";;} else {return "geschlossen";;} }
attr EnO_01879635 webCmd :


Das heißt, der Wert im Reading "Status" vom Garagentor-Schalter soll aus dem Reading "state" vom Device "EnO_FEFA7CE5" übernommen werden. Das passiert aber nicht wenn sich das reading im Device "EnO_FEFA7CE5" ändert, sondern erst wenn ich den Garagentor-Schalter mit on, off oder on-for-timer bediene. Scheinbar wird das Attribut "userreading" nur über den Garagentor-Schalter getriggert.

Hier noch der Code von dem Sensor "EnO_FEFA7CE5":
defmod EnO_FEFA7CE5 EnOcean FEFA7CE5
attr EnO_FEFA7CE5 IODev ESP3
attr EnO_FEFA7CE5 alias Garagentor Sensor oben
attr EnO_FEFA7CE5 eep F6-10-00
attr EnO_FEFA7CE5 eventMap pressed:offen released:geschlossen
attr EnO_FEFA7CE5 manufID 00D
attr EnO_FEFA7CE5 model Eltako_FTS12
attr EnO_FEFA7CE5 room Garage
attr EnO_FEFA7CE5 stateFormat { if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") {return "offen";;} else {return "geschlossen";;} }
attr EnO_FEFA7CE5 subType switch
attr EnO_FEFA7CE5 teachMethod RPS
attr EnO_FEFA7CE5 userReadings Status { if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") {return "offen";;} else {return "geschlossen";;} }
attr EnO_FEFA7CE5 webCmd :


Hat da vielleicht jemand eine Idee? Außer mit "do if" oder "notify"...
Oder läßt sich das wirklich nur mit  "do if" oder "notify" umsetzen? :-(

Gruß, Sascha
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: DeeSPe am 04 März 2021, 09:15:12
userReadings werden nur im eigenen Device getriggert.
Wenn Du Werte von einem anderen Device in dem Device setzen willst, dann geht das nur über notify oder doif.

Gruß
Dan
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 04 März 2021, 10:10:17
Sollte man diesen Satz in der Doku optisch präsenter positionieren?
ZitatDiese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird.

Aber ein setreading auf ein ANDERES Device darf man doch in einem userReadings machen? Das wird zumindest nicht verhindert. Erzeugt ja auch keine Schleife.

Also im userReadings in EnO_FEFA7CE5 einfach ein setreading EnO_01879635  ... machen?
Hoffentlich verhaut mich jetzt keiner :)

Gruß Otto
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 15:48:44
ich hatte es auch so im Kopf und mir gedacht. Manchmal weiß man ja aber auch nicht immer was sich so getan hat.

Dennoch läuft es noch nicht so ganz. (Pearl und Klammern sind bei mir noch ein wenig hakelig.)
Das habe ich jetzt im userReading meines Sensors um das reading meines Schalters zu setzen:
{ if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") (setreading EnO_01879635 Status offen) else (setreading EnO_01879635 Status geschlossen) }

Gruß, Sascha
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: TomLee am 04 März 2021, 16:17:37
In deinem Fall geht das auch ohne viel Klammern.

Google "Perl ternärer Operator" im ersten Ergebnis wird der beschrieben und auch die korrekte Syntax zu deinem jetzigem if/else.

Gruß

Thomas
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 18:22:17
Danke, aber so recht hat mir das nicht weiter geholfen oder ich habe einen falschen Beitrag gelesen. Vielleicht wäre ja dennoch jemand so nett mir den richtigen Ansatz zu geben.

Ich verstehe, daß manch einer möchte, daß sich die User mit dem Thema auseinandersetzen und lieber Lesetips geben. Allerdings bin ich jetzt nicht erst seit gestern hier, beschäftige mich selbst ersteinmal mit meinen Problemen und schreibe wenn ich selbst nicht mehr weiter weiß. Umso mehr freut man sich wenn jemand einem aktiv hilft - das mache ich andersrum genauso bei Themen bei denen ich helfen kann.

Gruß, Sascha
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: DeeSPe am 04 März 2021, 18:28:58
Zitat von: Cybers am 04 März 2021, 18:22:17
Danke, aber so recht hat mir das nicht weiter geholfen oder ich habe einen falschen Beitrag gelesen. Vielleicht wäre ja dennoch jemand so nett mir den richtigen Ansatz zu geben.

Ich verstehe, daß manch einer möchte, daß sich die User mit dem Thema auseinandersetzen und lieber Lesetips geben. Allerdings bin ich jetzt nicht erst seit gestern hier, beschäftige mich selbst ersteinmal mit meinen Problemen und schreibe wenn ich selbst nicht mehr weiter weiß. Umso mehr freut man sich wenn jemand einem aktiv hilft - das mache ich andersrum genauso bei Themen bei denen ich helfen kann.

Gruß, Sascha

Er meint wohl so:
{ ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed" ? (setreading EnO_01879635 Status offen) : (setreading EnO_01879635 Status geschlossen) }

Gruß
Dan
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 04 März 2021, 18:42:53
funktioniert doch nicht ohne fhem("")  ???
{ ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 18:51:22
Danke, aber da scheint immer noch etwas nicht ganz zu passen. Das Reading wird nicht gesetzt.

defmod EnO_FEFA7CE5 EnOcean FEFA7CE5
attr EnO_FEFA7CE5 IODev ESP3
attr EnO_FEFA7CE5 alias Garagentor Sensor oben
attr EnO_FEFA7CE5 eep F6-10-00
attr EnO_FEFA7CE5 eventMap pressed:offen released:geschlossen
attr EnO_FEFA7CE5 manufID 00D
attr EnO_FEFA7CE5 model Eltako_FTS12
attr EnO_FEFA7CE5 room Garage
attr EnO_FEFA7CE5 stateFormat { if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") {return "offen";;} else {return "geschlossen";;} }
attr EnO_FEFA7CE5 subType switch
attr EnO_FEFA7CE5 teachMethod RPS
attr EnO_FEFA7CE5 userReadings { ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }
attr EnO_FEFA7CE5 webCmd :
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 04 März 2021, 18:57:09
weil da der Name des Userreading fehlt!
attr EnO_FEFA7CE5 userReadings { ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }
Von mir aus Willi :)

attr EnO_FEFA7CE5 userReadings willi { ReadingsVal($name,"state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }

Hat das gerät noch etwas Besseres als state worauf man triggern könnte? So rammelt das userReadings bei jeder Änderung im state los und state selbst steht wieder nicht im event :(
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: DeeSPe am 04 März 2021, 19:02:44
Zitat von: Otto123 am 04 März 2021, 18:42:53
funktioniert doch nicht ohne fhem("")  ???

Die Syntax sah mir so nach doif oder sowas aus!
Und da ich mich damit nicht auskenne, habe ich es einfach so gelassen. ;)

Gruß
Dan
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 19:11:42
Danke für eure Hilfe, jetzt läuft es! Der Name des Userreadings ist mir beim letzten Einfügen "verloren" gegangen.  :-[
Alternativ könnte man noch auf das Reading "buttons" triggern.
Hier mal ein list von dem Device:
Internals:
   DEF        FEFA7CE5
   ESP3_DestinationID FFFFFFFF
   ESP3_MSGCNT 25
   ESP3_PacketType 1
   ESP3_RSSI  -91
   ESP3_ReceivingQuality bad
   ESP3_RepeatingCounter 0
   ESP3_SubTelNum 3
   ESP3_TIME  2021-03-04 19:05:34
   FGW14_USB_MSGCNT 24
   FGW14_USB_TIME 2021-03-04 19:05:34
   FUUID      5c473d3a-f33f-e675-bdcb-dc8782697288bbe9
   IODev      ESP3
   LASTInputDev FGW14_USB
   MSGCNT     25
   NAME       EnO_FEFA7CE5
   NR         556
   NTFY_ORDER 50-EnO_FEFA7CE5
   STATE      offen
   TYPE       EnOcean
   OLDREADINGS:
   READINGS:
     2021-03-04 19:05:34   buttons         pressed
     2021-03-04 19:05:34   state           pressed
     2018-07-11 20:36:37   teach           RPS teach-in accepted EEP F6-10-00 Manufacturer: no ID
   helper:
Attributes:
   IODev      ESP3
   alias      Garagentor Sensor oben
   eep        F6-10-00
   eventMap   pressed:offen released:geschlossen
   manufID    00D
   model      Eltako_FTS12
   room       Garage
   stateFormat { if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") {return "offen";} else {return "geschlossen";} }
   subType    switch
   teachMethod RPS
   userReadings Status { ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }
   webCmd     :
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 04 März 2021, 19:17:56
Besser !
buttons         pressed
Wahrscheinlich so? ;)
attr EnO_FEFA7CE5 userReadings Status:buttons:.* { ReadingsVal($name,"buttons",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: TomLee am 04 März 2021, 19:28:32
Zitatbeschäftige mich selbst ersteinmal mit meinen Problemen

Mein Ebus-Raspi liegt seit mehr als 2 Jahren provisorisch mit 2 verdrillten Adern angeschlossen auf meinem Heizkessel, heute war der Tag an dem ich neue Leitungen (230V Leitung für Steckdose und Ebusleitung) sauber verlegt/installiert habe, neben meiner eigentlichen Arbeit und meinen Problemen.
In einer 5-minütigen Pause hab ich dir geantwortet, habs nur gut gemeint und kurz helfen wollen.
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 19:38:52
Zitat von: TomLee am 04 März 2021, 19:28:32
Mein Ebus-Raspi liegt seit mehr als 2 Jahren provisorisch mit 2 verdrillten Adern angeschlossen auf meinem Heizkessel, heute war der Tag an dem ich neue Leitungen (230V Leitung für Steckdose und Ebusleitung) sauber verlegt/installiert habe, neben meiner eigentlichen Arbeit und meinen Problemen.
In einer 5-minütigen Pause hab ich dir geantwortet, habs nur gut gemeint und kurz helfen wollen.

Meine Antwort war auch nicht böse gemeint. Ich lerne ja auch immer gerne dazu und bin auch lesewillig.  :)
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 04 März 2021, 19:41:01
Zitat von: Otto123 am 04 März 2021, 19:17:56
Besser !
buttons         pressed
Wahrscheinlich so? ;)
attr EnO_FEFA7CE5 userReadings Status:buttons:.* { ReadingsVal($name,"buttons",0) eq "pressed" ? fhem("setreading EnO_01879635 Status offen") : fhem("setreading EnO_01879635 Status geschlossen") }

Da das Reading ,,buttons" entweder released oder pressed ist, habe ich es in .* geändert.

Gerade gesehen, dass du es auch geändert hast.  :)

Danke noch mal! Jetzt muss ich nur noch hinbekommen, dass Homebridge den Status richtig anzeigt...
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 04 März 2021, 19:56:46
"Perl ternärer Operator"  - ein gewaltiger Begriff für ein Fragezeichen und einen Doppelpunkt. Ich bin da kurz versunken als ich den das erste Mal las.  ;D
ternär -> "aus drei Grundeinheiten bestehend" - ah ja - Bedingung ? wahr : falsch

Es geht also gar nicht um Fragezeichen und Doppelpunkt  ;D ;D ;D

ZitatDa das Reading ,,buttons" entweder released oder pressed ist, habe ich es in .* geändert.
Ja das war mir nach dem Schreiben auch kurz klar geworden ;)
Titel: Antw:[Gelöst] Problem bei userReadings / Trigger
Beitrag von: Cybers am 24 März 2021, 10:14:25
jetzt habe ich dazu noch eine kleine Ergänzung. Ich möchte, daß zwei Befehle zeitverzögert nacheinander ausgeführt werden. Ich habe das Attribut wie folgt geändert:
attr EnO_FEFA7CE5 userReadings Status { ReadingsVal($name,"state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status 0") : fhem("setreading EnO_01879635 Status 3;sleep 20;setreading EnO_01879635 Status 1") }
Leider klappt die Zeitverzögerung nicht. Was habe ich da falsch gemacht.
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 24 März 2021, 10:35:31
So wie Du es schreibst ist es der Befehl in der Kommandozeile, da musst Du die ; doppelt schreiben!
attr EnO_FEFA7CE5 userReadings Status { ReadingsVal($name,"state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status 0") : fhem("setreading EnO_01879635 Status 3;;sleep 20;;setreading EnO_01879635 Status 1") }
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 24 März 2021, 19:05:36
Das hatte ich auch schon versucht. Dann wird folgendes in das Reading geschrieben:
3;sleep 20;setreading EnO_01879635 Status 1
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: TomLee am 24 März 2021, 19:21:29
Bei mir klappt das setreading (in ein anderes Device, wie du es machst) genauso wie du es als erstes gezeigt hast mit nur einem ;

was { ReadingsVal($name,"state",'0') eq "on" ? fhem("setreading Pflanze1 test 0") : fhem("setreading Pflanze1 test 3;sleep 8;setreading Pflanze1 test 2") }

Zeig doch einfach mal ein List, vlt. entgeht dir irgendwas.
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 24 März 2021, 19:50:01
Am Besten lists von beiden Devices!
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 24 März 2021, 19:58:55
In diesem Device soll das Reading ,,Status" gesetzt werden:
Internals:
   DEF        01879635
   ESP3_DestinationID FFFFFFFF
   ESP3_MSGCNT 13
   ESP3_PacketType 1
   ESP3_RSSI  -91
   ESP3_ReceivingQuality bad
   ESP3_RepeatingCounter 0
   ESP3_SubTelNum 3
   ESP3_TIME  2021-03-24 19:10:28
   FGW14_USB_MSGCNT 10
   FGW14_USB_TIME 2021-03-24 19:10:28
   FUUID      602e83fa-f33f-e675-eb0b-4cbb533670b88559
   IODev      ESP3
   LASTInputDev ESP3
   MSGCNT     13
   NAME       EnO_01879635
   NR         361
   NTFY_ORDER 50-EnO_01879635
   STATE      3;sleep 20;setreading EnO_01879635 Status 1
   TYPE       EnOcean
   CHANGED:
     Status: 3;sleep 20;setreading EnO_01879635 Status 1
   READINGS:
     2021-03-24 19:10:28   Status          3;sleep 20;setreading EnO_01879635 Status 1
     2021-03-24 19:10:28   buttons         pressed
     2021-03-24 19:10:28   channelB        BI
     2021-03-24 19:10:28   state           BI
   helper:
Attributes:
   IODev      ESP3
   alias      Garagentor
   devStateIcon open:fts_garage closed:fts_garage_door_100
   eventMap   on-for-timer:on-for-timer BI:off B0:on
   genericDeviceType garage
   group      Schaltaktor FSR61/8-24V UC
   homebridgeMapping CurrentDoorState=Status,values=1:CLOSED;0:OPEN TargetDoorState=Status,values=1:CLOSED;0:OPEN,cmds=OPEN:on;CLOSED:on
   icon       fts_garage
   manufID    00D
   room       Garage,Homekit,Schaltschrank
   stateFormat {ReadingsVal("EnO_01879635","Status",0)}
   subDef     FFD6FC81
   subType    switch
   switchMode pushbutton
   webCmd     :


dieses Device soll über das Attribut usereadings beim obigen Device das Reading ,,Status" setzen:

Internals:
   DEF        FEFA7CE5
   ESP3_DestinationID FFFFFFFF
   ESP3_MSGCNT 4
   ESP3_PacketType 1
   ESP3_RSSI  -85
   ESP3_ReceivingQuality good
   ESP3_RepeatingCounter 0
   ESP3_SubTelNum 3
   ESP3_TIME  2021-03-24 19:10:28
   FGW14_USB_MSGCNT 4
   FGW14_USB_TIME 2021-03-24 19:10:28
   FUUID      5c473d3a-f33f-e675-bdcb-dc8782697288bbe9
   IODev      ESP3
   LASTInputDev ESP3
   MSGCNT     4
   NAME       EnO_FEFA7CE5
   NR         600
   NTFY_ORDER 50-EnO_FEFA7CE5
   STATE      geschlossen
   TYPE       EnOcean
   OLDREADINGS:
   READINGS:
     2021-03-24 19:10:28   buttons         released
     2021-03-24 19:10:28   state           released
     2018-07-11 20:36:37   teach           RPS teach-in accepted EEP F6-10-00 Manufacturer: no ID
   helper:
Attributes:
   IODev      ESP3
   alias      Garagentor Sensor oben
   eep        F6-10-00
   eventMap   pressed:offen released:geschlossen
   manufID    00D
   model      Eltako_FTS12
   room       Garage
   stateFormat { if(ReadingsVal("EnO_FEFA7CE5","state",0) eq "pressed") {return "offen";} else {return "geschlossen";} }
   subType    switch
   teachMethod RPS
   userReadings Status { ReadingsVal($name,"state",0) eq "pressed" ? fhem("setreading EnO_01879635 Status 0") : fhem("setreading EnO_01879635 Status 3;sleep 20;setreading EnO_01879635 Status 1") }
   webCmd     :
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 24 März 2021, 20:14:25
zwei semikolon sind im List /DEF definitiv falsch!
Ich hatte von der Kommandozeile gesprochen!
Geht kürzer:
stateFormat Status
Zwei ee aber nur ein Semikolon ?
Zitat2021-03-24 09:53:48   Status          Unknown command slep, try help.
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Cybers am 24 März 2021, 20:35:36
das eine fehlende ,,e" war ein anfänglicher Schreibfehler. Da kam auch noch das Reading her. Ich habe in meinem letzten Post ein paar Dinge geändert. Vielleicht schaust du da noch mal rein. Mit einem ,,;" hatte ich ja auch schon, klapp leider nicht. Sleep wir nicht ausgeführt. Die Beiden Werte ,,3" und ,,1" werden direkt nacheinander gesetzt.
Titel: Antw:Problem bei userReadings / Trigger
Beitrag von: Otto123 am 24 März 2021, 21:08:16
Damit es Prinzipiell nachgestellt werden kann:
defmod D1 dummy
attr D1 room TestD
attr D1 stateFormat Status

defmod D2 dummy
attr D2 room TestD
attr D2 setList pressed no
attr D2 userReadings Status { ReadingsVal($name,"state",0) eq "pressed" ? fhem("setreading D1 Status 0") : fhem("setreading D1 Status 3;;sleep 5;;setreading D1 Status 1") }

Was nicht schön ist:
userReadings Status hat keinen Trigger! Wird also einfach bei jedem Event getriggert! Weiß nicht ob daher das Problem kommt?
Es wird state verwendet, state kommt im Event nicht vor und kann deshalb nicht als Trigger verwendet werden.

Ich hatte schon empfohlen:
attr userReadings Status:buttons:.pressed ...
Versuch es damit. ;)