Heizung per HM-CC-RT-DN nach An-/ Abwesenheit steuern (Residents)

Begonnen von C0mmanda, 09 September 2015, 19:11:50

Vorheriges Thema - Nächstes Thema

C0mmanda

Moin moin,

nachdem ich bereits viel aus dem Forum ziehen konnte was mir sehr geholfen hat möchte ich meine erste eigene sub hier bereit bzw vorstellen.
Es ist meine erste sub, also bitte etwas Nachsicht wenn etwas nicht ganz sauber sein sollte :)

Ziel der sub ist es, beliebig viele HM-CC-RT-DN Devices bei Ankunft auf die voreingestellte Tagestemperatur (dayTemp) und bei Abwesenheit auf die voreingestellte Absenktemperatur (nightTemp) zu schalten. Außerdem soll die Temperatur abgesenkt werden wenn ich schlafen gehe.

Ich steuere meine Homematic Thermostate zwar per Timer-Programm, dies ist aber sehr statisch. Ich wollte eine Lösung welche zusätzlich auf An- und Abwesendheit sowie Schlafen Rücksicht nimmt.
Der Anwesenheitszustand wird per RESIDENTS geregelt.
In der sub wird auch eine Pushover-Nachricht abgesetzt. (In der sub noch zu Testzwecken, aber als Beispiel ganz gut denke ich)

Voraussetzungen:

- RESIDENTS mit den Modi: home, absent + asleep (In meiner sub "RSD_Headquarter" für das Haus)
- Homematic-Thermostate (Channel 4) haben die Namensgebung ".._..._Clima" oder ".._...._Clima". (Ein Punkt steht für je ein Zeichen, z.B. eg_GBad_Clima oder og_SZ_Heizung.) ALLE Devices mit der Namensgebung werden geschaltet.
- Definierte Tages- und Nachttemperatur am Thermostat. (ist ja eh vorhanden).

Die  sub wird bei mir durch ein DOIF aufgerufen welches auf RESIDENTS reagiert.

Beispiel: define DI_Residents_Heizung DOIF ([RSD_Headquarter] eq "home") ({HeizungAbwesend})

Ein notify ist natürlich auch möglich (Ich steuere mit dem DOIF noch mehrere Dinge). Entscheidend ist der Aufruf {HeizungAbwesend}.

Man könnte auch zusätzlich noch ein "at" absetzen zu den fest programmierten Schaltzeitpunkten falls man nicht nach Hause kommt. Natürlich kann man auch komplett auf den Timer verzichten und nur nach Anwesenheit gehen.

Ich möchte nicht auf den Timer verzichten damit das Haus nicht kalt ist wenn fhem mal außer Betrieb ist. (Warum auch immer).

Die sub gehört natürlich in die 99_myUtils.pm.

sub HeizungAbwesend {
my @devices = devspec2array('.._(...|....)_Clima');       
foreach my $device (@devices){
my $aktuelldesired = ReadingsVal($device,"desired-temp","999" );
my $daytemp = ReadingsVal($device,"R-dayTemp","999" );
$daytemp =~ s/[^0-9.,-]+//gs;
my $nighttemp = ReadingsVal($device,"R-nightTemp","999" );
$nighttemp =~ s/[^0-9.,-]+//gs;
my $homestatus = ReadingsVal("RSD_Headquarter","state","error" );
if ($homestatus eq "absent"){
if ($aktuelldesired != $nighttemp) {
{fhem ("set $device desired-temp $nighttemp; set $device burstXmit; set Pushover1 msg 'Test' 'Abwesend. Heizung wird runtergefahren' 'C0mmanda' 0 ''")};
} else {
                    {fhem ("set Pushover1 msg 'Test' 'Abwesend. Heizung ist bereits auf Absenktemperatur' 'C0mmanda' 0 ''")};
}}
elsif ($homestatus eq "home"){
if ($aktuelldesired != $daytemp) {
                    {fhem ("set $device desired-temp $daytemp; set $device burstXmit; set Pushover1 msg 'Test' 'Anwesend. Heizung wird hochgefahren' 'C0mmanda' 0 ''")};
} else {
                    {fhem ("set Pushover1 msg 'Test' 'Anwesend. Heizung ist bereits auf Tagestemperatur' 'C0mmanda' 0 ''")};
}}
elsif ($homestatus eq "asleep"){
if ($aktuelldesired != $nighttemp) {
                    {fhem ("set $device desired-temp $nighttemp; set $device burstXmit; set Pushover1 msg 'Test' 'Schlafmodus. Heizung wird auf Nachttemperatur abgesenkt' 'C0mmanda' 0 ''")};
} else {
                    {fhem ("set Pushover1 msg 'Test' 'Schlafen, Heizung ist bereits auf Nachttemperatur' 'C0mmanda' 0 ''")};
}}
}
}

kvo1

Hi,
In welchem Modus laufen den Deinen RT-DN' ? .... Manuell?
Im Automatik Modu Schalter die wieder zurück, sobald ein Schaltzeitpunkt erreicht ist?
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

C0mmanda

Bei mir laufen die RT's derzeit im Automatik-Modus.

Du hast recht, wenn der Schaltzeitpunkt erreicht ist "überschreibt" die Zeitautomatik die per Anwesenheit gesetzte Temperatur, hier müßte ich evtl. noch an der sub arbeiten, dazu müsste ich wahrscheinlich nur erstmal meine Perl-Kenntnisse erweitern ;)

Würden die RT's auf Manuell laufen würde es eine reine Anwesenheitssteuerung ergeben.

Mir ging es in erster Linie darum, wenn die Zeitautomatik z.B. vorsieht von 18-23Uhr auf 23 °C zu heizen, ich aber ab 20Uhr Abwesend bin die Temperatur abgesenkt wird.

Durch geschickte Programmierung der Zeitautomatik kann ich das aber minimieren. Wir haben einen relativ gleichmäßigen Tagesablauf, i.d.R. bin ich z.b. immer gegen 17Uhr von der Arbeit zuhause, die Frau auch.
Die Zeitautomatik steht aber auf 18Uhr. Kommen wir früher nach Hause greift die sub und fährt schon vor 18Uhr die Temperatur hoch.

Sicherlich kann man da noch was optimieren, dazu brauche ich aber Zeit und bessere Perl-Fähigkeiten....

CoolTux

Es gibt viele Wege, daher mein Post bitte nicht als Kritik auffassen, sondern als einen weiteren Weg.

Ich mache das ganze über ein structur device. Alle Thermostate sind bei mir in einer Structure Wohnung enthalten. Wird nun die gesamte Wohnung als abwesend (Residenz) makiert, schaltet ein DOIF die gesamte Structure auf 17 Grad.
Auch bei mir laufen die Thermostate um Automodus so das die Zeitautomatik wieder überschreiben würde. Aber die ist so eingestellt das auf alle Fälle jemand in dem Zeitraum da ist.
Ausserdem habe ich noch einen Dummy welcher flexibel Temperaturprofile setzt. Summer, Frost, Cold, Mild. Und ein Holiday ist auch mit dabei.



Gruß
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

C0mmanda

Keine Sorge, habe deinen Post nicht negativ aufgenommen und bin für Tips und Hinweise immer dankbar.

Ich bin erst seit 4 Wochen mit fhem beschäftigt und habe ganz sicher noch viel zu lernen und bedenke hier und da auch ganz bestimmt einige Dinge nicht, oder löse Probleme auf einem etwas komplizierterem Wege weil ich z.B. ein Modul noch nicht kenne usw.

Über eine structure hatte ich auch nachgedacht aber verworfen, da ich für verschiedene Räume unterschiedliche Tages- und Absenktemperaturen vorsehe. (Wobei mir jetzt beim schreiben auffällt das dies auch kein Problem wäre)...
Man wächst halt mit seine Aufgaben :)

Der Dummy mit den Temperatur-Profilen weckt jetzt aber meine Neugierde... ;) Darf ich fragen wie du das gelöst hast?



CoolTux

Kenne ich, ging mir am Anfang genau so. Und ich selbst bin ja auch erst seit Januar dabei.

Mein Beispiel zeigte nur das Ende der Struktur Kette. Ich habe für Heizung, Licht und Verbraucher pro Raum eine structure und dann noch mal 2 Strukturen für die gesamte Wohnung welche Licht/Verbraucher Strukturen und Thermostat Strukturen beinhalten.
Man kann wirklich eine Menge machen und auch ich habe bestimmt die ein oder andere Anforderung eher erschlagen als filigran gelöst   ;D



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Hollo

Zitat von: CoolTux am 15 September 2015, 11:06:46
...Ich mache das ganze über ein structur device. Alle Thermostate sind bei mir in einer Structure Wohnung enthalten. Wird nun die gesamte Wohnung als abwesend (Residenz) makiert, schaltet ein DOIF die gesamte Structure auf 17 Grad...
Ausserdem habe ich noch einen Dummy welcher flexibel Temperaturprofile setzt...
So ähnlich habe ich das auch...Betriebsartenwahl, Temperaturvorwahl zum globalen Setzen, etc. ...
Wenn man die Dinger passend benennt, kann man auf structure etc. verzichten; wenn ich eine Temp. definitiv setzen will ist mir auch die aktuelle Temp. egal.
Keep it simple  ;D
   
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

rasti

Hallo Hollo,

gefällt mir, kannst du mal den zugehörigen Code posten ?

Gruss

Ralf


CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rasti

Zitat von: CoolTux am 17 Oktober 2015, 07:01:25
Hier findest Du den Code
http://www.fhemwiki.de/wiki/ReadingsGroup

Hallo,

das auf der Seite genauer das hier :

http://www.fhemwiki.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate

hab ich bei mir laufen.  Hollo hatte aber noch "..Betriebsartenwahl, Temperaturvorwahl zum globalen Setzen, etc. ." siehe sein Screenshot. . Den Code dazu meinte ich...

Gruss

Ralf

Hollo

Zitat von: rasti am 17 Oktober 2015, 02:14:36
Hallo Hollo,

gefällt mir, kannst du mal den zugehörigen Code posten ?
...

Klar, kein Problem; ist halt ganz simpel gehalten.

### Heizungsmodus setzen ###
define Heizungsmodus dummy
attr Heizungsmodus devStateIcon auto:sani_heating_automatic FHEM:sani_heating_manual AUS:secur_heat_protection Frostschutz:temp_frost
attr Heizungsmodus group Heizung
attr Heizungsmodus icon temp_inside
attr Heizungsmodus room Wohnung
attr Heizungsmodus setList state:auto,FHEM,Frostschutz,AUS
attr Heizungsmodus sortby 01
attr Heizungsmodus webCmd state
define n_Heizungsmodus notify Heizungsmodus:.* {HeizMode}


### globale Heiztemperatur setzen ###
define Wohnungstemperatur dummy
attr Wohnungstemperatur alias Temperatur-Vorwahl
attr Wohnungstemperatur group Heizung
attr Wohnungstemperatur icon hm-tc-it-wm-w-eu
attr Wohnungstemperatur room Wohnung
attr Wohnungstemperatur setList state:18.0,19.0,20.0,21.0,22.0,23.0
attr Wohnungstemperatur sortby 01
attr Wohnungstemperatur webCmd state
define n_Wohnungstemperatur notify Wohnungstemperatur:.* { fhem("set .*_Heizung_Clima desired-temp %") }


Und noch die entsprechende Funktion zur Betriebsartenumschaltung aus meiner 99_myUtils:
########## Heizungsmodus setzen #############
# hiermit werden die Thermostate umgestellt #
# für Sommer wäre eigentlich on sinnvoller, #
# das geht aber nur bei Heizung AUS !       #
# Beim "Sommerbetrieb" auch die             #
# Fenster-Auf-Erinnerung deaktivieren       #
#############################################
sub
HeizMode()
{
  if (Value("Heizungsmodus") eq "auto" ) {
  fhem ("attr n_Fenster_AUF disable 0");
        fhem ("set .*_Heizung_Clima controlMode auto") };
  if (Value("Heizungsmodus") eq "FHEM" ) {
  fhem ("attr n_Fenster_AUF disable 0");
        fhem ("set .*_Heizung_Clima controlManu 18.0") };
  if (Value("Heizungsmodus") eq "Frostschutz" ) {
    fhem ("attr n_Fenster_AUF disable 0");
            fhem ("set .*_Heizung_Clima controlManu 16.0") };
  if (Value("Heizungsmodus") eq "AUS" ) {
  fhem ("attr n_Fenster_AUF disable 1");
fhem ("set .*_Heizung_Clima controlManu off") };
}

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"