FHT 8v direkt ansprechen: Unterschied zwischen den Versionen
(Formatierung überarbeitet; kleinere Korrekturen; Wiki-Link(s) korrigiert) |
|||
Zeile 1: | Zeile 1: | ||
Die Heizungs-Stellantriebe [[CUL]] direkt angesprochen werden. | Die Heizungs-Stellantriebe '''FHT8v''' können mit einem [[CUL]] '''direkt angesprochen''' werden. | ||
Eine sinnvolle Ergänzung dazu stellen die Temperatur und Feuchtemesser S300TH dar. | 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. | Mit dieser Kombination ist es möglich die Stellantriebe temperaturabhängig zu steuern. | ||
Folgenden Code in die fhem.cfg | == 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: | |||
<pre> | |||
define stellantrieb.01 FHT8V 1234 | |||
attr stellantrieb.01 room Heizungen | |||
</pre> | |||
Vorbereitung des FHT8V: | |||
# Batterien in den Stellantrieb einlegen und warten bis "A2" im Display erscheint | |||
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 == | |||
= Der lange Weg mit Erklärung = | |||
Die FHT8V mittels FHEM- Kommandozeile integrieren. | Die FHT8V mittels FHEM- Kommandozeile integrieren. | ||
Zeile 31: | Zeile 26: | ||
1. Mit den FHEM-Befehlen für das Device "FHT8V" | 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] ) | Das definieren des Stellantriebs in der fhem.cfg erfolgt wie oben beschrieben. (define <name> FHT <housecode> [IODev] ) | ||
Hier eine Übersicht der FHT-spezifischen Befehle | Hier eine Übersicht der FHT-spezifischen Befehle: | ||
<nowiki>set <name> pair ; zB. set stellantrieb.01 pair (pairen des Antriebes mit dem Namen stellantrieb.01)</nowiki> | <nowiki>set <name> pair ; zB. set stellantrieb.01 pair (pairen des Antriebes mit dem Namen stellantrieb.01)</nowiki> | ||
Zeile 40: | Zeile 34: | ||
<nowiki>get <name> valve zB. get stellantrieb.01 valve (Hole das letzte Stell-Kommando aus dem SendePuffer)</nowiki> | <nowiki>get <name> valve zB. get stellantrieb.01 valve (Hole das letzte Stell-Kommando aus dem SendePuffer)</nowiki> | ||
Hier der Link zur Command-Ref : [http://fhem.de/commandref.html#FHT8Vset [1]] | Hier der Link zur Command-Ref : [http://fhem.de/commandref.html#FHT8Vset [1]] | ||
2. Mit den RAW-Befehlen | 2. Mit den RAW-Befehlen | ||
Zeile 49: | Zeile 41: | ||
Der Befehl pairt FHEM mit dem Stellantrieb. | Der Befehl pairt FHEM mit dem Stellantrieb. | ||
set CUL_0 raw T1234012f00 | |||
Aufgesplittet: | Aufgesplittet: | ||
set CUL_0 raw --> sendet über CUL_0 | |||
T1234 --> Stellantriebe Raum1 | |||
01 --> Der erste Stellantrieb des og. Raumes | 01 --> Der erste Stellantrieb des og. Raumes | ||
2f --> Pairen | 2f --> Pairen | ||
00 --> gehört zum Pairbefehl | 00 --> gehört zum Pairbefehl | ||
Der Befehl setzt die Stellposition. | Der Befehl setzt die Stellposition. | ||
:<code>set CUL_0 raw T1234012600</code> | |||
Aufgesplittet: | Aufgesplittet: | ||
set CUL_0 raw --> sendet über CUL_0 | |||
T1234 --> Stellantriebe Raum1 | |||
01 --> Der erste Stellantrieb des og. Raumes | 01 --> Der erste Stellantrieb des og. Raumes | ||
26 --> Stellantrieb bewegen | 26 --> Stellantrieb bewegen | ||
00 --> Wieviel Prozent der Öffung des Stellantriebes (Beachte in HEXADEZIMAL !) | 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. | 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. | ||
Es wir also das erste Byte um je eins | |||
Beispiele: | Beispiele: | ||
Zeile 91: | Zeile 81: | ||
definiert werden. | definiert werden. | ||
Der 1. Stellantrieb des 2. Raumes wird mit | Der 1. Stellantrieb des 2. Raumes wird mit: | ||
:<code>set CUL_0 raw T1334012f00 [Enter]</code> | |||
Der 1. Stellantrieb des 3. Raumes wird mit: | |||
Der 1. Stellantrieb des 3. Raumes wird mit | :<code>set CUL_0 raw T1434012f00 [Enter]</code> | ||
gepairt. | gepairt. | ||
Zeile 108: | Zeile 96: | ||
'''Mehrere Stellantriebe pro Raum''' | |||
(wurde noch ńicht getestet) | (wurde noch ńicht getestet) | ||
Zeile 117: | Zeile 105: | ||
es folgt die Kennung im Raum | 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 == | |||
<code>set CUL_0 raw THHHHDDCCVV </code> | |||
HHHH | ;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: | |||
VV | 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 [[:Kategorie:Hilfsmodul|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". | |||
PID | |||
Ein Floorplan names "fp_grundriss" sollte eingebunden sein. | Ein Floorplan names "fp_grundriss" sollte eingebunden sein. | ||
Folgender Code | 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 | 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 | 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. | Die Bilder unter "fhem/www/pgm2" speichern. | ||
Das Umschalten der Bilder geschieht automatisch mit diesem Attribut. | Das Umschalten der Bilder geschieht automatisch mit diesem Attribut. | ||
:<code>attr Heizung_minimal fp_image Heizung_minimal.{state}.png</code> | |||
Es folgen die Eintragungen im config file "fhem.cfg" | 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_Grundriss 450,95,1,Heizung minimal | ||
attr Heizung_minimal fp_image Heizung_minimal.{state}.png | attr Heizung_minimal fp_image Heizung_minimal.{state}.png | ||
attr Heizung_minimal room Heizungen | attr Heizung_minimal room Heizungen | ||
attr Heizung_minimal setList on off | attr Heizung_minimal setList on off | ||
# | # | ||
Es folgen die entsprechende | 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. | 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 | # jetzt werden die PIDs angwiesen mit den Stellantrieben 17 Grad zu erreichen | ||
fhem("set heizung.01 desired 17");;\ | fhem("set heizung.01 desired 17");;\ | ||
Zeile 228: | Zeile 207: | ||
fhem("set Heizkörper_2_desired_temp 17");;\ | fhem("set Heizkörper_2_desired_temp 17");;\ | ||
Log 3, "Heizung auf 17 Grad";;\ | Log 3, "Heizung auf 17 Grad";;\ | ||
} | } | ||
define Heizung_MAX notify Heizung_minimal:off {\ | define Heizung_MAX notify Heizung_minimal:off {\ | ||
fhem("set heizung.01 desired 20");;\ | fhem("set heizung.01 desired 20");;\ | ||
Zeile 234: | Zeile 213: | ||
fhem("set heizung.02 desired 20");;\ | fhem("set heizung.02 desired 20");;\ | ||
fhem("set Heizkörper_2_desired_temp 20");;\ | fhem("set Heizkörper_2_desired_temp 20");;\ | ||
Log 3, "Heizung auf 20 Grad";;\ | 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: | als nächstes die Datei '''/usr/share/fhem/FHEM/Heizzeiten.cfg '''anlegen und befüllen: | ||
########################################### | |||
##### Hier werden die Heizzeiten definiert | ##### Hier werden die Heizzeiten definiert | ||
# 0-6 Wochentag beginnt mit Sonntag | # 0-6 Wochentag beginnt mit Sonntag | ||
# 00-23 Volle Stunde | # 00-23 Volle Stunde | ||
# 00 oder 15 oder 30 oder 45 Minute | # 00 oder 15 oder 30 oder 45 Minute | ||
# PID-Name | # PID-Name | ||
# Dummy-Name | # Dummy-Name | ||
# gewünschte Temp. in vollen Graden | # gewünschte Temp. in vollen Graden | ||
########################################### | ########################################### | ||
# Es folgen die Zeiten (Zeitraum zB. Urlaub) in denen nur Minimum (17 Grad) gefahren wird | # 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 | # Bitte bei Minute immer 00 15 30 oder 45 eingeben | ||
# BEACHTE: 24 Stunden vor Ablauf der Endzeit wird auf normalen Wochenschaltbetrieb zurückgeschaltet | # BEACHTE: 24 Stunden vor Ablauf der Endzeit wird auf normalen Wochenschaltbetrieb zurückgeschaltet | ||
# MINIMUM als Wort | # MINIMUM als Wort | ||
# 01.01.2012 12:30 als Begin des Minimum | # 01.01.2012 12:30 als Begin des Minimum | ||
# 12.01.2012 12:00 als Ende des Minimum | # 12.01.2012 12:00 als Ende des Minimum | ||
MINIMUM 14.11.2012 16:13 15.11.2012 12:00 | MINIMUM 14.11.2012 16:13 15.11.2012 12:00 | ||
#### Wochenschaltzeiten#################### | #### Wochenschaltzeiten#################### | ||
# Sonntag | # Sonntag | ||
0 08 00 heizung.02 Heizkörper_1_desired_temp 20 | 0 08 00 heizung.02 Heizkörper_1_desired_temp 20 | ||
Zeile 279: | Zeile 257: | ||
1 06 00 heizung.01 Heizkörper_2_desired_temp 20 | 1 06 00 heizung.01 Heizkörper_2_desired_temp 20 | ||
1 21 00 heizung.01 Heizkörper_2_desired_temp 17 | 1 21 00 heizung.01 Heizkörper_2_desired_temp 17 | ||
############################################ | ############################################ | ||
und so weiter . | |||
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 | Einmal in /fhem/FHEM/ angelegt, taucht diese dann im Webinterface unter | ||
"Edit Files" | |||
"Own modules and helper files" | "Own modules and helper files" | ||
auf und kann ab dann auch dort bearbeitet werden. | auf und kann ab dann auch dort bearbeitet werden. | ||
Jetzt noch folgendes in die '''99_myUtils.pm'''eintragen | Jetzt noch folgendes in die '''99_myUtils.pm''' eintragen: | ||
:<code>use Time::Local;</code> | |||
Danach wird die Subroutine eingetragen | |||
sub | |||
sucheSchaltzeit() { | |||
## 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 == | |||
= Tips und Tricks = | |||
1. In einem Raum befinden sich mehrere Heizkörper --> R.König sagt: | 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. | |||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] |
Version vom 4. Dezember 2013, 08:12 Uhr
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() { ## 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.