Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

automatisierer

#1365
@ Rohan,

dem listing nach ist das aber richtig. Er hat halt den Namen von _Clima auf _Thermostat geändert.


EDIT:
probier das mal:

Zitat
define Test DOIF ([05:30:00|8] and ([Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert")) (set Bad_Heizkoerper_Thermostat desired-temp 23)

attr Test do always

das 'attr DEV do always' ist wichtig, sonst läufts wieder nur einmal.

Was ist Bad_Heizkoerper_morgens_aufheizen für ein device?
Ein dummy?
Warum hat das device als State 'aktiviert' oder 'state aktiviert'?

Rohan

Zitat von: automatisierer am 11 Februar 2015, 20:19:09
@ Rohan,

dem listing nach ist das aber richtig. Er hat halt den Namen von _Clima auf _Thermostat geändert. ...

Jo, mein Fehler. Ich habe meinen Beitrag schon angepasst gehabt. Mir kam es einfach nicht in den Sinn. Diese Namensgebung bei Channeln dürfte mMn noch öfters zu Mistverständnissen führen.

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

leuchte1

Hallo,

Ja den Clima Channel hab ich zu meiner Übersichtlichkeit umbenannt. Bei Bad_Heizkoerper_morgens_aufheizen handelt es sich um einen Dummy. Das mit dem state ist noch nicht gerade elegant gelöst. Aber das ändert alles nichts an der Tatsache, dass wenn ich bei dem DOIF mit "set Lampe on" eine Lampe schalte dies einwandfrei funktioniert. Inzwischen vermute ich fast eine defekte Hardware.
Allerdings werde ich die nächsten Tage nochmals auf den alten at-Befehl zurückgreifen und testen, da es hier nie Schwierigkeiten gab. Notfalls bleib ich dabei, denn ein kaltes Bad mag frau  :) garnicht.

Brockmann

Zitat von: leuchte1 am 12 Februar 2015, 03:16:36
DEF        ([05:30:00] and !$we and [Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)
So richtig koscher ist die Definition aber auch nicht. Da fehlt ein Paar Klammern, sonst würde das DOIF die Heizung (auch) in dem Moment hochschalten, wo Bad_Heizkoerper_morgens_aufheizen auf state aktiviert gesetzt wird, und zwar ganz egal wie spät es dann gerade ist (and bindet stärker als or). Deshalb wäre es so korrekt (wenn ich Deine Absicht richtig verstehe):

DEF        ([05:30:00] and !$we and ([Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert")) (set Bad_Heizkoerper_Thermostat desired-temp 23)


Und wie schon geschrieben wurde, brauchst Du bei solchen Zeitprogrammierungen unbedingt das Attribut do always, sonst wird das DOIF nur beim ersten Mal ausgeführt und dann nicht mehr, weil sich sein Zustand nicht verändert.

Damian

Zitat von: Brockmann am 12 Februar 2015, 08:29:15
So richtig koscher ist die Definition aber auch nicht. Da fehlt ein Paar Klammern, sonst würde das DOIF die Heizung (auch) in dem Moment hochschalten, wo Bad_Heizkoerper_morgens_aufheizen auf state aktiviert gesetzt wird, und zwar ganz egal wie spät es dann gerade ist (and bindet stärker als or). Deshalb wäre es so korrekt (wenn ich Deine Absicht richtig verstehe):

DEF        ([05:30:00] and !$we and ([Bad_Heizkoerper_morgens_aufheizen] eq "aktiviert" or [Bad_Heizkoerper_morgens_aufheizen] eq "state aktiviert")) (set Bad_Heizkoerper_Thermostat desired-temp 23)


Und wie schon geschrieben wurde, brauchst Du bei solchen Zeitprogrammierungen unbedingt das Attribut do always, sonst wird das DOIF nur beim ersten Mal ausgeführt und dann nicht mehr, weil sich sein Zustand nicht verändert.


oder direkt


DEF        ([05:30|8] and [Bad_Heizkoerper_morgens_aufheizen] =~ "aktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)


Gruß

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

automatisierer

das hatte ich auch schon überlegt, hatte aber befürchtet, dass dann auch ein 'deaktiviert' triggert.

leuchte1

Vielen Dank für Eure Unterstützung,

die Klammern hatte ich in einen zweiten DOIF fünf Minuten später auch schon gesetzt.
ABER ich habe  das Attribut do always nicht gesetzt >:( >:(.
Ich denke das ist des Rätsels Lösung. Werde ich gleich umsetzten und anschliessend berichten.

Gruss
Stefan

Damian

#1372
Zitat von: automatisierer am 12 Februar 2015, 09:28:26
das hatte ich auch schon überlegt, hatte aber befürchtet, dass dann auch ein 'deaktiviert' triggert.

das stimmt wohl, dann eben:

define test DOIF ([05:30|8] and [?Bad_Heizkoerper_morgens_aufheizen] !~ "deaktiviert") (set Bad_Heizkoerper_Thermostat desired-temp 23)
attr test do always


wenn es nur zwei Zustände: aktiviert/deaktiviert gibt.

P.S. Dass do always bei einem Zustand wichtig ist, steht nicht nur in der Commandref, sondern wurde hier schon mehrfach bei diesem Problem geschrieben ;)

Gruß

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

flurin

Zitat von: Damian am 12 Februar 2015, 09:55:09
P.S. Dass do always bei einem Zustand wichtig ist, steht nicht nur in der Commandref, sondern wurde hier schon mehrfach bei diesem Problem geschrieben ;)

Hallo Damian

Wäre es denkbar, "do always" als Default zu setzen also im Modul entsprechend zu handhaben? Man könnte dann, wenn es stört, "do once" oder Ähnliches definieren.

Gruss
flurin

Damian

Zitat von: flurin am 12 Februar 2015, 11:16:52
Hallo Damian

Wäre es denkbar, "do always" als Default zu setzen also im Modul entsprechend zu handhaben? Man könnte dann, wenn es stört, "do once" oder Ähnliches definieren.

Gruss
flurin

Denkbar schon aber nicht sinnvoll, denn jede Definition, bei der zyklisch sendende Sensoren (z. B. Temperatur, usw.)  angegeben werden (und das sind mindestens genauso viele), würde zum ständigen Ausführen der Befehle führen. Dieses Problem muss insb. bei notify-Definitionen umständlich durch if-Abfragen abgefangen werden und das sollte vom Anfang an bei DOIF, wie auch beim THRESHOLD anders sein.

Gruß

Damian


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

flurin

Zitat von: Damian am 12 Februar 2015, 11:42:57
Denkbar schon aber nicht sinnvoll, denn jede Definition, bei der zyklisch sendende Sensoren (z. B. Temperatur, usw.)  angegeben werden (und das sind mindestens genauso viele), würde zum ständigen Ausführen der Befehle führen. Dieses Problem muss insb. bei notify-Definitionen umständlich durch if-Abfragen abgefangen werden und das sollte vom Anfang an bei DOIF, wie auch beim THRESHOLD anders sein.

Gruß

Damian

Ok, Danke.

ultraedition

Hallo, ich nutze seit einiger Zeit auch diverse DOIFs in meiner Hausautomation. Ich möchte eine Push-Nachricht verschicken wenn der Klingeltaster gedrückt wurde. Das funktioniert schon wie folgt.

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") (set pushmsg message Klingel wurde gedrückt!)

Wenn ich jedoch zusätzlich mit der Push-Nachricht einen Zeitstempel mitsenden will

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") ({my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")})

erhalte ich bei den DOIF Readings folgende Fehlermeldung:

error  {my $LocalTime=localtime; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}: Unknown command {my, try help. Unknown command fhem("set, try help.

Wenn ich jedoch den Code direkt in die FHEM Kommandozeile eingebe erhalte ich die Push Nachricht.

{my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}

Ich nutze diese Art des Aufbaus auch zusammen mit dem Notify. Auch da funktioniert es z.B.

define ZSFuellstandToLowPushover notify ZS_Fuellstand_Indicator:ToLow {my $LocalTime=localtime;; fhem("set pushmsg message Füllstand Zisterne sehr niedrig (kleiner 3)!!!\n$LocalTime");;}

Was stimmt an dem Syntax nicht?

Damian

Zitat von: ultraedition am 12 Februar 2015, 21:44:12
Hallo, ich nutze seit einiger Zeit auch diverse DOIFs in meiner Hausautomation. Ich möchte eine Push-Nachricht verschicken wenn der Klingeltaster gedrückt wurde. Das funktioniert schon wie folgt.

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") (set pushmsg message Klingel wurde gedrückt!)

Wenn ich jedoch zusätzlich mit der Push-Nachricht einen Zeitstempel mitsenden will

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") ({my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")})

erhalte ich bei den DOIF Readings folgende Fehlermeldung:

error  {my $LocalTime=localtime; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}: Unknown command {my, try help. Unknown command fhem("set, try help.

Wenn ich jedoch den Code direkt in die FHEM Kommandozeile eingebe erhalte ich die Push Nachricht.

{my $LocalTime=localtime;; fhem("set pushmsg message Klingel wurde gedrückt!\n$LocalTime")}

Ich nutze diese Art des Aufbaus auch zusammen mit dem Notify. Auch da funktioniert es z.B.

define ZSFuellstandToLowPushover notify ZS_Fuellstand_Indicator:ToLow {my $LocalTime=localtime;; fhem("set pushmsg message Füllstand Zisterne sehr niedrig (kleiner 3)!!!\n$LocalTime");;}

Was stimmt an dem Syntax nicht?

Wozu so umständlich, das kannst du bei DOIF einfacher haben ;):

define FL_Klingeltaster_pushmsg DOIF ([FL_Klingeltaster] =~ "Short") (set pushmsg message Klingel wurde gedrückt! {(localtime)})


Gruß

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

ultraedition

Super und danke für die schnelle Antwort.

Volker

leuchte1

Zitat von: Damian am 12 Februar 2015, 09:55:09

P.S. Dass do always bei einem Zustand wichtig ist, steht nicht nur in der Commandref, sondern wurde hier schon mehrfach bei diesem Problem geschrieben ;)

Gruß

Damian

Asche auf mein Haupt.
Alles funktioniert bestens. Danke!

Gruss
Stefan