Elektroheizung mit HM-CC-TC steuern

707 views
Skip to first unread message

team-menge

unread,
Sep 25, 2012, 6:27:22 AM9/25/12
to fhem-...@googlegroups.com
Hallo zusammen,
 
ich beschäftige mich seit kurzem mit fhem. Bin auch sehr begeistert über die Möglichkeiten. Meine Homematic-Schalter habe ich bis jetzt sehr gut zum Laufen bekommen.
 
Zur Zeit scheitere ich daran, eine Elektroheizung (also schaltbare Steckdosen) temperaturgesteuert mit einem Thermostat Homematic HM-CC-TC zu bedienen.
 
Ich habe die Geräte Geräte erfolgreich mit fhem gepairt und im Thermostat die gewünschten Temperaturen über tempList... angelegt. Jetzt möchte ich folgendes erreichen:
 
Wenn die gewünschte Temperatur um 0,3 °C unterschritten wird, soll die Heizung angeschaltet werden, wenn die gewünschte Temperatur um 0,3 °C überschritten wird, soll die Heizung ausgeschaltet werden.
 
Dazu habe ich folgendes in die fhem.cfg eingetragen:
 
define HeizungBuero notify Buero_Wandthermostat.* {\
my $tsoll = ReadingsVal("Buero_Wandthermostat","measured-temp","");;\
my $tist = ReadingsVal("Buero_Wandthermostat","desired-temp","");;\
my $val  = Value("Buero_Heizung");;\
if (($tist < ($tsoll - 0.3)) && ($val eq "off")) {fhem("set Buero_Heizung on")}\
if (($tist > ($tsoll + 0.3)) && ($val eq "on")) {fhem("set Buero_Heizung off")}\
}
 
Von Perl habe ich leider keine Ahnung. Wo liegt mein Fehler?
 
Ich habe folgende Hardware:
- fhem 5.2 (fhem.pl 1875 2012-09-19) auf Fritz!Box 7270 v3 (über USB-Stick)
- HM Config LAN
- HM-CC-TC Funk-Wandthermostat
- HM-LC-SW1-FM Schaltaktor
 
 

Rudolf Koenig

unread,
Sep 25, 2012, 6:57:47 AM9/25/12
to fhem-...@googlegroups.com
> Von Perl habe ich leider keine Ahnung. Wo liegt mein Fehler?

Was fuer ein Fehler?

Carl Tenschert

unread,
Sep 25, 2012, 7:02:12 AM9/25/12
to fhem-...@googlegroups.com


Am Dienstag, 25. September 2012 12:27:22 UTC+2 schrieb team-menge:
Hallo zusammen,
 
Zur Zeit scheitere ich daran, eine Elektroheizung (also schaltbare Steckdosen) temperaturgesteuert mit einem Thermostat Homematic HM-CC-TC zu bedienen.
 
Reicht den die Leistung vom Steckdosenschalter ?

 

team-menge

unread,
Sep 25, 2012, 7:20:35 AM9/25/12
to fhem-...@googlegroups.com
Meine dargestellten Befehle funktionieren so leider nicht.

team-menge

unread,
Sep 25, 2012, 7:21:40 AM9/25/12
to fhem-...@googlegroups.com
Die Leistung der Schalter reicht. Manuell kann ich diese über fhem schalten und die Heizung funktioniert. Die Schalter sind ja für 16 A ausgelegt und es liegen ca. 1.200 W an.

Carsten

unread,
Sep 25, 2012, 7:27:15 AM9/25/12
to fhem-...@googlegroups.com

my $tsoll = ReadingsVal("Buero_Wandthermostat","measured-temp","");;\
my $tist = ReadingsVal("Buero_Wandthermostat","desired-temp","");;\
my $val  = Value("Buero_Heizung");;\


Was mir auffällt:

measured-temp ist die gemessene Temperatur, also IST
desired-temp ist die Wunschtemperatur, also SOLL

Du hast die Werte bei vertauscht. 

team-menge

unread,
Sep 25, 2012, 7:44:03 AM9/25/12
to fhem-...@googlegroups.com
Hat sich leider nichts verändert. Das speichern der fhem.cfg über "save fhem.cfg" liefert auch keine Fehlermeldung.

Rudolf Koenig

unread,
Sep 25, 2012, 7:47:53 AM9/25/12
to fhem-...@googlegroups.com
> Hat sich leider nichts ver�ndert. Das speichern der fhem.cfg �ber "save
> fhem.cfg" liefert auch keine Fehlermeldung.

Ich empfehle ein Schritt-fuer-Schritt debuggen wie auch in
http://fhem.de/commandref.html#perl
beschrieben ist.

team-menge

unread,
Sep 25, 2012, 7:52:35 AM9/25/12
to fhem-...@googlegroups.com
Danke. Ich weiss zwar nocht nicht wie, aber ich werd's versuchen.

Am Dienstag, 25. September 2012 13:47:56 UTC+2 schrieb Rudolf Koenig:
> Hat sich leider nichts ver�ndert. Das speichern der fhem.cfg �ber "save

dou...@gmx.de

unread,
Sep 25, 2012, 9:16:29 AM9/25/12
to fhem-...@googlegroups.com


...ist gar nicht so schwer. Ging mir aber anfangs auch so.

Tipp: versuch doch mal wo immer es geht  Logfile Einträge zu generieren, damit du weisst, was im Programm abläuft ... so z.B. 

Log 1, "Meine Temperaturen; Soll: ".("$tsoll")." / Ist: ".("$tist")." / Val: ".("$val");

VG
Ralf

team-menge

unread,
Sep 25, 2012, 9:42:56 AM9/25/12
to fhem-...@googlegroups.com
Danke für den Tip. Wo soll ich die Zeile einfügen?

dou...@gmx.de

unread,
Sep 25, 2012, 9:46:06 AM9/25/12
to fhem-...@googlegroups.com

Vorsicht: nicht getestet :-)

define HeizungBuero notify Buero_Wandthermostat.* {\

my $tsoll = ReadingsVal("Buero_Wandthermostat","measured-temp","");;\
my $tist = ReadingsVal("Buero_Wandthermostat","desired-temp","");;\
my $val  = Value("Buero_Heizung");;\
Log 1, "Meine Temperaturen; Soll: ".("$tsoll")." / Ist: ".("$tist")." / Val: ".("$val");;\

Carsten

unread,
Sep 25, 2012, 9:55:07 AM9/25/12
to fhem-...@googlegroups.com

Da ist allerdings immer noch Soll und Ist vertauscht.

@team-menge: Wo kommt das Skript denn eigentlich ursprünglich her?

team-menge

unread,
Sep 25, 2012, 11:26:58 AM9/25/12
to fhem-...@googlegroups.com
Das Script ist "Eigenbau". Ich habe keine Ahnung, ob das so funktionieren kann (offensichtlich nicht ;-))

puschel74

unread,
Sep 25, 2012, 11:37:45 AM9/25/12
to fhem-...@googlegroups.com
Hallo,

mach erstmal aus

my $tsoll = ReadingsVal("Buero_Wandthermostat","measured-temp","");;\
my $tist = ReadingsVal("Buero_Wandthermostat","desired-temp","");;\
ein
my $tist = ReadingsVal("Buero_Wandthermostat","measured-temp","");;\
my $tsoll = ReadingsVal("Buero_Wandthermostat","desired-temp","");;\

Damit sollte die Zuordnung der Werte schonmal richtig sein ;-)

Grüße

team-menge

unread,
Sep 28, 2012, 9:04:45 AM9/28/12
to fhem-...@googlegroups.com
So jetzt habe ich die perl-Befehle einzeln eingegeben (debug) und erhalte nach dem if ...
 
Global symbol "$tist" requires explicit package name at (eval 25) line 1.
Global symbol "$tsoll" requires explicit package name at (eval 25) line 1.
Global symbol "$val" requires explicit package name at (eval 25) line 1.
Was hat dies zu bedeuten?

Am Dienstag, 25. September 2012 13:47:56 UTC+2 schrieb Rudolf Koenig:
> Hat sich leider nichts ver�ndert. Das speichern der fhem.cfg �ber "save

dou...@gmx.de

unread,
Sep 28, 2012, 10:41:32 AM9/28/12
to fhem-...@googlegroups.com


probier mal in der Kommandozeile:

{ReadingsVal("Buero_Wandthermostat","measured-temp","")}

und 

{ReadingsVal("Buero_Wandthermostat","desired-temp","")}

VG
Ralf

Carsten

unread,
Sep 28, 2012, 11:18:36 AM9/28/12
to fhem-...@googlegroups.com
Am Freitag, 28. September 2012 15:04:45 UTC+2 schrieb team-menge:
So jetzt habe ich die perl-Befehle einzeln eingegeben (debug) und erhalte nach dem if ...
 
Global symbol "$tist" requires explicit package name at (eval 25) line 1.
Global symbol "$tsoll" requires explicit package name at (eval 25) line 1.
Global symbol "$val" requires explicit package name at (eval 25) line 1.
Was hat dies zu bedeuten?

 
Das hat zu bedeuten, dass er die Variablen nicht kennt, weil du Sie in den ersten 3 Zeilen definiert hast, die du aber nicht mit eingegeben hast.

Die Zeilen einzeln in die Befehlszeile einzugeben, funktioniert nicht, weil sie ohne Context keinen Sinn ergeben.

Bist du sicher, dass du deine Geräte mit "Buero_Wandthermostat" und "Buero_Heizung" benanntt hast?

Funktioniert das schalten der Heizung außerhalb des Skripts mit set Buero_Heizung on?

team-menge

unread,
Sep 29, 2012, 1:28:06 PM9/29/12
to fhem-...@googlegroups.com
Funktioniert beides, wie es soll. Es werden jeweils die "measured-tempy" bzw. die "desired-temp" ausgegeben.

team-menge

unread,
Sep 29, 2012, 1:31:10 PM9/29/12
to fhem-...@googlegroups.com
Mit den Bezeichnungen bin ich sicher und das schalten, wie auch das Auslesen der Temperaturen, außerhalb des Scripts funktionieren.

team-menge

unread,
Oct 1, 2012, 5:10:21 AM10/1/12
to fhem-...@googlegroups.com
Hallo zusammen,
 
nach gefühlten unzähligen Versuchen scheint die Heizung jetzt zu funktionieren.
 
Ich habe folgendes in die "99_Utils.pm"-Datei eingetragen:
 
sub
bueroheizung()
 {
 my $Tist = ReadingsVal("Buero_Wandthermostat","measured-temp","");
 my $Tsoll = ReadingsVal("Buero_Wandthermostat","desired-temp","");
 my $Val = Value("Buero_Heizung");
if ($Tist < $Tsoll) {
   # Schalte "Buero_Heizung" ein
   fhem("set Buero_Heizung on");
 }
else {
   if ($Tist > $Tsoll) {
     fhem("set Buero_Heizung off");
     }
   }
}
 
Dann habe ich noch "define Bueroheizung at +*00:05:00 {bueroheizung}" in die fhem.cfg eingetragen und jetzt läuft es.
Der Auto-Modus mit den definierten tempList-Attributen funktioniert genauso gut, wie der Manu-Modus.
 
Der Fehler muss wohl bei meiner "notify"-Definierung gelegen haben.
 
Problem gelöst! Danke nochmals für eure Hilfe.
 

Am Dienstag, 25. September 2012 12:27:22 UTC+2 schrieb team-menge:

j hohn

unread,
Nov 28, 2012, 3:38:02 AM11/28/12
to fhem-...@googlegroups.com
Ich beschäftige mich erst seit ca. 2 Wochen mit fhem und dieser Schnipsel hat mir gleich auf Anhieb mal weitergeholfen. Ich habe den ein bisschen ausgebaut, damit er etwas universeller nutzbar ist.
Meine Perl Kentnisse sind eher rudimentär. Verbesserungsvorschläge herzlich willkommen.

######## heizung ####################################################
# What  : Schaltet Heizung an oder aus
# Call  : { heizung($raum,$sensor1,$sensor2,...) }
#

sub heizung($@) {
    my $raum = shift(@_);
    my @sensors = @_;
    my $Tist = ReadingsVal($raum."_thermostat", "measured-temp","");
    my $Tsoll = ReadingsVal($raum."_thermostat", "desired-temp","");
    my $Tschalter = Value($raum."_hz_schalter");
    my $Tsensor = "closed";

    # Überprüfung der Fenstersensoren, wenn Fenster geöffnet oder gekippt setze $Tsensor entsprechend
    foreach my $sensor (@sensors) {
        my $sensorstate = Value($sensor);
        if ($sensorstate eq "open") {
            $Tsensor = "open";
        }
        elsif ($sensorstate eq "tilted") {
            $Tsensor = "tilted";
        }
    }
   

    Log 1, "Heizungsregelung fuer Raum: $raum, Isttemperatur: $Tist, Solltemperatur: $Tsoll, Heizungsschalter ist $Tschalter";
    # Wenn Ist-Tempeartur < Soll-Temperatur, alle Fenstersensoren geschlossen sind und die Heizung aus ist, schalte die Heizung ein
    if (($Tist < $Tsoll) && ($Tsensor eq "closed") && ($Tschalter eq "off")) {
        {fhem("set ".$raum."_hz_schalter on")};
    }
    # Wenn Ist-Tempeartur > Soll-Temperatur und die Heizung aus ist, schalte die Heizung ein
    elsif (($Tist > $Tsoll) && ($Tschalter eq "on")) {
        {fhem("set ".$raum."_hz_schalter off")};
    }
}


Gruß
Jörg

Rock'nRoll

unread,
Dec 17, 2012, 12:43:56 PM12/17/12
to fhem-...@googlegroups.com

Am Dienstag, 25. September 2012 12:27:22 UTC+2 schrieb team-menge:
Hallo  team-menge
ich bin mit meinem Latein am Ende. Ich möchte genau wie in Ihrem Post beschrieben, mit meine HM-CC-TC einen Actor HM-LC-Sw-1-FM über FHEM Temperaturgesteuert schalten.
Können Sie mir Ihr finales, funktionierendes Skript zur Verfügung stellen ?
Achtung; Ich arbeite nur im Webfrontend. Kann ich ihr Skript da eingeben ?
 
vielen Dank vorweg
KLAUS
 

Rock'nRoll

unread,
Dec 22, 2012, 4:30:01 PM12/22/12
to fhem-...@googlegroups.com
So, jetzt funktioniert es.
 
Die Lösung ist das HCS Modul.
Sehr zu Empfehlen.
 
Heizung lässt sich mit wenig Aufwánd vielfältig steuern.
Ein Dank an den Autor für das kostenlose Tool.
 
gruss
Reply all
Reply to author
Forward
0 new messages