HCS Modul

Begonnen von hjr, 20 Dezember 2017, 14:18:22

Vorheriges Thema - Nächstes Thema

hjr

Hallo Zusammen,

mit fhem und HCS ist es mir gelungen mein kleines Reihenhaus Heim in allen Etagen auf wohnlich angenehme Temperaturen zu bringen. Dazu habe ich das HCS erweitert, sodass es nun auch Z-Wave Thermostate unterstützt.

Anregungen und Wünsche zum Modul werde ich nach meinen Möglichkeit gerne umsetzen (etwas Geduld vorausgesetzt ;-). Mit anderen Worten, ich setzte mal meinen Namen in die Mainteiner Liste und schaue was ich zur fhem Gemeinde beitragen kann.

LG

hjr

fxstc

Hallo hjr

Find ich super, das sich wieder jemand ein bißchen drum kümmert.

Die Erweiterung für Zwave-Thermostate find ich ziemlich nützlich.

Ich hätte da eine Bitte zur Erweiterung des Homematic-Teils.
Das externe Thermostat Modell HM-CC-TC gibt es schon lange nicht mehr und wurde durch das Modell HM-TC-IT-WM-W-EU ersetzt. (Glaube seit 2014 etwa)
Könntest du die entsprechende Auswahl in den Zeilen 466-468 um dieses Modell erweitern ?

Bislang tausche ich mir das für meine Belange immer selbst, muß aber auch bei jedem Update wieder dran denken....
Wäre super, wenn du das ändern/einchecken könntest.

Danke schon mal
fxstc

Steffen

Hallo!

Wäre es auch möglich das HCS Modul für eine Klima Anlage zu nutzen, also die Berechnung des Thermostat in die andere Richtung zu lenken???

Mfg Steffen

hjr

Hi fxstc,

Winter und HCS sind schon fast vergessen ... hoffe Du schaust hier nochmals rein und bestätigst mir das ich Dich richtig vertanden habe. Dann checke ich es ein.
Zeile 466 und folgende sieht dann so aus:
    next if($t eq "CUL_HM" && ( !$attr{$d}{model}
                || !( ($attr{$d}{model} eq "HM-CC-TC" && !$defs{$d}{device})
                    || ($attr{$d}{model} eq "HM-TC-IT-WM-W-EU" && !$defs{$d}{device})

Danke & LG
Helmut

hjr

Hallo Steffen,

denke schon. Ich könnte das Modul von HCS in CCS umbenennen und es sollte tun ;-)

Das HCS bedient als zentrale Ausgabe ja nur ein Ein/Aus-Schalter der Heizungstherme. Ich habe keine Erfahrung wie moderene (oder ältere) Klimaanlagen gesteuert werden, man braucht eben ein Zugang.
Das wichtigste wäre wohl die Erweiterung wie das "Soll-Klima" vorgegeben wird. Das macht das 98_WeekdayTimer.pm Modul für HCS. Ich könnte mir vorstellen, dass man für den Sommer ganz andere Wochenprofile haben möchte. (Also anders wie ein amerikanisches Büro, das unabhängig der Tags-,Wochen-,Jahreszeit 18° kalt ist.) Die im Wochenprofil für den Winter herabgesetzte Nachttemperaturen würden die Klimaanlage im Sommer unerwünschter weise strapazieren. Ein Winter/Sommer umschalter, oder ein Heizung Ein/Aus, plus Kühlpumpe Ein/Aus, inklusive weiterer Regelintervalle müssten dazu kommen. Möglicherweise ist da auch schon einiges im fhem gemacht worden.

Hast Du Info über die Ansteuerung von Klimaanlagen eine spezielle Anlage, oder weiterführende Ideen?

LG

Helmut

Steffen

Hallo!

Die Klima Anlage die ich jetzt nutze ist eine die Kühlen und Heizen kann und ich steuere sie über ein Infrarot Gateway an.

Ich nutze sie gerade mit diesem DOIF:

(([Heizung_Officebox:DIFF]) < -1.5)
(set IR commandSend CoolModus)
DOELSEIF (([Heizung_Officebox:DIFF]) > 1.5)
(set IR commandSend HeatModus)
DOELSEIF (([Heizung_Officebox:DIFF] > -1.5) or ([Heizung_Officebox:DIFF] < 1.5))
(set IR commandSend FanModus)


Vielleicht hilft die das ja ein wenig weiter und würde mich freuen wenn du in dieser Richtung was entwickeln könntest?!


Mfg Steffen


fxstc

Hallo Helmut,

sorry für die späte Antwort.
War noch ein bisschen im Urlaub. ;D

Ich hab das Update mal durchlaufen lassen und nun sind alle Readings da.
Sieht soweit Tiptop aus.
Vielen Dank dafür.

Gruß
Andreas

fxstc

Hallo Helmut,

nach ein bißchen nachdenken doch noch vielleicht eine Ergänzung.

Eigentlich müßten die 3 Geräte-Typen abgefragt werden.
HM-TC-IT-WM-W-EU, HM-CC-TC, HM-CC-RT-DN

Der letztere Geräte-Typ für die Leute die keinen externen thermostat dran haben.

Gruß
Andreas


hjr

Hallo Andreas,

die letzteren zwei Geräte waren schon unterstützt. Nun ist die Änderung eingecheckt. Also kein lokales Patchen mehr nötig ;-)

LG

Helmut

fxstc

Super Danke.

Und schon komm ich mit was Neuem um die Ecke.
Da ich gerade dabei bin mir die Homematic IP Sachen etwas näher anzuschauen, habe ich auch so ein Thermostat vom Typ HmIP-WTH-2.

Dabei ist mir aus einem anderen Thread aufgefallen, daß schon versucht hast das mit zu berücksichtigen.
Nur damit das funktioniert müßte meiner meinung nach noch zwei Änderungen rein.

Zeile 462 statt:
next if($t ne "FHT" && $t ne "CUL_HM" && $t ne "MAX" && $t ne "ZWave");
next if($t ne "FHT" && $t ne "CUL_HM" && $t ne "HMCCUDEV" && $t ne "MAX" && $t ne "ZWave");

Da bei Homematic IP das Geräte nicht über das IO-Device CUL_HM reinkommt, sondern HMCCUDEV.
(Theoretisch sogar auch noch über HMCCUCHAN, aber das jemand den Thermostaten funktionsmäßig wirklich in einzelne Kanäle zerlegt glaub ich erst mal nicht)

Zeile 471 zusätzlich:
next if($t eq "HMCCUDEV" && ( !$attr{$d}{model}
                || !( ($attr{$d}{model} eq "HmIP-WTH-2" && !$defs{$d}{device})
                    || ($attr{$d}{model} eq "HmIP-eTRV" && !$defs{$d}{device}) )) );


Zeile 487 zusätzlich:
$devs{$d}{tempDesired}  = ReadingsVal($d,"1.SET_POINT_TEMPERATURE","n/a")       if($t =~ m/(HMCCUDEV)/);

Zeile 491 zusätzlich:
$devs{$d}{tempMeasured} = ReadingsVal($d,"1.ACTUAL_TEMPERATURE","n/a")      if($t =~ m/(HMCCUDEV)/);

Dann sollte das funktionieren. Tut es jedenfalls bei mir  8)

Wäre Super, wenn du das auch noch einbauen könntest.

Gruß
Andreas

hjr

Hallo Andreas,

vielen Dank für den Input. Ist so drin und ich hoffe das ein Update nun für Dich Ok geht.

LG

Helmut

fxstc

Danke Helmut,

wenn man wie in diesem Thread erwähnt https://forum.fhem.de/index.php?topic=82448.0 das attribut model einträgt, klappt das Ganze prima.
Im Moment habe ich noch keinen Stellaktor dran, melde mich aber dann wieder dazu.

Nochmal Danke und Gruß
Andreas

rrr

@hjr

Im HCS-Modul fehlt bislang die Möglichkeit Homematic-Geräte per HMCCUCHN anzubinden. Auch die Steuerung per Ventil war per HMCCUDEV/HMCCUCHN nicht möglich.

Im folgenden diff habe ich die fehlenden Funktionen ergänzt. Es wäre nett, wenn das ins Repo aufgenommen würde.


--- /opt/fhem/FHEM/59_HCSold.pm 2018-12-04 21:18:34.000000000 +0100
+++ /opt/fhem/FHEM/59_HCS.pm 2019-12-30 16:10:29.000000000 +0100
@@ -1,5 +1,5 @@
################################################################
-# $Id$
+# $Id: 59_HCS.pm 17894 2018-12-04 20:18:34Z bernd_zwo $
# vim: ts=2:et
#
#  (c) 2012 Copyright: Martin Fischer (m_fischer at gmx dot de)
@@ -459,11 +459,11 @@
   foreach my $d (sort keys %defs) {
     my $t = $defs{$d}{TYPE};
     # skipping unneeded devices
-    next if($t ne "FHT" && $t ne "CUL_HM" && $t ne "HMCCUDEV" && $t ne "MAX" && $t ne "ZWave" && $t ne "PID20");
+    next if($t ne "FHT" && $t ne "CUL_HM" && $t ne "HMCCUDEV" && $t ne "HMCCUCHN" && $t ne "MAX" && $t ne "ZWave" && $t ne "PID20");
     next if($t eq "MAX" && !$defs{$d}{type});
     next if($t eq "MAX" && $defs{$d}{type} !~ m/HeatingThermostat/);

-    next if( ($t eq "CUL_HM" || $t eq "HMCCUDEV") && ( !$attr{$d}{model}
+    next if( ($t eq "CUL_HM" || $t eq "HMCCUDEV" || $t eq "HMCCUCHN") && ( !$attr{$d}{model}
                 || !(  ($attr{$d}{model} eq "HM-CC-TC" && !$defs{$d}{device})
                     || ($attr{$d}{model} eq "HM-TC-IT-WM-W-EU" && !$defs{$d}{device})
                     || ($attr{$d}{model} eq "HmIP-WTH-2" && !$defs{$d}{device})
@@ -471,8 +471,9 @@
                     || ($attr{$d}{model} eq "HM-CC-RT-DN" && !$defs{$d}{device}) )) );
     next if($t eq "ZWave" && $attr{$d}{classes} !~ m/THERMOSTAT_SETPOINT/);

+    $devs{$d}{actuator}     = ReadingsVal($d,"actuator","n/a")      if($t =~ m/(HMCCUDEV|HMCCUCHN|FHT|CUL_HM|ZWave)/);
+    $devs{$d}{actuator}     = ReadingsVal($d,"4.VALVE_STATE","n/a") if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{actuator} eq "n/a");
     $devs{$d}{actuator}     = ReadingsVal($d,"valveposition","n/a") if($t =~ m/(MAX)/);
-    $devs{$d}{actuator}     = ReadingsVal($d,"actuator","n/a")      if($t =~ m/(FHT|CUL_HM|ZWave)/);
     $devs{$d}{actuator}     = ReadingsVal($d,"actuation","n/a")     if($t =~ m/(PID20)/);

     if ($devs{$d}{actuator} =~ m/^\d+\s*%?$/) {
@@ -484,17 +485,21 @@
     $devs{$d}{excluded}     = ($exclude =~ m/$d/) ? 1 : 0;
     $devs{$d}{ignored}      = ($attr{$d}{ignore} && $attr{$d}{ignore} == 1) ? 1 : 0;

-    $devs{$d}{tempDesired}  = ReadingsVal($d,"desired-temp","n/a")       if($t =~ m/(FHT|CUL_HM)/);
-    $devs{$d}{tempDesired}  = ReadingsVal($d,"desired","n/a") if($t =~ m/(PID20)/);
-    $devs{$d}{tempDesired}  = ReadingsVal($d,"1.SET_POINT_TEMPERATURE","n/a")   if($t =~ m/(HMCCUDEV)/);
-    $devs{$d}{tempDesired}  = ReadingsVal($d,"desiredTemperature","n/a") if($t =~ m/(MAX)/);
-    $devs{$d}{tempDesired}  = ReadingsNum($d,"setpointTemp","n/a",1)     if($t =~ m/(ZWave)/);
-    $devs{$d}{tempMeasured} = ReadingsVal($d,"measured-temp","n/a")      if($t =~ m/(FHT|CUL_HM)/);
-    $devs{$d}{tempMeasured} = ReadingsVal($d,"1.ACTUAL_TEMPERATURE","n/a")      if($t =~ m/(HMCCUDEV)/);
-    $devs{$d}{tempMeasured} = ReadingsNum($d,"temperature","n/a",1)      if($t =~ m/(MAX|ZWave)/);
-    $devs{$d}{tempMeasured} = ReadingsNum($d,"measured","n/a") if($t =~ m/(PID20)/);
-    $devs{$d}{tempDesired}  = ($t =~ m/(FHT)/) ? 5.5 : 4.5               if($devs{$d}{tempDesired} eq "off");
-    $devs{$d}{tempDesired}  = 30.5                                       if($devs{$d}{tempDesired} eq "on");
+    $devs{$d}{tempDesired}  = ReadingsVal($d,"desired-temp","n/a")            if($t =~ m/(HMCCUDEV|HMCCUCHN|FHT|CUL_HM)/);
+    $devs{$d}{tempDesired}  = ReadingsVal($d,"1.SET_POINT_TEMPERATURE","n/a") if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{tempDesired} eq "n/a");
+    $devs{$d}{tempDesired}  = ReadingsVal($d,"2.SET_TEMPERATURE","n/a")       if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{tempDesired} eq "n/a");
+    $devs{$d}{tempDesired}  = ReadingsVal($d,"4.SET_TEMPERATURE","n/a")       if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{tempDesired} eq "n/a");
+    $devs{$d}{tempDesired}  = ReadingsVal($d,"desired","n/a")                 if($t =~ m/(PID20)/);
+    $devs{$d}{tempDesired}  = ReadingsVal($d,"desiredTemperature","n/a")      if($t =~ m/(MAX)/);
+    $devs{$d}{tempDesired}  = ReadingsNum($d,"setpointTemp","n/a",1)          if($t =~ m/(ZWave)/);
+    $devs{$d}{tempMeasured} = ReadingsVal($d,"measured-temp","n/a")           if($t =~ m/(HMCCUDEV|HMCCUCHN|FHT|CUL_HM)/);
+    $devs{$d}{tempMeasured} = ReadingsVal($d,"1.ACTUAL_TEMPERATURE","n/a")    if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{tempMeasured} eq "n/a");
+    $devs{$d}{tempMeasured} = ReadingsVal($d,"4.ACTUAL_TEMPERATURE","n/a")    if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{tempMeasured} eq "n/a");
+    $devs{$d}{tempMeasured} = ReadingsVal($d,"1.TEMPERATURE","n/a")           if($t =~ m/(HMCCUDEV|HMCCUCHN)/ && $devs{$d}{tempMeasured} eq "n/a");
+    $devs{$d}{tempMeasured} = ReadingsNum($d,"temperature","n/a",1)           if($t =~ m/(MAX|ZWave)/);
+    $devs{$d}{tempMeasured} = ReadingsNum($d,"measured","n/a")                if($t =~ m/(PID20)/);
+    $devs{$d}{tempDesired}  = ($t =~ m/(FHT)/) ? 5.5 : 4.5                    if($devs{$d}{tempDesired} eq "off");
+    $devs{$d}{tempDesired}  = 30.5                                            if($devs{$d}{tempDesired} eq "on");

     $devs{$d}{type}         = $t;
     $hash->{helper}{device}{$d}{excluded} = $devs{$d}{excluded};
@@ -549,7 +554,8 @@
   my $sumDemand   = 0;
   my $sumExcluded = 0;
   my $sumFHT      = 0;
-  my $sumHMCCTC   = 0;
+  my $sumCULHM    = 0;
+  my $sumHMCCU    = 0;
   my $sumMAX      = 0;
   my $sumZWave    = 0;
   my $sumIdle     = 0;
@@ -571,7 +577,8 @@
     $hash->{helper}{device}{$d}{type}         = $devs{$d}{type};
     $sumMAX++       if(lc($devs{$d}{type}) eq "max");
     $sumFHT++       if(lc($devs{$d}{type}) eq "fht");
-    $sumHMCCTC++    if(lc($devs{$d}{type}) eq "cul_hm");
+    $sumCULHM++     if(lc($devs{$d}{type}) eq "cul_hm");
+    $sumHMCCU++     if(lc($devs{$d}{type}) eq "hmccudev" || lc($devs{$d}{type}) eq "hmccuchn");
     $sumZWave++     if(lc($devs{$d}{type}) eq "zwave");
     $sumPID20++     if(lc($devs{$d}{type}) eq "pid20");
     $sumTotal++;
@@ -722,8 +729,8 @@
     }

   }
-  my $str = sprintf("Found %d Device(s): %d FHT, %d HM-CC-TC, %d PID20, %d MAX, %d ZWave, demand: %d, idle: %d, ignored: %d, excluded: %d, unknown: %d",
-                    $sumTotal,$sumFHT,$sumHMCCTC, $sumPID20, $sumMAX, $sumZWave, $sumDemand,$sumIdle,$sumIgnored,$sumExcluded,$sumUnknown);
+  my $str = sprintf("Found %d Device(s): %d FHT, %d CUL_HM, %d HMCCUDEV/HMCCUCHN, %d PID20, %d MAX, %d ZWave, demand: %d, idle: %d, ignored: %d, excluded: %d, unknown: %d",
+                    $sumTotal,$sumFHT, $sumCULHM, $sumHMCCU, $sumPID20, $sumMAX, $sumZWave, $sumDemand,$sumIdle,$sumIgnored,$sumExcluded,$sumUnknown);
   Log3 $name, 3, "$type $name $str, eco: $eco overdrive: $overdrive";

   return $heatDemand;

hjr

Hallo rrr,

habe deine Erweiterung so eingetragen.

Vielen Dank,

Helmut

Hilde25

Hallo,

ich sehe ihr habt erfolgreich die Z-Wave Thermostate eingebunden, wie sieht es mit den Shelly TRV aus.
Wäre das ebenfalls möglich ?

Wenn dazu etwas benötigt wird, gebt mir kurz Bescheid.

Gruss
Frank