Mehrfachdefinition von HCS

Begonnen von schenkel, 08 Januar 2013, 16:00:26

Vorheriges Thema - Nächstes Thema

schenkel

Hallo Zusammen ( Hallo Martin ;)),

ich verwende HCS, um per HM-Thermostat einen HM-Zwischenstecker zu Steuern.
Hintergrund ist eine raumweise Steuerung von Elektroheizungen.

Zu diesem Zweck habe ich auch eine Abwandlung von HCS in Form einer 99_EHC.pm gebaut, die nicht alle Thermostate abklappert, sondern eine 1:1-Beziehung zwischen Thermostat und Schalter erzeugt.
Da ich im Hintergrund noch eine Kostenerfassung per Volkszaehler.org dazu entwickle, war mir der Weg über ein Modul lieber, um die ganzen Parameter als Attribute setzen zu können.

Mein Problem ist nun :
definiere ich mehrere HCS bzw.  EHCs, so funktioniert jeweils nur eins davon, die Übrigen bleiben im Status "DEFINED".

Bevor ich tiefer in den gesamten Perlcode eintauche : Kann ich ein Modul überhaupt mehrfach nutzen ?

Spontaner Workaround wäre, pro Raum eine 99_XYZ.pm

VG,
Sven

Martin Fischer

HCS kann mehrfach definiert werden. von mir aus auch pro raum. über das attribute exclude können ja FHTs, etc. ausgeschlossen werden.

wenn du allerdings einfach den code aus HCS in dein 99_xxx kopiert und die funktionen nicht umbenannt hast, dann könnte es problem geben.

probiere bitte aus:
definiede 2x HCS und bei jedem excludest du bestimmte thermostate. z.b. 1x für EG und einmal nur für OG.

gruss
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

jhohn

Bevor ich erfahren habe das HCS auch Elektroheizungen steuern kann hatte ich mir schon das hier gebastelt und das funktioniert bisher sehr gut, meine Perl Kenntnisse sind eher rudimentär aber evtl. kannst Du es ja trotzdem brauchen:

in 99_myUtils.pm:

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

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


# Wenn jemand zu Hause ist, lies die aktuelle Solltemperatur aus dem Thermostat
if ($homestatus ne "alleweg") {
$Tsoll = ReadingsVal($raum."_thermostat", "desired-temp","");
}
# Wenn niemand zuhause ist, setze Solltemperatur auf Nachttemperatur
else {
$Tsoll = ReadingsVal($raum."_thermostat", "night-temp","");
{fhem("set ".$raum."thermostat desired-temp ".$Tsoll)};
}

        # Wenn Ist-Tempeartur < Soll-Temperatur,
        # und die Heizung aus ist, überprüfe Fenstersensoren
if (($Tist < $Tsoll) && ($Tschalter eq "off")) {
# wenn ein Fenster geöffnet oder gekippt ist setze $Tsensor entsprechend
foreach my $sensor (@sensors) {
{fhem("get $sensor param STATE")};
my $sensorstate = Value($sensor);
if ($sensorstate eq "open") {
$Tsensor = "open";
}
elsif ($sensorstate eq "tilted" && $Tsensor eq "closed") {
$Tsensor = "tilted";
}
}
                # wenn alle Fenster geschlossen sind schalte die Heizung ein
if ($Tsensor eq "closed") {

{fhem("set ".$raum."_hz_schalter on")};
}
}
        # wenn Ist-Temperatur > Solltemperatur schalte Heizung aus
elsif (($Tist > $Tsoll) && ($Tschalter eq "on")) {

{fhem("set ".$raum."_hz_schalter off")};
}
}

aufgerufen wird das dann für jeden Raum per

define eg_ez_heizung_an_aus at +*00:01:00 {heizung("eg_ez","eg_ez_sensor_fenster","eg_ez_sensor_tuer","eg_ku_sensor_fenster");;}

Die Thermostate heissen bei mir <etage>_<raum>_thermostat (z.B. eg_ez für Erdgeschoss Eßzimmer)
Die Aktoren für die Heizungsschaltung <etage>_<raum>_hz_schalter
homestatus ist momentan ein Dummy der den Status Tag, Nacht und alleweg haben kann
sensors sind 3-State Fenstergriff Sensoren

Falls es sich um Nachtspeicheröfen handelt hätte ich auch noch einen Schnipsel für eine einfache Ladesteuerung.
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

schenkel

Zitat von: Martin Fischer schrieb am Di, 08 Januar 2013 21:22wenn du allerdings einfach den code aus HCS in dein 99_xxx kopiert und die funktionen nicht umbenannt hast, dann könnte es problem geben.
Die habe ich alle umbenannt. Das funktioniert soweit, auch parallel zu einem definierten HCS. Genau das nutze ich derzeit als Workaround, um zwei Steuerungen parallel machen zu können.

Zitat von: Martin Fischer schrieb am Di, 08 Januar 2013 21:22probiere bitte aus:
definiede 2x HCS und bei jedem excludest du bestimmte thermostate. z.b. 1x für EG und einmal nur für OG.
Das hatte ich zuerst genau so versucht. Insgesamt 5 HCS für 5 Thermostate mit jeweils mit 4 Excludes pro HCS.
Der effekt war genau gleich. ein HCS ist danach "idle" die übrigen verbleiben im "defined"-State.


define UG.Buero.Hzg.HCS HCS UG.Buero.Hzg.Schalter1
attr UG.Buero.Hzg.HCS deviceCmdOff off
attr UG.Buero.Hzg.HCS deviceCmdOn on-for-timer 130
attr UG.Buero.Hzg.HCS event-on-change-reading state,devicestate,eco,overdrive
attr UG.Buero.Hzg.HCS event-on-update-reading state,devicestate
attr UG.Buero.Hzg.HCS exclude EG.WZ.Hzg.Thermostat,EG.Bad.Hzg.Thermostat,EG.Flur.Hzg.Thermostat,EG.Kueche.Hzg.Thermostat
attr UG.Buero.Hzg.HCS idleperiod 2
attr UG.Buero.Hzg.HCS interval 1
attr UG.Buero.Hzg.HCS loglevel 4
attr UG.Buero.Hzg.HCS mode thermostat
attr UG.Buero.Hzg.HCS thermostatThresholdOff 0.2
attr UG.Buero.Hzg.HCS thermostatThresholdOn 0.2
attr UG.Buero.Hzg.HCS valveThresholdOff 40
attr UG.Buero.Hzg.HCS valveThresholdOn 35

 define EG.Bad.Hzg.HCS HCS EG.Bad.Hzg.Schalter1
 attr EG.Bad.Hzg.HCS deviceCmdOff off
 attr EG.Bad.Hzg.HCS deviceCmdOn on-for-timer 130
 attr EG.Bad.Hzg.HCS event-on-change-reading state,devicestate,eco,overdrive
 attr EG.Bad.Hzg.HCS event-on-update-reading state,devicestate
 attr EG.Bad.Hzg.HCS exclude UG.Buero.Hzg.Thermostat,EG.WZ.Hzg.Thermostat,EG.Flur.Hzg.Thermostat,EG.Kueche.Hzg.Thermostat
 attr EG.Bad.Hzg.HCS idleperiod 2
 attr EG.Bad.Hzg.HCS interval 1
 attr EG.Bad.Hzg.HCS loglevel 4
 attr EG.Bad.Hzg.HCS mode thermostat
 attr EG.Bad.Hzg.HCS thermostatThresholdOff 0.2
 attr EG.Bad.Hzg.HCS thermostatThresholdOn 0.2
 attr EG.Bad.Hzg.HCS valveThresholdOff 40
 attr EG.Bad.Hzg.HCS valveThresholdOn 35

define EG.WZ.Hzg.HCS HCS EG.WZ.Hzg.Schalter1
attr EG.WZ.Hzg.HCS deviceCmdOff off
attr EG.WZ.Hzg.HCS deviceCmdOn on-for-timer 130
attr EG.WZ.Hzg.HCS event-on-change-reading state,devicestate,eco,overdrive
attr EG.WZ.Hzg.HCS event-on-update-reading state,devicestate
attr EG.WZ.Hzg.HCS exclude UG.Buero.Hzg.Thermostat,EG.Bad.Hzg.Thermostat,EG.Flur.Hzg.Thermostat,EG.Kueche.Hzg.Thermostat
attr EG.WZ.Hzg.HCS idleperiod 2
attr EG.WZ.Hzg.HCS interval 1
attr EG.WZ.Hzg.HCS loglevel 4
attr EG.WZ.Hzg.HCS mode thermostat
attr EG.WZ.Hzg.HCS thermostatThresholdOff 0.2
attr EG.WZ.Hzg.HCS thermostatThresholdOn 0.2
attr EG.WZ.Hzg.HCS valveThresholdOff 40
attr EG.WZ.Hzg.HCS valveThresholdOn 35


Führt zu List-Output :

HCS:
UG.Buero.Hzg.HCS     (demand)
EG.Bad.Hzg.HCS    (Defined)
EG.WZ.Hzg.HCS    (Defined)


Gruß Sven

schenkel

Zitat von: jhohn schrieb am Di, 08 Januar 2013 22:02Bevor ich erfahren habe das HCS auch Elektroheizungen steuern kann hatte ich mir schon das hier gebastelt und das funktioniert bisher sehr gut, meine Perl Kenntnisse sind eher rudimentär aber evtl. kannst Du es ja trotzdem brauchen
Vielen Dank, ich hatte eine ältere Version von Deiner Lösung schonmal in der Google-Mailingliste gefunden. Das ist tatsächlich eine Option.
Zitat von: jhohn schrieb am Di, 08 Januar 2013 22:02Falls es sich um Nachtspeicheröfen handelt hätte ich auch noch einen Schnipsel für eine einfache Ladesteuerung.
Es sind Schamott-Vollspeicherheizkörper, die ganztägig auf einem separaten Stromkreis mit eigenem Zähler und eigenem Tarif laufen.
Ich verwende die externen Thermostate weil ich zum einen darüber die Nachtabsenkung steuern will, zum anderen schalten die integrierten Thermostate zu früh ab, bezüglich Wärmeverteilung im Raum, was dazu führt, daß die Schamottsteine nicht ausreichend durchgewärmt werden und deren Effekt ein Stück weit verloren geht.

Gruß Sven

stromer-12

Hast du schon mal versucht das Device explizit einzuschalten, also einen Schubs zu geben.
Ich hatte das auch hin und wieder, wenn das Modul sich neu initialisierte.
In letzter Zeit aber nicht mehr.

Zitat von: schenkel schrieb am Mi, 09 Januar 2013 07:24Führt zu List-Output :

HCS:
UG.Buero.Hzg.HCS     (demand)
EG.Bad.Hzg.HCS    (Defined)
EG.WZ.Hzg.HCS    (Defined)


Gruß Sven
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL