Wert eines Status-Events passt nicht zum Status

Begonnen von juemuc, 30 April 2017, 20:15:40

Vorheriges Thema - Nächstes Thema

juemuc

Hallo,

hier kann sehr schön erkennen, dass um 21:22:45 das DOIF den Wert running und das Device den Wert done bekommen hat.

defmod Waschmaschine.Fertig.DOIF DOIF ([Waschmaschine:state] eq 'done') \
(set Sonos_Buero:FILTER=state=appeared Speak 25 de \
    'Die Waschmaschine ist fertig!')
attr Waschmaschine.Fertig.DOIF do always
attr Waschmaschine.Fertig.DOIF wait 180

setstate Waschmaschine.Fertig.DOIF initialized
setstate Waschmaschine.Fertig.DOIF 2017-05-01 21:22:45 Device Waschmaschine
setstate Waschmaschine.Fertig.DOIF 2017-04-30 22:39:23 cmd 0
setstate Waschmaschine.Fertig.DOIF 2017-05-01 21:22:45 e_Waschmaschine_state running
setstate Waschmaschine.Fertig.DOIF 2017-04-30 22:39:23 state initialized

defmod Waschmaschine dummy
attr Waschmaschine userattr configPowerDone
attr Waschmaschine configPowerDone 3.00
attr Waschmaschine devStateIcon Aus:general_aus@black An:scene_washing_machine@red
attr Waschmaschine devStateStyle style="text-align:right"
attr Waschmaschine event-on-change-reading .*
attr Waschmaschine group Statusinformationen
attr Waschmaschine icon scene_washing_machine@black
attr Waschmaschine room Bad,Statuszentrale
attr Waschmaschine sortby 0,5
attr Waschmaschine stateFormat { my $state = ReadingsVal($name, "state", "");; my $power = ReadingsVal($name, "power", "");; if($state eq 'on') { "An" } elsif($state eq "done") { "Fertig" } elsif($state eq "running") { "waschmaschine_03 ($power W)" } else { "Aus" } }

setstate Waschmaschine Fertig
setstate Waschmaschine 2017-05-01 21:22:45 power 1.28
setstate Waschmaschine 2017-05-01 21:22:45 state done


VG
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

KernSani

bitte ein list, d.h. list Waschmaschine.Fertig.DOIF in die Kommandozeile eingeben.

Ansonsten denke ich auch (wie von Thorsten schon gesagt) du solltest mal 
([Waschmaschine] eq 'done')
verwenden
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

juemuc

Hallo,

anbei die Info. Allerdings hat die Waschmaschine den aktuell den Status off/Aus.

Internals:
   DEF        ([Waschmaschine:state] eq 'done')
(set Sonos_Buero:FILTER=state=appeared Speak 25 de
    'Die Waschmaschine ist fertig!')
   NAME       Waschmaschine.Fertig.DOIF
   NR         135
   NTFY_ORDER 50-Waschmaschine.Fertig.DOIF
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-01 21:28:45   Device          Waschmaschine
     2017-05-01 21:31:45   cmd             1
     2017-05-01 21:31:45   cmd_event       Waschmaschine
     2017-05-01 21:31:45   cmd_nr          1
     2017-05-01 21:28:45   e_Waschmaschine_state done
     2017-05-01 21:31:45   state           cmd_1
     2017-05-01 21:31:45   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'Waschmaschine','state') eq 'done'
   Devices:
     0           Waschmaschine
     all         Waschmaschine
   Do:
     0:
       0          set Sonos_Buero:FILTER=state=appeared Speak 25 de      'Die Waschmaschine ist fertig!'
     1:
   Helper:
     event      power: 0.00
     globalinit 1
     last_timer 0
     sleepdevice Waschmaschine
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Waschmaschine
     timerevent power: 0.00
     triggerDev Waschmaschine
     timerevents:
       power: 0.00
       off
     timereventsState:
       power: 0.00
       off
     triggerEvents:
       power: 0.00
       off
     triggerEventsState:
       power: 0.00
       off
   Internals:
   Itimer:
   Readings:
     0           Waschmaschine:state
     all         Waschmaschine:state
   Regexp:
     0:
     All:
   State:
     State:
   Trigger:
Attributes:
   do         always
   wait       180 


Die Tipps von Thorsten habe ich schon ohne Erfolg ausprobiert. Das notify funktioniert auch nur mit

define Waschmaschine.Fertig.notify notify Waschmaschine:.* Weder done noch Fertig anstatt des * funktioniert.

VG
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Thorsten Pferdekaemper

Zitat von: juemuc am 01 Mai 2017, 22:13:38
define Waschmaschine.Fertig.notify notify Waschmaschine:.* Weder done noch Fertig anstatt des * funktioniert.
Auch nicht das?
define Waschmaschine.Fertig.notify notify Waschmaschine:done
...also ohne den Punkt.
Gruß,
   Thorsten
FUIP

KernSani

das "list" ist natürlich nur interessant, wenn das DOIF gerade nicht macht, was es soll...

Schalte mal deinen Dummy manuell und gucke im Event-Monitor, was da ankommt.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

juemuc

Ich werde wohl auf das 3. DOIF verzichten und das 2. DOIF ausbauen. ICh muss hier nur noch den sleep-befehl vernünftig einbauen.
DOELSEIF \
([Waschmaschine:power] <= AttrVal("Waschmaschine", \
                           "configPowerDone", 3) and \
  [Waschmaschine:state] eq 'running') \
(set Waschmaschine done,\
  IF ([Waschmaschine:state] eq "done") \
    (set Sonos_Buero:FILTER=state=appeared Speak 5 de \
        'Die Waschmaschine ist fertig!'))


(set Waschmaschine done,\
  sleep 180,\
  IF ([Waschmaschine:state] eq "done") \
    (set Sonos_Buero:FILTER=state=appeared Speak 5 de \
        'Die Waschmaschine ist fertig!')

blockiert fhem für 3 Minuten.

VG
juemuc

PS.: Mehr leider erst wieder am nächsten WE. Vorerst Danke für Eure Unterstützung.
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

KernSani

#21
du kannst das auch ohne sleep lösen :

(
    (set Waschmaschine done)
    (IF ([Waschmaschine:state] eq "done") \
          (set Sonos_Buero:FILTER=state=appeared Speak 5 de \
           'Die Waschmaschine ist fertig!')
     )
)

mit wait 0,180

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Thorsten Pferdekaemper

Zitat von: juemuc am 01 Mai 2017, 22:45:41blockiert fhem für 3 Minuten.
In meinem notify-Beispiel blockiert das sleep nicht. Ich finde es etwas seltsam, wenn es im DOIF blockiert.
@Damian: ??
Gruß,
   Thorsten
FUIP

Damian

Sleep blockiert auch beim IF und DOIF nicht, wenn man es "richtig" angibt. Die Sache ist aber historisch bedingt nicht einheitlich geregelt.

Beim DOIF kann man auch mit Semikolons als Trennzeichen arbeiten, daher reicht hinter Sleep ein Semikolon als Trennzeichen. Ein Sleep mit Komma dahinter blockiert bei DOIF.

IF kann nicht mit Semikolons als Trennzeichen arbeiten. Ich habe inzwischen aber eingebaut, dass beim IF ein Komma hinter einem Sleep nicht blockiert.



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

juemuc

Hallo Damian,

wie muss ich den hier den sleep-Befehl einbinden (nach dem set Waschmaschine done)?
DOELSEIF
([Waschmaschine:power] <= AttrVal("Waschmaschine",
                           "configPowerDone", 3) and
  [Waschmaschine:state] eq 'running')
(set Waschmaschine done,
  IF ([Waschmaschine:state] eq "done")
    (set Sonos_Buero:FILTER=state=appeared Speak 1 de
        'Die Waschmaschine ist fertig!'))


Wenn ich das Komma durch ein Semikolon ersetze, kommt die Fehlermeldung
Zitatset Waschmaschine done; IF (running eq "done") (set Sonos_Buero:FILTER=state=appeared Speak 1 de 'Die Waschmaschine ist fertig!'): Bareword "running" not allowed while "strict subs" in use at (eval 8138) line 1
Wenn ich aber kein Semikolon setze, blockiert der sleep-Befehl.

VG
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Damian

Zitat von: juemuc am 05 Mai 2017, 22:52:21
Hallo Damian,

wie muss ich den hier den sleep-Befehl einbinden (nach dem set Waschmaschine done)?
DOELSEIF
([Waschmaschine:power] <= AttrVal("Waschmaschine",
                           "configPowerDone", 3) and
  [Waschmaschine:state] eq 'running')
(set Waschmaschine done,
  IF ([Waschmaschine:state] eq "done")
    (set Sonos_Buero:FILTER=state=appeared Speak 1 de
        'Die Waschmaschine ist fertig!'))


Wenn ich das Komma durch ein Semikolon ersetze, kommt die Fehlermeldung Wenn ich aber kein Semikolon setze, blockiert der sleep-Befehl.

VG
juemuc

in dem Fall mit Befehlssequenzen mit wait arbeiten:

DOELSEIF
([Waschmaschine:power] <= AttrVal("Waschmaschine",
                           "configPowerDone", 3) and
  [Waschmaschine:state] eq 'running')
(set Waschmaschine done)
(IF ([Waschmaschine:state] eq "done")
    (set Sonos_Buero:FILTER=state=appeared Speak 1 de
        'Die Waschmaschine ist fertig!'))


wait 0,<Sekundenangabe>
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

juemuc

@Damian: Vielen Dank für Deinen Hinweis. Damit funktioniert es wie gewünscht und ich kann auf ein weiteres DOIF verzichten.

VG
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).