Bei einer bestimmten Temp reagieren

Begonnen von sun1907, 25 Dezember 2012, 13:03:15

Vorheriges Thema - Nächstes Thema

sun1907

Hallo, erstmal frohe Weihnachten an alle.
Ich bin (auch) neu hier und finde dieses Forum sehr nützlich. Leider bin ich kein Programmier-Profi und benötige daher etwas Hilfe.

Ich benötige einen Code der bei einer bestimmen Aktion reagiert. Und zwar misst ja die FHEM im Grunde nach einer bestimmten Zeit durch Datenanfrage an die FHT80 die Temp eines jeweiligen Raumes. Bin ich im Urlaub, schalte ich z,.B. die Urlaubsschaltung ein, welche alle FHT80 auf manuell setzt, ebenso die Temp auf 15C.
Dennoch möchte /brauche ich aber nun eine Zusatzfunktion, die sowas misst / ausführt, wie:

Wenn die gemessene Temp im Raum X unter 15C sinkt (if measured-temp <15), dann schalte den FHT80 auf Temp 18C. Sobald die Temp wieder bei gemessener Temp von >18C liegt, dann überprüfe ob Urlaubsschaltung ist noch "on" und wenn JA, dann setze den FHT wieder auf 15C.

Ich möchte damit eine "starke" Unterkühlung vermeiden, wenn man z.B. länger abwesend ist.


Meine "Urlaubsschaltung" sieht derzeit so aus und klappt auch. Nur möchte ich gerne den oben gewünschten Code mit einbinden:

define Urlaubsschaltung FS20 76dc 00
attr Urlaubsschaltung room FS20
define FileLog_Urlaubsschaltung FileLog /usr/local/FHEM/var/log/Urlaubsschaltung-%Y.log Urlaubsschaltung
attr FileLog_Urlaubsschaltung logtype text
attr FileLog_Urlaubsschaltung room FS20
define UrlaubsschaltungChecker notify Urlaubsschaltung {\
  if ("%" eq "on") {\
   fhem ("set Badezimmer mode manual");;\
   fhem ("set Badezimmer desired-temp 15.0");;\
   fhem ("set Kueche mode manual");;\
   fhem ("set Kueche desired-temp 15.0");;\
   fhem ("set Wohnzimmer mode manual");;\
   fhem ("set Wohnzimmer desired-temp 15.0");;\
   fhem ("set Arbeitszimmer mode manual");;\
   fhem ("set Arbeitszimmer desired-temp 15.0");;\
   fhem ("set Schlafzimmer mode manual");;\
   fhem ("set Schlafzimmer desired-temp 15.0");;\
  }\
  else {\
    fhem ("set Badezimmer mode auto");;\
    fhem ("set Kueche mode auto");;\
    fhem ("set Wohnzimmer mode auto");;\
    fhem ("set Arbeitszimmer mode auto");;\
    fhem ("set Schlafzimmer mode auto");;\
  }\
}

kud

Schau Dir mal das Prinzip an.
Der Code unten ist nicht getestet.
Nur das Prinzip:
1. Alle 15 Minuten nachschauen
2. Checken ob Wert <15 wenn ja dann Solltemp. = 17

Ich habe leider keine FHT80B mehr, da ich alle FHT8V direkt ansteuere.
Du musst bei ReadingsVal("CUL_WS_1","temperature","0");;\ CUL_WS_1 durch den namen desd FHT ersetzen .
Ist vielleicht ein Ansatz für Dich.

Gruss KU

define check_alle_15_minuten at +*00:15:00 {\\
   my $letzter_wert = ReadingsVal("CUL_WS_1","temperature","0");;\
   if ($letzter_wert < 15){
         fhem("set Name_des_FHT 17");;\
   };;\
}

UliM

Zitat von: sun1907 schrieb am Di, 25 Dezember 2012 13:03Ich möchte damit eine "starke" Unterkühlung vermeiden, wenn man z.B. länger abwesend ist.

Hi,
das verstehe ich nicht. Du setzt die Solltemperatur am FHT auf 15°C -> der FHT sorgt dafür, dass diese Temperatur gehalten wird.
Warum willst Du zwischendrin die Solltemperatur vorübergehend hochsetzen?

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Martin Fischer

--
Admin, Developer, Gründungsmitglied des FHEM e.V.

MarkusN

Ich frage mich ja ob es für sowas nicht eine bessere Lösung gibt. FHEM liesst doch alle x Minuten die Temperatur aus. Warum muss ich dann nochmal einen Task alle y Minuten laufen lassen um zu checken ob die Temperatur den Wert Z erreicht hat? Kann FHEM nicht selbst aktiv werden wenn es bei dem Auslesen merkt dass die Temperatur eine gewisse Grenze überschritten haben? Evtl per notify?

UliM

Hi,
fhem liest nicht, fhem bekommt mitgeteilt (//images/smiley_icons/icon_smile.gif)
Und natürlich kannst Du reagieren, wenn eine Temperaturmeldung eingeht. Dafür gibt es notify: http://fhem.de/commandref.html#notify
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

sun1907

Erstmal DANKE für alle Antworten bisher !.
Ich habe nun erstmal die Lösung von @kdeparade eingetragen, mal sehen wie es reagiert.

@Martin Fischer
an dich eine Frage: was ist genau das HCS-Modul ?

Es sei erwähnt, dass ich meine FHEM auf einer Synology DS209 laufen habe und ggf (weiß ich noch nicht genau), Einschränkungen habe.
Ich möchte die DS209 aber bald gegen eine DS213+ tauschen. Für mich aber kommt die Syno in jedem Fall in Frage, weil sie a) 24h läuft und b) sehr wenig Strom verbraucht.

Martin Fischer

schau doch mal in die commandref.html

dort ist ja alles genau beschrieben. mit hcs kannst du diverse steueraufgaben deiner heizung übernehmen.

gruss
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

sun1907

Danke noch mal an alle bisherigen Antworten.

Im Grunde hatte ich auch einen Denkfehler, in dem Sinne hat das Mitglied @UliM schon recht. Eigentlich reagieren die FHTs, bzw. die Heizungsregler ja so oder so ab einer Unter-Temp. Also sprich, wenn der FHT auf Beispiel 15C steht und es im Raum nach einer Zeit 14,9C wird, dann sollte ja der FHT von sich aus den Raum auf mind. wieder 15C hoch regeln, richtig ?. In dem Sinne kann man meine Anfrage schließen.

@Martin Fischer: auch dir DANKE noch mal für die Antwort, diese werde ich mir dennoch mal öfter und genauer anschauen.

Jedoch habe ich nun eine andere Frage, wo sicher jemand helfen kann.

Durch einen Beitrag hier im Forum habe ich eine sehr schöne Anwesenheitsschaltung gefunden, die darauf reagiert, ob ein Smartphone im Netz ist oder nicht. Dieses klappt auch tadelos und diese Idee finde ich genial. Jedoch bin ich wie gesagt leider kein Programmier-Profi und würde gerne noch eine Erweiterung haben, einbauen.

In dem Fall möchte ich, dass FHEM nach einer Zeit automatisch erkennt, dass z.B. beide Smartphones für einen längeren Zeitraum NICHT eingeloggt waren, im Netz. Also wenn z.B. meine Frau und ich im Urlaub sind. Hierbei soll die FHEM dann (wenn wir es vergessen haben die Urlaubsschaltung zu setzen), entsprechend reagieren.

Hier also der Code.

# ********************************* Urlaub
define Urlaubsschaltung FS20 76dc 00
attr Urlaubsschaltung room Raumuebersicht
define FileLog_Urlaubsschaltung FileLog /usr/local/FHEM/var/log/Urlaubsschaltung-%Y.log Urlaubsschaltung
attr FileLog_Urlaubsschaltung logtype text
attr FileLog_Urlaubsschaltung room Logfiles
# Programmierung des Schalter
define UrlaubsschaltungChecker notify Urlaubsschaltung {\
  if ("%" eq "on") {\
   fhem ("set Badezimmer mode manual");;\
   fhem ("set Badezimmer desired-temp 14.0");;\
   fhem ("set Kueche mode manual");;\
   fhem ("set Kueche desired-temp 14.0");;\
   fhem ("set Wohnzimmer mode manual");;\
   fhem ("set Wohnzimmer desired-temp 14.0");;\
   fhem ("set Arbeitszimmer mode manual");;\
   fhem ("set Arbeitszimmer desired-temp 14.0");;\
   fhem ("set Schlafzimmer mode manual");;\
   fhem ("set Schlafzimmer desired-temp 14.0");;\
  }\
  else {\
    fhem ("set Badezimmer mode auto");;\
    fhem ("set Kueche mode auto");;\
    fhem ("set Wohnzimmer mode auto");;\
    fhem ("set Arbeitszimmer mode auto");;\
    fhem ("set Schlafzimmer mode auto");;\
  }\
}


# ****************** Anwesenheitsschaltung
# **************** Anwesenheit von Alex, Handy
define Anwesenheit_Alex dummy
attr Anwesenheit_Alex loglevel 6
attr Anwesenheit_Alex room Anwesenheit
# attr Anwesenheit_Alex setList on off
define Anwesenheit_Alex_FileLog FileLog /usr/local/FHEM/var/log/Anwesenheit_Lena.log Anwesenheit_Lena
attr Anwesenheit_Alex_FileLog logtype text
attr Anwesenheit_Alex_FileLog room Logfiles

define Job_AnwesendAlex at +*00:05:00 { \
  use Net::Ping;; \
  my $ip = "192.168.3.45";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)(//images/smiley_icons/icon_wink.gif) { \
    fhem("set Anwesenheit_Alex on");; \
  } \
  else { \
    fhem("set Anwesenheit_Alex off");; \
  } \
}

# ****************Anwesenheit von Lena, Handy
define Anwesenheit_Lena dummy
attr Anwesenheit_Lena loglevel 6
attr Anwesenheit_Lena room Anwesenheit
# attr Anwesenheit_Lena setList on off
define Anwesenheit_Lena_FileLog FileLog /usr/local/FHEM/var/log/Anwesenheit_Lena.log Anwesenheit_Lena
attr Anwesenheit_Lena_FileLog logtype text
attr Anwesenheit_Lena_FileLog room Logfiles

define Job_AnwesendLena at +*00:05:30 { \
  use Net::Ping;; \
  my $ip = "192.168.3.34";; \
  my $p = Net::Ping->new("icmp", 9, 64);; \
  if ($p->ping($ip)(//images/smiley_icons/icon_wink.gif) { \
    fhem("set Anwesenheit_Lena on");; \
  } \
  else { \
    fhem("set Anwesenheit_Lena off");; \

  } \
}


Wie gesagt klappt das oben bisher auch alles ohne Probleme.
Die Erweiterung soll nun aber so aussehen, dass die FHEM erkennt :"beide Personen sind nun länger als 4 Tage außer Haus, also schalte ich die Urlaubsschaltung ein, sofern diese nicht schon auf ON steht".
Also übersetzt:
Wenn Urlaubsschaltung nicht schon auf ON steht und Anwesenheit_Alex ist >4 Tage OFF und Anwesenheit_Lena ist >4 Tage OFF, dann setze Urlaubsschaltung auf ON"

Vielen Dank im Voraus für jede Hilfe.