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

Otto123

Der Eventmonitor hat dieses Feature vielleicht seit einem Jahr?

Dann zeig doch mal die Events wo #74 vorkommt.

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

#16
Otto - hat sich soeben erledigt...
Man kann ruhig doof sein, man muß sich nur zu helfen wissen.  8)

Ich habe es den Arduino regeln lassen.
Ich gebe einfach eine Zeile über die serielle Schnittstelle aus, auf die getriggert werden kann.
Danach schreibe ich direkt nochmal etwas anderes über seriell.
So sieht es im Arduino-Sketch aus:

if (res==75) {                    // Sentence 74
    digitalWrite(led, HIGH);       
    recognizer.say("Volume goes up!");
    Serial.println("up_on");
    Serial.println("up_off");
    delay(3000);
    digitalWrite(led, LOW);
  }
   if (res==76) {                    // Sentence 75
    digitalWrite(led, HIGH);       
    recognizer.say("Volume goes down!");
    Serial.println("down_on");
    Serial.println("down_off");
    delay(3000);
    digitalWrite(led, LOW);
  }


jetzt triggert mein DOIF auf den state, nicht auf den STATE (richtig so?):

define KuecheVolume DOIF([myArduino1:state] eq "UNKNOWNCODE up_on") (set Kueche volumeUp)

Und weil direkt danach auf "UNKNOWNCODE up_off" gewechselt wird, ist das DOIF sofort wieder bereit für das nächste "Volume up".

Trotzdem wäre es interessant zu wissen, ob der timestamp als DOIF-trigger verwendet werden kann.

Erstmal Danke und Gruß, Jochen

Achso: PS - kann ich den Eventmonitor einzelnd updaten? Ich kann das Modul irgendwie nicht finden. Vor einen kompletten FHEM-Update habe ich großen Respekt, das hat mir schonmal einiges zerhagelt. Dafür ist mein setup inzwischen zu komplex  ;D
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

Zitat von: joginet am 20 März 2018, 21:46:46
Achso: PS - kann ich den Eventmonitor einzelnd updaten? Ich kann das Modul irgendwie nicht finden. Vor einen kompletten FHEM-Update habe ich großen Respekt, das hat mir schonmal einiges zerhagelt. Dafür ist mein setup inzwischen zu komplex  ;D
Nein. Von solchen Einzel Updates wird dringend abgeraten.

Aber es gibt backup  ;D

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

Ich weiss.  8)
Und mein Backup ist sogar einigermaßen aktuell  ;D
Ich werde beizeiten mal upgraden, die Möglichkeit der direkten "device-Erzeugung" war mir nicht bekannt und klingt sehr interessant & zeitsparend...

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

Damian

Zitat von: joginet am 20 März 2018, 15:34:36
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

Das ist ein Fall für DOIF-Perl, dort kann man einen Timer setzen, auf den man selbst reagiert, seine Aktion ausführt (hier Lautstärke erhöhen), einen Zähler erhöht und wieder einen einen Timer setzt. Das Ganze wiederholt man bis eine bestimmte Bedingung erfüllt ist. Ist eine Sache von ein paar Zeilen.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

joginet

Hallo Damian,

sowas ähnliches hatte ich mir schon gedacht. Ich werde das "for future use" im Hinterkopf behalten.
Im Moment bin ich zufrieden - alles läuft wie gewünscht.

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