[erneut gelöst] Befehl solange wiederholen wie Bedingung zutrifft

Begonnen von accessburn, 14 Juni 2017, 19:06:07

Vorheriges Thema - Nächstes Thema

accessburn

Funktioniert nicht so ganz:

Bei jedem zweiten Aufruf wird T_empRGB mit der aktuellen Farbe überschrieben, das reading müsste also gesetzt werden ohne das es bei jedem Blinkvorgang wieder neu geschrieben wird.
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Per

([Fritzboxanrufe:event] eq "ring") (setreading $SELF T_empRGB [LEDcontrol:RGB];set $SELF cmd_2)
DOELSIF (0) (set LEDcontrol RGB FF0000) (set LEDcontrol RGB 000000)
DOELSEIF ([Fritzboxanrufe:event] ne "ring") (set LEDcontrol RGB [$SELF:T_empRGB])


und
attr Fritzboxanrufe event-on-change-reading .*


accessburn

Okay, abgesehen davon das jetzt überhaupt nichts mehr geht verstehe ich davon kein Wort mehr  :'(


Hier mal der aktuelle Zwischenstand:
ZitatInternals:
   DEF        ([Fritzboxanrufe:event] eq "ring") (setreading $SELF T_empRGB [LEDcontrol:RGB]; set $SELF cmd_2)
DOELSEIF (0) (set LEDcontrol RGB FF0000) (set LEDcontrol RGB 000000)
DOELSEIF ([Fritzboxanrufe:event] ne "ring") (set LEDcontrol RGB [$SELF:T_empRGB])
   NAME       Anruf_blink
   NR         470
   NTFY_ORDER 50-Anruf_blink
   STATE      cmd_3
   TYPE       DOIF
   READINGS:
     2017-07-25 14:57:38   Device          Fritzboxanrufe
     2017-07-25 14:57:37   T_empRGB        000000
     2017-07-25 14:57:38   cmd             3
     2017-07-25 14:57:38   cmd_event       Fritzboxanrufe
     2017-07-25 14:57:38   cmd_nr          3
     2017-07-25 14:57:38   e_Fritzboxanrufe_event connect
     2017-07-25 14:57:38   state           cmd_3
     2017-07-25 14:57:38   wait_timer      no timer
   condition:
     0          ReadingValDoIf($hash,'Fritzboxanrufe','event') eq "ring"
     1          0
     2          ReadingValDoIf($hash,'Fritzboxanrufe','event') ne "ring"
   devices:
     0           Fritzboxanrufe
     2           Fritzboxanrufe
     all         Fritzboxanrufe
   do:
     0:
       0          setreading Anruf_blink T_empRGB [LEDcontrol:RGB]; set Anruf_blink cmd_2
     1:
       0          set LEDcontrol RGB FF0000
       1          set LEDcontrol RGB 000000
     2:
       0          set LEDcontrol RGB [Anruf_blink:T_empRGB]
     3:
   helper:
     event      event: connect
     globalinit 1
     last_timer 0
     sleepdevice Fritzboxanrufe
     sleepsubtimer 0
     sleeptimer -1
     timerdev   Fritzboxanrufe
     timerevent event: connect
     triggerDev Fritzboxanrufe
     timerevents:
       event: connect
     timereventsState:
       event: connect
     triggerEvents:
       event: connect
     triggerEventsState:
       event: connect
   internals:
   itimer:
   readings:
     0           Fritzboxanrufe:event
     2           Fritzboxanrufe:event
     all         Fritzboxanrufe:event
   regexp:
     0:
     1:
     2:
     all:
   state:
     STATE:
   trigger:
Attributes:
   repeatcmd  1
   wait       1,1


Ich tendiere dazu das es wait ist, aber 1,1:1,1 ist schon mal falsch.
Bei der aktuellen Konfiguration geht das Licht beim anruf einfach aus und ende.
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Per

Zitat von: accessburn am 25 Juli 2017, 14:59:06Ich tendiere dazu das es wait ist, aber 1,1:1,1 ist schon mal falsch.
Ja.
wait 0:1,1:0
repeatcmd  1:1:1
repeatsame 1:0:1

Alle drei Attribute beziehen sich auf den jeweiligen DO-Fall.

Ellert

#34
Zitat von: accessburn am 25 Juli 2017, 13:02:51
Funktioniert nicht so ganz:

Bei jedem zweiten Aufruf wird T_empRGB mit der aktuellen Farbe überschrieben, das reading müsste also gesetzt werden ohne das es bei jedem Blinkvorgang wieder neu geschrieben wird.
Ich hatte repeatcmd übersehen.

Statt
(setreading $SELF T_empRGB [LEDcontrol:RGB], set LEDcontrol RGB FF0000)
etwa so
(IF (ReadingsAge("LEDcontrol","RGB",0) > 5) (setreading $SELF T_empRGB [LEDcontrol:RGB]), set LEDcontrol RGB FF0000)

accessburn

Sorry, aber das klappt auch nicht. Weder blinkt es, noch wird T_empRGB auf die Ursprungsfarbe geschrieben sondern ändert sich im zwei Sekundentakt. Ich bin mit meiner Pseudo-Weißheit am Ende.
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Ellert

Zitat von: accessburn am 25 Juli 2017, 16:26:32
Sorry, aber das klappt auch nicht. Weder blinkt es, noch wird T_empRGB auf die Ursprungsfarbe geschrieben sondern ändert sich im zwei Sekundentakt. Ich bin mit meiner Pseudo-Weißheit am Ende.
Hast Du alles richtig geschrieben?
Stimmen alle Klammern?
Ändert sich der Zeitsempel von LEDcontrol:RGB?
Gibt es Fehlermelungen?
Leider wird das Listing nicht angezeigt!

Damian

Zitat von: accessburn am 25 Juli 2017, 16:26:32
Sorry, aber das klappt auch nicht. Weder blinkt es, noch wird T_empRGB auf die Ursprungsfarbe geschrieben sondern ändert sich im zwei Sekundentakt. Ich bin mit meiner Pseudo-Weißheit am Ende.


Dann wird es langsam Zeit für eine funktionsfähige Lösung:

   
([Fritzboxanrufe:event] eq "ring") (setreading $SELF zustand [LEDcontrol:RGB], set LEDcontrol RGB FF0000)
DOELSEIF ([$SELF] =~ "cmd_1|cmd_3") (set LEDcontrol RGB 000000)
DOELSEIF ([$SELF] eq "cmd_2") (set LEDcontrol RGB FF0000)
DOELSEIF ([Fritzboxanrufe:event] ne "ring") (set LEDcontrol RGB [$SELF:zustand])

attr selftrigger all
attr wait 0:1:1


Ich gehe davon aus, dass im Reading RGB bei LEDcontrol der aktuelle Zustand (FF0000 bzw. 00000) steht.

P.S. repeadcmd hat mit Selbsttriggerung offenbar noch Probleme
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#38
Ich habe repeatcmd gefixed.

([Fritzboxanrufe:event] eq "ring") (setreading $SELF zustand [LEDcontrol:RGB])
DOELSEIF ([$SELF:state] eq "cmd_1") (set LEDcontrol RGB 000000) (set LEDcontrol RGB FF0000)
DOELSEIF ([Fritzboxanrufe:event] ne "ring") (set LEDcontrol RGB [$SELF:zustand])

attr selftrigger all
attr wait 0:0,1
attr repeatcmd 0:1
attr checkReadingEvent 1



Übersetzt bedeutet das: wenn es klingelt:[Fritzboxanrufe:event] eq "ring" merke Zustand von [LEDcontrol:RGB] ->Übergang in den zweiten DO-Fall:[$SELF:state] eq "cmd_1"-> wiederhole an,aus bis dritter DO-Fall eintritt: [Fritzboxanrufe:event] ne "ring" -> setze auf den gemerkten Zustand zurück

Ab morgen per Update verfügbar oder sofort unter : https://svn.fhem.de/trac/browser/trunk/fhem/FHEM?order=date&desc=1
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

accessburn

Mein Held, mein Held  ;D

Es geht... Kann ich das trotzdem so lassen nach dem Update? Denn es funktioniert perfekt :-)
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Damian

Zitat von: accessburn am 26 Juli 2017, 13:28:16
Mein Held, mein Held  ;D

Es geht... Kann ich das trotzdem so lassen nach dem Update? Denn es funktioniert perfekt :-)

Ja. Nach dem Update werden beide Versionen funktionieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF