neuer FHEM-Befehl IF

Begonnen von Damian, 25 Dezember 2013, 23:50:06

Vorheriges Thema - Nächstes Thema

Damian

#210
Neue Version von IF,

ich habe IF noch ein wenig erweitert. Es sind nun neben Reading-Angaben auch Internal-Angaben (mit &) möglich.

Die typische Statusabfrage kann jetzt besonders einfach nur durch die Angabe des Devices angegeben werden:

define check at +00:10 IF ([outdoor] eq "open") (set switch1 on)

entspricht mit Angabe des Internals:

define check at +00:10 IF ([outdoor:&STATE] eq "open") (set switch1 on)

Wenn der Reading "state" abgefragt werden soll, dann wird der Readingname wie bisher ohne & angegeben:

define check at +00:10 IF ([outdoor:state] eq "open") (set switch1 on)

Die neue Version habe ich bereits eingecheckt - gibt´s morgen per Update. Neue Doku siehe dann in der Commandref.

Rudi müsste noch die command_frame-Datei für deutsch und englisch anpassen, damit der IF-Befehl unter FHEM-Befehlen in der Commandref erscheint.

Edit: Die bisherige Version im ersten Post zum Download habe ich entfernt.

Gruß

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

paolo

hallo,

wo kann ich denn die Datei/ das modul herrunter laden, ich finde es nicht

Damian

Zitat von: paolo am 22 März 2014, 20:29:19
hallo,

wo kann ich denn die Datei/ das modul herrunter laden, ich finde es nicht

Ab morgen per FHEM-Update.

Gruß

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

Michi240281

Bei folgendem WeekdayTimer wird nur der erste Ausdruck ausgeführt, nicht der 2.!

define test WeekdayTimer Flurlicht 1234567|{sunset_abs("HORIZON=-4")}|an IF ([Abwesend:state] eq "ja") (set Flurlicht pct 25) 1234567|01:00|aus IF ([Abwesend:state] eq "ja") (set Flurlicht aus)

Ich nehme mal an, es liegt daran, dass das IF da drin ist und normalerweise trennt man ja mit Leerzeichen, allerdings sind jetzt auch Leerzeichen vor dem ersten IF, weshalb er denke ich den 2. Ausdruck nicht mehr "sieht"!

Jmd ne Lösung? Mit ";" gehts nicht.
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

rudolfkoenig

Habe die commandref_frame Dateien angepasst.

Damian

Zitat von: rudolfkoenig am 23 März 2014, 08:12:48
Habe die commandref_frame Dateien angepasst.

Danke.

Nur mal zum Verständnis für alle, die den Download suchen:

IF ist jetzt ein Bestandteil von FHEM und braucht nicht mehr separat heruntergeladen zu werden. Es kommt wie alle anderen FHEM-Module per FHEM-Update ins Haus.

Die aktuelle Doku ist hier zu finden:

http://fhem.de/commandref_DE.html#IF

Gruß

Damian

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

Damian

Zitat von: Michi240281 am 23 März 2014, 01:44:43
define test WeekdayTimer Flurlicht 1234567|{sunset_abs("HORIZON=-4")}|an IF ([Abwesend:state] eq "ja") (set Flurlicht pct 25) 1234567|01:00|aus IF ([Abwesend:state] eq "ja") (set Flurlicht aus)

Den auszuführenden Befehl solltest du nur einmal am Ende angeben, "pct 25" bzw. "aus" sind nur Argumente des Befehls und werden anstelle von % eingesetzt, siehe Doku zu WeekdayTimer:

dann schon eher:

define test WeekdayTimer Flurlicht 1234567|{sunset_abs("HORIZON=-4")}|pct:25  1234567|01:00|aus IF ([Abwesend:state] eq "ja") (set Flurlicht %)

Gruß

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

Michi240281

#217
Ok! Danke!
Klappt!!!!!! :)
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

paolo

Hallo,

ich bin einerseits ein Anfänger mit dem FEHM und daher bitte entschuldigt, wenn ich was frage was man evtl. wissen müsste.

ich möchte einen Pumpe von der der Heizung schalten. dafür hebe ich einen Differen-Temp-Sensor angebracht und einen schalter.

Nun ist meine Vorstellung, wenn die Differenz von Vorlauf minus Rücklauf  kleine < 1 ist soll sich die Pumpe ausschalten und wenn diese Differenz größer ist wieder einschalten. Hintergrund ist das ich einfach Strom sparen möchte da die Pumpe im Jahr ca 100,- verbraucht.
Nun habe ich die folgenden Varianten Versucht nach der Anleitung zu benutzen aber es wird nicht wirklich geschalten




define VorlaufPumpenSteuerung at +*00:01:00 { if (ReadingsVal("0_HM_HZ_Keller_Vorlauf_minus_Ruecklauf_T2_T1") < 1) { fhem("0_HM_HZ_Vorlaufpumpe on") } else { fhem("0_HM_HZ_Vorlaufpumpe off") } }
attr VorlaufPumpenSteuerung room 9.02_Steuerung


define VorlaufPumpenSteuerung_off at +*00:10:00 IF (0_HM_HZ_Keller_Vorlauf_minus_Ruecklauf_T2_T1 < 1) ( set 0_HM_HZ_Vorlaufpumpe off)
define VorlaufPumpenSteuerung_on at +*00:12:00 IF (0_HM_HZ_Keller_Vorlauf_minus_Ruecklauf_T2_T1 > 1) ( set 0_HM_HZ_Vorlaufpumpe on)
attr VorlaufPumpenSteuerung_off room 9.02_Steuerung
attr VorlaufPumpenSteuerung_on room 9.02_Steuerung


Was mache ich falsch oder ... Kann mir bitte mal jemand auf die Sprünge helfen?


Vielen Dank

Damian

Zitat von: paolo am 25 März 2014, 09:50:20



define VorlaufPumpenSteuerung at +*00:01:00 { if (ReadingsVal("0_HM_HZ_Keller_Vorlauf_minus_Ruecklauf_T2_T1") < 1) { fhem("0_HM_HZ_Vorlaufpumpe on") } else { fhem("0_HM_HZ_Vorlaufpumpe off") } }

define VorlaufPumpenSteuerung_off at +*00:10:00 IF (0_HM_HZ_Keller_Vorlauf_minus_Ruecklauf_T2_T1 < 1) ( set 0_HM_HZ_Vorlaufpumpe off)


Ob bei der Funktion ReadingsVal oder beim IF-Befehl, ein Reading muss immer durch den Device-Namen und den Reading-Namen eindeutig spezifiziert  werden.

Beim IF musst du also bei dir angeben:

define VorlaufPumpenSteuerung_off at +*00:10:00 IF ([device_name:reading_name] < 1) ( set 0_HM_HZ_Vorlaufpumpe off)

Statt device_name muss der Name deines Sensors stehen und bei reading_name der entsprechende Name des Readings deines Sensors, wo die Differenz der Temperaturen steht.

Sonst noch mal bei den Beispielen hier nachschauen: http://fhem.de/commandref_DE.html#IF

Gruß

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

paolo

vielen Dank hat geholfen, habe ich leider nicht ganz so verstanden gehabt. Super Arbeit Danke noch mal für das Modul

Damian

Ich sehe gerade, dass du alle 10! Minuten deine Pumpe schaltest.

Das machst du viel eleganter mit dem THRESHOLD-Modul.

Das schaltet nämlich nur dann, wenn wirklich was zu schalten ist, auch wenn dein Event im Sekundentakt käme!

siehe: http://fhem.de/commandref_DE.html#THRESHOLD

Es sind dort auch Beispiele für Zirkulationspumpen-Steuerung zu finden.

Gruß

Damian

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

Michi240281

Hab nen kleines Problem.

Folgender notify hat ja an sich super funktioniert:

define Motion_Terasse notify BM_Terasse:motion IF ([BM_Terasse:brightness] < 125 and [BM_Terasse_aktiv:state] eq "ja") (set Lampe_Terasse 100 120, define Lampe_Terasse_at at +00:02:00 set Lampe_Terasse [Lampe_Terasse:level:d])


Hintergrund war ja, dass ich wollte, dass die Lampe den Wert wieder annimmt, den sie hatte, bevor der Bewegungsmelder die Lampe angemacht hat. Soweit so gut. Jetzt ist mir letzte Tage und soeben wieder aufgefallen, dass die Lampe die ganze Zeit an war, obwohl garkeine Bewegung mehr da war und die 2 Minuten auch längst um waren. Ich habe draußen was gemacht und das notify wurde also mehrfach hintereinander ausgelöst. Meine These ist nun, dass sich die Lampe dann zwischendrin mal auf 100% befand, als das notify das nächste Mal ausgelöst wurde und dann war eben 100% der Wert, den das "at" dann wieder angenommen hat.

Wie kann ich das denn nun lösen? Jmd ne Idee? Vllt mal mit den Zeiten spielen? Andere Möglichkeit?

Danke schonmal!!!
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 26 März 2014, 20:26:00
define Motion_Terasse notify BM_Terasse:motion IF ([BM_Terasse:brightness] < 125 and [BM_Terasse_aktiv:state] eq "ja") (set Lampe_Terasse 100 120, define Lampe_Terasse_at at +00:02:00 set Lampe_Terasse [Lampe_Terasse:level:d])


probiere einfach:

define Motion_Terasse notify BM_Terasse:motion IF ([BM_Terasse:brightness] < 125 and [BM_Terasse_aktiv:state] eq "ja" and !$defs{Lampe_Terasse_at}) (set Lampe_Terasse 100 120, define Lampe_Terasse_at at +00:02:00 set Lampe_Terasse [Lampe_Terasse:level:d])


Jetzt dürfte es kein Problem sein, während der zwei Minuten den notify mehrfach auszulösen. Auch die Fehlermeldung im Log, dass Lampe_Terasse_at schon definiert ist wird nicht mehr kommen.

Was  !$defs{Lampe_Terasse_at} bedeutet, kannst du dir jetzt bestimmt schon denken. ;)

Gruß

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

Alex_E

Hallo zusammen,

ich versuche mich gerade an einem Code, bekomme es aber einfach nicht hin. Ich würde gerne in Abhängig des Presence Moduls im Bereich Roommate eine Lampe nur dann schalten, wenn es dunkel bzw. zwischen verschiedenen Uhrzeiten ist.

Aktuell habe ich folgendes, was die Lampe grundsätzlich, ohne Uhrzeit oder Dunkelheit schaltet. Sieht so aus:
rr_Alex:home set ku_Lampe_gross on-for-timer 576

Jetzt soll also zusätzlich geprüft werden, ob es dunkel bzw. zwischen 2 Zeiten liegt und nur in dieser Abhängigkeit geschaltet werden.
Versucht habe ich es mit folgendem:

define LichtA notify rr_alex IF ([rr_Alex:home] and ($hms gt "18:00" and $hms lt "05:00") (set ku_Lampe_gross on-for-timer 576)

Jemand einen Tip für mich was ich falsch mache?

Gruß

Alex