Neues Modul - THRESHOLD

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Vladi2010 schrieb am So, 27 Januar 2013 11:46Hallo Damian,

also wird das nichts mit meiner Ventilator ansteuerung :(


Das Filtern werde ich noch einbauen.

Du hast dennoch das Prinzip dieses Schwellenwertschalter noch nicht verstanden.

In der Doku steht:

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.



Also müsstest du einen Sollwert zunächst mit set Stellantrieb_Ventilator_Kopplung_Kinderzimmer desired Zahl setzten, damit es überhaupt funktioniert.

Nun möchtest du deinen Aktor allerdings abhängig von der Stellung des Stellantriebs schalten und nicht abhängig von der Temperatur.

Bei valve 0 soll dein Ventilator aus sein, sonst an. Dafür ist wahrscheinlich ein notify besser geeignet.

Dennoch ließe sich auch das mit dem THRESHOLD realisieren (wenn nach Zahlen gefilter würde), auch wenn es nicht im Sinne es Erfinders war:

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

set Stellantrieb_Ventilator_Kopplung_Kinderzimmer desired 0.5

Das hieße dann, wenn der Stellwert größer ist als 0.5+0.1=0.6 dann geht steckdose_M4 on (trifft für alle ganzen Zahlen außer Null zu)

und wenn der Stellwert kleiner ist als 0.5-0.1=0.4 dann geht die Steckdose_M4 off (trifft bei ganzen Zahlen nur für NULL zu)

Wenn nur ganzzahlige Stellenwerte vorkommen, würde es funktionieren, auch wenn im Nachhinein keiner den Sinn des Ganzen verstehen würde;)

Gruß

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

teggi

Danke für das Modul, Damian.

Bin gerade am Ausprobieren, scheitere aber leider schon an der Definition:

define THERMO.KIZ1 THRESHOLD SEN.TH.KIZ1 SW.HEIZUNG.KIZ1

Die Definition liefert gleich die Fehlermeldung "Unknown sensor device SEN.TH.KIZ1 specified"

SEN.TH.KIZ1 ist ein Standard S300TH.

Wo liegt mein Fehler?

Damian

Zitat von: teggi schrieb am So, 27 Januar 2013 13:36Danke für das Modul, Damian.

Bin gerade am Ausprobieren, scheitere aber leider schon an der Definition:

define THERMO.KIZ1 THRESHOLD SEN.TH.KIZ1 SW.HEIZUNG.KIZ1

Die Definition liefert gleich die Fehlermeldung "Unknown sensor device SEN.TH.KIZ1 specified"

SEN.TH.KIZ1 ist ein Standard S300TH.

Wo liegt mein Fehler?

Hmm, ich sehe keinen. Die Fehlermeldung kommt, wenn des Device nicht vorhanden ist, abgefragt durch die Stelle im Code:

 my ($sensor, $reading, $threshold) = split(":", $a[2], 3);
  if(!$defs{$sensor}) {
    my $msg = "$pn: Unknown sensor device $sensor specified";
    Log 2, $msg;
    return $msg;
  }

Habe gerade bei mir den einfachen Fall ohne Fehlermeldung getestet:

define test THRESHOLD Aussensensor Schreibtisch

Aussensensor ist bei mir auch der S300TH.

Schau mal, ob dein Sensor in FHEM wirklich SEN.TH.KIZ1 heißt.

Damian

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

Damian

Zitat von: Damian schrieb am Sa, 26 Januar 2013 08:46
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

Und es geht doch relativ einfach ohne notify zu bemühen über structure.

Man definiere alle Kontakte zu einer Struktur:

define W_ALL structure <TYPE-Deiner-Kontakte W1 W2 W3 ....
attr W_ALL clientstate_behavior relative
attr W_ALL clientstate_priority closed open

und dann einfach

define Thermostat THRESHOLD S1 OR W_ALL heating


Auch das Schalten mehrerer Aktoren ließe sich über structure relativ einfach realisieren.

Damit ist die ganze Sache gar nicht so statisch, wie es auf den ersten Blick wirkt.

Gruß

Damian
 





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

jhohn

Dann werde ich doch mal umbauen. Spart doch ein bisschen was in der myUtils.
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

Steve

Hallo,

funktioniert das Modul auch mit 1Wire in Verbindung
mit NETIO?



VG

Damian

Zitat von: Steve schrieb am Mo, 11 Februar 2013 19:48Hallo,

funktioniert das Modul auch mit 1Wire in Verbindung
mit NETIO?

VG

Im Prinzip können alle Sensoren ausgelesen werden, die in FHEM definiert sind und eine Temperatur als Dezimalzahl im Reading liefern.

Gruß

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

Markus Bloch

Hallo Damian,

aktuell konzentrierst du dich sehr auf Temperatur und Feuchtewerte. Währe es nich besser hier genereller zu sein. Nicht jeder möchte einen Schwellwertalarm auf Temperatur oder Feuchtigkeit setzen. Es gibt in der FHEM-Welt noch viel mehr Readings, welche eine Zahl (evtl. mit Kommastellen) erzeugen.

Kann man denn aktuell auch andere Readings verwenden, wie z.B. Energieverbrauch von EM1000-EM Sensoren o.ä.?

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)

Damian

Zitat von: Markus Bloch schrieb am Di, 12 Februar 2013 10:01Hallo Damian,

aktuell konzentrierst du dich sehr auf Temperatur und Feuchtewerte. Währe es nich besser hier genereller zu sein. Nicht jeder möchte einen Schwellwertalarm auf Temperatur oder Feuchtigkeit setzen. Es gibt in der FHEM-Welt noch viel mehr Readings, welche eine Zahl (evtl. mit Kommastellen) erzeugen.

Kann man denn aktuell auch andere Readings verwenden, wie z.B. Energieverbrauch von EM1000-EM Sensoren o.ä.?

Viele Grüße

Markus

lt. Doku kannst du beliebige Readings beim Sensor einstellen, diese sollten dann auch Dezimalzahlen liefern. Du bist also keinesfalls auf Temperatur oder Feuchtigkeit festgelegt;)

Gruß

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

Markus Bloch

Das hört sich super an. Andere Frage. Willst du das in FHEM einchecken? Währe natürlich super, da ich das sehr nützlich finde.

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)

Damian

Zitat von: Markus Bloch schrieb am Di, 12 Februar 2013 10:29Das hört sich super an. Andere Frage. Willst du das in FHEM einchecken? Währe natürlich super, da ich das sehr nützlich finde.

Viele Grüße

Markus

Ich verfüge über keine Berechtigung zum Einchecken.

Bisher gab es noch wenig Feedback zur Fehlerfreiheit des Moduls.

Entweder benutzt es keiner oder mein erstes Modul ist fehlerfrei;)

Ich habe die Doku etwas verallgemeinert, damit es nicht so auf Temperatur oder Feuchtigkeit fixiert ist.


Doku:


Dieses Modul liest einen beliebigen Sensor aus, der Werte als Dezimalzahlen liefert
  und schaltet abhängig von einem Schwellenwert einen definierten Aktor.

  Nach der Definition eines Moduls vom TYP THRESHOLD erfolgt die eigentliche Steuerung über die Vorgabe eines Sollwertes.

  Damit lässt sich u. A. eine Heizung, ein Entfeuchter, eine Klimaanlage, eine Bewässerung und vieles mehr steuern.

  Optional kann das Schaltverhalten zusätzlich durch einen weiteren Sensor oder eine Sensorgruppe, definiert über  structure (z. B. Fensterkontakte), beeinflusst werden.
 
  Ein definiertes Modul vom Typ THRESHOLD, beginnt mit der Steuerung erst dann, wenn ein Sollwert über

  set <name> desired <value>

  gesetzt wird.
 
  Ein definiertes Modul vom Typ THRESHOLD kann mit attr <name> disable 1 vorübergehend deaktiviert werden.
 
  Im Gegensatz zu einem Notify, werden, falls Sensor2 definiert wurde, beide Sensoren "gleichzeitig" überwacht.



Gruß

Damian


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

Markus Bloch

Hallo Damian,

Ich habe das Modul aus dem ersten Post heruntergeladen, leider kommt bei meiner definition immer "wrong syntax".


define Waschmaschine_Fertig THRESHOLD Verbrauch_Waschmaschine:current:0.01 {Log 2, "Fertig"}



Mach ich etwas falsch?

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)

Damian

Zitat von: Markus Bloch schrieb am Di, 12 Februar 2013 18:18Hallo Damian,

Ich habe das Modul aus dem ersten Post heruntergeladen, leider kommt bei meiner definition immer "wrong syntax".


define Waschmaschine_Fertig THRESHOLD Verbrauch_Waschmaschine:current:0.01 {Log 2, "Fertig"}



Mach ich etwas falsch?

Viele Grüße

Markus

So funktioniert es leider nicht.
Das Modul ist dafür konzipiert einen Sollwert zu halten. Das geschieht z. Zt. über 'set Aktor cmd1' beim Überschreiten des Sollwertes und 'set Aktor cmd2' beim Unterschreiten des Sollwertes. Die Syntax ist lt. Doku actor:cmd1:cmd2. Mit {Log 2, "Fertig"} wird es leider nicht funktionieren, da kein Aktor bzw. keine sinnvollen set-Befehle definiert sind.

Eine Erweiterung auf alle möglichen Befehle ist denkbar, allerdings etwas aufwändig, da ich z. Zt. in der Logik des Moduls den Status des Aktors auswerte, um mehrfaches Schalten zu unterbinden.

Gruß

Damian

Damian

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

Steve

Ich habe jetzt mit einem 1Wire-Sensor konfiguriert.

jetzt kommt im Log die Fehlermeldung:

>2013.02.12 20:49:39 2: Test: no reading yet for Kessel temperatur

Meine cfg ist:

>define Test THRESHOLD Kessel:temperatur:0.5 Relais1:off:on
>set Test desired 50

>define Kessel ECMDDevice ONEWIRE 10fb465b02080071
>attr Kessel room Heizung
>define Log_Kessel FileLog /var/InternerSpeicher/fhem/log/Temperatur-%Y.log Kessel:(temp).*


Fehler gefunden, mußte statt "temperatur" nur "temp" eingeben.

Funktioniert super



Damian

Zitat von: Steve schrieb am Di, 12 Februar 2013 20:57Ich habe jetzt mit einem 1Wire-Sensor konfiguriert.

jetzt kommt im Log die Fehlermeldung:

>2013.02.12 20:49:39 2: Test: no reading yet for Kessel temperatur

Meine cfg ist:

>define Test THRESHOLD Kessel:temperatur:0.5 Relais1:off:on
>set Test desired 50

>define Kessel ECMDDevice ONEWIRE 10fb465b02080071
>attr Kessel room Heizung
>define Log_Kessel FileLog /var/InternerSpeicher/fhem/log/Temperatur-%Y.log Kessel:(temp).*




Die Stelle im Code ist:

  if(!($defs{$sensor}{READINGS}{$reading})) {
    my $msg = "$pn: no reading yet for $sensor $reading";
    Log 2, $msg;
    return "";
  }

Das bedeutet, dass während der Abarbeitung der Notify-Routine das Reading 'temperatur' beim 'Kessel' nicht vorhanden war.

Wahrscheinlich heißt es 'temperature'


Ich benutze 18B20-Sensoren vom Typ OWTHERM, da steht die Temperatur unter dem Reading 'temperature'.

Gruß

Damian

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