FHT 8v direkt ansprechen

Aus FHEMWiki
Version vom 10. Mai 2013, 22:29 Uhr von Generix (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Die Heizungs-Stellantriebe CUL direkt angesprochen werden. Eine sinnvolle Ergänzung dazu stellen die Temperatur und Feuchtemesser S300TH dar. Mit dieser …“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Heizungs-Stellantriebe 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 einzutragen:

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 und dann Antrieb an Heizkörper anschrauben.

Dann einmal kurz drücken und der Antrieb fährt zu und wieder auf danach zeigt er "A3".

1. Am Stellantrieb den Knopf solange drücken bis 3 Pieptöne ertönen

2. 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 inkrementiert.

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 standardmaessig zur Verfuegung und steuert die Verbindung zwischen den Temperaturfühlern S300TH und dem Stellantrieb FHT8V.

Es folgt ein Beispiel für die Benutzung:

Voraussetzung 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 wäre 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 Names "Stellantrieb.01" und ein PID names "Heizung_1" dargestellt und kann auch dort bedient werden.

Um das Ganze noch etwas komfortabler zu gestalten ergänzen wir folgenden Code in die fhem.cfg


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");;\
  }

Und nun wird im Floorplan ein Dropdown dargestellt mit welchen wir die Temperatur des Stellantriebs.01 regel können. (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 og. Einbindung der FHT8+S300TH Kombinationen.

Meine 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 NOTIY-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 was zu verändern ist.

In die fhem.cfgeinfü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.pmeintragen.

Ganz oben habe ich folgendes eingefügt:

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.