Lüftungsanlage Steuern laststate bei geöffneten Fenstern merken

Begonnen von lewej, 12 November 2015, 15:44:58

Vorheriges Thema - Nächstes Thema

lewej

Hallo Zusammen,

ich habe folgendens Problem, ich möchte gerne meine Lüftungsanlage ausschalten, wenn Fenster geöffnet sind und wenn alle wieder geschlossen sind, soll wieder die Stufe geschaltet werden, die zuvor geschaltet war.

Soweit funktioniert alles, nur wird momentan immer die Stuffe1 geschaltet und nicht die als letztes AKTIV war. Wie kann ich in dieses Konstrukt die letzte aktive Stufe intgrieren?

In diesem dummy steht drin, welche Stufe aktuell geschaltet ist.

define WOLF_CWL_STATE_STUFE dummy
attr WOLF_CWL_STATE_STUFE devStateIcon 0:vent_ventilation@red 1:vent_ventilation_level_1 2:vent_ventilation_level_2 3:vent_ventilation_level_3
attr WOLF_CWL_STATE_STUFE group Lueftungsanlage
attr WOLF_CWL_STATE_STUFE room Zentral
attr WOLF_CWL_STATE_STUFE setList state:0,1,2,3
#attr WOLF_CWL_STATE_STUFE webCmd state


Dummy für die Anzahl der geöffneten Fenster

define dmy_Lueftungsanlage_auschalten dummy
attr dmy_Lueftungsanlage_auschalten stateFormat open
#Sobald sich an dem structure Objekt für alle Fenster etwas tut, ruft ein notify eine Funktion in der 99_myUtils.pm auf:
define nfy_st_Alle_Fenster notify struc_Fenster_alle {CountNonClosedWindows("dmy_Lueftungsanlage_auschalten")}


Hier wird dann geschaltet aber nur wenn nach 90sek noch immer mindestens ein Fenster offen ist.

define doif_Lueftungsanlage_ein_aus_bei_open_Fenster DOIF ([dmy_Lueftungsanlage_auschalten:open:d] >= 1) (set WOLF_STUFE0 on) DOELSEIF ([dmy_Lueftungsanlage_auschalten:open:d] == 0 ) (set WOLF_STUFE1 on)
attr doif_Lueftungsanlage_ein_aus_bei_open_Fenster do always
attr doif_Lueftungsanlage_ein_aus_bei_open_Fenster wait 90:90


Gruß und Danke

Bennemannc

Hallo,

ist mir alle viel zu kompliziert.
dummy ...
structure
define Fenster_O structure Fenster_O Fensterkontakt_02 Fensterkontakt_03 Fensterkontakt_04 Fensterkontakt_09 Fensterkontakt_12
notify
define xxx notify Fenster_O.* IF ([Fenster_O] eq "closed") (trigger dummy .. status des Lüfters; set Lüfter off) ELSE (set Lüfter Wert vom Dummy on)
Wenn Du die 90 sec noch haben willst - statt set Lüfter off - define delay_Lüfter at +00:01:30 set Lüfter off

So ist der Dummy nur ein "Merker" mehr würde ich da auch nicht einstellen. Die Werte müsste man mit ReadingsVal auslesen können.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

lewej

Hallo,

Mir ist es wichtig, das ich die Option mit der Anzahl der geöffneten Fenster habe. Vielleicht hat noch jemand eine Idee, wie ich das DOIF mit laststate erweitern kann.

Gruss
le

FunkOdyssey

Mich würde mal interessieren, wie du das mit dem lastState machst?
Ich hatte ein ähnliches Problem und habe mich mit setreading und deletereading herumgeschlagen, um den vorherigen Zustand im DOIF zwischenzuspeichern. Aber aus irgendeinem Grund (ist schon länger her) hatte das nicht funktioniert. Vielleicht hilft dir ja dieser Tipp. :-)

Bennemannc

Hallo,

die Anzahl der geöffneten Fenster - also ich hätte da eine Unorthodoxe aber simple Lösung.
Mit eventMap open und close ummapen zu 1 und 0 ... und dann einfach addieren !

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

lewej

Zitat von: Bennemannc am 13 November 2015, 14:53:39
Hallo,

die Anzahl der geöffneten Fenster - also ich hätte da eine Unorthodoxe aber simple Lösung.
Mit eventMap open und close ummapen zu 1 und 0 ... und dann einfach addieren !

Gruß Christoph

Hallo,

meine Lösung funktioniert ja, daher würde ich gerne in dem DOIF noch das
laststate von dem Dummy zwischen Speichern und da habe ich keine Idee.

Gruss
le

marvin78

Die Idee oben mit setreading ist schon richtig. Allerdings speichert man sowas nicht im DOIF sondern im entsprechenden Device als neues Reading.

setreading DEVICE lastState open

Im DOIF kann man diesen Status dann speichern und auf die bekannten Arten und Weisen auch wieder auslesen. Vorteil hier ist, dass die Readings im statefile gespeichert werden und somit auch nach einem Neustart noch zur Verfügung stehen.

lewej

Zitat von: marvin78 am 13 November 2015, 17:21:47
Die Idee oben mit setreading ist schon richtig. Allerdings speichert man sowas nicht im DOIF sondern im entsprechenden Device als neues Reading.

setreading DEVICE lastState open

Im DOIF kann man diesen Status dann speichern und auf die bekannten Arten und Weisen auch wieder auslesen. Vorteil hier ist, dass die Readings im statefile gespeichert werden und somit auch nach einem Neustart noch zur Verfügung stehen.

Hallo,
Versteh das noch nicht ganz. Mein Dummy Device hat ja die states:0 1 2 3.
Könntest du evtl. ein konkretes Beispiel schreiben.

Gruss und Danke
Le

marvin78

Wie wäre es mit Doku lesen und die Stichwörter zu nutzen? ;)

Ein Dummy kann nicht nur ein Reading (state) haben, sondern so wie jedes Device, auch weitere. Man kann grundsätzlich jedem Device mit setreading seine eigenen Readings "aufdrücken" (das geht auch mit echten Schaltern, Fensterkontakten etc.). Im Grunde habe ich dazu schon ein Beispiel gepostet. Ich passe es mal an:

setreading DUMMYDEVICE lastState 2

(festurelevel 5.7)

Und schon hast du in deinem Dummy ein weiteres Reading lastState. Diese kannst du in notifys, DOIFS oder ats auch per setreading wieder verändern und es somit als Datenspeicher "missbrauchen". Wie man Readings dann wieder ausliest, ist ja der Doku zu entnehmen.