DOIF auf timestamp-Änderung triggern?

Begonnen von joginet, 20 März 2018, 15:34:36

Vorheriges Thema - Nächstes Thema

joginet

Moin Forum,

ich habe eine - vermutlich dumme - DOIF Frage. Ich bastele an meiner Sprachsteuerung per Arduino und MOVI-Shield.
Für meine Squeezebox-Player möchte ich einen Sprach-Befehl "Volume Up" oder "Volume Down" verwenden.

Das klappt auch und ich kann mit einem DOIF auf das vom Arduino ausgelöste Event ("#74") triggern:

define KuecheVolume DOIF ([myArduino1:"#74"])(set Kueche volumeUp)

Die Lautstärke wird in 10er-Schritten angehoben. Das Problem ist, ich kann das nur einmal machen.
Wenn ich den Befehl wiederhole (um lauter zu werden) gibt es das selbe Event ("#74") und das DOIF löst nicht aus.
Nur der timestamp ändert sich.

Kann ich  mein DOIF bei gleichem Event mit geändertem timestamp auslösen?

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

nils_

schau dir mal das attribut "do always" an.
viele Wege in FHEM es gibt!

joginet

Moin,

"do always" ist gesetzt. Passiert aber nix, nur bei event-Änderung.
Gleiches Event --> DOIF bleibt still.

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

Otto123

Hallo Jochen,

dann mach doch ein notify, ohne viel schnick schnack  :D
defmod KuecheVolume notify myArduino1:#74 set Kueche volumeUp

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

joginet

Mmm - das notify triggert gar nicht. Ist das Problem eventuell, das ich den state "#74" mit

attr myArduino1 stateFormat { ReadingsVal("myArduino1","UNKNOWNCODE MOVIEvent[202]",0);; }

künstlich herbeiführe? (#74 ist die Satznummer des Movi-Shields)

Mit DOIF ist's kein Problem - halt nur bei sich änderndem event...

Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

Otto123

#5
Da empfehle ich den den Eventmonitor
Und dann Gerät anlegen lassen  8)

DOIF triggert mit "#74" auf irgendwas mit #74 drin, notify macht es genauer.

stateFormat ändert das Internal STATE und nicht das Reading state!

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

joginet

Ok, evt. habe ich ein Verständnisproblem.
"myArduino1"  ist ein ("Pseudo")-Jeelink-Device, das bekommt seine Daten via FHEM2FHEM:

https://forum.fhem.de/index.php/topic,83787.msg764246.html#msg764246

Ich habe mal einen Screenshot der relevanten Readings dieses Devices angehängt.

Alle meine Befehle reagieren mit DOIF (und  stateFormat) auf das sich ändernde Reading in der Form:

define LampeAn DOIF ([myArduino1:"#23"])(set Lampe on)

Geht super, aber wie gesagt nur bei sich ändernder Satznummer.

Wie würde ich denn die im Bild angezeigten Readings in einem Notify berücksichtigen?

Und nochmal die Frage: kann DOIF (oder notify) sowas wie: "wenn reading gleichbleibend und timestamp anders, dann mach das nochmal" ?
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

Otto123

Sorry, mit dem Bild kann ich nix anfangen.
Ein list myArduino1würde eventuell helfen.

DOIF in der hier gezeigten Form macht laut Doku dies hier
ZitatEine Alternative zur Auswertung von Status oder Readings ist das Auswerten von Ereignissen (Events) mit Hilfe von regulären Ausdrücken. Der Suchstring wird als regulärer Ausdruck in Anführungszeichen angegeben. Die Syntax lautet: [<devicename>:"<regex>"]

Was bei Dir wirklich an Events kommt siehst Du im Event Monitor, was dort nicht kommt existiert nicht.

Ein notify reagiert nur auf Events, und zwar exakt auf die die man im regEx angibt.

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

joginet

Hier das Ergebnis von "list myArduino1" (auf den Kram von heute beschnitten):

Internals:
   CHANGED
   Clients    :PCA301:EC3000:RoomNode:LaCrosse:ETH200comfort:CUL_IR:HX2272:FS20:AliRF:Level:EMT7110:KeyValueProtocol
   DEF        /tmp/jdummy@directio
   DeviceName /tmp/jdummy@directio
   NAME       myArduino1
   NR         1345
   PARTIAL
   STATE      #74
   TYPE       JeeLink
   Matchlist:
     1:PCA301   ^\S+\s+24
     2:EC3000   ^\S+\s+22
     3:RoomNode ^\S+\s+11
     4:LaCrosse ^(\S+\s+9 |OK\sWS\s)
     5:AliRF    ^\S+\s+5
     6:EMT7110  ^OK\sEMT7110\s
     7:KeyValueProtocol ^OK\sVALUES\s
   Readings:
     
     2018-03-20 17:27:24   UNKNOWNCODE MOVIEvent[140] ACTIVELISTEN
     2018-03-20 17:27:27   UNKNOWNCODE MOVIEvent[141] END ACTIVELISTEN
     2018-03-20 17:27:32   UNKNOWNCODE MOVIEvent[150] SPEAKING
     2018-03-20 17:27:32   UNKNOWNCODE MOVIEvent[151] END SPEAKING
     2018-03-20 17:27:24   UNKNOWNCODE MOVIEvent[200] CALLSIGN DETECTED
     2018-03-20 17:27:28   UNKNOWNCODE MOVIEvent[201] I KITCHEN VOLUME UP
     2018-03-20 17:27:28   UNKNOWNCODE MOVIEvent[202] #74
         
Attributes:
   event-on-change-reading .*
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   room       movi
   stateFormat { ReadingsVal("myArduino1","UNKNOWNCODE MOVIEvent[202]",0);; }
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

TomLee

ZitatUnd nochmal die Frage: kann DOIF (oder notify) sowas wie: "wenn reading gleichbleibend und timestamp anders, dann mach das nochmal" ?

Das hatte ich die Tage auch gerade und wenn ich dich richtig verstehe fehlt bei deinem ersten DOIF nur ein :


attr KuecheVolume checkReadingEvent 1


Gruß

Thomas

joginet

ZitatDOIF in der hier gezeigten Form macht laut Doku dies hier
Zitat

    Eine Alternative zur Auswertung von Status oder Readings ist das Auswerten von Ereignissen (Events) mit Hilfe von regulären Ausdrücken. Der Suchstring wird als regulärer Ausdruck in Anführungszeichen angegeben. Die Syntax lautet: [<devicename>:"<regex>"]


Genau - das ist mir bekannt. Ich kann z.B. auch auf RAW-Messages triggern z.B.:

define forecast_act DOIF ([myArduino1:&RAWMSG] =~ "wetter") (set wetterdummy on)

Ich könnte auch auf  "VOLUME UP" (so steht es im Event-Monitor) reagieren, es ändert nur nichts.

Das Event bleibt ja gleichlautend (Volume Up, Volume Up) und das DOIF bleibt still.
Dazwischen ein "Lampe an" (#23) und ich kann wieder ein "Volume UP" (#74) machen.  :)

Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

ZitatDas hatte ich die Tage auch gerade und wenn ich dich richtig verstehe fehlt bei deinem ersten DOIF nur ein :


Code: [Auswählen]

attr KuecheVolume checkReadingEvent 1

Hab's gerade probiert, das ändert leider nichts.
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

Otto123

ok, da hilft nur der Eventmonitor,
Wie im Link beschrieben:
Erzeuge den Event mit #74, markiere den Event und lass Dir ein notify erzeugen.

So würde ich zumindest vorgehen...

Gruß Otto

P.S. ich denke dein STATE (stateFormat) erzeugt keinen neuen Event mit #74 weil sich das Reading nicht ändert (event-on-change-reading)
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

joginet

Hallo Otto,
aaaaah - jetzt habe ich auch begriffen, wie Du das meinst:

ZitatDa empfehle ich den den Eventmonitor
Und dann Gerät anlegen lassen  8)

Sorry, lange Leitung - ich wusste gar nicht, dass das geht. Muß jetzt erstmal "außer Haus", poste aber kurzfristig das Ergebnis.
Erstmal schonmal Danke!

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

joginet

So, da bin ich wieder.
In meinem Event-Monitor kann ich den button "create device" nicht finden (siehe Foto).
Ich kann aber ein Device vorher anlegen und dafür dann ein "addRegexpPart" machen.
Das so erstellte notify funktioniert aber genausowenig.

Ist mein Event-Monitor evt. nicht aktuell? Sooo alt ist meine FHEM-Installation auf dem NUC nicht...

Gruß, Jochen
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi