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
"set... state" kann man nicht machen. Es heisst
set Dummy_Klingel_Aktiv on
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?
Im DOIF ist das Komma der Befehlstrenner und nicht das Semikolon.
https://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil
Gruß Otto
Ahja, das hatte ich auch übersehen: laut DOIF Syntax muss man die Befehle mi Koma trennen, nicht mit (doppel)semikolon
Otto war schneller ;)
Man kann übrigens auch state am Dummy setzen, braucht dann aber eine passende readingList...
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...
zwei paar Schuhe ???
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 ;)
Ich habe zum Test natürlich die Zeiten immer angepasst... aber es hatte einfach nicht funktioniert... egal, jetzt geht es!
Vorschlag:
defmod Doif_Klingel_Aus_Nachts DOIF ([07:30]) (set Dummy_Klingel_Aktiv on)
DOELSEIF ([20:00]) (set Dummy_Klingel_Aktiv off)
Das sieht tatsächlich mach einer anderen Variante aus... teste ich heute Abend auch nochmal...
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!
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 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
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
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.
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
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..
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
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
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...