Autor Thema: [UPDATE4]Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker  (Gelesen 18727 mal)

Offline The-Holgi

  • Full Member
  • ***
  • Beiträge: 437
Antw:Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker
« Antwort #15 am: 10 Dezember 2013, 19:37:41 »
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
« Letzte Änderung: 10 Dezember 2013, 20:28:55 von The-Holgi »
Raspberry Pi3; Fhem 5.7; 2X CUL V3 868mhz; Max Heizungssteuerung; 433mHz Rf Transmitter für Elro Zwischenstecker; 1wire DS18B20 Temperatursensoren; 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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
Antw:Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker
« Antwort #16 am: 10 Dezember 2013, 21:29:16 »
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 :)

Offline The-Holgi

  • Full Member
  • ***
  • Beiträge: 437
Antw:Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker
« Antwort #17 am: 11 Dezember 2013, 17:18:08 »
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
« Letzte Änderung: 11 Dezember 2013, 19:12:05 von The-Holgi »
Raspberry Pi3; Fhem 5.7; 2X CUL V3 868mhz; Max Heizungssteuerung; 433mHz Rf Transmitter für Elro Zwischenstecker; 1wire DS18B20 Temperatursensoren; 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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
Antw:Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker
« Antwort #18 am: 11 Dezember 2013, 20:00:01 »
Hallo,
gut dass du das sagst. Ist die Frage ob das auch bei mir passiert? Oder geht es da weil ich Zahlenwerte vergleiche....

Offline The-Holgi

  • Full Member
  • ***
  • Beiträge: 437
Antw:Codevorlage: Steuerung meiner Therme mit dem MAX!-Zwischenstecker
« Antwort #19 am: 11 Dezember 2013, 21:40:41 »
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
Raspberry Pi3; Fhem 5.7; 2X CUL V3 868mhz; Max Heizungssteuerung; 433mHz Rf Transmitter für Elro Zwischenstecker; 1wire DS18B20 Temperatursensoren; 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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
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.

Offline The-Holgi

  • Full Member
  • ***
  • Beiträge: 437
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
« Letzte Änderung: 21 Oktober 2014, 17:04:34 von The-Holgi »
Raspberry Pi3; Fhem 5.7; 2X CUL V3 868mhz; Max Heizungssteuerung; 433mHz Rf Transmitter für Elro Zwischenstecker; 1wire DS18B20 Temperatursensoren; 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

Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9787
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
Cubietruck als Server mit DBLog
CUNO für FHT80B und FS20, HM-Lan, 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.

Offline The-Holgi

  • Full Member
  • ***
  • Beiträge: 437
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  ;)
« Letzte Änderung: 21 Oktober 2014, 18:21:16 von The-Holgi »
Raspberry Pi3; Fhem 5.7; 2X CUL V3 868mhz; Max Heizungssteuerung; 433mHz Rf Transmitter für Elro Zwischenstecker; 1wire DS18B20 Temperatursensoren; 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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
Update im Eingangspost, ich versuche es jetzt mit dem HCS-Modul.

Offline The-Holgi

  • Full Member
  • ***
  • Beiträge: 437
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
« Letzte Änderung: 30 Januar 2015, 11:18:17 von The-Holgi »
Raspberry Pi3; Fhem 5.7; 2X CUL V3 868mhz; Max Heizungssteuerung; 433mHz Rf Transmitter für Elro Zwischenstecker; 1wire DS18B20 Temperatursensoren; 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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
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

  • Gast
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

Offline Mr.Heat

  • Jr. Member
  • **
  • Beiträge: 72
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).

 

decade-submarginal