FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Ranseyer am 17 Januar 2017, 13:20:42

Titel: Notify zeitabhängig ?
Beitrag von: Ranseyer am 17 Januar 2017, 13:20:42
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
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Brice am 17 Januar 2017, 13:28:59
$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
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Ranseyer am 17 Januar 2017, 13:38:54
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
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Zrrronggg! am 17 Januar 2017, 13:42:25
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.
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Ranseyer am 17 Januar 2017, 14:28:49
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
Titel: Antw:Notify zeitabhängig ?
Beitrag von: automatisierer am 17 Januar 2017, 14:40:57
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

Titel: Antw:Notify zeitabhängig ?
Beitrag von: Zrrronggg! am 17 Januar 2017, 14:56:31
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


Titel: Antw:Notify zeitabhängig ?
Beitrag von: automatisierer am 17 Januar 2017, 15:05:25
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
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Otto123 am 17 Januar 2017, 15:07:22
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
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Ranseyer am 17 Januar 2017, 16:31:08
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.
Titel: Antw:Notify zeitabhängig ?
Beitrag von: automatisierer am 17 Januar 2017, 17:43:18
bei dem 'nicht geschafft notify' fehlt der trigger...

da steht nur

.... notify  {if....
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Zrrronggg! am 17 Januar 2017, 17:43:40
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 ...)
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Zrrronggg! am 17 Januar 2017, 17:44:22
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")}}
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Zrrronggg! am 17 Januar 2017, 17:51:47
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.
Titel: Antw:Notify zeitabhängig ?
Beitrag 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

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 ?)
Titel: Antw:Notify zeitabhängig ?
Beitrag von: automatisierer am 19 Januar 2017, 14:38:29
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...
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Ranseyer am 19 Januar 2017, 14:47:01
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")}  }
Titel: Antw:Notify zeitabhängig ?
Beitrag von: Zrrronggg! am 21 Januar 2017, 18:43:04
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.