FHEM > Codeschnipsel

FHT Fensterkontakte an HM-CC-RT-DN koppeln

(1/1)

unimatrix:
Hallo,

habe mir ein Set der FHT-Fensterkontakte bestellt, diese sind ja wesentlich günstiger als die HM-Kontakte. Natürlich kann man diese nicht direkt an die HM-Thermostate koppeln. Daher muss die Fenster-Auf und Fenster-Zu Umschaltung über FHEM erfolgen. Folgender Codeschnipsel ist mir dabei behilflich. Vll. kanns jemand brauchen.

Ich habe meine tatsächlichen Gerätenamen drin gelassen in der Hoffnung, dass der Code so einfacher lesbar ist. Muss man sich natürlich anpassen.

Die Funktion kann man in eine 99er Datei einstellen und dann braucht man natürlich noch ein Notify pro Fenster, ungefähr so:


--- Code: ---define n_fenster_buero notify fenster_buero:Window.* {fht_fenster("fenster_buero");;}
define n_fenster_gz notify fenster_gz:Window.* {fht_fenster("fenster_gz");;}
define n_fenster_schlaf notify fenster_schlaf:Window.* {fht_fenster("fenster_schlaf");;}
define n_fenster_gbad notify fenster_gbad:Window.* {fht_fenster("fenster_gbad");;}
define n_fenster_gzbad notify fenster_gzbad:Window.* {fht_fenster("fenster_gzbad");;}

--- Ende Code ---


--- Code: ---sub fht_fenster{
my $fenster=$_[0]; # erster Parameter, der übergeben wird - welches Fenster wurde gerade gemeldet
my $state=ReadingsVal($fenster,"Window","closed"); # Das "Closed"-Reading wird eingelesen
my $state2; # Variable für Räume mit 2 Fenstern.

# Folgende Zeile bewirkt, dass nur Fensterzustände, die neuer als 300 Sekunden sind, berücksichtigt werden.
# So wird verhindert, dass ständig zu den Ventilen gesendet wird
# Außerdem wäre sonst keine manuelle Verstellung mehr möglich, da alle 1-2 Minuten dann von FHEM wieder überschrieben würde
# kann man noch eleganter und besser machen, z.B. Zustand von Thermostat vorher abfragen
# oder auch manuelle Veränderungen erkennen und berücksichtigen
# Anwesendheit wird hier noch nicht berücksichtigt.
# Es wird davon ausgegangen, dass man anwesend ist, sonst wäre ja keiner da um das Fenster auf/zu zu machen.
if(time_str2num(ReadingsTimestamp("$fenster","Window",""))-time_str2num(ReadingsTimestamp("$fenster","Previous",""))>300){return;}

# Die folgenden Blöcke sind meine verschiedenen Fenster, jeweils hardkodiert zugeordnet zu den Ventilen.
# Kann man besser machen (Zuordnung in HASH usw.), aber so versteht man es vll besser.
if($fenster eq "fenster_buero"){
if($state eq "Closed"){
#Das Thermostat wird in den Auto-Modus zurückgesetzt.
# die jetzt gültige Auto-Desired-Temp wird vom RT automatisch aktiviert.
# dies klappt nict beim HM-CC-TC da er die Auto-Temp erst beim nächsten SChaltpunkt setzt.
fhem "set temp_buero_ClimRT_tr controlMode auto";
}else{
#Das Thermostat wird in den Manu-Modus gesetzt. die Temperatur auf "off"
fhem "set temp_buero_ClimRT_tr controlManu off";
}
fhem "set temp_buero_ClimRT_tr burstXmit"; # optional: Ich möchte aber schnell schalten. Da es nur ein Ventil ist kann ich mit der Last für HMLAN leben.

# Hier ein Beispiel für eine kompliziertere Verknüpfung
# Zwei nebeneinanderliegende Räume. Ein Gästezimmer, und ein Gästebad
# Wenn im Bad das Fenster auf ist, sollen beide Heizkörper kalt bleiben.
# (Unsere Gäste haben die Eigenart, dann die Zwischentür aufzulassen)
# Wird nur im Gästezimmer gelüftet, soll im Bad aber geheizt werden (z.B. früh morgens damit es da drin schonmal schön warm wird)
}elsif($fenster eq "fenster_gz" || $fenster eq "fenster_gzbad"){
$state=ReadingsVal("fenster_gz","Window","Closed");
$state2=ReadingsVal("fenster_gzbad","Window","Closed");
if($state2 ne "Closed"){
fhem "set temp_gz_ClimRT_tr controlManu off";
fhem "set temp_gzbad_ClimRT_tr controlManu off";
}else{
fhem "set temp_gzbad_ClimRT_tr controlMode auto";
if($state eq "Closed"){
fhem "set temp_gz_ClimRT_tr controlMode auto";
}else{
fhem "set temp_gz_ClimRT_tr controlManu off";
}
}
fhem "set temp_gz_ClimRT_tr burstXmit";
fhem "set temp_gzbad_ClimRT_tr burstXmit";
# Noch zwei weitere "normale" Verknüpfungen
}elsif($fenster eq "fenster_schlaf"){
if($state eq "Closed"){
fhem "set temp_schlaf_ClimRT_tr controlMode auto";
}else{
fhem "set temp_schlaf_ClimRT_tr controlManu off";
}
fhem "set temp_schlaf_ClimRT_tr burstXmit";
}elsif($fenster eq "fenster_gbad"){
if($state eq "Closed"){
fhem "set temp_gbad_ClimRT_tr controlMode auto";
}else{
fhem "set temp_gbad_ClimRT_tr controlManu off";
}
fhem "set temp_gbad_Climate burstXmit";
}
}

--- Ende Code ---

Puschel74:
Hallo,

das wären Beispiele für das Wiki  ;)

Aber als kleine Anregung.
Das

--- Code: ---define n_fenster_buero notify fenster_buero:Window.* {fht_fenster("fenster_buero");;}
--- Ende Code ---
für jedes Fenster zu erstellen ist etwas mühsam, oder nicht?.

Wie wäre es so?

--- Code: ---define n_fenster_alle notify fenster_.*:Window.* {fht_fenster("$NAME");;}
--- Ende Code ---

Sollte später mal ein FHTTK dazu kommen brauchst du nur bei der Namensvergabe aufpassen das er in das Schema passt - oder eben nicht wenn das notify nicht drauf reagieren soll.

Grüsse

P.S.: Ich hoffe ich habe nicht zuviel Blödsinn geschrieben aber ich denke mal das sollte so klappen (und erstpart einiges an defines-Zeilen in der Konfig)
Wobei ich schon am überlegen bin ob das
--- Code: ---{fht_fenster("$NAME");;}
--- Ende Code ---
nicht besser so aussehen sollte
--- Code: ---{fht_fenster();;}
--- Ende Code ---
und $NAME nicht automatisch übergeben wird an die sub.
Edith: Verweis http://forum.fhem.de/index.php/topic,11886.0.html

unimatrix:
ja, danke für den Hinweis, klappt natürlich auch so!

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln