[UPDATE4]Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker

Begonnen von Mr.Heat, 27 Oktober 2013, 23:49:24

Vorheriges Thema - Nächstes Thema

Mr.Heat

UPDATE4: Ich habe mein schönes Skript, welches mir mehrere Jahre treu gedient hat, jetzt durch das Modul HCS ersetzt, welches mittlerweile auch die MAX-Thermostate beherrscht.



#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Beginn##################
#### Heizung: Winterbetrieb Sommerbetrieb
define HA_Heizung_Modus dummy
attr HA_Heizung_Modus alias Betriebsmodus
attr HA_Heizung_Modus fp_Heizung 36,220,7,
attr HA_Heizung_Modus group Betriebsmodus
attr HA_Heizung_Modus room Haus
attr HA_Heizung_Modus setList state:Winter,Sommer
attr HA_Heizung_Modus userReadings HCS_TEMP { if (ReadingsVal("HA_Heizung_Modus","state","Unbekannt") eq "Winter"){return 0} else {return 30};;}
attr HA_Heizung_Modus webCmd state
#Versuch mit HCS-Modul
define HCS_System HCS HA_Heizung_Schalter
attr HCS_System alias Heizungssteuerung
attr HCS_System deviceCmdOff desiredTemperature on
attr HCS_System deviceCmdOn desiredTemperature off
attr HCS_System event-on-change-reading state,devicestate,eco,overdrive
attr HCS_System exclude HA_Heizung_Schalter
attr HCS_System idleperiod 5
attr HCS_System interval 1
attr HCS_System loglevel 3
attr HCS_System mode valve
attr HCS_System room System
attr HCS_System sensor HA_Heizung_Modus
attr HCS_System sensorReading HCS_TEMP
attr HCS_System sensorThresholdOff 20
attr HCS_System sensorThresholdOn -1
attr HCS_System thermostatThresholdOff 0.5
attr HCS_System thermostatThresholdOn 0.5
attr HCS_System valveThresholdOff 10
attr HCS_System valveThresholdOn 40
#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################



Sollte das Ganze nicht zu meiner Zufriedenheit funktionieren, so werde ich das hier wieder Ändern und berichten. Ansonsten ist das der bessere Weg, da weniger Fehlermöglichkeiten. Natürlich ist ein eigenes Skript (s. unten) bei eigenen Wünschen besser modifizierbar.
Viel Erfolg!


hallo zusammen, seit heute steuere ich erfolgreich eine Junkers-Therme über den Wohnzimmerthermostat-Eingang. Ich habe dazu das Skript aus der Wiki-Seite "Heizungskontrolle einfach" angepasst, um entsprechend mit Max-Komponenten zu funktionieren.
Ich dachte, ich stelle das mal als Vorlage zur Verfügung.
Hier sind Situationsbedingt folgende Vorraussetzungen erforderlich (falls anders, muss das angepasst werden):
-Am MAX!-Zwischenstecker ist ein Relais(Schließer) angebracht, der an der Therme einen Steuereingang kurzschließt (=keine Wärme benötigt). Schalter AN= Therme AUS, Schalter AUS = Therme AN.
-Der Zwischenstecker wird über desiredTemperature on bzw. desiredTemperature off an bzw. abgeschaltet, der aktuelle Status ist aus der "valveposition" des Zwischensteckers sichtbar (0=Schalter aus, 100=Schalter an).
-Da sich der Zwischenstecker als HeatingThermostat meldet, werden die MAX-Thermostate hier nach Name gefiltert. Die Thermostaten folgen bei mir dem Schema XX_Thermostat_XXXXXXXX und werden mittels der RegEx ".{3}Thermostat* gefiltert. Dies muss so angepasst werden, dass nur die wirklichen Thermostaten, nicht aber der Zwischenstecker selbst zurückgegeben wird.

-das Skript schaltet die Therme an, sobald mindestens ein Thermostat > 40% ist, und aus, wenn alle Thermostaten <20% geöffnet sind (Hysterese, um Schaltvorgänge zu vermeiden und den Thermostaten die Möglichkeit zu geben, wirklich zu regeln).

Viel Spaß mit dem Code, er kann im Web-Interface in die fhem.cfg eingefügt werden.

[color]UPDATE3:[/color]
Alternative mit manueller Umschaltung Sommer/Winterbetrieb, momentan so bei mir im Einsatz:



#### Heizung: Winterbetrieb Sommerbetrieb
define HA_Heizung_Modus dummy
attr HA_Heizung_Modus room Haus
attr HA_Heizung_Modus setList state:Winter,Sommer
attr HA_Heizung_Modus webCmd state

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Beginn##################




#Name des Schaltkontakts: HA_Heizung_Schalter
#verhaelt sich aehnlich wie Thermostat
#Ventilstellung des Schaltkontakts = 0: Therme AN (Schalter AUS)   (Setzen: desiredTemperature=off)
#Ventilstellung des Schaltkontakts = 100: Therme AUS (Schalter AN) (Setzen: desiredTemperature=on)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("HA_Heizung_Schalter","valveposition","100");;\
   my $modus=ReadingsVal("HA_Heizung_Modus","state",'MODUSFHLER');;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ( ($modus eq 'Winter') && ($ventil > 40) ) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status . " Modus: " . $modus );;\
      if ($heizung_status > 0){\
         fhem("set HA_Heizung_Schalter desiredTemperature off");;\
         Log(2,"Wärme benötigt. Heizung wird ANgeschaltet");;\
      }\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt. Vorheriger Heizungsstatus: " . $heizung_status . " Modus: " . $modus );;\
        if ($heizung_status == 0){\
           fhem("set HA_Heizung_Schalter desiredTemperature on");;\
           Log(2,"Wärme nicht mehr benötigt. Heizung wird ABgeschaltet");;\
        }\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " von " . @@thermostaten . " Thermostaten im Leerlauf. Aktueller Heizungsstatus: " . $heizung_status . " Modus: " . $modus );;\
     }\
  }\
}

define a_heizung at +*00:00:20 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################






Alte Variante mit Wetter; hat nicht so toll funktioniert bei mir:


#Name des Weather-Devices: "Wetter"
#Name des Schaltkontakts: HA_Heizung_Schalter
#verhaelt sich aehnlich wie Thermostat
#Ventilstellung des Schaltkontakts = 0: Therme AN (Schalter AUS)   (Setzen: desiredTemperature=off)
#Ventilstellung des Schaltkontakts = 100: Therme AUS (Schalter AN) (Setzen: desiredTemperature=on)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("HA_Heizung_Schalter","valveposition","100");;\
   my $temperatur=ReadingsVal("Wetter","temp_c","-30");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ( ($temperatur <= 10) && ($ventil > 40) ) {\
         $brauche_waerme=1;;\
      }\
      elsif ($ventil > 95) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
       fhem("set HA_Heizung_Schalter desiredTemperature off") if ($heizung_status > 0);;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
        fhem("set HA_Heizung_Schalter desiredTemperature on") if ($heizung_status == 0)\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################




UPDATE:
im Anhang ein Screenshot von heute. Die Überschwinger nicht zu ernst nehmen, die Thermostaten sind teilweise etwas "zugebaut".
Bevor jemand fragt, warum ich so tiefe Temperaturen in den Absenkzeiten habe: das liegt an den baulichen gegebenheiten, ein Heizen des Bads wäre sinnfrei da die komplette Heizleistung sofort nach oben verfliegt (bad im Keller) und nur die anderen Räume viel zu stark heizt.
Ebenso die Küche obendrüber (offenes Treppenhaus).

[color]UPDATE2:[/color]
Da sinnloserweise zur Zeit immer morgens die Heizung anspringt, wird eine automatische Sommer/Winterumstellung anhand der Wettervorhersage gemacht: ab 10°C wird nur bei 95% Ventilöffnung die Heizung angeschaltet (also manueller Boost). Have Fun.


The-Holgi

Hallo,
erstmal Danke für das script.
Würde es gerne an meine Gegebenheiten anpassen. Ich benutze zum ein und aus schalten der Therme einen ELRO Zwischenstecker. on = Heizung an, off = Heizung aus.

#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)


Vielleicht kann mir jemand sagen wie ich den code an der Stelle ändern muß:
my $heizung_status=ReadingsVal("HA_Heizung_Schalter","valveposition","100");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\


HA_Heizung_Schalter wäre ja bei mir Therme und valvepostion 100 Heizung aus. Wie muß der code dann aussehen ?

Gruß Holgi

HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Hallo,
ich weiß leider nicht, welches reading dein Zwischenstecker als status hat; in dem von dir geposteten Abschnitt geht es ja in der ersten Zeile darum, den aktuellen Status des Schalters festzustellen.
Wenn es kein solches Reading gibt (also der aktuelle Status nicht gelesen werden kann), müsstest du entweder den Schaltstatus selbst speichern (weiß ich leider nicht, wie das in fhem-Syntax geht),oder den Teil einfach weglassen.
Der Status wird ja nur dafür benutzt, um einen etwaigen Schaltbefehl nicht unnötig absetzen zu müssen (z.B. nicht anschalten, falls die Therme schon an ist).  Lässt du das weg, wird halt alle 5 Minuten trotzdem der Befehl geschickt, egal was davor war, was auch nicht so schlimm ist (vor allem, wenn es vom Schaltkontakt keine Antwort gibt, und evtl. mal ein Befehl nicht ankommt).

LG Mr.Heat

The-Holgi

Hallo, Danke für die schnelle Antwort.
Die Elro Zwischenstecker können ihren Status soweit ich das gelesen habe garnicht übertragen. Allerdings wird beim senden eines Schaltbefehls der letzte Status durch ändern des Symbols (Glühlampe gelb oder grau) in fhem angezeigt.
Könnte das dann so funktionieren ?
#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
       fhem("set Therme on") if ($heizung_status > 0);;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
        fhem("set Therme off") if ($heizung_status == 0)\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################


Oder muß an den Zeilen mit dem vorherigen Heizungsstatus noch was geändert werden ?

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Da du ja so den Status nicht mehr abfragst, müsste das auch unten entfernt werden:
Zitat
#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt.";;\
       fhem("set Therme on");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt");;\
        fhem("set Therme off");;\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################


die andere Möglichkeit wäre wohl, den Status doch auszulesen (müsste STATE=on bzw off sein, ähnlich wie bei http://www.fhemwiki.de/wiki/Heizungskontrolle_Einfach):
Zitat
my $heizung_status=ReadingsVal("Therme","state","off")};;\

dementsprechend unten die Abfrage auf
if ($heizung_status == "on") bzw. if ($heizung_status == "off") (ich hoffe, das geht so).

LG Mr.Heat

The-Holgi

#5
Danke für den Tipp, das werde ich so mal testen. Wenn ich es richtig verstanden habe sollte das so aussehen ?

#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
    my $heizung_status=ReadingsVal("Therme","state","off")};;\

      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt.";;\
       fhem("set Therme on")if ($heizung_status == "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt");;\
        fhem("set Therme off") if ($$heizung_status == "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################


Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Ich glaube nur ein "$" bei $heizung_status;
also so:
Zitat#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
    my $heizung_status=ReadingsVal("Therme","state","off")};;\

      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt.";;\
       fhem("set Therme on")if ($heizung_status == "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt");;\
        fhem("set Therme off") if ($heizung_status == "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################

Sollte eigentlich passen.

Bei mir läuft übrigens das Ganze seit 5 Wochen super :)

The-Holgi

Danke für den Tipp, weiß auch nicht wo das 2. $ herkam. :o
Sobald meine Thermostate da sind werde ich testen und berichten.

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

hobu

Tolles Skript! Danke!

z.Zt. wird nur ein einheitlicher Schwellwert (Ventilstellung) für alle Thermostate geprüft. Ich habe hier mal eine rudimentäre Erweiterung eingearbeitet, mit der nun für jeden Raum ein eigener Wert als Trigger verwendet wird. Hintergrund: Unterschiedliches Aufheizverhalten von grossen und kleinen Räumen, sowie "WAF-Optimierung"...

Des weiteren wird die Heizung hier auch sofort eingeschaltet, wenn der Modus "Boost" aktiviert wird.

Bei nur 4 zu steuernden Thermostaten ist das mit den if-Abfragen der Thermostate so noch überschaubar, aber evtl. kann sich ein Perl-Crack mal 'ransetzen und dies verbessern (2D-Array oder so):


define Waerme.ntfy notify Waerme.ntfy {\
  my $brauche_waerme=0;;\
  my $ventile_im_leerlauf=0;;\
  my $ventilPos=0;;\
  my $heizung_status=ReadingsVal("CUL_SA","state","off");;\
  Log(3,"Heizungsstatus ". $heizung_status);;\
  my @@maxs=devspec2array("[BWLS]R_HT");;\
  foreach(@@maxs) {\
    my $ventil=ReadingsVal($_, "valveposition","101");;\
    my $modecheck=ReadingsVal($_, "mode","?");;\
    if ($modecheck eq "boost"){$brauche_waerme=1}\
    else {\
      if ("$_" eq "BR_HT"){$ventilPos=45;;}\
      if ("$_" eq "WR_HT"){$ventilPos=35;;}\
      if ("$_" eq "LR_HT"){$ventilPos=40;;}\
      if ("$_" eq "SR_HT"){$ventilPos=35;;}\
    }\
    Log(3,"ventil ".$_.": ".$ventil." (".$ventilPos.") ".$modecheck);;\
    if ($ventil > $ventilPos){$brauche_waerme=1};;\
    if ($ventil < 30){$ventile_im_leerlauf++};;\
  }\
  if ($brauche_waerme != 0) {\
    Log(3,"Waerme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
    if ($heizung_status eq "off"){fhem("set CUL_SA on")}\
  }\
  else {\
    if (($ventile_im_leerlauf == @@maxs) && ($heizung_status eq "on")) {\
      Log(3,"Keine Waerme (mehr) benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
      Log(3,"Schalte CUL_SA aus");;\
      if ($heizung_status eq "on"){fhem("set CUL_SA off")}\
    }\
     else {\
      Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@maxs . " Ventile im Leerlauf.")\
    }\
  }\
}


Thermosstat-Status und Triggerwert werden mitgeloggt:
2013.12.01 12:55:07 3: Heizungsstatus on
2013.12.01 12:55:07 3: ventil BR_HT: 0 (45) auto
2013.12.01 12:55:07 3: ventil LR_HT: 9 (40) manual
2013.12.01 12:55:07 3: ventil SR_HT: 12 (35) auto
2013.12.01 12:55:07 3: ventil WR_HT: 100 (35) boost
2013.12.01 12:55:07 3: Waerme benoetigt. Vorheriger Heizungsstatus: on


Gruss
Holger
Raspberry Pi (Model B)
HM-CFG-USB, HM-CC-RT-DN, HM-LC-SW1-FM, HM-Dis-WM55, HM-FK-SCO

The-Holgi

Hallo Holger,
wühle mich gerade durch dein Skript.
Was bedeutet  my @@maxs, damit weiß ich nichts anzufangen.

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

#10
Hallo,

interessanter Ansatz, allerdings möchte ich mal begründen, wieso die Abfrage meiner Meinung nicht nötig ist:
Die Thermostaten sind PID-Regler,die adaptiv gewisse Parameter ändern.
1. Wird der Sollwert plötzlich einiges nach oben verändert, z.B. von 17° Nachtabsenkung auf 21°C oder manuell, so sorgt das für einen relativ großen Sprung der Ventilstellung: soll heißen um den Sollwert schnell zu erreichen, reißen die Thermostaten erstmal voll auf (liegt am D-Anteil), um dann relativ schnell wieder runter zu gehen, bis ein konstanter Wert gefunden ist um die Temperatur zu halten. Damit hat eine Unterscheidung um 5% erst gar keinen Sinn, da die Thermostaten bei so einem Sollwertsprung sowieso auf 60% oder höher aufmachen.

2. der Thermostat arbeitet adaptiv, versucht sich also den Bedingungen anzupassen (dem Raum+ Heizungsverhalten). Soll heißen, ich würde behaupten deine Thermostaten lernen mit der Zeit, dass unter 35% bzw. 40% nix läuft. Deshalb werden sie ihr Verhalten einfach dahingehend ändern, darüber zu bleiben, um zu heizen. Sie hebeln meiner Meinung nach also deine Unterscheidung auf.

3. Das individuelle Raumverhalten sollte durch die adaptiven Eigenschaften eigentlich selbstständig vom Thermostaten gelernt werden; selbst einzugreifen kann den Regelalgorithmus des Thermostaten nur verschlechtern. Ich denke, die Unterscheidung erzeugt hauptsächlich nur Komplexität ohne wirklichen (positiven) Effekt.
Auch die Heizungssteuerung durch mein Skript verschlechtert schon die Bedingungen für die Thermostaten (zugunsten des Ausschaltens der Heizung).
Ich würde eher die beiden Parameter (an und aus) bei Bedarf etwas anpassen, immer im Hinterkopf, den Thermostaten ausreichend Platz zum regeln zu geben, immerhin sind es Regler und weit komplexer als herkömmlichen Thermostaten.
Der Boost-Modus reißt den Thermostaten ja (normalerweise) sowieso relativ weit auf, deshalb schaltet die Heizung dann sowieso ein.

KISS!
So sehe ich das jedenfalls :)
LG Mr.Heat

The-Holgi

Hm, habe es jetzt so umgesetzt:
#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}.*Thermostat");;\
    my $heizung_status=ReadingsVal("Therme","state","off")};;\

      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt.";;\
       fhem("set Therme on")if ($heizung_status == "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt");;\
        fhem("set Therme off") if ($heizung_status == "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

Leider nur Fehler im log sobald der Zwischenstecker schalten sollte:
2013.12.10 17:14:01 3: n_heizung return value: Global symbol "$brauche_waerme" requires explicit package name at (eval 1197) line 8.
Global symbol "$ventile_im_leerlauf" requires explicit package name at (eval 1197) line 11.
Unmatched right curly bracket at (eval 1197) line 13, at end of line
syntax error at (eval 1197) line 13, near "}
}"
Global symbol "$brauche_waerme" requires explicit package name at (eval 1197) line 14.
Global symbol "$heizung_status" requires explicit package name at (eval 1197) line 16.
syntax error at (eval 1197) line 17, near ";
}"
Global symbol "$ventile_im_leerlauf" requires explicit package name at (eval 1197) line 19.
Global symbol "@thermostaten" requires explicit package name at (eval 1197) line 19.
Global symbol "$heizung_status" requires explicit package name at (eval 1197) line 21.
syntax error at (eval 1197) line 22, near ")
}"
(eval 1197) has too many errors.


Jemand eine Idee ?
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

#12
Zitatmy $heizung_status=ReadingsVal("Therme","state","off")};;\

Die Klammer muss auf jeden Fall weg.
Außerdem hast du z.B. die for-Schleife weggelassen; wieso? das kann so nicht funktionieren.

Korrektur:

Zitat#Name des Schaltkontakts: Therme
#ELRO Zwischenstecker
#Schaltkontakt on = Therme AN   (Setzen: set Therme on)
#Schaltkontakt off = Therme AUS (Setzen: set Therme off)

define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("Therme","state","off");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"Wärme benoetigt.";;\
       fhem("set Therme on")if ($heizung_status == "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine Wärme (mehr) benoetigt");;\
        fhem("set Therme off") if ($heizung_status == "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}

define a_heizung at +*00:05:00 trigger n_heizung

#############Kontrolle der Gastherme ueber MAX-Schaltkontakt Ende####################

The-Holgi

#13
Hallo, Danke für deine Hilfe. Die for schleife ist wohl bei der Fehlersuche draufgegangen.
Habs jetzt geändert dabei ist mir noch was aufgefallen, meine Thermostate enden alle auf  _Thermostate. (wz_Thermostat, ku_Thermostat) Hier hatte ich den _ vergessen.
Habe es jetzt so geändert (".{3}.*_Thermostat")
Sollte doch eigentlich klappen oder ?

Edit:  :( Klappt leider nicht. Die Therme wird nicht abgeschaltet.

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Nein, das hätte davor schon stimmen sollen.
.{3}Thermostat.*" bedeutet, dass der Name genau drei Zeichen hat am anfang (beliebig), dann "Thermostat", dann dürfen kein oder ein oder mehrere Zeichen folgen. das passt ja dann auch auf dich.

The-Holgi

#15
Hm, gut zu wissen. Abgeschaltet wird die Therme aber immer noch nicht. Habe alle Thermostate runter gestellt valvposition ist auf 0 aber der Schaltbefehl wird nicht gesendet.
Mir ist aufgefallen das in n_heizung notify angezeigt wird   assosiated mit Therme und a_heizung aber nicht mit den Thermostaten, ist das normal ?
Danke nochmal für deine Geduld mit mir.
Im log steht:
n_heizung return value: syntax error at (eval 51) line 16, at EOF

OK, da fehlte wohl eine )

Es funktioniert jetzt.

Besten Dank für die Hilfe
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

das stimmt schon mit der assotiation. Das steht beimir auch so. Die Thermostaten sind ja nicht direkt im Code aufgeführt, deshalb schreibt er das auch nicht hin.

Schön dass es jetzt geht :)

The-Holgi

#17
Hm,
irgendetwas stimmt mit dem Status noch nicht. Es wird scheinbar nicht erkannt ob die Therme an ist. Alle 5 min bekommt der Zwischenstecker ein set on obwohl er on ist.
Das sollte doch eigentlich über
my $heizung_status=ReadingsVal("Therme","state","off");
und
Log(3,"waerme benoetigt.");
       fhem("set Therme on")if ($heizung_status == "off");

Definiert sein oder ?

Edit: Wenn die Therme aus ist ist es genauso, es wird alle 5 min ein set Therme off gesendet

So, habe den Fehler gefunden das == muß durch eq ersetzt werden.

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Hallo,
gut dass du das sagst. Ist die Frage ob das auch bei mir passiert? Oder geht es da weil ich Zahlenwerte vergleiche....

The-Holgi

Hm, kannst ja im logfile nachsehen. So sieht es bei mir jetzt aus:
2013.12.11 19:35:48 3: waerme benoetigt.
2013.12.11 19:40:48 3: waerme benoetigt.
2013.12.11 19:45:48 3: waerme benoetigt.
2013.12.11 19:50:48 3: waerme benoetigt.
2013.12.11 19:55:48 3: waerme benoetigt.
2013.12.11 20:00:48 3: waerme benoetigt.
2013.12.11 20:05:48 3: waerme benoetigt.
2013.12.11 20:10:48 3: waerme benoetigt.
2013.12.11 20:15:48 3: waerme benoetigt.


Vorher mit ==
2013.12.11 18:13:10 3: waerme benoetigt.
2013.12.11 18:13:11 3: GenShellSwitch command result: sending systemCode[11111] unitCode[1] command[1]
2013.12.11 18:13:11 2: GenShellSwitch set Therme on
2013.12.11 18:18:10 3: waerme benoetigt.
2013.12.11 18:18:11 3: GenShellSwitch command result: sending systemCode[11111] unitCode[1] command[1]
2013.12.11 18:18:11 2: GenShellSwitch set Therme on
2013.12.11 18:23:10 3: waerme benoetigt.
2013.12.11 18:23:11 3: GenShellSwitch command result: sending systemCode[11111] unitCode[1] command[1]
2013.12.11 18:23:11 2: GenShellSwitch set Therme on
2013.12.11 18:28:10 3: waerme benoetigt.
2013.12.11 18:28:11 3: GenShellSwitch command result: sending systemCode[11111] unitCode[1] command[1]
2013.12.11 18:28:11 2: GenShellSwitch set Therme on
2013.12.11 18:33:10 3: waerme benoetigt.
2013.12.11 18:33:11 3: GenShellSwitch command result: sending systemCode[11111] unitCode[1] command[1]
2013.12.11 18:33:11 2: GenShellSwitch set Therme on


Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Update im Eingangspost: Sommer/Winterbetrieb je nach Außentemperatur/Wettervorhersage. Wird eventuell noch verfeinert...
Momentan nur nach aktueller Temperatur, aber eine Abhängigkeit von der zukünftigen Temperatur / Tiefsttemperatur/ Höchsttemperatur... wäre sicherlich nett, nur weiß ich noch nicht wirklich, was dann Sinn macht. Bin für Ideen dankbar und werde sehen, wie gut das jetzt so funktioniert :)

Übrigens lief das System komplett alleine perfekt den ganzen Winter durch.

The-Holgi

Hallo,
bei mir lief es auch den ganzen Winter ohne Probleme. Habe 220€ von meinem Gasanbieter zurück bekommen.
Habe das update erst jetzt gesehen. Bekomme allerdings eine Fehlermeldung wenn ich versuche es für meine Umgebung anzupassen:
define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("Therme","state","off");;\
   my $temperatur=ReadingsVal ("GPIO4_DS18B20_0000052718c1","temperature","-30");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ( ($temperatur <= 10) && ($ventil > 40) ) {\
         $brauche_waerme=1;;\
      }\
  elsif ($ventil > 95) {\
     $brauche_waerme=1;;\
  }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"waerme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
       fhem("set Therme on")if ($heizung_status eq "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine waerme (mehr) benoetigt"). Vorheriger Heizungsstatus: " . $heizung_status);;\
        fhem("set Therme off") if ($heizung_status eq "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}


Die Fehlermeldung dazu:
ERROR:
IF: no left bracket: { $ventile_im_leerlauf++; } } if ($brauche_waerme != 0) { Log(3,"waerme benoetigt. Vorheriger Heizungsstatus: " . $heizung_status); fhem("set Therme on")if ($heizung_status eq "off"); } else { if ($ventile_im_leerlauf == @@thermostaten) { Log(3,"Keine waerme (mehr) benoetigt"). Vorheriger Heizungsstatus: " . $heizung_status); fhem("set Therme off") if ($heizung_status eq "on") } else { Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle."); } }}

Hat vielleicht jemand eine Idee wo der Fehler liegt ?

Hier der alte code mit dem es funktioniert:
define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("Therme","state","off");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ($ventil > 40) {\
         $brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"waerme benoetigt.");;\
       fhem("set Therme on")if ($heizung_status eq "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine waerme (mehr) benoetigt");;\
        fhem("set Therme off") if ($heizung_status eq "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}


Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Puschel74

Hallo,

die Fehlermeldung passt irgendwie nicht zum Code.
Im ganzen Code finde ich kein IF - oder ich hab mal wieder Tomaten auf den Augen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

The-Holgi

Das gleiche habe ich auch gedacht, da ist auch kein"IF" drin.  :(

Wenn ich nur den oberen Teil bis hier:
define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("Therme","state","off");;\
   my $temperatur=ReadingsVal ("GPIO4_DS18B20_0000052718c1","temperature","-30");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ( ($temperatur <= 10) && ($ventil > 40) ) {\
         $brauche_waerme=1;;\

ändere bekomme ich keine Fehlermeldung

Hm, so geht es jetzt ohne Fehlermeldung:
define n_heizung notify n_heizung {\
   my $brauche_waerme=0;;\
   my $ventile_im_leerlauf=0;;\
   my @@thermostaten=devspec2array(".{3}Thermostat.*");;\
   my $heizung_status=ReadingsVal("Therme","state","off");;\
   my $temperatur=ReadingsVal ("GPIO4_DS18B20_0000052718c1","temperature","-30");;\
   foreach(@@thermostaten) {\
      my $ventil=ReadingsVal($_, "valveposition", "101");;\
      if ( ($temperatur <= 10) && ($ventil > 40) ) {\
         $brauche_waerme=1;;\
      }\
      elsif ($ventil > 95) {\
$brauche_waerme=1;;\
      }\
      if ($ventil < 20) {\
         $ventile_im_leerlauf++;;\
      }\
    }\
  if ($brauche_waerme != 0) {\
       Log(3,"waerme benoetigt.");;\
       fhem("set Therme on")if ($heizung_status eq "off");;\
  }\
  else {\
     if ($ventile_im_leerlauf == @@thermostaten) {\
        Log(3,"Keine waerme (mehr) benoetigt");;\
        fhem("set Therme off") if ($heizung_status eq "on")\
     }\
     else {\
        Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " of " . @@thermostaten . " actuators are idle.");;\
     }\
  }\
}


Hoffe es funktioniert auch  ;)
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

Nur ein kurzes UPDATE.

Ich persönlich habe mittlerweile das mit dem Wetter wieder rausgenommen. Das hat nicht wirklich so funktioniert wie ich es wollte.

Habe dafür jetzt ein Dummy-Device, mit welchem man zwischen Sommer und Winter umschalten kann. Sommer = keine Heizung, Winter = Heizen erlaubt.

Das reicht mir erstmal, um wenigstens einfach im Frühjahr die Heizung komplett abzuschalten. Werde die Version alternativ in den 1. Post packen.

LG

Mr.Heat

Update im Eingangspost, ich versuche es jetzt mit dem HCS-Modul.

The-Holgi

Hallo,
bin bisher eigentlich zufrieden mit deinem code und der Außentemperatur.
Der Basteltrieb verlangt aber das ich auch das HCS Modul testen muss.
2 Fragen dazu:
1. Ist der "HCS_TEMP" ein Außentemperaturfühler ?
2. Wie werden die Heizungsthermostate definiert ? Erkennt das modul die Thermostate in der fhem.cfg automatisch und wertet diese aus ?
Wenn ja, kann man einzelne Thermostate von der regelung ausschließen ?

Edit:
Frage 2 hat sich erledigt mit exclude kann man sie ausschließen.

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Mr.Heat

HCS_TEMP ist ein dummy-Wert, damit ich mit Sommer/Winterbetrieb-Dummy das Modul ausser Betrieb nehmen kann.
Man könnte da sicher auch den Wert der Wettervorhersage nehmen.... :)

Beachte aber folgenden Thread von mir dazu:
http://forum.fhem.de/index.php/topic,32856.0.html

Das Modul schaltet sich jedes mal ab bei mir, wenn es einen Schaltvorgang erzeugt. Konnte das bisher nur umgehen, indem jede Minute per notify das HCS-Modul wieder aktiviert wird... bisher habe ich da keine Antwort drauf. Scheint aber Probleme zu machen, dass der Zwischenstecker das geschaltete Device ist...

Mit dem notify-Notbehelf funktioniert es aber ansonsten.

LG

Navalus

Hallo Mr. Heat,
ich hatte bisher meine Zentralheizung mit MAX!-Komponenten gesteuert (3 Thermostate, 1 Fensterkontakt, Cube).
Vor Kurzem bin ich in eine Wohnung, die mit einer Gastherme ausgestattet ist eingezogen.
Die gastherme ist von Valliant und nach einer umfangeichen Recherche habe ich mich für eine Steuerung über Kontakte 3 und 4 entschieden.
Dafür würde ich gerne wie in deinem Fall den MAX!-Zwischenstecker benutzen.
Ich bin in elektrischen Sachen nicht so fit, daher wollte ich dich fragen wie du die Schaltung für deine Therme realisiert hast.
Bei der Vaillant müssen die Kontakte 3-4 geschlossen werden, damit die Therme anspringt.

Vielen Dank für Ratschläge im Vorraus,
Navalus

Mr.Heat

Hallo Navalus,
vorab: hier hat man es potentiell mit 230V zu tun (auch wenn die meisten Module das 230V-Kabel fest angeschlossen haben), deshalb Installation nur von einer Elektrofachkraft, die beurteilen kann ob sie das richtige gekauft hat und es auch richtig installiert! Auch an der Therme kann u.U. 230V auf manchen Kontakten sein! Auf eigene Verantwortung! Ich hafte nicht für Schäden an Therme ö.Ä. oder gesundheitlicher Art.

Zum Thema:
Am MAX!-Zwischenstecker ist bei mir ein Relaismodul, welches potentialfrei einen Kontakt schliesst, wenn 230V anliegen.
Ich glaube man findet es unter der Bezeichnung Relais-Modul 230V für Dunstabzugshauben o.Ä., z.B. http://www.feuer-rauch-service.de/Modul-fuer-Abluftsteuerungen/Relais (habe es nicht von dort, sondern ein ähnliches, von Ebay). Wichtig ist, dass der Kontakt potentialfrei über ein Relais geschaltet wird (also nicht 230V o.Ä. geschaltet werden, die die Therme zerstören könnten). Normalerweise wird dort mit einer geschalteten Steckdose ein Motor geschaltet.

Der Stecker kommt in die Max-Schaltsteckdose, die Anschlüsse des Relais an die entsprechenden Kontakte der Therme: ist die Schaltsteckdose aktiv, so schließt der potentialfreie Kontakt des Relais, die Therme geht an (oder aus, in meinem Fall).

rubbertail

Wegen HCS, Max und Vaillant-Therme - ich hab erfolgreich einen netatmo-Thermostat (bzw. dessen Relais) an 3/4 meiner Vaillant-Therme angeschlossen und steuere diesen nun über das netatmo-Modul - dies ist "mein" HCS-Device.
Also:
1. Max-Thermostate einrichten in fhem

Kennt ja jeder in diesem Board :)

2. netatmo-Thermostat einrichten in fhem

define netatmoAccount netatmo ACCOUNT <account-email> <account-Password> <netatmo-clientID, siehe netatmo-commandref> <netatmo-clientSecret, ebd>
define netatmoThermostat netatmo THERMOSTAT <netatmo-Relais-MAC> <netatmo-Thermostat-MAC>


3. HCS definieren

define ThermenCtrl HCS netatmoThermostat
attr ThermenCtrl devStateIcon demand.*:Heizung_Hauptschalter.on idle:Heizung_Hauptschalter.off idle..*:HOME_Status.4 locked.*:Heizung_Hauptschalter.off-for-timer
attr ThermenCtrl deviceCmdOff setpoint_mode away
attr ThermenCtrl deviceCmdOn setpoint_mode max
attr ThermenCtrl ecoTemperatureOff 15
attr ThermenCtrl ecoTemperatureOn 13
attr ThermenCtrl event-on-change-reading state,devicestate,eco,overdrive
attr ThermenCtrl idleperiod 10
attr ThermenCtrl interval   1
attr ThermenCtrl mode       thermostat
attr ThermenCtrl thermostatThresholdOff 0.5
attr ThermenCtrl thermostatThresholdOn 0.5


4. Als Dreingabe dann noch den Eco-Taster von MAX auf den HCS-Eco-Mode umgebogen (Device erstellt, notifies auf HCS (set ThermenCtrl eco on (bzw off)) - und alles funzt.

Nur falls das wer nachbasteln will. Und sorry für den Fast-Crosspost, aber gehört wohl auch zu MAX dazu. Ist aber extra hierfür angefertigt. :) Der Charme dieser Lösung gegenüber einem Funkrelais an 3/4 an der Vaillant: Das hier klappt auch autonom, ohne FHEM, falls das mal wegbräche... dann halt mit den kombinierten Programmen MAX und netatmo-Thermostat.
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

hietzi

Habe das script nun auch erfolgreich im Einsatz :-)
Nur ein Problem habe ich .
Meine Gastherme ist gekoppelt mit einem Warmwasserboiler.
Die Gastherme schaltet sich normalerweise ein sobald die Wassertemperatur unter X geht.
Bis dato war eine Zeitschaltuhr für den Sommer dazwischen gehängt das sich die Therme nur Vormittags und am Abend einschaltet um das Wasser aufzuheizen.
Jetzt hängt statt der Zeitschaltuhr der Max Zwischenstecker .
Das Script schaltet den Zwischenstecker ja per attr HCS_System deviceCmdOff desiredTemperature off
attr HCS_System deviceCmdOn desiredTemperature on
ein und aus.
Nun habe ich dem Zwischenstecker die Vormittags und Abend Zeiten eingetragen damit er das Wasser aufheizt. Dies funktioniert aber nur im Mode Auto klar irgendwie :-)

Der Zwischenstecker schaltet bei 18 Grad aus und bei 21 Grad ein laut fhem im Auto mode.
Gibt es die Möglichkeit bei den beiden befehlen

attr HCS_System deviceCmdOff desiredTemperature off
attr HCS_System deviceCmdOn desiredTemperature on

statt off auto und die Temeratur anzuhängen ? oder gäbe es eine andere Möglichkeit
Sorry bin noch ziemlich neu in der Materie

lg
Chris

Kopterframe

Hallo in die Runde,
ich habe den Beitrag mit Begeisterung gelesen, vielen Dank.
Bin nun auch am überlegen die Vailant Therme zu steuern.
Habe auch MAX Komponenten im betrieb, will sie aber tauschen gegen AVM Dect.
Es treten nur noch Probleme mit MAX auf.
Mich Interessiert im Vorfeld wie Ihr es an der Therme Hardware technisch gelöst habt.
Ist das Wandthermostat ausehr betrieb genommen wurden?
Und nur Pin 3 und 4 über ein Relais geschaltet?
Vielleicht wären ein paar Bilder hilfreich.
Vielen Dank Heiko
FHEM aufRaspberry/ Cube_Max mit Culfw/  Cul_FS20
Max Thermostate/ Wandthemostat/Eib KNX

rubbertail

Ich hab zwischen 3-4 nen netatmo-Thermostat geschaltet (buw die Relais-Einheit des Thermostats, und die Stromversorgung derselben an der gleichen Leiste abgenommen - vorsicht Netzstrom! - und den Thermostat im meistgeheizten Zimmer stehen). In Fhem übernimmt dann HCS das Schalten des Thermostats; wenn Fhem ausfällt, haben Thermostat und Heizungsthermostate dasselbe Wochenprogramm, so dass das auch ohne HCS regelt.
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

Kopterframe

Ich wollte das Wandthermostat auch als Backup laufen lassen.
Bin mir nur nicht sicher ob das Wandthermostat über die besagten 3 und 4 oder Bus angeschlossen ist.
Muss die Therme mal öffnen, ist glaube ich nur eine Schraube unten?
Oder muss da noch mehr zerlegt werden.
Grüße Heiko 
FHEM aufRaspberry/ Cube_Max mit Culfw/  Cul_FS20
Max Thermostate/ Wandthemostat/Eib KNX

rubbertail

Es gibt bei Vaillant 3 Varianten:

1. eBus - die moderne, digitale Variante
2. 7-8-9, die analoge, geregelte Niederspannungsversion, mit der stufenlose Regelungen möglich sind, und
3. der 3-4-Anschluss, der über Netzspannung ein Ein/Aus des Brenners schalten kann und sonst nix.

Jetzt hängts von Alter und Bauart ab, wie bei dir der (Vaillant)-Wandthermostat dranhängt.

Ob der als Backup so einfach geht, weiss ich nicht - es gab welche, da konnte man einen Telefonschalter von Vaillant anschließen, und diesen Anschluss kann man einigermaßen einfach mit Fhem koppeln - aber Wandthermostat und FHEM parallel ist wohl keine so gute Idee...
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

Kopterframe

Danke für die Info.
Nun bin ich schon mal ein Stück weiter.
Ich habe eine Ecotec Classic ca. 6 oder 7 Jahre alt.
Aber das werde ich ja sicher sehen wenn ich sie öffne, welche Eingänge belegt sind.
Parallel wollte ich es auch nicht schalten. Sollte umschaltbar sein.
Heiko
FHEM aufRaspberry/ Cube_Max mit Culfw/  Cul_FS20
Max Thermostate/ Wandthemostat/Eib KNX

rubbertail

Irgendwo an dem Ding - bei mir auf der "UNterseite" - gibt es ein Plastikkästchen, in dem die KAbel alle zusammenlaufen... da muss man nachschauen.

Vorsicht: Netzspannung!!
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

Kopterframe

Hallo in die Runde.
Nachdem ich meinen CUBE um geflasht habe und alle Thermostate neu angelernt sind,
habe das HCS Modul und einen FS20 Aktor nun  ca 2 Wochen am Laufen. Trockentest
Therme habe ich noch nicht angeschlossen. Soweit funktioniert es super.
FS20 wird auf jeden Fall noch getauscht, war nur für Test.
Wie ist das mit der Pumpe? Gibt es da eine Nachlaufzeit oder wird die von der Therme abgeschaltet?
Möchte nicht, dass sie rund um die Uhr läuft
Habt Ihr das originale Wandthermostat der Therme komplett außer Betrieb genommen?
Heiko
FHEM aufRaspberry/ Cube_Max mit Culfw/  Cul_FS20
Max Thermostate/ Wandthemostat/Eib KNX

JHo

Hallo zusammen,

bin gerade erst über diese Option gestolpert, eine Junkers-Therme umzuschalten. Vielleicht suche ich genau das, aber: schaltet man damit komplett "Ein" (= Tagbetrieb?) und "Aus" (= Aus?) oder Tag/Nacht, Tag/Frostschutz, ...? Kann man das irgendwo in der Steuerung der Therme einstellen? Wir haben eine FW120.

Den Frostschutz nur über die Max-Thermostate und deren Temperatur zu regeln, wäre mir in meinem Fall etwas gefährlich: es geht um ein im Winter sporadisch 1-2x pro Woche genutztes Vereinsheim. Gerade jetzt wird es mal einen satten Monat gar nicht genutzt = nicht extra geheizt. Wenn sich dann in der Zeit mein FHEM oder der Cube oder was auch immer aufhängt und die Rohre auffrieren, wäre das nicht hilfreich ;-)

Danke!
Jan
1: FHEM auf Ubuntu, MAX!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, diverse LaCrosse-Sensoren, per remote angebundene DS18B20-Sensoren
2: FHEM auf Raspi 3, Max!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, ht_pitiny-Adapter zu Junkers FW120