Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

RoBra81

Hallo,

ich bin gerade dabei meine Lüftersteuerung zu bauen. Ich möchte die maximale Lüfterstufe (0 bis 10) auf Basis verschiedener Kriterien begrenzen. Dabei habe ich an DOIF gedacht. Nun zu meiner Frage: eines der Kriterien soll die Zeit sein (Lüfter im Schlafzimmer nachts nicht auf höchster Stufe). Das wäre mit DOIF und [xx:00] ja kein Problem. Nun würde ich aber gern die Zeit dynamisch halten (Dropdownliste an meinem Lüftungsdummy). Gibt es nun eine Möglichkeit, wenn ein Nutzer eine Zeit auswählt (set LueftungsDummy Ruhe_Ab 10 => wird in einem Reading des Dummys gespeichert) daraus ein DOIF-Event [10:00] zu machen?

Vielen Dank
Ronny

Damian

Zitat von: RoBra81 am 24 Juli 2014, 13:11:44
Hallo,

ich bin gerade dabei meine Lüftersteuerung zu bauen. Ich möchte die maximale Lüfterstufe (0 bis 10) auf Basis verschiedener Kriterien begrenzen. Dabei habe ich an DOIF gedacht. Nun zu meiner Frage: eines der Kriterien soll die Zeit sein (Lüfter im Schlafzimmer nachts nicht auf höchster Stufe). Das wäre mit DOIF und [xx:00] ja kein Problem. Nun würde ich aber gern die Zeit dynamisch halten (Dropdownliste an meinem Lüftungsdummy). Gibt es nun eine Möglichkeit, wenn ein Nutzer eine Zeit auswählt (set LueftungsDummy Ruhe_Ab 10 => wird in einem Reading des Dummys gespeichert) daraus ein DOIF-Event [10:00] zu machen?

Vielen Dank
Ronny

Zeiten kann man auch als Funktionen mit [{funktion(...)}] angeben. Dazu musst du dir eine eigene Funkion programmieren, die dann die entsprechende Zeit als Returnwert im Format HH:MM oder HH:MM:SS liefert, siehe z. B. sunset(...).

Gruß

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

RoBra81


gsbox

Hallo.

@Damian : Vielen Dank für die tolle DOIF-Möglichkeit. Damit habe ich es hinbekommen, meine Lampen nach einem Timeout automatisch abschalten zu lassen. Aber jetzt scheitere ich leider an einer Meldung, die ich bringen möchte, sofern das Licht durch den Timer und nicht von Hand ausgeschaltet wurde. Ich habe folgenden Code definiert :

define azLichtAus DOIF ([az_licht] eq "on")({Log 1,"az_licht wurde automatisch abgeschaltet";};;set az_licht off)
attr azLichtAus wait 10


Leider gipfelt das in folgender Fehlermeldung

azLichtAus: {Log 1,"az_licht wurde automatisch abgeschaltet";};;;;set az_licht off: Unknown command {Log, try help.
Unknown command };;set, try help.


Was mache ich falsch ? (bin blutiger FHEM-Anfänger  :( )

Vielen Dank für die Hilfe

Brockmann

Zitat von: gsbox am 24 Juli 2014, 15:42:50
define azLichtAus DOIF ([az_licht] eq "on")({Log 1,"az_licht wurde automatisch abgeschaltet";};;set az_licht off)
Versuch es mal mit
...abgeschaltet"},set az_licht off)

gsbox

Danke, das wars. Mensch, da hätte ich auch selber drauf kommen können  ::)

VG

Brockmann

Zitat von: Damian am 24 Juli 2014, 15:15:38
Zeiten kann man auch als Funktionen mit [{funktion(...)}] angeben. Dazu musst du dir eine eigene Funkion programmieren, die dann die entsprechende Zeit als Returnwert im Format HH:MM oder HH:MM:SS liefert, siehe z. B. sunset(...).
Zu welchem Zeitpunkt wird die Funktion denn zur Berechnung aufgerufen und der Timer gesetzt? Mein Eindruck ist, RoBra81 will einfach irgendwann im Laufe des Tages am Dummy eine Zeit einstellen und danach soll sich das DOIF dann richten. Aber das DOIF bekommt doch nichts davon mit, dass am Dummy etwas geändert wurde. Müsste da nicht irgendwie noch ein Trigger dazu, der bei jeder Änderung am Dummy für die Neuberechnung des Timers sorgt?

Alternativ könnte man vielleicht auch modify nutzen, um das DOIF jedes Mal anzupassen, wenn sich der Wert des Dummy ändert.

gsbox

Ich möchte gerne mehrere Lampen, sowie die Rolläden zu unterschiedlichen Zeiten an unterschiedlichen Tagen mit DOIF schalten (um für unseren Urlaub eine Art AnwesenheitsSimulation zu haben).

Jetzt definiere ich ja einige DOIF-Defines. Ist es möglich, diese zu gruppieren, so dass ich diese "Anwesenheits-Simulation" mit einem Atttribut aktivieren/deaktivieren kann ?

Viele Grüße

Brockmann

Zitat von: gsbox am 24 Juli 2014, 16:38:56
Jetzt definiere ich ja einige DOIF-Defines. Ist es möglich, diese zu gruppieren, so dass ich diese "Anwesenheits-Simulation" mit einem Atttribut aktivieren/deaktivieren kann ?
Möglicherweise geht es noch eleganter, aber Du könntest einen Dummy "Anwesenheits-Simulation" definieren und in jedes dieser DOIFs die Bedingung
...and [Anwesenheits-Simulation] eq "on")
mit aufnehmen. Dann brauchst Du nur den Dummy passend steuern und alle DOIFs gehorchen.

gsbox

Danke - das werde ich mal ausprobieren.

satprofi

Hallo.
Seit installation der neueren version klappt folgendes nicht mehr richtig



((([Heizungsmode] eq "off" and [HZ_Wohnzimmer_Weather] > 22) or ([Heizungsmode] eq "auto" and [HZ_Wohnzimmer_Weather] < 24)) and [Pac] > 1500 and [10:00-18:30] and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF (([Heizungsmode] eq "off") or ([Heizungsmode] eq "auto") and [Pac] < 1000 and [Terassentuer] eq "Closed")
(set Klima_WZ off)
DOELSEIF  ([Klima_WZ_manuOn] eq "on" and [HZ_Wohnzimmer_Weather] > 22 and [Terassentuer] eq "Closed")
(set Klima_WZ on)
DOELSEIF ([Klima_WZ_manuOn] eq "off")
  (set Klima_WZ off)
DOELSE
  (set Klima_WZ off)


Wenn Terassentuer "open" schaltet Klima nicht off, ebenfalls wenn Pac < 1000 .
Einziges event ist immer nur timer_2

hast du einen tipp?

gruss
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Brockmann

Zitat von: satprofi am 24 Juli 2014, 18:55:50
Seit installation der neueren version klappt folgendes nicht mehr richtig

Hast Du die Installationshinweise beachtet?
Achtung: Diese Version ist intern nicht abwärtskompatibel zu der vorherigen. Daher:

System  anhalten, Modul kopieren, System wieder hochfahren (kein reload)

Danach bei allen bereits definierten DOIF-Modulen über die Weboberfläche auf DEF klicken und über modify-Button bestätigen.

satprofi

Ja, hab ich. auch gelöscht und neu definiert.
doif schaltet nur mehr wenn die zeit erreicht wird. brauch ich jetzt "do always" ?
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 24 Juli 2014, 19:12:12
Ja, hab ich. auch gelöscht und neu definiert.
doif schaltet nur mehr wenn die zeit erreicht wird. brauch ich jetzt "do always" ?
Auf was steht denn last_cmd?

Gruß

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

satprofi

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram