Neues Modul - THRESHOLD

Begonnen von Damian, 25 Januar 2013, 22:51:43

Vorheriges Thema - Nächstes Thema

Damian

Hallo zusammen,

  Dieses Modul liest einen beliebigen Temperatur- oder Feuchtigkeitsensor aus
  und schaltet abhängig von einem Schwellenwert einen definierten Aktor.

  Damit lässt sich eine Heizung, ein Entfeuchter, eine Klimaanlage oder eine Bewässerung steuern.

  Optional kann das Schaltverhalten zusätzlich durch einen weiteren Kontaktsensor beeinflusst werden.
  Üblicherweise handelt es sich dabei um einen Fensterkontakt.

  Für die Funktionalität, muss nach der Definition eines Thermostats oder Hygrostats vom Typ THRESHOLD, die Solltemperatur oder -feuchtigkeit über

  set <name> desired <value> gesetzt werden.


Hier die Dokumentation:

define <name> THRESHOLD <sensor>[:<reading>[:<threshold>]] [<AND|OR> <sensor2>[:<reading2>][:<state>]] <actor>[:<cmd1>][:<cmd2>]

   <sensor>      ein definierter Temperatur- oder Feuchtigkeitssensor
   <reading>     Reading des Sensors, der die Temperatur bzw. Luftfeuchte als Dezimalzahl beinhaltet
            Defaultwert: temperature
   <threshold>   Abweichung von der Solltemperatur die eine Akton des definierten Aktors auslöst;
            Defaultwert ist bei Temperaturen 0.5, und 10 bei Feuchtigkeit
   AND|OR        Verknüpfung mit einem optionalen zweiten Sensor
   <sensor2>     ein definierter Sensor, dessen Status abgefragt wird
   <reading2>    Reading, der den Status des Sensors beinhaltet,
            Defaultwert: state
   <state>       Status des Sensors, der zu einer Aktion führt
                 Defaultwert: open
   actor          ein definierter Aktor
   cmd1          Aktion, die beim Überschreiten des Sollwertes stattfinden soll bzw.
            wenn status des sensor2 übereinstimmt
            Defaultwert: off
   cmd2           Aktion, die beim Unterschreiten des Sollwertes stattfinden soll bzw.
            wenn status des sensor2 nicht übereinstimmt
            Defaultwert: on
   
    Beispiele:
   
   Beispiel für Heizung:
            
   define Thermostat THRESHOLD S1 heating
   
   entspricht wegen Defaultwerte:
   
   define Thermmostat THRESHOLD S1:temperatur:0.5 heating:off:on
      
   Beschreibung:

   Beim Überschreiten der Solltemperatur um 0,5 Grad ausgelesen über den Sensor "S1" wird der Aktor "heating" ausgeschaltet
   und wieder eingeschaltetn beim Unterschreiben der Temperatur um 0,5 Grad
   
   Beispiel für Heizung mit Fensterkontakt:
   
   define Thermostat THRESHOLD S1 OR W1 heating
   
   entspricht wegen Defaultwerte:
   
   define Thermostat THRESHOLD S1:temparature:0.5 OR W1:state:open heating:off:on
      
   Beschreibung:

   Beim Überschreiten der Solltemperatur um 0,5 Grad ausgelesen über den Sensor "S1" oder wenn der Sensor "W1" geöffnet wird, wird der Aktor
   "heating" ausgeschalet und wieder eingeschaltet beim Unterschreiben der Temperatur um 0,5 Grad, wenn der Sensor "W1" geschlossen wird.
   
   Beispiel für Luftentfeuchter:
   
   define Hygrostat THRESHOLD S1:huminity dehydrator:on:off
   
   Beschreibung:

   Beim Überschreiten der Soll-Feuchtigkeit um 10 % ausgelesen über den Sensor S1 wird der Aktor "dehydrator" eingeschaltet
   und wieder ausgeschaltet beim Unterschreiben der Feuchtigkeit um 10 %.
   
   Beispiel für Luftentfeuchter mit Fensterkontakt:
   
   define Hygrostat THRESHOLD S1:huminity AND W1:state:close dehydrator:on:off
   
   Beschreibung:

   Beim Überschreiten der Soll-Feuchtigkeit ausgelesen über den Sensor "S1" wird der Aktor "dehydrator" eingeschaltet,
   wenn der Sensor "W1" geschlossen ist und wieder ausgeschaltet beim Unterschreiben der Feuchtigkeit oder wenn der Sensor "W1" geöffnet wird.
   
   Bespiel für Klimatisierung:
   
   define Thermostat THRESHOLD S1:temperature:1 aircon:on:off
   
   Beschreibung:

   Beim Überschreiten der Solltemperatur um 1 Grad ausgelesen über den Sensor S1 wird der Aktor "aircon" eingeschaltet
   und wieder ausgeschaltet beim Unterschreiben der Temperatur um 1 Grad.
   
   Beispiel für Klimatisierung mit Fensterkontakt:
   
   define Thermostat THRESHOLD S1 AND W1:state:close aircon:on:off
   
   Beschreibung:

   Beim Überschreiten der Solltemperatur ausgelesen über den Sensor "S1" wird der Aktor "aircon" eingeschaltet,
        wenn der Sensor "W1" geschlossen ist
   und wieder ausgeschaltet beim Unterschreiben der Temperatur oder wenn der Sensor "W1" geöffnet wird.
   
   Bespiel für Bewässerung:
   
   define Hygrostat THRESHOLD S1:huminity:20 watering:off:on
   
   Beschreibung:

   Beim Überschreiten der Soll-Feuchtigkeit um 20 % ausgelesen über den Sensor S1 wird der Aktor "watering" ausgeschaltet
   und eingeschaltet beim Unterschreiben der Soll-Feuchtigkeit um 20 %.

Die englische Übersetzung der Doku werde ich im Modul vornehmen, falls das Modul eingescheckt werden sollte.

Und nun viel Spaß beim Ausprobieren.

Gruß

Damian

Edit:

Das Modul wurde eingecheckt und ist Bestandteil von FHEM. Die aktuelle Version des Moduls ist über FHEM-Update verfügbar.

aktuelle Doku siehe: http://fhem.de/commandref_DE.html#THRESHOLD


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jhohn

coole Sache. Können auch mehrere Fenstersensoren mit OR angehängt werden oder geht da nur einer?
Also, um bei Deinem Beispiel zu bleiben:
define Thermostat THRESHOLD S1 OR W1 OR W2 OR W3 heating
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

Tobias

ich finde mit dem Modul ist man seeeehr statisch. Nur ein Sensor und nur ein Aktor. Üblicherweise passiert soetwas in einem Notify oder zentralen Prozedur. Ausgerichtet auf den speziellen Anwendungsfall.

Was macht das Modul anders als mein Wiki-Beitrag??
http://www.fhemwiki.de/wiki/Bew%C3%A4sserungssteuerung
Meine aktuelle, weiter entwickelte Prozedur hängt noch vom Sonnenschein und Wind ab.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Damian

Zitat von: Tobias schrieb am Sa, 26 Januar 2013 06:49ich finde mit dem Modul ist man seeeehr statisch. Nur ein Sensor und nur ein Aktor. Üblicherweise passiert soetwas in einem Notify oder zentralen Prozedur. Ausgerichtet auf den speziellen Anwendungsfall.

Was macht das Modul anders als mein Wiki-Beitrag??
http://www.fhemwiki.de/wiki/Bew%C3%A4sserungssteuerung
Meine aktuelle, weiter entwickelte Prozedur hängt noch vom Sonnenschein und Wind ab.

Immerhin kann man es mit eurem heating_control-modul kombinieren;) Kannst du es mit deiner Routine auch?

Der Wunsch hier war, die Funktionalität eines Schwellenschalters nicht im dem PID-Modul zu integrieren, der sich ähnlich verhält.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: jhohn schrieb am Fr, 25 Januar 2013 23:21coole Sache. Können auch mehrere Fenstersensoren mit OR angehängt werden oder geht da nur einer?
Also, um bei Deinem Beispiel zu bleiben:
define Thermostat THRESHOLD S1 OR W1 OR W2 OR W3 heating

nein, könnte man aber über einen dummy-Kontakt definieren, der wiederum per notify abhängig von den jeweiligen Kontakten gesetzt wird.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

drdownload

Sicher könnte man die Funktionalität auch über notify und dummy lösen, aber das könnte man
1) bei fast jeder Aufgabenstellung
2) wird es gerne ein bisschen unübersichtlich
3) ist es nicht gerade elegant die gleich logik 30x in der config stehen zu haben.

Ich bin ja schon lange der Meinung, dass man die ganzen Heizungspuzzelstücke irgendwann einmal in eine modularere einheitliche Struktur überführen müsste, aber leider habe ich derzeit auch nicht wirklich Zeit das Projekt anzugehen. (anhängigkeiten zwischen schaltern und aktoren ohne immer mit notify zu arbeiten wären auch noch sowas ;)
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

Damian

Vielleicht nochmal zum Verständnis.

Es geht hier nicht um eine komplexe Steuerung einer Heizung o. Ä., sondern um einen einfachen Schwellenwertschalter, der ähnlich wie das PID-Modul für Thermostate funktionieren sollte. Also einmal definieren und über das setzten einer Solltemperatur (set thermostat desired 20) einen Aktor steuern.

Damit lässt sich elegant z. B. eine Fußbodenheizung mit konventionellen 230 V Stellantrieben über das  Heating_control-Modul steuern. Das war auch meine ursprüngliche Idee, siehe http://forum.fhem.de/index.php?t=msg&th=10409&start=0&rid=69.

Auf Wunsch von Rudolf habe diese Funktionalität nun in ein separate Modul ausgelagert.

Dass man damit auch Feuchtigkeit auslesen kann bzw. zusätzlich einen Kontakt auswerten kann, ist optional und nur als Draufgabe zu verstehen.

Für komplexe Steuerung mit komplexeren Abfragen bemüht man lieber Perl - einen neuen Parser wollte ich im Modul dafür nicht programmieren.

Gruß

Damian



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jhohn

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

Damian

Zitat von: jhohn schrieb am Sa, 26 Januar 2013 16:17Nun gut, dann bleibe ich erst mal bei meiner Gebläsesteuerung für die Nachtspeicheröfen

Da offenbar der Wunsch nach mehr Flexibilität da ist, könnte man über folgende Lösung nachdenken:

define <name> THRESHOLD <sensor>[:<reading>[:<threshold>]][<cmd1>][:<cmd2>] <COMMAND>



<COMMAND> ein beliebiges Kommando wie z. B. bei at oder notify möglich ist, inklusive if-Abfragen

Damit könnte man auch mehrer Sensoren in einer if-Abfragen überprüfen. @ könnte dann ein Platzhalter für das jeweilige Kommando cmd1 bzw cmd2 sein.

z. B. set aktor @

oder {fhem("set aktor @") if (....)}

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vladi2010

Hallo Damian,

kann ich damit anstadt eines <sensor> einen FHT8V -> Readings -> state  auslesen, und gegebenfalls einen Aktor Schalen bei einem Wert <=1% ?  oder sind wirklich nur sensoren wie CUL_WS möglich ?

Damian

Zitat von: Vladi2010 schrieb am Sa, 26 Januar 2013 22:59Hallo Damian,

kann ich damit anstadt eines <sensor> einen FHT8V -> Readings -> state  auslesen, und gegebenfalls einen Aktor Schalen bei einem Wert <=1% ?  oder sind wirklich nur sensoren wie CUL_WS möglich ?

Es gibt keine Einschränkungen bzgl. der Sensoren. Wenn dein definierter Reading des Sensors den entsprechenden Wert liefert wird er auch benutzt.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vladi2010

hmmmm, also ich habe einen Stellantrieb und eine IT Steckdose:

DEF   1234
IODev CUL_0
NAME Stellantrieb_Kinderzimmer
NR 56
STATE valve 0
TYPE FHT8V
addr 1234
idx 02

Readings
state valve 0
2013-01-27 01:07:28


und Stecksode IT

DEF   00FFFF000F FF F0
IODev CUL_0
NAME Steckdose_M4
NR 103
STATE off
TYPE IT
XMIT 00ffff000f
XMITdimdown 00
XMITdimup 00
XMIToff f0
XMITon ff

Readings
state off
2013-01-27 00:46:02

Müsste die Steckdose bei einem wert von "1 und größer" nicht angehen ?

define Stellantrieb_Ventilator_Kopplung_Kinderzimmer THRESHOLD Stellantrieb_Kinderzimmer:state:1 Steckdose_M4:on:off

bitte dringend um Hlife bin absoluter Anfänger

Andreas



Damian

Zitat von: Vladi2010 schrieb am So, 27 Januar 2013 01:26hmmmm, also ich habe einen Stellantrieb und eine IT Steckdose:

DEF   1234
IODev CUL_0
NAME Stellantrieb_Kinderzimmer
NR 56
STATE valve 0
TYPE FHT8V
addr 1234
idx 02

Readings
state valve 0
2013-01-27 01:07:28


und Stecksode IT

DEF   00FFFF000F FF F0
IODev CUL_0
NAME Steckdose_M4
NR 103
STATE off
TYPE IT
XMIT 00ffff000f
XMITdimdown 00
XMITdimup 00
XMIToff f0
XMITon ff

Readings
state off
2013-01-27 00:46:02

Müsste die Steckdose bei einem wert von "1 und größer" nicht angehen ?

define Stellantrieb_Ventilator_Kopplung_Kinderzimmer THRESHOLD Stellantrieb_Kinderzimmer:state:1 Steckdose_M4:on:off

bitte dringend um Hlife bin absoluter Anfänger

Andreas



Hallo Andreas,

bisher wird nicht nach Zahlen gefiltert, sondern der Wert direkt genommen.

Bei dir steht aber noch das Wort "vavle" vor der Zahl im Status.

Das Filtern nach Zahlen lässt sich allerdings leicht einbauen.

Gruß

Damian





Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Vladi2010

Hallo Damian,

"bisher wird nicht nach Zahlen gefiltert, sondern der Wert direkt genommen.

Bei dir steht aber noch das Wort "vavle" vor der Zahl im Status.

Das Filtern nach Zahlen lässt sich allerdings leicht einbauen."

also wird das nichts mit meiner Ventilator ansteuerung :(

Grüße Andras

Markus Bloch

Zitat von: Damian schrieb am Sa, 26 Januar 2013 16:52
Zitat von: jhohn schrieb am Sa, 26 Januar 2013 16:17Nun gut, dann bleibe ich erst mal bei meiner Gebläsesteuerung für die Nachtspeicheröfen

Da offenbar der Wunsch nach mehr Flexibilität da ist, könnte man über folgende Lösung nachdenken:

define <name> THRESHOLD <sensor>[:<reading>[:<threshold>]][<cmd1>][:<cmd2>] <COMMAND>



<COMMAND> ein beliebiges Kommando wie z. B. bei at oder notify möglich ist, inklusive if-Abfragen

Das würde mich sehr freuen, da ich bereits nach so etwas suche. Bei mir soll ein Kommando ausgeführt werden, wenn der Energieverbrauch unter ein bestimmtes Level fällt. Ich vergesse andauern, wenn die Maschine im Keller fertig ist :-D

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)