Sorry für die evtl dumme Frage...
Das funktioniert (Licht geht / aus [Toggle halt...]):
ZitatEG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht toggle
Aber warum funktioniert im Moment das nicht ?
Zitat{\
if (EG.Kueche.Schalt.Btn1:short && $hour>=01 && $hour<19) {\
fhem("set EG.Kueche.Licht toggle")}\
}
...Wenn das funktioniert möchte ich anschliessend per "else" eine andere Lampe mit anderer Lichtfarbe schalten...
ed: jetzt funktioniert keine der Varianten mehr, und ich verstehe nicht warum. ((Die Lampe ist nicht mit der VCCU gepeert, müsste sie das sein ?))
ZitatInternals:
CFGFN
DEF EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht toggle
NAME EG.Kueche.Schalt.Btn1.ntfy
NOTIFYDEV EG.Kueche.Schalt.Btn1
NR 79901
NTFY_ORDER 50-EG.Kueche.Schalt.Btn1.ntfy
REGEXP EG.Kueche.Schalt.Btn1:short
STATE active
TYPE notify
Helper:
Dblog:
State:
Logdb:
TIME 1484655496.189
VALUE active
Readings:
2017-01-17 13:18:16 state active
Attributes:
room 0.00_EG,0.02_Kueche
$hour>=01 müsste sein $hour>=1
edit: einfacher wäre es natürlich ohne Zeitangabe und dafür ein
attr <Name> disabledForIntervalls 19:00-24:00 00:00-01:00
Danke,
aber vermutlich sollte ich erst mal wieder das zum Laufen bringen:
ZitatEG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht toggle
(Geht auch nicht mehr, auch nicht mit "Short" oder "on" beim Button)
Hier das Eventlog.
Zitat2017-01-17 13:36:51 CUL_HM EG.Kueche.Schalt.Btn1 Short (to vccu)
2017-01-17 13:36:51 CUL_HM EG.Kueche.Schalt.Btn1 trigger: Short_61
2017-01-17 13:36:51 CUL_HM EG.Kueche.Schalt.Btn1 trigger_cnt: 61
2017-01-17 13:36:51 CUL_HM Schalter_Kueche battery: ok
2017-01-17 13:36:51 CUL_HM Schalter_Kueche CMDs_done
2017-01-17 13:36:51 CUL_HM Schalter_Kueche EG.Kueche.Schalt.Btn1 Short
2017-01-17 13:36:51 CUL_HM vccu_Btn1 trigLast: EG.Kueche.Schalt.Btn1:short
2017-01-17 13:36:51 CUL_HM vccu_Btn1 trig_EG.Kueche.Schalt.Btn1: Short_61
Das alleine
EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht toggle
mach ja nichts, genaus wie
{\
if (EG.Kueche.Schalt.Btn1:short && $hour>=01 && $hour<19) {\
fhem("set EG.Kueche.Licht toggle")}\
}
alleine nichts macht. Das sind ja nur Fragmente eines defines.
Kannst du mal das GANZE posten?
Ferner: Devicenamen mit Punkt drin ist meiner Meinung nach keine gute Idee. In perl hat der Punkt eine Bedeutung, das kann schief gehen.
meinst Du sowas ?
Ende der fhem.cfg
Zitatdefine EG.Kueche.Schalt.Btn1.ntfy notify EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht on\
\
attr EG.Kueche.Schalt.Btn1.ntfy room 0.00_EG,0.02_Kueche
define vccu_Btn1 CUL_HM 30839301
attr vccu_Btn1 model CCU-FHEM
attr vccu_Btn1 peerIDs 2CC96301,
attr vccu_Btn1 room 8.00_Zentral
attr vccu_Btn1 webCmd press short:press long
oder eher ein "list EG.Kueche.Schalt.Btn1.ntfy"
ZitatInternals:
DEF EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht on
NAME EG.Kueche.Schalt.Btn1.ntfy
NOTIFYDEV EG.Kueche.Schalt.Btn1
NR 296
NTFY_ORDER 50-EG.Kueche.Schalt.Btn1.ntfy
REGEXP EG.Kueche.Schalt.Btn1:short
STATE active
TYPE notify
Helper:
Dblog:
State:
Logdb:
TIME 1484656596.87052
VALUE active
Readings:
2017-01-17 13:36:36 state active
Attributes:
room 0.00_EG,0.02_Kueche
Zitat Comandreff zu notify:
ZitatHinweise:
<Suchmuster> ist entweder der Name des auslösenden ("triggernden") Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event.
Das <Suchmuster> muss exakt (!) entweder dem Gerätenamen entsprechen oder der Zusammenfügung aus Gerätename:Event. Events lassen sich mit "inform" in Telnet oder durch Beobachtung des "Event-Monitors" in FHEMWEB ermitteln.
das EXAKT ist wichtig
das hier:
EG.Kueche.Schalt.Btn1:short
wird von keinem dieser Events getriggert:
2017-01-17 13:36:51 CUL_HM EG.Kueche.Schalt.Btn1 Short (to vccu)
2017-01-17 13:36:51 CUL_HM EG.Kueche.Schalt.Btn1 trigger: Short_61
2017-01-17 13:36:51 CUL_HM EG.Kueche.Schalt.Btn1 trigger_cnt: 61
2017-01-17 13:36:51 CUL_HM Schalter_Kueche battery: ok
2017-01-17 13:36:51 CUL_HM Schalter_Kueche CMDs_done
2017-01-17 13:36:51 CUL_HM Schalter_Kueche EG.Kueche.Schalt.Btn1 Short
2017-01-17 13:36:51 CUL_HM vccu_Btn1 trigLast: EG.Kueche.Schalt.Btn1:short
2017-01-17 13:36:51 CUL_HM vccu_Btn1 trig_EG.Kueche.Schalt.Btn1: Short_61
dann musst du schon ein:
EG.Kueche.Schalt.Btn1:Short.*
relativ ungenau - je nach events kann es zu einer mehrfachtriggerung bei einer Tasterbetätigung kommen.
oder
EG.Kueche.Schalt.Btn1:Short..to.vccu.
sehr genau
define EG.Kueche.Schalt.Btn1.ntfy notify EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht on
genau. Ich persönlich sehe immer gerne das komplette define, um zu verstehen was der Fragesteller machen will und nicht nur TEILE davon. Ansonsten: what automatisierer said.
Sieh hierzu auch hier:
https://wiki.fhem.de/wiki/Trick_der_Woche#Konfiguration_eines_FS20_Senders_pr.C3.BCfen
(da gehts um FS20, ist aber bei HM das gleiche Thema.)
P.S.:
Hierbei:
EG.Kueche.Schalt.Btn1:Short..to.vccu.
siehst du übrigens das Problem der Benamung mit Punkten: der Punkt hat eine Bedeutung und bei Operation in perl (die vielleicht mal verwenden willst oder auch nicht) kann das recht ... unübersichtlich werden. Daher verwenden die meisten in solchen Fällen lieber einen Unterstrich: EG_Kueche_Schalt_Btn1
dann erklären wir das doch auch direkt:
. (Punkt) Steht für ein beliebiges Zeichen - aber nicht für kein Zeichen!!...
* (Sternchen) Steht für eine beliebige Wiederholung des vorstehenden Zeichens - auch für keine Wiederholung...
somit bedeutet .* ein beliebiges Zeichen und keine bis unendlich viele beliebige Zeichen
Hi
Zitatdefine EG.Kueche.Schalt.Btn1.ntfy notify EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht on\
\
die beiden backslash gefallen mir gar nicht. Woher kommt sowas? >:( >:( >:(
Gibt es bei mir in der fhem.cfg so nicht!
Wir hatten letztens erst einen Fall, wo genau das der Fehler war. Das führt dann zu so was ->
ZitatInternals:
DEF EG.Kueche.Schalt.Btn1:short set EG.Kueche.Licht on
NAME EG.Kueche.Schalt.Btn1.ntfy
Man beachte den Zeilenabstand zwischen DEF und Name!
Aber das ist nur in Ergänzung meiner Vorredner.
Das mit den Punkten im Namen ist eher ein philosophisches Problem - ich mag es aber auch nicht. :-X
Gruß Otto
Danke an alle, mir gehts ja nicht nur um eine Lösung, sondern um zu lernen.
Zitatdie beiden backslash gefallen mir gar nicht. Woher kommt sowas?
Ich denke das könnte das von 2*CR (2* Enter Taste gedrückt) in der Definition kommen. Habe ich nun gelöscht.
Was bei mir im Moment funktioniert ist dieses:
Zitatdefine EG.Kueche.Schalt.Btn1.ntfy notify EG.Kueche.Schalt.Btn1:Short..to.vccu. set EG.Kueche.Licht toggle
attr EG.Kueche.Schalt.Btn1.ntfy disabledForIntervals 16:00-24:00
attr EG.Kueche.Schalt.Btn1.ntfy room 0.00_EG,0.02_Kueche
define vccu_Btn1 CUL_HM 30839301
define EG.Kueche.Schalt.Btn1.ntfy_night notify EG.Kueche.Schalt.Btn1:Short..to.vccu. set EG.Kueche.Spots toggle
attr EG.Kueche.Schalt.Btn1.ntfy_night disabledForIntervals 00:00-16:00
attr EG.Kueche.Schalt.Btn1.ntfy_night room 0.02_Kueche
attr vccu_Btn1 model CCU-FHEM
attr vccu_Btn1 peerIDs 2CC96301,
attr vccu_Btn1 room 8.00_Zentral
attr vccu_Btn1 webCmd press short:press long
Nicht geschafft habe ich es auf diesem Weg:
Zitatdefine EG.Kueche.Schalt.Btn1.ntfyv2 notify {if (EG.Kueche.Schalt.Btn1:Short..to.vccu. && $hour>=1 && $hour<17) {fhem("set EG.Kueche.Licht toggle")}}
(Die beiden anderen ggf. konkurierenden Notifys waren während dem Test inaktiv)
...das mit den Punkten habe ich in irgendwelchen Blogs gesehen, und hatte mir gefallen. Nun habe ich schon sehr viele Geräte usw. genau so definiert, somit wäre eine Änderung heftiger Aufwand und Fehlerquelle bei Scripten...
Denke in meinem Fall ist das aufpassen bei Scripten das kleinere Übel.
bei dem 'nicht geschafft notify' fehlt der trigger...
da steht nur
.... notify {if....
ZitatNun habe ich schon sehr viele Geräte usw. genau so definiert, somit wäre eine Änderung heftiger Aufwand und Fehlerquelle bei Scripten...
Wieso?
Schritt 1. Irgendeinen Texteditor nehmen, der "Suchen und ersetzen" kann.(Kann mehr oder weniger jeder, zur Not MS Word.)
Schritt 2. Per Copy /Paste die fhem-cfg in eine leres Dokument reinpasten.
Schritt 3. suche nach allen EG.Kueche.Schalt.Btn1, ersetze mit EG_Kueche_Schalt_Btn1 (wie immer das mit dem jeweiligen Editor gemacht wird.)
Schritt 4. mit allen defs wiederholen.
Schritt 5. Per Copy /Paste in die fhem-cfg reinpasten.
Schritt 6 Fhem restarten.
Fertig.
Mach ich immer so, wenn ich mal ein Geräte oder so umbennen will. Geht ruckzuck man erwischt alle vorkommen und hat noch nie Problem gemacht. Meine Editor (BBedit) macht das sogar über mehre Dokumente zugleich hinweg, falls man Scripte in diversen Dateien ausgelagert hat.
Aber natürlich deine Entscheidung.
mal sehen:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify {if (EG.Kueche.Schalt.Btn1:Short..to.vccu. && $hour>=1 && $hour<17) {fhem("set EG.Kueche.Licht toggle")}}
Da steht mal KEIN auslösendes Notify (bzw. trigger) drin! Das Dingen macht NIE was.
(und jetzt weisst du auch, warum ich immer gerne das GESAMTE define sehen will ...)
Ah ... Überschneidung. automatisierer war schneller
Warte, ich formulier dir mal was, wie es gehen könnte, moment...
Versuch mal so:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<17) {fhem("set EG.Kueche.Licht toggle")}}
noch mal allgemein:
define <name> notify <auslösendes event> mach irgendwas
und "mach irgendwas" kann nun wieder sein:
- fhem kommando
- {perl script (z.b. if abfrage)}
- {perl script (z.b. if abfrage){fhem("fhem commando")}}
Komplettaufbau bei dir also:
define <name> notify <auslösendes event> {perl script (z.b. if abfrage){fhem("fhem commando")}}
Ferne zu beachten:
{if .... = perl if, es greifen perl Regeln/Syntax
IF = FHEM eigener IF-Befehl, der eine eigene Syntax hat. (und ausserdem etwas outdated, lieber fhem Befehl DOIF verwenden)
Ob man nun lieber perl "if" oder FHEM DOIF verwendet ist mehr eine Geschmacksfrage.
DOIF ist sehr mächtig, quasi die eierlegende Wollmilchsau, die ausserdem ein Schweizer Offiziersmesser dabei hat.
Dadurch ggf. manchmal etwas unübersichtlich. Ich löse alles mit perl-if und nutze DOIF nicht, ist aber vermutlich reine Geschmackssache.
Danke nochmals für die Hinweise.
Ich habe einiges experimentiert...
Das geht nicht:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<11) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle")};;{fhem("set EG.Kueche.Vitrine on")} } #Vitrine wird immer geschaltet, egal wie spät
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<13) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle");; ("set EG.Kueche.Vitrine on")} }
Das geht perfekt:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<11) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle")} }
A) Was mach ich falsch ?
B) Wie kann ich mir selbst besser helfen ?
(Man sieht also mein Problem dürfte das Verständniss der Syntax sein... Würde mir hier "Perl-Wissen" helfen ?)
Zitat von: ranseyer am 19 Januar 2017, 13:59:53
Danke nochmals für die Hinweise.
Ich habe einiges experimentiert...
Das geht nicht:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<11) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle")};;{fhem("set EG.Kueche.Vitrine on")} } #Vitrine wird immer geschaltet, egal wie spät
dann geht es doch - genau so hast du es doch geschrieben...
versuch mal:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<11) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle;;set EG.Kueche.Vitrine on")} }
oder wann soll die Lampe angeschaltet werden?? im elsefall nehme ich jetzt mal an...
Mit deinen Angaben: 'das funktioniert' - 'das funktioniert nicht' - kann man als lesender leider nicht erkennen wo du hin willst.
Zitat
A) Was mach ich falsch ?
B) Wie kann ich mir selbst besser helfen ?
(Man sieht also mein Problem dürfte das Verständniss der Syntax sein... Würde mir hier "Perl-Wissen" helfen ?)
Mehr Perl-Wissen hilft immer... gut, bei Prostatabeschwerden wohl nicht - aber sonst immer...
Meisstens reicht aber ein Blick in die Comandreff. Getreu dem Motto, man muss nicht alles wissen - es reicht, wenn man weiss wo es steht!
Am Anfang muss man da halt mal was mehr lesen, nachher weiss man es dann... - oder zumindest weiss man, wo es geschrieben steht...
Jetzt haben wir uns überschnitten. (Hatte mich vorher auch schon ersthaft bemüht)
So gehts (Beim "e!se"-Fall zwei Aktionen klappen bei mir, wenn ich um das Semikolon keine Leerzeichen habe):
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<16) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle;;set EG.Kueche.Vitrine on")} }
verstehe dien Problem nicht.
Vor allem versteh ich nicht WAS genau NICHT geht und was das gewünschte Verhalten sein soll.
Haben meine Vorredner schon gesagt.
Ich darf schon mal 2-3 Dinge anmerken
1. Semikolon mit oder ohne Leerzeichen ist egal.
2.{fhem("set EG.Kueche.Vitrine on")} ist nur eine besonders umständliche schreibweise für set EG.Kueche.Vitrine on
Zur Erläuterung
{} = alles was hier drin steht soll perl sein
fhem("x") = sag perl das FHEM x machen soll
Daher:
{fhem("x")} bedeutet in etwa:
liebes FHEM, sage bitte perl es soll bitte dir selbst sagen das du x machen soll.
Geht... aber 8)
3. Der Vorschlag von automatisierer macht die Vitrinen-Lichter nicht immer an (wie aber vermutlich gewünscht, weil #Vitrine wird immer geschaltet, egal wie spät) sondern nur im ELSE Fall, wie automatisierer selbst anmerkt.
Das hier:
define EG.Kueche.Schalt.Btn1.ntfyv2 notify EG.Kueche.Schalt.Btn1:Short..to.vccu. {if ($hour>=1 && $hour<11) {fhem("set EG.Kueche.Licht toggle")} else {fhem("set EG.Kueche.Spots toggle")} } ;; set EG.Kueche.Vitrine on
würde die Vitrine immer an schalten.
Mit anderen Worten, helfen würde zu durchdringen was die ganzen Klammern BEDEUTEN und wo man die braucht und wo nicht :D
Keine Sorge, hat bei uns allen etwas gedauert.