FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Nogga am 23 Oktober 2018, 21:44:54

Titel: Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 23 Oktober 2018, 21:44:54
Ich verstehe es nicht - ich stehe einfach auf dem Schlauch.
Ich habe folgendes Doif, dass zeitgesteuert einen Klingel-Dummy an und aus schaltet.
Das Doif löst aus und ich bekomme auch eine Push-Message, aber der Dummy schaltet nicht um?
Gebe ich das Dummy Command direkt in die Kommandozeile ein, schaltet sich der Dummy um.
Hat jemand eine Ahnung an was das liegt?

defmod Doif_Klingel_Aus_Nachts DOIF ([07:30-20:00]) \
(\
set Dummy_Klingel_Aktiv state on;; \
set pushmsg msg message='Klingel eingeschaltet' device='AlexPhone';;\
)\
DOELSE \
( \
set Dummy_Klingel_Aktiv state off;;\
set pushmsg msg message='Klingel ausgeschaltet' device='AlexPhone'\
)


Internals:
   CFGFN     
   NAME       Dummy_Klingel_Aktiv
   NR         1773
   STATE      state off
   TYPE       dummy
   READINGS:
     2018-10-23 21:36:00   state           state off
Attributes:
   group      Windfang
   room       Steuerung
   setList    on off
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: amenomade am 23 Oktober 2018, 21:50:49
"set... state" kann man nicht machen. Es heisst
set Dummy_Klingel_Aktiv on
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 23 Oktober 2018, 21:53:00
Entschuldige - das ist ein left-over.
Ich hatte es auch ohne state ausprobiert - ohne Erfolg.
Seltsamerweise erscheint aber auch nichts im Log über den Schaltbefehl?

Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Otto123 am 23 Oktober 2018, 21:55:27
Im DOIF ist das Komma der Befehlstrenner und nicht das Semikolon.
https://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil

Gruß Otto
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: amenomade am 23 Oktober 2018, 21:55:39
Ahja, das hatte ich auch übersehen: laut DOIF Syntax muss man die Befehle mi Koma trennen, nicht mit (doppel)semikolon

Otto war schneller ;)
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Beta-User am 23 Oktober 2018, 21:56:05
Man kann übrigens auch state am Dummy setzen, braucht dann aber eine passende readingList...
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 23 Oktober 2018, 22:01:44
Ich habs gefunden.
Er hat anscheinend die Statuswechsel nicht richtig interpretiert (ich weiß nicht, wie ich's besser ausdrücken soll).

Auf jeden Fall hilft ein do=always:

defmod Doif_Klingel_Aus_Nachts DOIF ([07:30-20:00]) \
(\
set Dummy_Klingel_Aktiv on\
)\
DOELSE \
( \
set Dummy_Klingel_Aktiv off\
)
attr Doif_Klingel_Aus_Nachts do always


Damit klappt es auch im manuell Fall:
1. In TabletUI/FHEMWEB Dummy an schalten
2. Nach 20:00 auf "checkall", dann switcht er den Dummy sauber um...
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Otto123 am 23 Oktober 2018, 22:10:28
zwei paar Schuhe ???
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Damian am 23 Oktober 2018, 22:40:52
Zitat von: Nogga am 23 Oktober 2018, 22:01:44
Ich habs gefunden.
Er hat anscheinend die Statuswechsel nicht richtig interpretiert (ich weiß nicht, wie ich's besser ausdrücken soll).

Auf jeden Fall hilft ein do=always:

defmod Doif_Klingel_Aus_Nachts DOIF ([07:30-20:00]) \
(\
set Dummy_Klingel_Aktiv on\
)\
DOELSE \
( \
set Dummy_Klingel_Aktiv off\
)
attr Doif_Klingel_Aus_Nachts do always


Damit klappt es auch im manuell Fall:
1. In TabletUI/FHEMWEB Dummy an schalten
2. Nach 20:00 auf "checkall", dann switcht er den Dummy sauber um...

Du musst nur geduldig sein. Deine Definition funktioniert auch ohne checkall und do always. Du hättest nur bis morgen warten müssen ;)
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 24 Oktober 2018, 08:09:10
Ich habe zum Test natürlich die Zeiten immer angepasst... aber es hatte einfach nicht funktioniert... egal, jetzt geht es!
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Frank_Huber am 24 Oktober 2018, 08:53:18
Vorschlag:
defmod Doif_Klingel_Aus_Nachts DOIF ([07:30]) (set Dummy_Klingel_Aktiv on)
DOELSEIF ([20:00]) (set Dummy_Klingel_Aktiv off)

Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 24 Oktober 2018, 08:57:53
Das sieht tatsächlich mach einer anderen Variante aus... teste ich heute Abend auch nochmal...
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Otto123 am 24 Oktober 2018, 09:00:28
Zitat von: Nogga am 24 Oktober 2018, 08:09:10
Ich habe zum Test natürlich die Zeiten immer angepasst... aber es hatte einfach nicht funktioniert... egal, jetzt geht es!
Aber wie schon gesagt, dein Ausgangskonstrukt war ein völlig anderes!
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 24 Oktober 2018, 09:11:42
Otto, ich kann dir leider nicht folgen.
Mein Ziel war es die Klingel zu einem Zeitpunkt aus und zu einem anderen wieder anzuschalten... was meinst du?
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Frank_Huber am 24 Oktober 2018, 09:31:17
Du könntest sogar auf den Dummy verzichten und das DOIF als Dummy nutzen.

defmod Doif_Klingel_Aktiv DOIF ([07:30]) () DOELSEIF ([20:00]) ()
attr Klingel_Aktiv cmdState on|off
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Otto123 am 24 Oktober 2018, 09:47:20
Zitat von: Nogga am 24 Oktober 2018, 09:11:42
Otto, ich kann dir leider nicht folgen.
Mein Ziel war es die Klingel zu einem Zeitpunkt aus und zu einem anderen wieder anzuschalten... was meinst du?
Du meinst es funktioniert weil du do always verwendet hast. Ich meine es funktioniert jetzt weil Du nicht mehr zwei Befehle mit Semikolon getrennt hintereinander schreibst - was bei DOIF falsch ist. ( Wobei sich das bei DOIF täglich ändern kann)

Dein erster Code wird so abgewandelt genauso funktionieren, ohne do always
defmod Doif_Klingel_Aus_Nachts DOIF ([07:30-20:00]) \
(set Dummy_Klingel_Aktiv on,set pushmsg msg message='Klingel eingeschaltet' device='AlexPhone')\
DOELSE \
(set Dummy_Klingel_Aktiv off,set pushmsg msg message='Klingel ausgeschaltet' device='AlexPhone')


Gruß Otto
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Per am 24 Oktober 2018, 11:01:04
Zitat von: Otto123 am 24 Oktober 2018, 09:47:20weil Du nicht mehr zwei Befehle mit Semikolon getrennt hintereinander schreibst - was bei DOIF falsch ist.
"Falsch" ist nicht ganz richtig, für DOIF ist das halt nur ein Befehl, welchen es am Stück an FHEM weiterreicht. Mit Komma sind es zwei Befehle, die einzeln weitergereicht werden. Die Frage ist eher: wieviele Semikolon müssen in welchem Editor zu sehen sein. Beim Komma ist es immer eins.
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Otto123 am 24 Oktober 2018, 11:10:09
Man kann jetzt über den Begriff "falsch" philosophieren - aber ich würde mich an die Doku halten. Da steht, für mich eindeutig
ZitatSollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)
Aber jeder ist frei und kann alles ausprobieren  ;D Auf die beschriebenen Features würde ich mich verlassen, auf die Beibehaltung von selbst ermittelten "Verhaltensweisen/Fehlern" (als Reaktion auf Versuch und Irrtum) in der weiteren Entwicklung nicht.

Ich wollte Nogga nur vor falschen Schlüssen bewahren, er hat drei Dinge geändert und für sich den "Fehler" (nicht wirklich) gefunden.  ;)

Gruß Otto
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 24 Oktober 2018, 11:29:13
Ok, jetzt verstehe ich den Kommentar.

Bevor ich hier poste probiere ich viele verschiedene Varianten aus.
Die Push-Message hatte ich erst eingebaut, nachdem der Dummy alleine nicht funktionierte. Die Pushmessage tat dies aber. Das brachte mich dann zum Schluß, dass was mit dem Dummy nicht stimmt.
Die Pushmessage wurde als zweiter Befehl mit Semikolon ausgeführt, sodass ich von einem richtig ausgegangen bin.
Mit do-always ging dann alles. Deswegen auch die Schlussfolgerung.

Ich probiere gerne heute abend nochmal Otto's Komma-Variante aus, aber die hatte bei meinen gestrigen Tests keinen Erfolg gebracht.

Ich nutze übrigens den Code-Editor innerhalb FHEM Web mit Syntax-Highligitung (CodeMirror). Der Copy&Paste von hier ist aus dem RAW-Editor..
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: abc2006 am 24 Oktober 2018, 12:18:06
Zitat von: Nogga am 24 Oktober 2018, 11:29:13
Ich nutze übrigens den Code-Editor innerhalb FHEM Web mit Syntax-Highligitung (CodeMirror). Der Copy&Paste von hier ist aus dem RAW-Editor..

Da empfehle ich ein "list <devicename>". Damit kann jeder was anfangen.. ;)

Grüße,
Stephan
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Nogga am 24 Oktober 2018, 21:02:38
Der Vollständigkeit halber:
- Ich habe Otto's Komma eingebaut
- ich bin auf die Variante mit DOELSE umgestiegen
- do always habe ich rausgeworfen
- ein list für alle Settings

...und ja es funktioniert. Keine Ahnung wieso die ähnliche Variante gestern nicht funktioniert hat...

Internals:
   CFGFN     
   DEF        ([07:30])
(
set Dummy_Klingel_Aktiv on,
set pushmsg msg message='Klingel eingeschaltet' device='AlexPhone'
)
DOELSEIF
([20:00])
(
set Dummy_Klingel_Aktiv off,
set pushmsg msg message='Klingel ausgeschaltet' device='AlexPhone'
)
   MODEL      FHEM
   NAME       Doif_Klingel_Aus_Nachts
   NR         1802
   NTFY_ORDER 50-Doif_Klingel_Aus_Nachts
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-10-24 20:49:25   cmd             0
     2018-10-24 20:49:25   mode            enabled
     2018-10-24 20:49:25   state           initialized
     2018-10-24 20:49:25   timer_01_c01    25.10.2018 07:30:00
     2018-10-24 20:49:25   timer_02_c02    25.10.2018 20:00:00
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          DOIF_time_once($hash,0,$wday)
     1          DOIF_time_once($hash,1,$wday)
   days:
   devices:
   do:
     0:
       0            set Dummy_Klingel_Aktiv on, set pushmsg msg message='Klingel eingeschaltet' device='AlexPhone'
     1:
       0            set Dummy_Klingel_Aktiv off, set pushmsg msg message='Klingel ausgeschaltet' device='AlexPhone'
     2:
   helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   intervalfunc:
   itimer:
   localtime:
     0          1540445400
     1          1540490400
   realtime:
     0          07:30:00
     1          20:00:00
   time:
     0          07:30:00
     1          20:00:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   triggertime:
     1540445400:
       localtime  1540445400
       hash:
     1540490400:
       localtime  1540490400
       hash:
   uiState:
   uiTable:
Attributes:
   group      Klingel
   room       Automatisierung
Titel: Antw:Zeitschaltung: Dummy schaltet sich nicht
Beitrag von: Per am 25 Oktober 2018, 11:07:30
Zitat von: Nogga am 24 Oktober 2018, 21:02:38Keine Ahnung wieso die ähnliche Variante gestern nicht funktioniert hat...
Das wirst du auch nicht erfahren, wenn du immer 20 Punkte gleichzeitig änderst...