Meldung wenn am Tag noch nicht gelüftet wurde.

Begonnen von coolheizer, 10 Januar 2020, 12:20:19

Vorheriges Thema - Nächstes Thema

coolheizer

Ich möchte eine Meldung auf dem Fernseher ausgeben die sich alle 5 minuten wiederholt wenn Täglich noch nicht für mindestens 10 Minuten gelüftet wurde.
Nach möglichkeit sollten die Meldungen sofort aufhören sobald das Fenster geöffnet wird, allerdings wieder weiter gehen für den Fall das nicht mindestens 10 Minuten gelüftet wurde.

Eine Fenster offen Meldung habe ich mir schon zusammen geschnipselt und funktioniert bestens:

defmod Meldung_EG_Schlafzimmer_Fenster DOIF ([EG_Fenster_Sz] eq "open" and [Mebus_Aussentemperatur:temperature] < 15)(set SATReceiver_Unten showText Schlafzimmerfenster seit {(round([OG_Fenster_Wz:state:sec]/60,0))} Minuten offen. Es hat aussen {(round([Mebus_Aussentemperatur:temperature]/1,0))} Grad.)\
DOELSEIF ([EG_Fenster_Sz] eq "closed") (set SATReceiver_Unten showText Fenster im Schlafzimmer nun geschlossen)
attr Meldung_EG_Schlafzimmer_Fenster repeatcmd 300
attr Meldung_EG_Schlafzimmer_Fenster room 8_Amazon
attr Meldung_EG_Schlafzimmer_Fenster wait 1800



Außentemperatur sollte hierbei außen vor sein, es soll generell mindestens 1 mal am Tag gelüftet werden.
Wenn in der Meldung noch die letzte zeit (Tag:Stunde:Minute)+ Dauer der letzten Öffnung mit einfliesst wäre klasse, aber kein Muss.

Fensterkontakte sind die HM optisch HM-Sec-Sco.

Gruß
Karsten
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

KernSani

Und was ist jetzt konktet die Frage?


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

coolheizer

Die Frage ist wie ich das bewerkstelligen kann, wie muss das Modul dafür aussehen.

Die Meldung sollte täglich ab 11 Uhr erscheinen
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

Otto123

Zitat von: KernSani am 10 Januar 2020, 12:26:10
Und was ist jetzt konktet die Frage?
Eventuell: Ob man sich damit beliebt bei den Mitbewohnern macht?  ::) :-*
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rabehd

Wie wäre es erstmal den Prozeß zu beschreiben?
Dann zu überlegen woher die notwendigen Infos kommen, bzw. wo man sie in FHEM findet?

Willst Du das pro Raum machen?
Ist Fensterkippen schon lüften?

Wahrscheinlich musst du die Summe der Lüftungszeiten pro Tag bilden.
Vorher würde ich nicht über andere Schritte nachdenken.

ZitatOb man sich damit beliebt bei den Mitbewohnern macht?
Vermutlich nicht  ;D
Auch funktionierende Lösungen kann man hinterfragen.

coolheizer

Mag sein dass ich mich damit nicht beliebt mache, es kann aber nicht sein das teilweise für über eine Woche keine frische Luft in die Bude kommt, obwohl zu 2 in einem 20m2 für mindestens 18 Stunden am Tag, weil ist ja kalt draußen....

Hatte ich den Prozess nicht schon beschrieben, das was ich möchte?

Die Infos sollte der Fenster Kontakt liefern, dieser unterscheidet übrigens nicht ob Kipp oder weit auf.

Die Summe bilden der gesamten Lüftung wäre nicht schlecht.

Ja pro Raum, wobei in einem Raum 2 Fenster mit je einem Kontakt, hier sollte es egal sein über welches Fenster die 10 Minuten erreicht werden, meinetwegen auch die Summe beider Fenster zusammen rechnen.

Leider habe ich überhaupt keine Ahnung wie ich das ganze zusammen basteln könnte, ansonsten hätte ich hier schon einen Anfang gemacht und zur Überprüfung/Hilfe rein gesetzt.
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

Otto123

Ich hatte da mal was zur Zeitmessung der Öffnung. Summenbildung geht dann auch irgendwie. Ich dachte gleich im Userreading mit monotonic - aber das geht gerade nicht.
defmod n_Lueftung notify Fenster.*:(open|closed) setreading n_Lueftung time_$EVENT {(time)}
attr n_Lueftung userReadings Diff:time_closed.* {int(ReadingsNum($name,"time_closed",0) - ReadingsNum($name,"time_open",0))}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

KernSani

Ok, dann fangen wir mal an... Ich denke mal laut. Wie oben schon angedeutet wurde wäre es vermutlich sinnvoll die Lüftungsdauer irgendwo zu sammeln. Es gibt ein Modul namens hourCounter, mit dem man sowas machen könnte (da gibt es dann auch schöne readings per day, per month usw...). Das wäre aber vielleicht etwas übertrieben. Ich würde mir zunächst einmal einen Dummy definieren (Alternativ kann man das auch direkt in einem DOIF machen). In diesen Dummy kann man über notify/Doif die Lüften-Startzeit in ein reading schreiben (also das Fenster-auf-Event) und die Lüften-Endezeit (Fenster wieder zu), die Differenz ausrechnen und zum Inhalt eines weiteren readings (lueftzeitToday) hinzufügen. Dann muss eigentlich nur noch ein at oder DOIF laufen, das ab 11 alle 5 Minuten prüft und die Meldung triggert. Nachts kann man lueftzeitToday dann wieder auf 0 setzen...
Weiss nicht, ob ich jetzt alles berücksichtigt habe, aber das sollte dir zumindest einen Ansatz zum weiter probieren geben.

Grüße,

Oli


RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Otto123

Mir fällt noch der Hinweise ein: Einen Text auf dem ausgeschalteten Sat ausgeben wirft einen Fehler. Gibt wieder mehrere Möglichkeiten das zu verhindern. Der Zusatz unten sagt mir: Es gibt auch einen oben. Also wenn gewünscht, könnte man die Ausgabe auf Allen machen die an sind.
set SATReceiver_.*:FILTER=state=on showtext ... oder natürlich auch mit einem if () {}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Dieses Stück Code zählt die Dauer eines geöffneten Fensters pro Tag:

defmod di_lueften DOIF subs {\
sub add_time {\
  my ($time)=@_;;\
  set_State(get_State(0)+$time);;\
  set_Exec("timer",$time,"add_time($time)");;\
}\
}\
init {[00:00];;set_State(0);;}\
{ if ([Keller_Fenster] eq "open") {\
    set_Exec("timer",60,'add_time(60)') \
  } else {\
    set_State(get_State()+get_Exec("timer"));;del_Exec"timer"\
  }\
}


Im Status wird die Gesamtdauer eines geöffneten Fensters alle 60 Sekunden aktualisiert, unabhängig davon wie oft es geschlossen und wieder geöffnet wurde.
Man kann den Code für seine Bedürfnisse anpassen: z. B. die Dauer beim Schließen des Fensters auf Null setzen oder es für zwei Fensters des Raumes erweitern usw.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

coolheizer

Danke schonmal für eure Antworten.

Bin beeindruckt wie man sowas geschrieben bekommt.

Selber Suche ich mir, in der Regel, fertige Geräte und passe sie nach meinen Bedürfnissen an (try and error ). 

Leider habe ich rein garnix gefunden was mir weiter helfen würde, offenes Fenster Erinnerung findet man öfters.
Evtl. Auch falsche such Begriffe die ich verwende.

Mal schauen ob ich das irgendwie zusammen gebastelt bekomme.

Wenn jemand allerdings noch Lust hat hier weiter zu machen, ich würde mich freuen, mit Glück braucht es ja noch wer mit mehr Ahnung als ich und stellt es hier zur Verfügung.

Die Tage ist Mal wieder unser Internet ausgefallen, daher mit Handy unterwegs.

FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

coolheizer

Eure Antworten haben mir reichlich weiter geholfen, allerdings:

defmod Zaehler_EG_Sz_lueften DOIF subs {\
sub add_time {\
  my ($time)=@_;;\
  set_State(get_State(0)+$time);;\
  set_Exec("timer",$time,"add_time($time)");;\
}\
}\
init {[00:00];;set_State(0);;}\
{ if ([OG_Fenster_Bad] eq "open") {\
    set_Exec("timer",60,'add_time(60)') \
  } else {\
    set_State(get_State()+get_Exec("timer"));;del_Exec"timer"\
  }\
}
attr Zaehler_EG_Sz_lueften room 8_Amazon


Gibt nach ~90 sec geöffneten Fenster ein state von : 94.162841796875 aus,
lässt sich die Ausgabe auf sekunden oder Minuten bringen?
Und wie kann ich den Zähler auf 0 setzen?
Bisher habe ich einen FHEM Neustart gemacht dafür.


defmod Bitte_lueften_Sz DOIF ([19:36] and [Zaehler_EG_Sz_lueften:state] < 600 and [OG_Fenster_Bad] eq "closed") (set SATReceiver:FILTER=state=on msg info 15 Es wurde heute noch nicht gelüftet. Bitte Fenster für Mindestens 10 Minuten öffnen. Es hat aussen {(round([Mebus_Aussentemperatur:temperature]/1,0))} Grad.) DOELSEIF ([OG_Fenster_Bad] eq "closed") (set SATReceiver:FILTER=state=on msg info 15 Es wurde heute für {(round([Zaehler_EG_Sz_lueften:state]/60,0))}  Minuten gelüftet. Es hat aussen {(round([Mebus_Aussentemperatur:temperature]/1,0))} Grad.)
attr Bitte_lueften_Sz repeatcmd 30
attr Bitte_lueften_Sz room 8_Amazon


Haut noch nicht so recht hin, wenn ich das Fenster öffne gehen die Meldungen (cmd_1) weiter.
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

KernSani

#12
Hallo nochmal,
Ich würde dir drinhend empfehlen dich zunächst einmal selbst mit den Verschiedenen Themen zu beschäftigen, ein bisschen Google zu bemühen, Commandref und Wiki lesen etc... Wenn du dir hier alles vorkauen lässt, wirst du vielleicht ein funktionierendes System bekommen, aber bei kleinsten Anpassungen oder Fehlern wieder hier landen und hoffen müssen.

Edit: Sorry, die Leseempfehlungen (die ich gerade wieder gelöscht habe) passen bei der von dir gewählten Lösung nicht. Da brauchst du eher ein Perl-Handbuch

Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Damian

Es handelt sich vornehmlich um Perl. Da sollte man zumindest ein paar Grundkenntnisse haben. Hier findest du die Dokumentation zu den benutzten Funktionen: https://fhem.de/commandref_DE.html#DOIF_Perl_Modus

Mit defmod wird das Modul initialisiert (init-Block) und hier ist set_State(0), was es bedeutet, kannst du dir bestimmt schon denken. Zum Testen kannst du auch über setreading den Status des Moduls auf Null setzen.

Nachkommastellen kannst du mit der Perlfunktion int() abschneiden oder die Funktion sprintf () benutzen.

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

coolheizer

Ich habe das ganze nun mit HourCounter gelöst.
Perl zu lernen ist mir da zu umständlich, ich bastel alle 1/2 Jahre mal an FHEM dran herum, ansonsten benötige ich es nicht,
bis ich es das nächste mal wieder benötige, habe ich das wieder vergessen.


Möchte euch meine Lösungen nicht vorenthalten, meine erinnerung für Fenster auf:

defmod Meldung_Wohnzimmer_Fenster DOIF ([OG_Fenster_Wz] eq "open" and [Mebus_Aussentemperatur:temperature] < 15)(set ECHO_Wohnzimmer reminder_normal Wohnzimmerfenster seit {(int([OG_Fenster_Wz:state:sec]/60))} Minuten offen. Es hat aussen {(int([Mebus_Aussentemperatur:temperature]/1))} Grad.,set SATSchlafzimmer:FILTER=state=on msg info 10 Wohnzimmerfenster seit {(int([OG_Fenster_Wz:state:sec]/60))} Minuten offen. Es hat aussen {(int([Mebus_Aussentemperatur:temperature]/1))} Grad.)\
DOELSEIF ([OG_Fenster_Wz] eq "closed") (set ECHO_Wohnzimmer speak Fenster im Wohnzimmer nun geschlossen,set SATSchlafzimmer:FILTER=state=on msg info 10 Fenster im Wohnzimmer nun geschlossen)
attr Meldung_Wohnzimmer_Fenster repeatcmd 300
attr Meldung_Wohnzimmer_Fenster room 8_Amazon
attr Meldung_Wohnzimmer_Fenster wait 1200



HourCounter:

defmod CN.Zaehler_EG_Wz_r_Fenster HourCounter EG_Fenster_Wz_r:open EG_Fenster_Wz_r:closed
attr CN.Zaehler_EG_Wz_r_Fenster event-min-interval tick.*:0,.*:3600
attr CN.Zaehler_EG_Wz_r_Fenster event-on-change-reading .*
attr CN.Zaehler_EG_Wz_r_Fenster room 8_Amazon


Meldung das gelüftet werden soll:

defmod Bitte_lueften_EG_Wz DOIF ([10:45-23:59] and [CN.Zaehler_EG_Wz_r_Fenster:pulseTimePerDay] < 600 and [EG_Fenster_Wz] eq "closed") (set SATReceiver_Unten:FILTER=state=on msg info 15 Es wurde heute für {(int([CN.Zaehler_EG_Wz_r_Fenster:pulseTimePerDay] /60))} Minuten gelüftet. Bitte Fenster für Mindestens 10 Minuten öffnen. Es hat aussen {(int([Mebus_Aussentemperatur:temperature]/1))} Grad.) DOELSEIF ([EG_Fenster_Wz] eq "open" and [CN.Zaehler_EG_Wz_r_Fenster:pulseTimePerDay] < 600 ) (set Bitte_lueften_EG_Wz initialize)  DOELSEIF ([EG_Fenster_Wz] eq "closed" and [CN.Zaehler_EG_Wz_r_Fenster:pulseTimePerDay] > 600 ) (set SATReceiver_Unten:FILTER=state=on msg info 15 Es wurde heute für {(int([CN.Zaehler_EG_Wz_r_Fenster:pulseTimePerDay]/60))}  Minuten gelüftet. Es hat aussen {(int([Mebus_Aussentemperatur:temperature]/1))} Grad.)
attr Bitte_lueften_EG_Wz repeatcmd 90
attr Bitte_lueften_EG_Wz room 8_Amazon
attr Bitte_lueften_EG_Wz wait 3:3:3


FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.