Neues Modul - THRESHOLD

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

Vorheriges Thema - Nächstes Thema

det.

Hallo Damian,
Danke für deine Bemühungen, die Annahmen bezüglich der Zustände des OWSWITCH sind genau richtig, leider erzeugt Deine Code Zeile folgende Fehlermeldung:wrong syntax: define THRESHOLD [:[:][:] [AND|OR [:][:]] [][|][|][|] Please define Thermostat firstIch hatte da vorher auch schon alles so probiert und letztendlich aufgegeben und den Code so umgesetzt, wie in meinem vorigen post.
LG
det.

Damian

Zitat von: det. schrieb am So, 17 März 2013 11:18Hallo Damian,
Danke für deine Bemühungen, die Annahmen bezüglich der Zustände des OWSWITCH sind genau richtig, leider erzeugt Deine Code Zeile folgende Fehlermeldung:wrong syntax: define THRESHOLD [:[:][:] [AND|OR [:][:]] [][|][|][|] Please define Thermostat firstIch hatte da vorher auch schon alles so probiert und letztendlich aufgegeben und den Code so umgesetzt, wie in meinem vorigen post.

gut, dass wir darüber gesprochen haben - es war noch ein kleiner Bug drin. Neue Version ist bereits eingecheckt.

Wenn du es direkt probieren willst musst du in THRESHOLD.pm in der Zeile 52 die Zahl 5 gegen 6 tauschen (zuvor FHEM beenden):

  if (@b > 4 || @a < 3 || @a > 6) {

dann sollte es funktionieren.  

Gruß

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

det.

Hallo Damian,

FHEM nimmt die Befehlzeile jetzt an. Ob das schaltet kann ich erst sagen, wenn meine Heizung aus der Mittagspause raus ist. Allerdings ist die Konsole jetzt recht gesprächig:Use of uninitialized value $hysteresis in string eq at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 71.
Use of uninitialized value $init_desired_value in string ne at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 84.
Use of uninitialized value $cmd_default in string eq at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 135.
Use of uninitialized value $init_desired_value in string ne at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 154.
LG
det.

det.

Hallo Damian,
define Thermostat THRESHOLD BueroTemp_KG:temperature OR OWSWITCHB:B:OFF OWSWITCHB|set @ output A OFF|set @ output A ONwar leider nicht zum Schalten zu überreden, egal wie ich desired_temp / AND OR etc. verändert habe. Bin wieder zum vorherigen Code zurückdefine Thermostat THRESHOLD BueroTemp_KG:temperature |{fhem"set OWSWITCHB output A OFF"}|{fhem"set OWSWITCHB output A ON"}|1das funktioniert.
LG
det.

Damian

Zitat von: det. schrieb am So, 17 März 2013 13:27Hallo Damian,

FHEM nimmt die Befehlzeile jetzt an. Ob das schaltet kann ich erst sagen, wenn meine Heizung aus der Mittagspause raus ist. Allerdings ist die Konsole jetzt recht gesprächig:Use of uninitialized value $hysteresis in string eq at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 71.
Use of uninitialized value $init_desired_value in string ne at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 84.
Use of uninitialized value $cmd_default in string eq at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 135.
Use of uninitialized value $init_desired_value in string ne at /usr/share/fhem/FHEM/98_THRESHOLD.pm line 154.

warnings sind jetzt weg

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

Damian

Zitat von: det. schrieb am So, 17 März 2013 16:02Hallo Damian,
define Thermostat THRESHOLD BueroTemp_KG:temperature OR OWSWITCHB:B:OFF OWSWITCHB|set @ output A OFF|set @ output A ONwar leider nicht zum Schalten zu überreden, egal wie ich desired_temp / AND OR etc. verändert habe. Bin wieder zum vorherigen Code zurückdefine Thermostat THRESHOLD BueroTemp_KG:temperature |{fhem"set OWSWITCHB output A OFF"}|{fhem"set OWSWITCHB output A ON"}|1das funktioniert.

Ich habe den OR-Fall bei mir noch mal erfolgreich getestet.

Du kannst ja die Definitionen mit "list Thermostat" einsehen und vergleichen.

Dein Notify von oben ist in sofern suboptimal, als dass du ständig (ich schätze alle 2,5 Minuten) "set Thermostat desired value" aufrufst und damit das Modul immer wieder in den Zustand "wait for next cmd" versetzt. Normalerweise macht man das, wenn tatsächlich neuer Wert gesetzt werden soll.

Gruß

Damian

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

det.

Mit dem Notfy hast Du recht. Das ruft die desired_temp aller 300 s auf, jedes Mal wenn das 1-wire Thermometer einen Wert liefert. Ich habe allerdings die Herausforderung - das thermische Ventil nur zu  Heizen ( zum Öffnen ) wenn:
die Vorlauftemperatur hoch genug ist ( damit das Ventil nicht die Wärmequelle ist, sondern der Heizkörper)
die Zeit von. .... bis ist (Bürozeiten)
das Fenster nicht auf ist
die desired_temp höher als die Raumtemperatur ist
Das habe ich vor Deinem Modul alles in einem verschachtelten Notify untergebracht. Klar, hätte ich dafür einfach ein FHT kaufen können, aber der Basteltrieb... Und die Tatsache, dass der WAF in dem Raum keine Rolle spielt.
LG
det.

cwagner

Moin, Damian,

die Variante mit on/off-Befehlen für einen Aktor läuft bei inzwischen wirklich zuverlässig und dauerhaft für die Brenner-Steuerung einer Ölheizung sowie die Entfeuchtung der Waschküche.
Bei meinem Projekt Warmwasser-Steuerung wollte ich die zweite Variante, die Befehlszeilen einsetzen, und bastele seit Tagen ohne wirklichen Erfolg. Deshalb hier einmal meine Deifinition und der entsprechende Log-Auszug, an dessen Anfang auch der Beleg ist, dass ich die absolut neueste eingecheckte Fassung von Threshold benutze:

2013.03.19 09:18:26 1: update nothing to do...
2013.03.19 09:24:15 3: output of TH_Stat_Warmwasser {fhem("set WWBedarf on ;set TH_Stat_Heizung desired 75")}: Unknown command {fhem("set, try help
TH_Stat_Heizung: set desired value:75")}, desired value needs a numeric parameter


Internals:
   CFGFN      ./FHEM/heizung.cfg
   DEF        TH_Warmwasser:temperature:5:60 |{fhem("set SW_02_WWPumpe off;set TH_Stat_Heizung desired 50")}|{fhem("set WWBedarf on ;set TH_Stat_Heizung desired 75")}|1
   NAME       TH_Stat_Warmwasser
   NR         255
   NTFY_ORDER 50-TH_Stat_Warmwasser
   STATE      active 60
   TYPE       THRESHOLD
   hysteresis 5
   sensor     TH_Warmwasser
   sensor_reading temperature
   Readings:
     2013-03-19 08:24:08   cmd             wait for next cmd
     2013-03-19 08:24:08   desired_value   60
     2013-03-19 09:24:14   sensor_value    51.6
     2013-03-19 08:24:08   state           active 60
     2013-03-19 08:24:08   threshold_min   55
   Helper:
     actor_cmd1 {fhem("set SW_02_WWPumpe off;set TH_Stat_Heizung desired 50")}
     actor_cmd2 {fhem("set WWBedarf on ;set TH_Stat_Heizung desired 75")}
     actor_cmd_default 1
Attributes:
   loglevel   3
   room       Heizung
   webCmd     deactivated:active

Darf ich um Hilfe bitten, womöglich mache ich als Neuling einen Fehler, den ich aber offenbar aus eigener Kraft nicht erkennen kann.
Die Absicht ist, bei Warmwasser-Bedarf einen Dummy einzuschalten, über den ich ein Notify steuere, dass die Ladepumpe für Warmwasser erst dann zuschaltet, wenn die Heizung einen ausreichend hohen Vorlauf erzeugt hat. Dieser Dummy kennt die beiden Status on und off. Wenn ich ihn alleine in die CMD-Ausdrücke einstelle, funktioniert er, wie auch das Ausschalten der Pumpe.
Zum Erwärmen des Warmwassers brauche ich einen höheren Vorlauf, deshalb soll die Wunschtemperatur des Brenner-Thermostats entsprechend rauf und später wieder runtergesetzt werden.
Wenn ich die Ausdrücke für cmd1 oder cmd2 ohne fhem, die Klammern und die Anführungszeichen kopiere und in der Konsole aufrufe, dann funktoniert alles, wie gewünscht.

Herzliche Grüße Chritian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Hallo Christian,

du hast keinen Fehler gemacht. Ich konnte das Problem bei mir nachstellen, das hat offenbar mit dem Ausmaskieren von Semikolons zu tun. Morgen gibt´s ein Update dazu.

Heute kannst du in der Definition deines THRESHOLD-Moduls (nicht in der Kommandozeile, sondern auf DEF klicken) die Semikolons verdoppeln, dann sollte es auch heute schon klappen.

Es sollte in der Definition dann so aussehen:

DEF TH_Warmwasser:temperature:5:60 |{fhem("set SW_02_WWPumpe off;;set TH_Stat_Heizung desired 50")}|{fhem("set WWBedarf on;;set TH_Stat_Heizung desired 75")}|1

Ab morgen wird es dann nicht mehr nötig sein.

Gruß

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

det.

Hallo Damian,
Dann sollte ich am Wochenende auch noch mal versuchen, die Mail mit Parameterübergabe bei Überschreitung der Kühlschrank Temperatur hinzubekommen. Das scheiterte offenbar am selben Sachverhalt (Variablendefinition und Mailbefehl in einer Fhem Zeile). Kannst Du Dich bitte noch mal mit meinem launigen Post vom Sonntag beschäftigen? Lösung wäre, neben dem ON/Off und Temperatur Sensor einen weiteren Temperatur Sensor abzufragen.
LG
det.

Damian

Zitat von: det. schrieb am Di, 19 März 2013 17:13Hallo Damian,
Dann sollte ich am Wochenende auch noch mal versuchen, die Mail mit Parameterübergabe bei Überschreitung der Kühlschrank Temperatur hinzubekommen. Das scheiterte offenbar am selben Sachverhalt (Variablendefinition und Mailbefehl in einer Fhem Zeile). Kannst Du Dich bitte noch mal mit meinem launigen Post vom Sonntag beschäftigen? Lösung wäre, neben dem ON/Off und Temperatur Sensor einen weiteren Temperatur Sensor abzufragen.

Das Problem ist: morgen will einer drei Temperaturen abfragen und dann am besten noch mit UND,ODER und NICHT verknüpfen;)

Eine funktionierende Lösung, die modular aufgebaut ist, könnte ich dir bereits jetzt mit der aktuellen Version für dein Problem präsentieren und die funktioniert auch mit beliebig vielen (Temperatur-)Sensoren;)

Dafür brauchst du auch keinen einzigen Notify, höchstens vielleicht, um über deinen Slider set Thermostat desired $temp zu setzen.

Zuerst aber sollten wir herausfinden warum die Sache mit:

define Thermostat THRESHOLD BueroTemp_KG:temperature OR OWSWITCHB:B:OFF OWSWITCHB|set @ output A OFF|set @ output A ON

nicht funktioniert. Dafür bräuchte ich Auszüge, wie von Christian, mit list Thermostat und  list OWSWITCHB im Zustand OFF.

Gruß

Damian

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

cwagner

Hi Damian,
gerade hat es tatsächlich das erste Mal "gefunkt", der Thermostat Warmwasser hat den Thermostat Brenner verändert, es waren, wie Du festgestellt hast, die zu maskierenden Semikonlons.
Nun kann ich weitermachen im Projekt...

Vielen Dank für die tolle Arbeit und die schnelle Unterstützung.

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Zitat von: cwagner schrieb am Di, 19 März 2013 20:30Hi Damian,
gerade hat es tatsächlich das erste Mal "gefunkt", der Thermostat Warmwasser hat den Thermostat Brenner verändert, es waren, wie Du festgestellt hast, die zu maskierenden Semikonlons.
Nun kann ich weitermachen im Projekt...

Vielen Dank für die tolle Arbeit und die schnelle Unterstützung.

Christian

nur mal zur Info:

DEF TH_Warmwasser:temperature:5:60 |set SW_02_WWPumpe off;set TH_Stat_Heizung desired 50|set WWBedarf on;set TH_Stat_Heizung desired 75|1

hätte direkt funktioniert (mit einem Simikolon). Wenn du nur FHEM-Befehle benutzt, brauchst du nicht unnötig über {fhem("... zu gehen.

Gruß

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

det.

Hallo Damian,
danke für die schnelle Rückmeldung und die Hoffnung, die Herausforderung am Ende mit Hilfe Deines Moduls doch noch elegant zu lösen.
Bin jetzt erst mal bis Freitag auf Dienstreise - die List Auszüge kommen dann asap.
LG
det.

Damian

Zitat von: det. schrieb am Di, 19 März 2013 22:08Hallo Damian,
danke für die schnelle Rückmeldung und die Hoffnung, die Herausforderung am Ende mit Hilfe Deines Moduls doch noch elegant zu lösen.
Bin jetzt erst mal bis Freitag auf Dienstreise - die List Auszüge kommen dann asap.

Bin selber ab nächste Woche in Urlaub für zwei Wochen - hoffentlich mit Internetzugang.

Deinen Fall habe ich spaßeshalber bei mir nachgestellt unter den Bedingungen: Zeitgesteuert, Vorlauftemperatur, Fenster, Zimmertemperatur.

Ich werde versuchen noch vor dem Urlaub einen Wiki-Beitrag zu erstellen unter dem Titel:

Heizungssteuerung ohne Notifys

Hier als Vorgeschmack konkret für deinen Fall:


(siehe Anhang / see attachement)


... und es funktioniert ohne einen einzigen Notify mit Spagetti-Code;)

Das Schöne an der Sache ist, es lässt sich um beliebig viele Fensterkontakte und beliebig viele Temperatursensoren einfach erweitern - ohne eine einzige if-Abfrage schreiben zu müssen.

Gruß

Damian

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