Neues Modul - THRESHOLD

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

Vorheriges Thema - Nächstes Thema

Damian

Morgen gibt es ein weiteres Update.

Man kann jetzt Zustandsanzeige für cmd1 und cmd2 definieren. Den Status kann man dann in anderen Modulen abfragen.

Das obige Beispiel lässt sich dann auch ohne Dummy realisieren.

Alles Weitere steht in der Doku.

Gruß

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

det.

Hallo Damian,

schönen Urlaub erst mal für die nächsten 2 Wochen! define Thermostat THRESHOLD BueroTemp_KG:temperature OR OWSWITCHB:B:OFF OWSWITCHB|set @ output A OFF|set @ output A ONfunktioniert jetzt prima, list Thermostat gibt aus:Internals:
   DEF        BueroTemp_KG:temperature OR OWSWITCHB:B:OFF OWSWITCHB|set @ output A OFF|set @ output A ON
   NAME       Thermostat
   NR         102
   NTFY_ORDER 50-Thermostat
   STATE      active 24
   TYPE       THRESHOLD
   hysteresis 1
   operator   OR
   sensor     BueroTemp_KG
   sensor2    OWSWITCHB
   sensor2_reading B
   sensor2_state OFF
   sensor_reading temperature
   Readings:
     2013-03-24 11:19:57   cmd             cmd2
     2013-03-24 11:19:34   desired_value   24
     2013-03-24 11:59:11   sensor2_state   ON☇
     2013-03-24 11:59:11   sensor_value    22.1875
     2013-03-24 11:19:34   state           active 24
     2013-03-24 11:19:34   threshold_min   23
   Helper:
     actor_cmd1 set OWSWITCHB output A OFF
     actor_cmd2 set OWSWITCHB output A ON
     actor_cmd_default 0
     state_cmd1
     state_cmd2
Attributes:
   group      Heizung
   room       Buero
Für die Einbindung von Zeit und Volauftemperatur warte ich geduldig auf Deinen WIKI Beitrag - das ist nicht eilig, warm wird es auch so.
LG
det.

Damian

Zitat von: det. schrieb am So, 24 März 2013 12:03Für die Einbindung von Zeit und Volauftemperatur warte ich geduldig auf Deinen WIKI Beitrag - das ist nicht eilig, warm wird es auch so.

Den Wiki-Beitrag werde ich erst später verfassen - soll natürlich allgemeingültig sein und verschiedene Szenarien der Steuerung beinhalten.

Dank dem Internetzugang und dem Regenwetter hier in Südfrankreich, kann ich dir aber schon mal die paar Zeilen für deinen Fall hier posten - bevor das eisige Wetter in Deutschland vorbei ist und die Testumgebung nicht mehr gegeben ist;)

Definition des Zustands deiner Heizung (bei über 39 Grad Zustand ON, sonst OFF)

define TH_Heizung OWX_HZ_RUECK:temperature:0:39 ||||ON:OFF


Definition einer Struktur Heizen, die den Zustand deiner Heizung und deines Fensterkontaktes zusammenfasst (Voraussetzung ist, dass OWSWITCHB den Zustand des Kontaktes(ON/OFF) im state liefert, wenn nicht, wirst du wohl über einen dummy gehen müssen, weil structure meines Wissens nach nur den Status auswertet)

define Heizen structure TH_Heizung OWSWITCHB
attr Heizen clientstate_behavior relative
attr Heizen clientstate_priority OFF ON


Definition des Zimmerthermostats TH_Zimmer in Abhängigkeit der Zimmertemperatur, der Rücklauftemperatur und des Fensterkontaktes:

define TH_Zimmer THRESHOLD BueroTemp_KG OR Heizen:state:OFF OWSWITCHB|set @ output A OFF|set @ output A ON


Definition der Heizzeiten:

define HC_Zimmer Heating_Control TH_Zimmer 07:00|21 22:00|17


die Wunschtemperatur wird dann über

set TH_Zimmer desired temp

gesetzt.

Und nun viel Erfolg beim Ausprobieren.

Gruß

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

Damian

gerade Fehler entdeckt:

define TH_Heizung OWX_HZ_RUECK:temperature:0:39 ||||ON:OFF

muss natürlich heißen:


define TH_Heizung THRESHOLD OWX_HZ_RUECK:temperature:0:39 ||||ON:OFF
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

und noch einen Fehler entdeckt:

define HC_Zimmer Heating_Control TH_Zimmer 07:00|21 22:00|17

muss lauten:

define HC_Zimmer Heating_Control TH_Zimmer 07:00|21 22:00|17 set @ desired %
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

det.

Hallo Damian,
vielen Dank! Schade mit dem Urlaubswetter, hier sind dafür schon wieder -3°C... Habe Deinen Code gleich probiert, auch wenn mir das zum Verstehen etwas komplex ist...ich arbeite dran...
Heizen geht, Fenster auf wird nicht erkannt, Zustand für "Fenster AUF" ist OWSWITCHB:B:OFF, Heizen steht auf undefined ? - da tut sich irgendwie nichts. Ich hänge die Programmzeilen mal dran:define Buero_desired_temp dummy
attr Buero_desired_temp alias Solltemperatur
attr Buero_desired_temp setList state:slider,16,1,25
attr Buero_desired_temp stateFormat state  °C

define Heizen structure TH_Heizung OWSWITCHB:B:
attr Heizen clientstate_behavior relative
attr Heizen clientstate_priority OFF ON

define TH_Heizung THRESHOLD OWX_HZ_VOR:temperature:0:45 ||||ON:OFF

define TH_Zimmer THRESHOLD BueroTemp_KG OR Heizen:state:OFF OWSWITCHB|set @ output A OFF|set @ output A ON

define HC_Zimmer Heating_Control TH_Zimmer 07:00|21 22:00|17 set @ desired %

define Dummy_notify notify Buero_desired_temp:.* {\
 my $a=ReadingsVal ("Buero_desired_temp", "state","6");;\
 {fhem "set TH_Zimmer desired $a";;}\
}
Das Einstellen der Solltemperatur mit dem Slider geht auch.
LG
det.

Damian

[quote title=det. schrieb am So, 24 März 2013 18:27]

define Heizen structure TH_Heizung OWSWITCHB:B

da sind noch Fehler drin:

hinter structure muss erstmal noch ein TYP definiert werden (den hatte ich vergessen anzugeben)

define Heizen structure dummy_typ TH_Heizung OWSWITCHB

Das Problem wird noch OWSWITCHB:B sein, die Syntax wird von structure nicht erkannt werden.

Du müsstest über Status von OWSWITCHB und nicht über Readings von OWSWITCHB gehen, denn structure funktioniert offenbar nur mit Stati. Was wird denn bei OWSWITCHB im Status angezeigt?

Gruß

Damian

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

det.

Hallo Damian,
jetzt geht es:define Buero_desired_temp dummy
attr Buero_desired_temp setList state:slider,16,1,25
attr Buero_desired_temp stateFormat state  °C
attr Buero_desired_temp webCmd state

define TH_Heizung THRESHOLD OWX_HZ_VOR:temperature:0:45 ||||ON:OFF
attr TH_Heizung dummy_type Heizen
attr TH_Heizung dummy_type_map B: ON B: OFF

define Heizen structure dummy_type TH_Heizung OWSWITCHB
attr Heizen clientstate_behavior relative
attr Heizen clientstate_priority ON OFF
attr Heizen dummy_type_map B: ON B: OFF

define TH_Zimmer THRESHOLD BueroTemp_KG OR Heizen:state:OFF OWSWITCHB|set @ output A OFF|set @ output A ON
define HC_Zimmer Heating_Control TH_Zimmer 07:00|20 22:00|17 set @ desired %

define Dummy_notify notify Buero_desired_temp:.* {\
 my $a=ReadingsVal ("Buero_desired_temp", "state","6");;\
 {fhem "set TH_Zimmer desired $a";;}\
}
Vielen Dank! Das Einzige was komisch ist, aber nicht funktionsrelevant - wenn OWSWITCHB B: ON, also Fenster ist zu - ist der state von Heizen undefined. Ist das Fenster auf, geht Heizen auf OFF.
LG
det.

Damian

Zitat von: det. schrieb am Mo, 25 März 2013 08:46Vielen Dank! Das Einzige was komisch ist, aber nicht funktionsrelevant - wenn OWSWITCHB B: ON, also Fenster ist zu - ist der state von Heizen undefined. Ist das Fenster auf, geht Heizen auf OFF.

Ich habe mir jetzt nochmal die Sache mit typ_map angeschaut. Meiner Meinung nach ist dein Mapping nicht richtig. Lt. Doku von structure gibt es zum Mappen von Readings drei Angaben Readingname:Readinginhalt:Status. Du hast aber nur zwei Angaben B: ON. Auch die Reihenfolge in Client_state_priority ist nicht unbedeutend.

Das Mapping macht nur Sinn bei deinem OWSWITCHB-Device und nicht bei TH_HEIZEN bzw. HEIZEN.

Es müsste eigentlich heißen:

attr OWSWITCHB dummy_type_map B:ON:ON B:OFF:OFF

und

attr Heizen dummy_type_map B: ON B: OFF
attr TH_Heizung dummy_type_map B: ON B: OFF


würde ich löschen, weil dort nichts zu mappen ist.

und

attr Heizen clientstate_priority ON OFF

müsste lauten:


attr Heizen clientstate_priority OFF ON


denn HEIZEN sollte auf OFF gehen, sobald TH_HEIZUNG oder OWSWITCHB auf OFF geht, und HEIZEN soll ON sein, wenn TH_HEIZUNG und OWSWITCHB ON ist und nicht anders herum.

Gruß

Damian



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

rokno

Das Modul liest sich sehr gut.

Ich möchte gern damit eine Infrarotheizung steuern. Diese hängt an einer FS20ST oder am äquivalenten Unterputzschalter.
Die Solltemperatur soll über den FHT80B Raumthermostat gesetzt wie auch gemessen werden.

Kann das Modul diese Aufgabe übernehmen?

Gruß

Damian

Zitat von: rokno schrieb am Di, 26 März 2013 20:08Das Modul liest sich sehr gut.

Ich möchte gern damit eine Infrarotheizung steuern. Diese hängt an einer FS20ST oder am äquivalenten Unterputzschalter.
Die Solltemperatur soll über den FHT80B Raumthermostat gesetzt wie auch gemessen werden.

Kann das Modul diese Aufgabe übernehmen?

Gruß



Sollte kein Problem sein. Ich habe keinen FHT80B, daher kenne ich nicht die Readings. Ich nehme an, dass aber dort die Solltemperatur und die tatsächliche Temperatur ausgelesen werden kann. Im Prinzip brauchst du eine Zeile für die Definition deines THRESHOLD-Moduls zum Steuern deiner FS20ST-Heizung und ein Notify zum Auslesen der Solltemperatur, um sie mit set TH_Modul desired temp zu setzen.
Poste hier mit list <dein_FHT80B> den Auszug vom FHT80B mit gesetzter Solltemperatur, dann kann ich dir einen Vorschlag zur Umsetzung machen.

Gruß

Damian











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

det.

Hallo Damian,
WOW - genau so - es funktioniert jetzt alles! Vielen Dank!

(siehe Anhang / see attachement)

Ich poste noch mal den kompletten Code, falls jemand so was ähnliches nachempfinden möchte (bitte entschuldigt die Länge)define OWSWITCHB OWSWITCH DS2406 4EF17B000000 300
attr OWSWITCHB alias Heizungsschalter
attr OWSWITCHB dummy_type Heizen
attr OWSWITCHB dummy_type_map B: ON: ON B: OFF: OFF
attr OWSWITCHB model DS2406
attr OWSWITCHB stateFormat Ventil: A | Fenster: B

define Buero_desired_temp dummy
attr Buero_desired_temp alias Raum-Soll-Temperatur
attr Buero_desired_temp setList state:slider,16,1,25
attr Buero_desired_temp stateFormat state  °C
attr Buero_desired_temp webCmd state

define TH_Heizung THRESHOLD OWX_HZ_VOR:temperature:0:45 ||||ON:OFF
attr TH_Heizung dummy_type Heizen

define Heizen structure dummy_type TH_Heizung OWSWITCHB
attr Heizen clientstate_behavior relative
attr Heizen clientstate_priority OFF ON

define TH_Zimmer THRESHOLD BueroTemp_KG OR Heizen:state:OFF OWSWITCHB|set @ output A OFF|set @ output A ON
attr TH_Zimmer alias Thermostat

define HC_Zimmer Heating_Control TH_Zimmer 07:00|20 22:00|17 set @ desired %
attr HC_Zimmer alias Programm-Temperatur
attr HC_Zimmer stateFormat state °C

define Dummy_notify notify Buero_desired_temp:.* {\
 my $a=ReadingsVal ("Buero_desired_temp", "state","6");;\
 {fhem "set TH_Zimmer desired $a";;}\
}
LG
det.

rokno

Hallo Damian,

hier die Ausgabe von list:

Internals:
   CODE       3233
   CUL_MSGCNT 107896
   CUL_RAWMSG T323300A600FA
   CUL_RSSI   -77
   CUL_TIME   2013-03-26 22:17:49
   DEF        3233
   IODev      CUL
   LASTIODev  CUL
   MSGCNT     107896
   NAME       Heizung_Bad
   NR         46
   STATE      measured-temp: 18
   TYPE       FHT
   Readings:
     2013-03-26 22:17:49   actuator        0%
     2012-10-04 20:54:54   actuator1       pair
     2013-03-26 22:10:05   battery         ok
     2012-10-07 23:54:12   day-temp        25.0
     2013-03-26 06:30:26   desired-temp    17.0
     2012-10-30 00:02:38   fri-from1       04:30
     2012-10-30 00:02:38   fri-from2       24:00
     2012-10-30 00:02:38   fri-to1         06:30
     2012-10-30 00:02:39   fri-to2         24:00
     2013-03-26 22:10:05   lowtemp         ok
     2012-10-07 23:30:48   lowtemp-offset  4.0
     2013-03-26 22:10:04   measured-temp   18
     2012-10-11 19:11:34   mode            auto
     2012-10-29 23:39:20   mon-from1       04:30
     2012-10-29 23:39:21   mon-from2       24:00
     2012-10-29 23:39:20   mon-to1         06:30
     2012-10-29 23:39:21   mon-to2         24:00
     2012-10-07 23:54:12   night-temp      17.0
     2012-10-07 23:36:34   report1         255
     2012-10-07 23:28:48   report2         255
     2012-10-13 22:11:39   sat-from1       05:30
     2012-10-13 22:11:40   sat-from2       24:00
     2012-10-13 22:11:40   sat-to1         06:30
     2012-10-13 22:11:40   sat-to2         24:00
     2012-10-13 22:11:41   sun-from1       05:30
     2012-10-13 22:11:41   sun-from2       24:00
     2012-10-13 22:11:41   sun-to1         06:30
     2012-10-13 22:11:42   sun-to2         24:00
     2013-03-26 22:10:04   temperature     18
     2012-12-13 18:52:01   thu-from1       04:30
     2012-12-13 18:52:02   thu-from2       24:00
     2012-12-13 18:52:02   thu-to1         06:30
     2012-12-13 18:52:02   thu-to2         24:00
     2012-12-25 17:08:14   tue-from1       04:30
     2012-12-25 17:08:14   tue-from2       24:00
     2012-12-25 17:08:14   tue-to1         06:30
     2012-12-25 17:08:14   tue-to2         24:00
     2013-03-26 22:10:05   warnings        none
     2012-10-29 23:39:23   wed-from1       04:30
     2012-10-29 23:39:23   wed-from2       24:00
     2012-10-29 23:39:23   wed-to1         06:30
     2012-10-29 23:39:24   wed-to2         24:00
     2013-03-26 22:10:05   window          closed
     2012-10-07 23:54:12   windowopen-temp 12.0
     2013-03-26 22:10:05   windowsensor    ok
   Fhem:
     measuredHigh 0
     measuredLow 180
   Helper:
Attributes:
   fm_view    1,0
   model      fht80b
   retrycount 3
   room       Bad


Gruß
Rik


Zitat von: Damian schrieb am Di, 26 März 2013 20:26
Zitat von: rokno schrieb am Di, 26 März 2013 20:08Das Modul liest sich sehr gut.

Ich möchte gern damit eine Infrarotheizung steuern. Diese hängt an einer FS20ST oder am äquivalenten Unterputzschalter.
Die Solltemperatur soll über den FHT80B Raumthermostat gesetzt wie auch gemessen werden.

Kann das Modul diese Aufgabe übernehmen?

Gruß



Sollte kein Problem sein. Ich habe keinen FHT80B, daher kenne ich nicht die Readings. Ich nehme an, dass aber dort die Solltemperatur und die tatsächliche Temperatur ausgelesen werden kann. Im Prinzip brauchst du eine Zeile für die Definition deines THRESHOLD-Moduls zum Steuern deiner FS20ST-Heizung und ein Notify zum Auslesen der Solltemperatur, um sie mit set TH_Modul desired temp zu setzen.
Poste hier mit list <dein_FHT80B> den Auszug vom FHT80B mit gesetzter Solltemperatur, dann kann ich dir einen Vorschlag zur Umsetzung machen.

Gruß

Damian












Damian

Hallo Rik,

Definition eines THRESHOLD-Devices in Abhängigkeit von der Temperatur:

define TH_Bad THRESHOLD Heizung_Bad <dein FS20ST-Device>

und dann noch das Setzen der Wunschtemperatur:

define desired_notify notify Heizung_Bad:.* {my $desired_tmp=ReadingsVal ("Heizung_Bad", "desired-tmp","17");{fhem "set TH_Bad desired $desired_tmp"}
}


Das war es schon.

Eleganter wäre natürlich sich die letzte desired-tmp vom FHT80B in einer Variablen zu merken und nur bei Änderung "set TH_Bad desired $desired_tmp" aufzurufen.

So ist der Notify aber einfacher. Ich werde zukünftig im THRESHOLD-Modul noch einbauen, dass das Setzen der gleichen desired-temp zu keiner Zustandsänderung im Modul führt.

Gruß

Damian



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

rokno

Hallo Damian,

vielen Dank dafür!

Werde voraussichtlich mein COC für's RPI am Samstag erhalten.
HomeMatic Unterputzschalter ist heute gekommen. Werde mich nochmals mit dem Ergebnis melden :-)

Gruß
Rik