FHEM Forum

FHEM => Automatisierung => Thema gestartet von: DerTom am 21 Dezember 2013, 15:15:50

Titel: Steuerung Dachrinnenheizung
Beitrag von: DerTom am 21 Dezember 2013, 15:15:50
Hallo,

Vielleicht hat einer eine Idee. Ich habe eine Dachrinnenheizung, welche bei einer Aussentemperatur < 0°C die Dachrinne soweit aufheizen soll, daß sie > 3 °C hat und dann abschaltet. Bei <  3°C soll sie dann wieder einschalten. So weit so gut und auch nicht tragisch.  Dies soll aber nur geschehen, wenn mein Regensensor sagt, daß es regnet (also HOF_Regen1 - state:on) und die Aussentemperatur weiterhin < 0°C bleibt. Wenn es nicht mehr regnet (bei den Temperaturen wohl eher schneit) soll die Heizung aber noch mindestens 3 Stunden weiter heizen, damit der Schnee weiter schmelzen kann.

Ich hab zwar schon so einiges mit Threshold rumprobiert, bekomme aber den Regensensor nicht eingebunden.

Die Temperaturmessung geschieht mit einem HM-WDS30-OT2-SM welcher an einem Sensor die Aussentemperatur und mit dem zweiten Sensor die Dachrinnentemperatur misst. Der Regensensor ist ein FS20SR. Dieser sendet alle 2 Minuten ein "on".

Wäre für einen Denkansatz dankbar.

Gruß Thomas
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Puschel74 am 21 Dezember 2013, 16:47:02
Hallo,

Zitatwelche bei einer Aussentemperatur < 0°C die Dachrinne soweit aufheizen soll, daß sie > 3 °C hat und dann abschaltet.
Also mal ein notify auf die Aussentemperatur:temp:* ODER Dachrinne:temp.*
define Dachrinnen_an_pruef notify (Aussentemperatur|Dachrinne):temp.* {

mit einer if-Abfrage ob Aussentemperatur kleiner 0
if (ReadingsVal("Aussentemperatur") < "0.0") {

und einer if-Abfrage ob Dachrinne<3
if (ReadingsVal("Dachrinne") < "3.0") {

und einer Prüfung auf Regen
if (Value("HOF_Regen1") eq "on) {

schaltet die Dachrinenheizung ein
set Dachrinnenheizung on;

In allen anderen Fällen schalten wir die Heizung wieder aus.

Und hier der gesamte Code  ;)
ist ja kurz vor Weihnachten

define Dachrinnen_an_pruef notify (Aussentemperatur|Dachrinne):temp.* {
  if (ReadingsVal("Aussentemperatur") < "0.0") {
    if (ReadingsVal("Dachrinne") <= "3.0") {
  if (Value("HOF_Regen1") eq "on) {
    fhem("set Dachrinnenheizung on") if (Value("Dachrinnenheizung") ne "on");
  }
  else {
        fhem("set Dachrinnenheizung off") if (Value("Dachrinnenheizung") ne "off");
      }
}
else {
      fhem("set Dachrinnenheizung off") if (Value("Dachrinnenheizung") ne "off");
    }
  }
  else {
    ("set Dachrinnenheizung off") if (Value("Dachrinnenheizung") ne "off");
  }
}


Die vielen else-Abfragen hätte man sich sicher auch sparen können - ich will nur auf Numemr sicher gehen.
Eine Bedingung von dir - das es regnet - habe ich mal untergeordnet.

Grüße

Edith: Evtl. Fehler ausgebessert und unnötige Schaltungen vermieden
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Damian am 21 Dezember 2013, 20:41:21
oder so:

define TH_Aussen THRESHOLD Aussen:temperature:0:0

define Heizbedarf structure Heizbadarf_typ TH_Aussen Regensensor
attr Heizbedarf clientstate_behavior relativeKnown
attr Heizbedarf clientstate_priority off on

define TH_Heizung TRHESHOLD Dachrinne:temperature:6:3 OR Heizbedarf:state:off



Für die Verzögerung von drei Stunden, kannst du statt Regensensor einen Dummy in der Structure eintragen. Der Dummy wird verzögert über einen Watchdog auf off gesetzt, wenn der Regensensor einen Zustandsübergang von on auf off erfährt.

Gruß

Damian
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Puschel74 am 21 Dezember 2013, 20:54:14
Hallo,

Zitatoder so:

Äh - oder so  :o

Ok. Ich lern gern noch dazu.
Habe den Code zwar nicht durchblickt aber das wird schon noch (hoffentlich).
Genial wie kurz das geht.

Grüße
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: DerTom am 22 Dezember 2013, 09:50:28
Moin,

@Puschel74: Die Idee, das ganze nicht über Threshold zu regeln, habe ich ehrlich gesagt gar nicht in Erwägung gezogen, ist aber durchaus ein Ansatz. Allerdings ist der Fakt dass es regnet nicht so untergeordnet, wie Du vielleicht denkst. Es ist nur sinnvoll, die Heizung einzuschalten wenn es auch was zum "Schmelzen" gibt...Die Dachrinne aufzuheizen, nur weil es unter 0°C ist, wäre ja Stromverschwendung...immerhin hat das Ding eine Leistung von 300 W...

@Damian: Das ist wirklich kurz und prägnant! Da muss ich, wie Puschel auch schon meinte, erst mal durchsteigen. Ich will es ja verstehen, nicht nur anwenden. Daher auch die Bemerkung wegen des Denkansatzes. Aber ich wurschtele mich da mit Hilfe der Commandref schon durch...

Schönen 4. Advent, und danke für die Hilfe. :D
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Damian am 22 Dezember 2013, 10:10:52
Zitat von: DerTom am 22 Dezember 2013, 09:50:28
@Damian: Das ist wirklich kurz und prägnant! Da muss ich, wie Puschel auch schon meinte, erst mal durchsteigen. Ich will es ja verstehen, nicht nur anwenden. Daher auch die Bemerkung wegen des Denkansatzes. Aber ich wurschtele mich da mit Hilfe der Commandref schon durch...

Es war schon zu kurz. Damit es auch wirklich funktionieren kann, muss man natürlich beim zweiten THRESHOLD noch angeben, was überhaupt zu schalten ist, also:

define TH_Heizung TRHESHOLD Dachrinne:temperature:6:3 OR Heizbedarf:state:off Heizung

Gruß

Damian
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Puschel74 am 22 Dezember 2013, 10:18:44
Hallo,

der Regensensor ist bei meinem Code nur deswegen "untergeordnet" weil das notify nicht auf ein regexp von diesem "hört".

Eingeschaltet wird die Heizung nur wenn
Aussentemperatur < 0 °C
Dachrinne < 3°C
und Regensensor meldet on.

Sollte der Regensensor nun ein off melden reagiert das notify nicht drauf da ich davon ausgehe das die 2 Temperaturen (Aussentemperatur und Dachrinne) ihre Werte öfter melden als der Regensensor.
Sollte sich also die temperatur ändern und der Regensensor auf off stehen wird die Heizung natürlich wieder abgeschaltet.
Ebenso wenn eine der beiden Temperaturen höher ist als im Programm angegeben.

Grüße
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: DerTom am 22 Dezember 2013, 10:35:45
@Damian: Ja, ist mir auch schon aufgefallen, aber das hab ich schon korrigiert. Ebenso, wie die Hysterese des zweiten Treshold. Die darf nicht 6 sein, sondern 0, denn sie soll ja bei unter +3 °C wieder einschalten, nicht bei unter -3°C...

Aber wie schon vorher gesagt, ich brauchte nur den Denkansatz. Da kam mir Structure recht passend...

@Puschel: Stimmt, hab ich übersehen. Da aber der FS20SR sowieso kein "off"sendet, sondern ich dieses mit Ablaufen des FHEM-internen Timers nach 2 Minuten per Notify händisch auf off stelle (sonst bleibt "state" ewig auf "on"), hätte ich das damit auch abschalten können. Die Lösung mit Threshold und Structure ist allerdings eleganter. Aber trotzdem danke für diesen Ansatz.
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Puschel74 am 22 Dezember 2013, 10:50:39
Hallo,

ZitatDie Lösung mit Threshold und Structure ist allerdings eleganter.

Das glaube ich dir gerne  ;D

Könntest du bitte auch deinen kompletten Code hier einstellen und den Beitrag als gelöst markieren?
Evtl. sollten wir sowas auch ins Wiki packen (inkl. meinem umständlichen Code) damit andere davon profitieren.

Grüße
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: DerTom am 22 Dezember 2013, 11:13:50
Ich werde, wenn der Versuch erfolgreich war, hier gern morgen den vollen Code posten, da heute noch einige Adventsbesuche anstehen...(hab keine Lust dazu ::), aber muss sein.)

Wiki gern...
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: DerTom am 23 Dezember 2013, 15:04:59
Hallo,

hab das Ganze jetzt mal getestet. So wie es aussieht habe ich 3 Themen zu klären:


Das ist alles sehr verwirrend...

Gruß
Thomas
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Damian am 24 Dezember 2013, 13:40:59
Zitat von: DerTom am 23 Dezember 2013, 15:04:59
Das ist alles sehr verwirrend...

Hallo Thomas,

dann fangen wir ganz langsam an, bevor das Christkind kommt:  :)

define D1 dummy
define D2 dummy
define D_S structure D_Typ D1 D2
attr D_S  clientstate_behavior relativeKnown
attr D_S clientstate_priority off on


set D1 on
set D1 on
liefert D_S on

set D1 off
set D1 on
liefert D_S  off

set D1 on
set D1 off
liefert D_S  off

set D1 off
set D1 off
liefert D_S off

Funktioniert bei mir wie programmiert.

Auf gut deutsch: sobald einer auf off geht, ist structure off, wenn alle on sind, dann ist structure on.

Wenn das bei dir läuft, dann kannst du als nächstes einen Dummy gegen den ersten Threshold aus meinem Vorschlag ersetzen.

Gruß

Damian
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: DerTom am 25 Dezember 2013, 12:39:24
Hallo Damian,

ich muss sagen, mit einem Dummy statt dem direkten state des Regensensors funktioniert es. Dann schalte ich also zusätzlich einen Dummy mit dem Regensensor. Muss man nur erst mal wissen, daß sich ein FS20SR mit follow-on-timer anders verhält als ein Dummy. Was solls. Werde alles zusammenstellen und dann hier posten.

Es bleibt trotzdem noch meine Frage 3...kannst Du mir diese beantworten? Immerhin bist Du der Urheber des Moduls.

Gruß
Thomas
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: Damian am 25 Dezember 2013, 13:13:47
Zitat von: DerTom am 25 Dezember 2013, 12:39:24
ich muss sagen, mit einem Dummy statt dem direkten state des Regensensors funktioniert es.
Es muss auch mit dem Regensensor funktionieren, wenn er im Status on bzw. off enthält.
Zitat
Es bleibt trotzdem noch meine Frage 3...kannst Du mir diese beantworten? Immerhin bist Du der Urheber des Moduls.

Das hat eher etwas mit dem FHEM-Konzept zu tun, als mit meinem Modul.

Die Internals werden im Gegensatz zu Readings und Attributen nicht gespeichert, sondern nur die Definition (DEF) des Moduls. Beim erstmaligen Laden des Moduls wird die Definition (DEF) im Modul ausgewertet und die entsprechenden Internals belegt.

Wenn die Werte den Neustart überleben sollen, dann musst du sie in der Definition (DEF) angeben.

Hier z. B. Hysterese von 2 Grad und Offset von -1.

define TH_Heizung TRHESHOLD Dachrinne:temperature:2:3:-1 OR Heizbedarf:state:off Heizung

Für eine dynamische Anpassung von Hysterese bzw. Offset zur Laufzeit, kannst du dir etwas programmieren, was dann über die Schnittstelle set dein_modul ... die Hysterese bzw. den Offset setzt, die statische Anpassung funktioniert über Definition (DEF) wie oben beschrieben.

Gruß

Damian
Titel: Antw:Steuerung Dachrinnenheizung
Beitrag von: DerTom am 25 Dezember 2013, 16:07:43
ZitatEs muss auch mit dem Regensensor funktionieren, wenn er im Status on bzw. off enthält.

Ich habe KEINE Ahnung, was ich jetzt anders gemacht habe. Jetzt funktioniert es auch mit der direkten Nutzung des Regensensors. Gestern kam als Status immer nur undefined heute schaltet er richtig in off bzw. on. Kann wohl nur an mir gelegen haben. Wie auch immer...

Hier die Aufgabenstellung und die getestete Lösung.

Eine Heizung soll bei Aussentemperaturen von <0°C die Dachrinnentemperatur auf >+3°C erhöhen und dann abschalten. Bei einer Dachrinnentemperatur von <+3°C soll die Heizung wieder einschalten. Dies soll aber nur geschehen, wenn Niederschlag fällt. Die Temperatur wird mit einem HM-WDS30-OT2-SM gemessen, welcher 2 Sensoren hat. Einer misst am Dach die Aussentemperatur, während der andere die Dachrinnentemperatur in mindestens 5 cm Entfernung zur Dachrinnenheizung überwacht. Diese wird mit einem FS20WS1 geschaltet. Der Regensensor ist ein FS20SR.

Regensensor:

define HOF_Regen1 FS20 <HC> <GC>
attr HOF_Regen1 follow-on-timer 130


Da der Regenssensor bei Niederschlag alle 120 Sekunden ein "on", aber niemals ein "off" sendet, setze ich mit "follow-on-timer 130" den Status auf "off" zurück, wenn kein "on" nach 120 Sekunden mehr kommt.

Schalter Heizung:

define Dachrinnenheizung FS20 <HC> <GC>
attr Dachrinnenheizung model fs20ws1


Temperatursensor:

Nach dem pairen mit FHEM erscheinen beide Sensoren als Channel im FHEM. Zur Vereinfachung beziehe ich mich nur auf die beiden Channel, welche die Temperaturen überwachen (01 und 02). die 3 anderen Channel (03,04,05), welche nur Differenzen übermitteln und den Eventchannel benötige ich nicht.

In diesem Fall lautet der Name des Aussentemperaturfühlers "HMOT1_Aussen" und der des Dachrinnentemperaturfühlers "HMOT1_Dachrinne".

Die erste Voraussetzung (Aussentemp. <0°C) wird mit einem ersten Threshold definiert und gibt als state bei einer Temperatur <0°C ein "on" aus:

define DRS_Aussen THRESHOLD HMOT1_Aussen:temperature:0:0
attr DRS_Aussen DRS_Heizbedarf_Typ DRS_Heizbedarf
attr DRS_Aussen state_cmd1_gt off
attr DRS_Aussen state_cmd2_lt on
attr DRS_Aussen state_format _sc


Den Status des Regensensors haben wir schon definiert. Beides wird nun in einer Structure zusammengefasst:


define DRS_Heizbedarf structure DRS_Heizbedarf_Typ HOF_Regen1 DRS_Aussen
attr DRS_Heizbedarf clientstate_behavior relativeKnown
attr DRS_Heizbedarf clientstate_priority off on


Wenn beide Bedingungen auf "on" gehen, steht der Status der structure ebenfalls auf "on". Wenn eine Bedingung nicht mehr zutrifft, geht der Status der structure auf "off.

Nun zur eigentlichen Steuerung. E werden beide Bedingungen (structure auf "on" und Dachrinnentemp <+3°C) geprüft. Wenn beide Bedingungen wahr sind, wird die Dachrinnenheizung eingeschaltet und heizt, wegen der Hysterese 0, bis auf >+3°C auf, und schaltet dann ab) :

define DRS_Temp THRESHOLD HMOT1_Dachrinne:temperature:0:3 OR DRS_Heizbedarf:state:off Dachrinnenheizung
attr DRS_Temp state_cmd1_gt off
attr DRS_Temp state_cmd2_lt on
attr DRS_Temp state_format _m _dv _sc


Die genannten Temperaturwerte sind relativ und jeder mag da eine andere Anicht vertreten, ab welchen Temperaturen so eine Heizung sinnvoll ist.

Vielen Dank an Damian und Puschel74 für die Unterstützung.

Gruß Thomas

PS: Wer möchte, kann den Eintrag ins Wiki stellen...