Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: satprofi am 07 Juli 2014, 15:51:02
hallo.
ich habe auch kleines problem wo ich keine lösung finde.
ich schalte die klima ab einen bestimmten wert ein. das klappt auch.
jetzt möchte ich aber , wenn dieser wert bis zu einem anderen wert nicht unterschritten wird die klima weiterlaufen lassen.
wie realisiert man das mit DOIF ?

z.b.  ab 1500W klima on, unter 1000W klima off.

define di_Klima DOIF ([Sensor:Watt]>1500) (set Klima on) DOELSEIF ([Sensor:Watt]<1000) (set Klima off)

siehe auch die allgemeine Lösung a la THRESHOLD hier im ersten Post. Noch eleganter kann man das mit dem THRESHOLD-Modul machen.

Gruß

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

satprofi

Thx. So einfach? man sieht den wald vor lauter bäume nicht mehr....
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

cruser1800

Zitat von: Damian am 06 Juli 2014, 22:00:24
Version 1.4 im ersten Post.

-status "disabled" eingebaut
-Ein cmd-Status wird nur noch dann für einen nicht existierenden ELSE-Fall gesetzt, wenn es nur den DOIF-Fall gibt. Das grundsätzliche Setzen eines cmd-Status für nicht existierenden ELSE-Fall war ungünstig und machte die Wait-Timer-Steuerung zunichte. Das Beispiel im Post #190 würde z. B. mit Version 1.3 nicht funktionieren.

Gruß

Damian

Danke für deine Antwort. Ist es jetzt bei der Änderung so, dass wenn DOIF falsch ist DOELSIF abgearbeitet wird ohne das es ein weiteres Notify benötigt?

Gruß

Damian

#198
Zitat von: cruser1800 am 07 Juli 2014, 21:01:48
Danke für deine Antwort. Ist es jetzt bei der Änderung so, dass wenn DOIF falsch ist DOELSIF abgearbeitet wird ohne das es ein weiteres Notify benötigt?

Gruß

Was für einen Programmierer selbstverständlich ist, ist für andere noch lange nicht klar.

if-then-elseif-else Konstruktionen werden immer von links nach rechts abgearbeitet. Es wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist. Bei DOIF kommt hinzu, dass nur Bedingungen überprüft werden, die zum ausgelösten Event auch ein Device beinhalten (Angaben in eckigen Klammern).

Beispiel:

define di_test DOIF ([Schalter1] eq "on")(set lampe1 on) DOELSEIF ([Schalter2] eq "on") (set lampe2 on) DOELSE (set lampe3 on)

Event kommt: Schalter1 = on

1. Bedingung wird überprüft -> wahr -> Lampe1 auf on -> Ende der Abarbeitung.

Event kommt: Schalter1 = off

1. Bedingung wird überprüft -> falsch -> weiter prüfen
2. Bedingung wird nicht überprüft, da Schalter1 dort nicht vorkommt -> weiter prüfen
3. DOELESE wird ausgeführt -> Lampe3 auf on -> Ende der Abarbeitung.


Event kommt: Schalter2 = on

1. Bedingung wird nicht überprüft, da Schalter2 dort nicht vorkommt -> weiter prüfen
2. Bedingung wird überpruft -> wahr -> Lampe2 auf on -> Ende der Abarbeitung


Event kommt: Schalter2 = off

1. Bedingung wird nicht überprüft, da Schalter2 dort nicht vorkommt -> weiter prüfen
2. Bedingung wird überprüft -> falsch -> weiter prufen
3. DOELESE wird ausgeführt -> Lampe3 auf on -> Ende der Abarbeitung.

Event kommt: Schalter3 = on

Es passiert gar nichts, da Schalter3 nirgendwo in den Bedingungen vorkommt

Die Änderung in der Version 1.4 betraf nur den Sonderfall, falls kein DOELSE-Fall angegeben wurde und hat mit den obigen Fällen nichts zu tun.

Gruß

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

cruser1800

@Damian

Danke, jetzt habe ich es kapiert! Die Bedingung des Event's hatte ich nicht auf dem Schirm!

Gruß Lutz

Hoeness

Hallo,

erstmal ein Lob für die viele Arbeit und das gelungene Modul.

Ich experimentiere seit einiger Zeit mit FHEM und meiner Gartenbewässerung rum.
Ich habe eine Lösung die läuft - aber es läßt sich ja immer was verbessern ;-)

Ich  DOIF in meiner Bewässerung einsetzen und stand schon bald am ersten Problem:
Für meine Tests habe ich mich an einem kleinen Ablauf in FHEM versucht.


In meiner Gartenbewässerung kann ich die Bewässerungszeit über ein Dummy einstellen-
Über einen Dummy-Schalter kann ich die Bewässerung einschalten.


define Bewaesserung_Zeit dummy
attr Bewaesserung_Zeit setList state
attr Bewaesserung_Zeit room Bewässerung_DOIF
attr Bewaesserung_Zeit  setList state:1,2,3,4,5,6,7,8,9,10
#attr Bewaesserung_Zeit sortby 01
attr Bewaesserung_Zeit webCmd state

Define Automatik_DOIF dummy
attr Automatik_DOIF room Bewässerung_DOIF
attr Automatik_DOIF toggleDevice true
attr Automatik_DOIF webCmd an:aus
attr Automatik_DOIF devStateIcon aus:Bwaesserung_black_off_48_B an:Bwaesserung_gruen_on_48_B
attr Automatik_DOIF eventMap on:an off:aus


Mit dem folgende DOIF Ausdruck schalte ich jetzt meine 1_Bew_Eiche_DOIF ein.

define Wasser_Eiche DOIF ([Automatik_DOIF] eq "an") (set 1_Bew_Eiche_DOIF on-for-timer 3) DOELSE (set 1_Bew_Eiche_DOIF aus)

In dem Beispiel schalte ich 1_Bew_Eiche_DOIF für 3 Sekunden ein.

Wie kann ich jetzt den Wert "meiner" Bewässerungszeit  - Bewaesserung_Zeit- in dem Ausdruck benutzen?

Damian

Zitat von: Hoeness am 07 Juli 2014, 23:02:29

Mit dem folgende DOIF Ausdruck schalte ich jetzt meine 1_Bew_Eiche_DOIF ein.

define Wasser_Eiche DOIF ([Automatik_DOIF] eq "an") (set 1_Bew_Eiche_DOIF on-for-timer 3) DOELSE (set 1_Bew_Eiche_DOIF aus)

In dem Beispiel schalte ich 1_Bew_Eiche_DOIF für 3 Sekunden ein.

Wie kann ich jetzt den Wert "meiner" Bewässerungszeit  - Bewaesserung_Zeit- in dem Ausdruck benutzen?

Wenn die Bewässerungszeit im Status von Bewaesserung_Zeit steht, dann einfach

define Wasser_Eiche DOIF ([Automatik_DOIF] eq "an") (set 1_Bew_Eiche_DOIF on-for-timer [Bewaesserung_Zeit]) DOELSE (set 1_Bew_Eiche_DOIF aus)

Weitere Infos zu Angaben im Ausführungsteil siehe auch: http://fhem.de/commandref_DE.html#IF

DOIF benutzt die gleiche Syntax wie der FHEM-IF-Befehl.

Gruß

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

Hoeness

Hallo,

Danke für die schnelle Antwort.

Ich experimentiere noch ein bischen rum.
Ich denke aber, das DOIF meine Gartenbewässerung vereinfachen kann.

Danke.

kud

Tolle Sache mit dem DOIF. Danke.
Aber mein Eintrag

define Feuchte_warnung DOIF ([arduino_ana_1] > 200) (system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'))

liefert im Event-Monitor ein

DOIF Feuchte_warnung last_error: system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'): Unknown command system('/usr/bin/mplayer, try help.

Hab ich da was übersehen?

Gruss
KU

Damian

Zitat von: kud am 08 Juli 2014, 19:51:10
Tolle Sache mit dem DOIF. Danke.
Aber mein Eintrag

define Feuchte_warnung DOIF ([arduino_ana_1] > 200) (system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'))

liefert im Event-Monitor ein

DOIF Feuchte_warnung last_error: system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &'): Unknown command system('/usr/bin/mplayer, try help.

Hab ich da was übersehen?

Gruss
KU

Perl-Aufrufe bitte in geschweifte Klammern setzen:

define Feuchte_warnung DOIF ([arduino_ana_1] > 200) ({system('/usr/bin/mplayer /opt/TTS/Wassereinbruch_bilge.mp3 &')})

Ich wiederhole mich an dieser Stelle:

Weitere Infos zu Angaben im Ausführungsteil siehe auch: http://fhem.de/commandref_DE.html#IF

DOIF benutzt die gleiche Syntax wie der FHEM-IF-Befehl.

Gruß

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

kud


satprofi

Hallo.
Warum schaltet DOIF trotzdem wenn Leistung unter 1000W

DOELSEIF ([Heizungsmode] eq "off" and [Pac] < 1000 and $hms gt "10:00" and $hms lt "18:30") (set Klima_SZ off)

dieses commando wurde ausgewertet lt. state
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Zitat von: satprofi am 11 Juli 2014, 11:53:09
Hallo.
Warum schaltet DOIF trotzdem wenn Leistung unter 1000W

DOELSEIF ([Heizungsmode] eq "off" and [Pac] < 1000 and $hms gt "10:00" and $hms lt "18:30") (set Klima_SZ off)

dieses commando wurde ausgewertet lt. state


Meinst du Klima wird nicht off geschaltet, obwohl Status von Pac unter 1000?

Wenn Pac vor 10:00 Uhr unter 1000 gefallen ist, dann passiert nach deiner Definition auch nichts.

Nach meinem Urlaub werde ich Zeitintervalle einbauen [10:00-18:00], dann wird um 10:00 Uhr geprüft, ob Pac unter 1000 steht und geschaltet.

Solange kannst du dir behelfen mit:


DOELSEIF ([Heizungsmode] eq "off" and [Pac] < 1000 and (($hms gt "10:00" or [10:00]) and $hms lt "18:30") (set Klima_SZ off)


Gruß

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

satprofi

achso!
ich dachte es wird regelmässig geprüft. heisst wenn nach 10h die leistung unter 1000 fällt, passiert nichts mehr? wobei "off" bei mir für einschalten steht.
es sollte zw. 10 u. 18:30h die klima aus-, bzw. wieder eingeschalten werden wenn der wert unter  od. über 1000w steht.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Zitat von: satprofi am 11 Juli 2014, 14:39:06
achso!
ich dachte es wird regelmässig geprüft. heisst wenn nach 10h die leistung unter 1000 fällt, passiert nichts mehr? wobei "off" bei mir für einschalten steht.
es sollte zw. 10 u. 18:30h die klima aus-, bzw. wieder eingeschalten werden wenn der wert unter  od. über 1000w steht.

Es wird immer nur dann geprüft, wenn ein Event der angegebenen Devices kommt. Bei dir sind die Devices "Heizungsmode" und "Pac".

Wenn Pac regelmäßig sendet, dann sollte es allerdings auch nach 10:00 Uhr kein Problem sein.

Gruß

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