FHT 8v direkt ansprechen
Die Heizungs-Stellantriebe FHT8v können mit einem CUL direkt angesprochen werden. Eine sinnvolle Ergänzung dazu stellen die Temperatur und Feuchtemesser S300TH dar. Mit dieser Kombination ist es möglich die Stellantriebe temperaturabhängig zu steuern.
Kurzanleitung
Die FHT8v mittels Webfrontend in FHEM integrieren (die Beispiele zeigen einen CUL der als CUL_0 in der fhem.cfg definiert wurde). Folgenden Code in die fhem.cfg eintragen:
define stellantrieb.01 FHT8V 1234 attr stellantrieb.01 room Heizungen
Vorbereitung des FHT8V:
- Batterien in den Stellantrieb einlegen und warten bis "A2" im Display erscheint
- Antrieb an den Heizkörper anschrauben.
- einmal kurz drücken und der Antrieb fährt zu und wieder auf
- danach zeigt er "A3".
- Am Stellantrieb den Knopf solange drücken bis 3 Pieptöne ertönen
- Im Web-Frontend auf [Heizungen] gehen dann auf [Stellantrieb.01] und auf den Knopf [SET] stellantrieb.01 pair drücken.
Wenn alles geklappt hat ertönt ein Piepton am Antrieb. Weiter geht es im Abschnitt: Temperaturabhängige Steuerung per PID und grafische Darstellung im Floorplan
Der lange Weg mit Erklärung
Die FHT8V mittels FHEM- Kommandozeile integrieren.
Hier gibt es 2 Wege, das, was in der Kurzanleitung beschrieben wurde "per Hand" umzusetzen.
1. Mit den FHEM-Befehlen für das Device "FHT8V" Das definieren des Stellantriebs in der fhem.cfg erfolgt wie oben beschrieben. (define <name> FHT <housecode> [IODev] )
Hier eine Übersicht der FHT-spezifischen Befehle:
set <name> pair ; zB. set stellantrieb.01 pair (pairen des Antriebes mit dem Namen stellantrieb.01)
set <name> valve <value;> zB. set stellantrieb.01 valve 90 (Stellantrieb auf 90 % setzen) get <name> valve zB. get stellantrieb.01 valve (Hole das letzte Stell-Kommando aus dem SendePuffer) Hier der Link zur Command-Ref : [1]
2. Mit den RAW-Befehlen
Vorbereitung wie oben in der Kurzanleitung.
Der Befehl pairt FHEM mit dem Stellantrieb.
set CUL_0 raw T1234012f00
Aufgesplittet:
set CUL_0 raw --> sendet über CUL_0 T1234 --> Stellantriebe Raum1 01 --> Der erste Stellantrieb des og. Raumes 2f --> Pairen 00 --> gehört zum Pairbefehl
Der Befehl setzt die Stellposition.
set CUL_0 raw T1234012600
Aufgesplittet:
set CUL_0 raw --> sendet über CUL_0 T1234 --> Stellantriebe Raum1 01 --> Der erste Stellantrieb des og. Raumes 26 --> Stellantrieb bewegen 00 --> Wieviel Prozent der Öffung des Stellantriebes (Beachte in HEXADEZIMAL !) 00 = 0 % Öffnung (Kalt) 19 = 10 % 33 = 20 % 4c = 30 % ... ff = 100 % (Heiss) Berechnung : SollProzent * 255 / 100 = Wert og.Wert von Dezimal in Hexadezial umrechnen ergibt die beiden letzten Zahlen
Mehrere Räume
Wird zB. die FHT-ID 1234 gewählt, so kann diese für den ersten Raum genutzt werden. Der zweite Raum bekommt die FHT-ID 1334, der dritte 1434 usw. Es wir also das erste Byte um je eins erhöht.
Beispiele:
Die Kennung des 1. Raumes war 1234
Ein 2. Raum kann mit 1334
Ein 3. Raum kann mit 1434
definiert werden.
Der 1. Stellantrieb des 2. Raumes wird mit:
set CUL_0 raw T1334012f00 [Enter]
Der 1. Stellantrieb des 3. Raumes wird mit:
set CUL_0 raw T1434012f00 [Enter]
gepairt.
Entsprechend werden auch die Stellantriebe mit:
2. Raum set CUL_0 raw T1334012600 [Enter]
3. Raum set CUL_0 raw T1434012600 [Enter]
bewegt.
Mehrere Stellantriebe pro Raum
(wurde noch ńicht getestet)
Beispiele:
Die Kennung des 1. Raumes war 1234 es folgt die Kennung im Raum
01 (erster Antrieb im Raum 1234) 02 (2. Antrieb im Raum 1234) 00 (es werden alle Antriebe im Raum 1234 angesprochen) 26 (zB.Antrieb stellen) ff (zB.Antrieb 100% aufmachen)
Kommando Struktur und bekannte Befehle
set CUL_0 raw THHHHDDCCVV
- T
- FHT Protokoll (statisch T)
- HHHH
- Hauscode in Hex
- DD
- Gerätenummer in Hex (bis zu 8 pro Raum)
- CC
- Befehl
- VV
- Wert
Bekannte Befehle:
2f Pair Verbindung mit FHEM herstellen 26 öffne den Stellantrieb in VV % (8bits of Hex) Berechnung siehe oben set CUL_0 raw T11 Puffer für alle FHT8V-Geräte abfragen set CUL_0 raw T10 Puffer für alle FHT8V-Geräte löschen
Beispiel Befehle
set CUL_0 raw T1234012600 -> Raum 1234, Stellantrieb1, 0 % (kalt) set CUL_0 raw T1234012685 -> Stellantrieb 52 % set CUL_0 raw T12340126FF -> Stellantrieb 100 % (heiss)
Temperaturabhängige Steuerung per PID und grafische Darstellung im Floorplan
PID ist ein Helper-Modul von FHEM. Es steht standardmäßig zur Verfügung und steuert die Verbindung zwischen den Temperaturfühlern S300TH und dem Stellantrieb FHT8V.
Voraussetzung für die Nutzung von PID ist ein Temperaturfühler S300TH mit Namen "CUL_WS_1" sowie ein gepairter Stellantrieb FHT8V im Raum "1234".
Ein Floorplan names "fp_grundriss" sollte eingebunden sein.
Folgender Code ist in die fhem.cfg einzutragen:
define stellantrieb.01 FHT8V 1234 attr stellantrieb.01 room Heizungen ## define heizung.01 PID CUL_WS_1 stellantrieb.01 attr heizung.01 alias Heizung_1 attr heizung.01 room Heizungen
Damit wird im Raum "Heizungen" ein FHT8v namens "Stellantrieb.01" und ein PID names "Heizung_1" dargestellt und kann dort auch bedient werden.
Um das Ganze noch etwas komfortabler zu gestalten, wird noch folgender Code in der fhem.cfg ergänzt:
define Heizkörper_1_desired_temp dummy # die Position 300,210 ist natürlich zu ändern attr Heizkörper_1_desired_temp fp_Grundriss 300,210,2,Wunschtemperatur attr Heizkörper_1_desired_temp room Heizungen attr Heizkörper_1_desired_temp setList state:17,18,19,20,21,21.5,22 attr Heizkörper_1_desired_temp webCmd state ### Der Notivy steuert das Zusammenspiel Änderung im Floorplan und Weitergabe an FHEM define Change_heizung.01 notify Heizkörper_1_desired_temp {\ my $neuer_wert = ReadingsVal("Heizkörper_1_desired_temp","state","0") ;;\ fhem("set heizung.01 desired $neuer_wert");;\ }
Damit wird im Floorplan ein Dropdown dargestellt, mit welchem die Temperatur des Stellantriebs.01 geregelt werden kann (bitte Geduld. Zwischen Änderung im Floorplan und Umsetzung am Stellantrieb kann eine Weile vergehen).
Beispiel für einen zentralen Heizungsschalter
Voraussetzung ist ein Floorplan und die oben beschriebene Einbindung der FHT8+S300TH Kombination.
Die Schaltbilder auf dem Floorplan haben den Namen "Heizung_minimal.on.png" sowie "Heizung_minimal.off.png".
Die Bilder unter "fhem/www/pgm2" speichern.
Das Umschalten der Bilder geschieht automatisch mit diesem Attribut.
attr Heizung_minimal fp_image Heizung_minimal.{state}.png
Es folgen die Eintragungen im config file "fhem.cfg"
define Heizung_minimal dummy attr Heizung_minimal fp_Grundriss 450,95,1,Heizung minimal attr Heizung_minimal fp_image Heizung_minimal.{state}.png attr Heizung_minimal room Heizungen attr Heizung_minimal setList on off #
Es folgen die entsprechende NOTIFY-Einträge.
Einmal werden die beiden unten genannten Heizkörper auf 17 Grad gebracht und zurück wieder auf 20 Grad.
define Heizung_MIN notify Heizung_minimal:on {\ # jetzt werden die PIDs angwiesen mit den Stellantrieben 17 Grad zu erreichen fhem("set heizung.01 desired 17");;\ # Die Dummys zur Darstellung der Wunschtemp. werden auch aktulisiert fhem("set Heizkörper_1_desired_temp 17");;\ # analog zum ersten Heizkörper fhem("set heizung.02 desired 17");;\ fhem("set Heizkörper_2_desired_temp 17");;\ Log 3, "Heizung auf 17 Grad";;\ } define Heizung_MAX notify Heizung_minimal:off {\ fhem("set heizung.01 desired 20");;\ fhem("set Heizkörper_1_desired_temp 20");;\ fhem("set heizung.02 desired 20");;\ fhem("set Heizkörper_2_desired_temp 20");;\ Log 3, "Heizung auf 20 Grad";;\ }
Einen Heiz-Zeitplan erstellen (mit Urlaubsfunktion)
Dazu läuft ein AT und dieser schaut immer um 00, 15, 30, 45 einer jeden Stunde in der Steuerdatei nach, ob etwas zu verändern ist.
In die fhem.cfg einfügen:
# Frage jede 1/4 Stunde Heizzeiten.cfg ab define Heizschalter_alle_15_minuten at +*00:15:00 {sucheSchaltzeit()} attr Heizschalter_alle_15_minuten alignTime 00:00:00
als nächstes die Datei /usr/share/fhem/FHEM/Heizzeiten.cfg anlegen und befüllen:
########################################### ##### Hier werden die Heizzeiten definiert # 0-6 Wochentag beginnt mit Sonntag # 00-23 Volle Stunde # 00 oder 15 oder 30 oder 45 Minute # PID-Name # Dummy-Name # gewünschte Temp. in vollen Graden ########################################### # Es folgen die Zeiten (Zeitraum zB. Urlaub) in denen nur Minimum (17 Grad) gefahren wird # Bitte bei Minute immer 00 15 30 oder 45 eingeben # BEACHTE: 24 Stunden vor Ablauf der Endzeit wird auf normalen Wochenschaltbetrieb zurückgeschaltet # MINIMUM als Wort # 01.01.2012 12:30 als Begin des Minimum # 12.01.2012 12:00 als Ende des Minimum MINIMUM 14.11.2012 16:13 15.11.2012 12:00 #### Wochenschaltzeiten#################### # Sonntag 0 08 00 heizung.02 Heizkörper_1_desired_temp 20 0 21 00 heizung.02 Heizkörper_1_desired_temp 17 # 0 08 00 heizung.01 Heizkörper_2_desired_temp 20 0 21 00 heizung.01 Heizkörper_2_desired_temp 17 ############################################ # Montag 1 14 00 heizung.02 Heizkörper_1_desired_temp 20 1 21 00 heizung.02 Heizkörper_1_desired_temp 17 # 1 06 00 heizung.01 Heizkörper_2_desired_temp 20 1 21 00 heizung.01 Heizkörper_2_desired_temp 17 ############################################
und so weiter. Hier können natürlich auch mehr Schaltvorgänge definiert werden.
Einmal in /fhem/FHEM/ angelegt, taucht diese dann im Webinterface unter
"Edit Files" "Own modules and helper files"
auf und kann ab dann auch dort bearbeitet werden.
Jetzt noch folgendes in die 99_myUtils.pm eintragen:
use Time::Local;
Danach wird die Subroutine eingetragen:
sub
sucheSchaltzeit() {
sleep 10; # Timingproblem loesen; siehe Forenbeitrag 64175
## Ermittle aktuelle Rechnerzeit /datum/ zeit/ tag etc. ######################
my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $jetztzeit = time();
my @Zeilen = ("");
# my @zeilen_werte = ("");
# öffne Steuerdatei nur zum Lesen
open(HEIZDAT,'<','/usr/share/fhem/FHEM/Heizzeiten.cfg') || die "Datei mit Heizzeiten nicht gefunden";
while(<HEIZDAT>)
{
push(@Zeilen,$_);
}
close(HEIZDAT);
## entferne alle \n-Zeichen
chomp (@Zeilen);
for(@Zeilen)
{
# in $_ steht die aktuelle Zeile und die wird per Leerzeichen aufgedröselt
my @zeilen_werte = split(/ /,$_);
### Abfrage ob es eine Kommentarzeile ist - Kennzeichen ein #
if (($zeilen_werte[0]) ne "#"){
#Abfrage ob Urlaubszeit (Minimum)
if (($zeilen_werte[0]) eq "MINIMUM"){
### Minimumzeitraum berechnen
my $sekunde_tmp = "0";
my @array_datumsplit = split(/\./, $zeilen_werte[1]);
my @array_zeitsplit = split(/:/, $zeilen_werte[2]);
my $minimum_begin = timelocal($sekunde_tmp,$array_zeitsplit[1],$array_zeitsplit[0],$array_datumsplit[0],$array_datumsplit[1]-1,$array_datumsplit[2]-1900);
my @array_datumsplit2 = split(/\./, $zeilen_werte[3]);
my @array_zeitsplit2 = split(/:/, $zeilen_werte[4]);
### Endzeit = eingetragen Endzeit - 1 Tag
my $minimum_ende = timelocal($sekunde_tmp,$array_zeitsplit2[1],$array_zeitsplit2[0],$array_datumsplit2[0],$array_datumsplit2[1]-1,$array_datumsplit2[2]-1900) - 86400;
if (($jetztzeit > $minimum_begin ) && ( $jetztzeit < $minimum_ende)) {
Log 3, "Habe Urlaub Heizung auf 17 Grad Minimum Jetzt: $jetztzeit Start:$minimum_begin Ende:$minimum_ende";
fhem "set AZ_desired_temp 17" ;
fhem "set Keller_desired_temp 17" ;
}
} else {
### Abfrage ob heute entsprechender Tag
if ($zeilen_werte[0] == $Wochentag){
## abprüfen ob Stunde erreicht
if ($zeilen_werte[1] == $Stunde){
## abprüfen ob Minute erreicht
if ($zeilen_werte[2] == $Minute){
#### Jetzt Name des Antriebs und Dummys und Zieltemp einlesen sowie Befehle absetzen
#fhem "set " . $zeilen_werte[3] . " desired " . $zeilen_werte[5] ;
fhem "set " . $zeilen_werte[4] . " " . $zeilen_werte[5] ;
Log 3, "$zeilen_werte[3] geaendert auf $zeilen_werte[5]";
}}}
} # Endif Minimum
} # Endif # Kommentar
} # EndeFor
}
################### Ende SUB sucheSchaltzeit
FHEM neu starten und...Fertig.
Tips und Tricks
1. In einem Raum befinden sich mehrere Heizkörper --> R.König sagt:
- Man kann mit dem PID zwar nur ein FHT8v steuern, aber ein FHT8v-Id kann man mehreren Geraeten zuweisen. Diese werden dann immer identisch eingestellt.