Moin,
ich bin gerade dabei meine Heizungssteuerung mit den Devolo MT2650-Thermostaten einzurichten.
Dazu bin ich soweit nach dem Wiki-Artikel zu HeatingControl vorgegangen, das gröbste funktioniert auch, jedoch ein entscheidendes Detail nicht, nämlich das (Rück-)Setzen der Temperaturen nach dem Zeitplan.
Wenn ich jetzt den Automatik-Dummy, mit folgendem Inhalt des dazugehörigen DOIF ([HeizungsAutomatik] eq "on") (Heating_Control_SetAllTemps(),set teleBot message Heizungsautomatik aktiv!) DOELSE (set Heizungsventile thermostatSetpointSet 17.0,set teleBot message Heizungsautomatik deaktiviert!)
ausschalte, werden meine Thermostate auch brav alle auf 17° gesetzt.
Wenn ich den aber wieder aktiviere und er die Sollwerte der Heizpläne wiederherstellen soll macht er das nicht und ich bekomme laut Log immer folgende Fehlermeldung: "HeatingControl.Aktivator: Heating_Control_SetAllTemps(): Unknown command Heating_Control_SetAllTemps(), try help."
Ebenso wenn ich den Sollwert des im Wohnzimmer befindlichen Thermostats durch das DOIF (folgender Inhalt: ([Terrassentuer] eq "open") (set Thermostat_WZ thermostatSetpointSet 15) DOELSE (Heating_Control_SetTemp("Thermostat_WZ"))
eines Fensterkontaktes ändere ("Fensterstatus_WZ: Heating_Control_SetTemp("Thermostat_WZ"): Unknown command Heating_Control_SetTemp("Thermostat_WZ"), try help.").
Ich vermute mal Ursache ist der Umstand, dass Heating Control die Werte ja mittels des commands "desired-temp|desiredTemerature" setzt, die Devolo/Danfoss-Thermostate haben dafür aber das command "thermostatSetpointSet".
Wenn dem so ist, kann man das einfach in der Datei 98_heating_control.pm ändern, oder ist der Aufwand dafür größer (meine Perl-Kentnisse sind eher rudimentär)? Bzw. gibt es ein ähnlich komfortables Modul um eben auch Zwave-Devices entsprechend zu schalten?
es kann sein, das hier die Syntax fasch ist:
(Heating_Control_SetTemp("Thermostat_WZ"))
Der Aufruf von Heating_Control_SetTemp muss als Perlcode an DOIF übergeben werden. Wie auch immer das geht.
Ich vermute mal Ursache ist der Umstand, dass Heating Control die Werte ja mittels des commands "desired-temp|desiredTemerature" setzt, die Devolo/Danfoss-Thermostate haben dafür aber das command "thermostatSetpointSet".
Wenn dem so ist, kann man das einfach in der Datei 98_heating_control.pm ändern, oder ist der Aufwand dafür größer (meine Perl-Kentnisse sind eher rudimentär)? Bzw. gibt es ein ähnlich komfortables Modul um eben auch Zwave-Devices entsprechend zu schalten?
ja, das wird so sein.
Wenn du mir mit einem list die Werte der Thermostate lieferst, kann ich Devolo/Danfoss-Thermostate in die Automatik aufnehmen.
Bis zum Einchecken kannst du dir folgendermaßen helfen:
define hc Heating_Control dev 19:00|25 {fhem("set $NAME thermostatSetpointSet $EVENT")}
mit verbose 5 auf dem HC testen ob es funktioniert.
Zitat von: Dietmar63 am 02 Dezember 2016, 09:26:34
es kann sein, das hier die Syntax fasch ist:
(Heating_Control_SetTemp("Thermostat_WZ"))
Der Aufruf von Heating_Control_SetTemp muss als Perlcode an DOIF übergeben werden. Wie auch immer das geht.
Laut Commandref
Heating_Control_SetTemp(<"HC-device">) or Heating_Control_SetAllTemps()
sollte es eigentlich gehen, ich vermute da wird intern der selbe Befehl (desire-Temp) hinterstehen. Ist aber erstmal nicht so tragisch, kann vorerst hinten anstehen. ;-)
Zitat von: Dietmar63 am 02 Dezember 2016, 09:26:34
Wenn du mir mit einem list die Werte der Thermostate lieferst, kann ich Devolo/Danfoss-Thermostate in die Automatik aufnehmen.
Danke, die list sieht wie folgt aus:
Internals:
DEF d734e6a5 8
IODev ZWAVE1
LASTInputDev ZWAVE1
MSGCNT 368
NAME Thermostat_WZ
NR 60
STATE wakeupInterval 86400 1
STILLDONETIME 0
TYPE ZWave
ZWAVE1_MSGCNT 368
ZWAVE1_RAWMSG 00040008028407
ZWAVE1_TIME 2016-12-02 10:55:56
ZWaveSubDevice no
homeId d734e6a5
isWakeUp 1
lastMsgSent 1480672558.98863
nodeIdHex 08
Readings:
2016-12-02 10:55:10 CMD ZW_APPLICATION_UPDATE
2016-12-02 10:55:56 battery 71 %
2016-12-02 10:55:56 ccsOverride no, unused
2016-10-23 16:12:27 ccs_fri 23:00 -4.5 07:00 0.0
2016-10-23 16:12:27 ccs_mon 22:00 -4.5 16:00 0.0
2016-10-23 16:12:27 ccs_sat 23:00 -4.5 07:00 0.0
2016-10-23 16:12:27 ccs_sun 22:00 -4.5 07:00 0.0
2016-10-23 16:12:27 ccs_thu 22:00 -4.5 16:00 0.0
2016-10-23 16:12:27 ccs_tue 22:00 -4.5 16:00 0.0
2016-10-23 16:12:27 ccs_wed 22:00 -4.5 16:00 0.0
2016-10-27 21:25:04 clock thu 22:25
2016-10-23 13:19:26 model Danfoss devolo Thermostat MT2650
2016-10-23 13:19:26 modelConfig danfoss/z.xml
2016-10-23 13:19:26 modelId 0002-0005-0175
2016-10-23 14:21:44 neighborList ZWAVE1 Fensterleuchte Flurleuchte Beetbeleuchtung
2016-10-23 16:12:27 protection Local: unprotected RF: unprotected
2016-12-02 10:55:56 setpointTemp 11.00 C heating
2016-10-23 13:19:18 state wakeupInterval 86400 1
2016-12-02 10:55:56 temperature 20.23 C
2016-10-23 14:22:54 thermostatSetpointSupported heating
2016-12-02 10:55:59 timeToAck 0.029
2016-12-02 10:55:59 transmit OK
2016-12-02 10:55:56 wakeup notification
2016-10-23 15:42:56 wakeupIntervalCapabilitiesReport min 60 max 1800 default 300 step 60
2016-12-01 20:56:00 wakeupReport interval 300 target 1
Attributes:
Heizungen Heizungsventile
IODev ZWAVE1
classes BATTERY CLIMATE_CONTROL_SCHEDULE CLOCK MANUFACTURER_SPECIFIC MULTI_CMD PROTECTION SENSOR_MULTILEVEL THERMOSTAT_SETPOINT VERSION WAKE_UP MARK CLIMATE_CONTROL_SCHEDULE CLOCK MULTI_CMD
icon sani_heating
room Wohnzimmer
userattr Heizungen Heizungen_map structexclude
vclasses BATTERY:1 CLIMATE_CONTROL_SCHEDULE:1 CLOCK:1 MANUFACTURER_SPECIFIC:1 MULTI_CMD:1 PROTECTION:2 SENSOR_MULTILEVEL:6 THERMOSTAT_SETPOINT:2 VERSION:1 WAKE_UP:2
Im Zuge dessen habe ich dann später noch eine Frage zum Ecomode (da bekomme ich immer einen Fehler weil setpointTemp keinen reinen Zahlwert liefert (sondern noch das "heating" dahinter), was zu einer Fehlermeldung bei der Subtraktion führt, aber trotzdem korrekt gesetzt wird. Wie gesagt später...
Den Rest werde ich wohl erst morgen testen können, aber danke bis hierher. :-)
Hallo Ronaldo,
irgendwie habe ich das Gefühl das Dein Problem in Verbindung mit meinem Post am 29.11.2016 Thema HASH im Log steht.
Habe auch stundenlang probiert mit DOIF die Temperatur nach Fensteröffnung wieder hinzubekommen.
Bin dann auf notify umgestiegen und es funktioniert in der Art wie
define fk_buero_closed notify TK_OG_Buero_DaFenster:Geschlossen {Heating_Control_SetTemp("HC_OG_Buero")}
obwohl ich es gerne wegen der Einheitlichkeit mit dem Fensteröffnen für Temperatursenkung zusammen in einem DOIF hätte.
Vielleicht erklärt mal einer von den Programmierern woran es haken könnte.
Danke und Grüße Hans-Jürgen
habe die doku geändert - wird demnächst eigecheckt.
Heating_Control_SetTemp("HC-device") or Heating_Control_SetAllTemps()
98_Heating_Control, 98_WeekdayTimer:
- a bug fixed when starting a WDT or a HC an trying to switch in the past.
- now being able to use on-till:13:30:30 as a parameter
- the parameter can now be a Perlcode
Hallo Dietmar63,
könntest Du mir bitte beantworten ob nach Deinem Fix Heating_Control_SetTemp(<"HC-device">) in Verbindung in Benutzung eines DOIF funktioniert ohne HASH Meldungen im Log
oder ob vermutlich ich Murks gebaut habe.
Damit man dieses in Zukunft auch mit DOIF nach Fenster,Tür schließen nutzen kann.
Danke vielmals
Hans-Jürgen
Nein, kann ich nicht beantworten
DOIF nutze ich nicht
Hallo, auch bei meiner Installation habe ich das Problem mit dem "HASH-Fehler"., wenn ich z.B. {Heating_Control_SetTemp("hc_Schlafzimmer")}
eingebe. Meine Thermostate sind von Homematic. Nur wenn ich{Heating_Control_SetAllTemps()}
aufrufe, kommt keine Fehlermeldung. Dabei hatte es schon mal mit DOIF funktioniert. Notify scheint auch keine Lösung zu sein..
Gruß
Jürgen K.
EDIT: mit dieser älteren Version von Heating_Cotrol klappt es bei mir wieder ohne Fehlermeldung.
Hallo juergen012,
Danke für den Anhang !
Werde ich demnächst ausprobieren.
Notify in der Art nach Fenster schließen funktioniert für ein Raum TK_OG_Buero_DaFenster:Geschlossen {Heating_Control_SetTemp("HC_OG_Buero")}.
{Heating_Control_SetAllTemps()} hatte bei mir auch mit DOIF funktioniert nur es wirkt ja auf alle Stellglieder auch bei denen wo die Fenster noch offen sind also somit keine Lösung.
Heating_Control_SetTemp("HC-device") hat zwar auch Wirkung gezeigt aber eben in konstanter Boshaftigkeit alle 10 Minuten dieses HASH ins Log geschrieben.
Etwas tröstlich für mich, daß es mich nicht nur alleine betroffen hatte, Danke für die Rückmeldung.
Gruß
Hans-Jürgen
Zitat von: Dietmar63 am 02 Dezember 2016, 09:26:34define hc Heating_Control dev 19:00|25 {fhem("set $NAME thermostatSetpointSet $EVENT")}
mit verbose 5 auf dem HC testen ob es funktioniert.
Sorry, bin jetzt erst zum Testen gekommen...
Habe den hc mal so erstellt und das ganze funktioniert, die Thermostate schalten nach Zeit :)
Ein dickes "Danke" dafür.
2016.12.09 19:00:00 4: [hc] time=19:00/1481306400 delay=0, nextDelay=60, nextRetry=1481306460
2016.12.09 19:00:00 4: [hc] delayedExecutionCond:0
2016.12.09 19:00:00 4: [hc] result of delayedExecutionCond:0
2016.12.09 19:00:00 4: [hc] list of window sensors found: 'hc'
2016.12.09 19:00:00 4: [hc] condition: - Tage:0,1,2,3,4,5,6
2016.12.09 19:00:00 5: [hc] condition: {my $days={};;map{$days->{$_}=1}(0,1,2,3,4,5,6);;;;( 1 && (defined $days->{$wday}))}
2016.12.09 19:00:00 5: [hc] result of condition:1
2016.12.09 19:00:00 4: [hc] Update - timer seems to be active today: 0123456|19:00|25.0
2016.12.09 19:00:00 4: [hc] device type ZWave: recognized, setModifier:
2016.12.09 19:00:00 4: [hc] aktParam: newParam:25.0 - is not disabled
2016.12.09 19:00:00 4: [hc] command: '{fhem("set $NAME thermostatSetpointSet $EVENT")}' executed with %EVENT=>25.0,%NAME=>Thermostat_WZ
2016.12.09 19:00:00 3: ZWave set Thermostat_WZ thermostatSetpointSet 25.0
2016.12.09 19:00:00 3: set Thermostat_WZ thermostatSetpointSet 25.0 : Scheduled for sending after WAKEUP
2016.12.09 19:00:00 3: Scheduled for sending after WAKEUP
Bleibt nur noch das Problem mit dem Zurückschalten via Heating_Control_SetTemp("HC-device") und Heating_Control_SetAllTemps(), da bekomme ich nämlich noch den gleichen Fehler. :/
Heating_Control_SetTemp("HC-device") funktioniert nur dann wenn du am HC das Attribut switchInThePast gesetzt hast.
Zitat von: Dietmar63 am 14 Dezember 2016, 21:24:06
Heating_Control_SetTemp("HC-device") funktioniert nur dann wenn du am HC das Attribut switchInThePast gesetzt hast.
Achso. Ich nehme mal an das muss dann auf 1 stehen. ;-)
Leider bekomme ich immernoch die Fehlermeldung :-(
Fensterstatus_WZ: Heating_Control_SetTemp("Heizung_WZ"): Unknown command Heating_Control_SetTemp("Heizung_WZ"), try help.
Hier mal die list des HC:
Internals:
COMMAND
CONDITION (ReadingsVal("HeizungsAutomatik", "state", "") eq "on")
DEF Thermostat_WZ 8|16:00|21.5 8|22:00|17 7|06:00|21.5 7|22:00|17 (ReadingsVal("HeizungsAutomatik", "state", "") eq "on")
DEVICE Thermostat_WZ
GlobalDaylistSpec
LANGUAGE de
NAME Heizung_WZ
NR 71
Profil 0: Sonntag 06:00:00 21.5, 22:00:00 17
Profil 1: Montag 16:00:00 21.5, 22:00:00 17
Profil 2: Dienstag 16:00:00 21.5, 22:00:00 17
Profil 3: Mittwoch 16:00:00 21.5, 22:00:00 17
Profil 4: Donnerstag 16:00:00 21.5, 22:00:00 17
Profil 5: Freitag 16:00:00 21.5, 22:00:00 17
Profil 6: Samstag 06:00:00 21.5, 22:00:00 17
Profil 7: Wochenende 06:00:00 21.5, 22:00:00 17
Profil 8: Werktags 16:00:00 21.5, 22:00:00 17
STATE 21.5
STILLDONETIME 0
TYPE Heating_Control
Readings:
2016-12-16 19:24:24 currValue 21.5
2016-12-08 20:03:01 disabled 0
2016-12-16 19:24:24 nextUpdate 2016-12-16 22:00:00
2016-12-16 19:24:24 nextValue 17
2016-12-16 19:24:24 state 21.5
SWITCHINGTIMES:
8|16:00|21.5
8|22:00|17
7|06:00|21.5
7|22:00|17
Timer:
Heizung_wz_1:
HASH Heizung_WZ
MODIFIER 1
NAME Heizung_WZ_1
immerSchalten 1
Heizung_wz_2:
HASH Heizung_WZ
MODIFIER 2
NAME Heizung_WZ_2
Heizung_wz_4:
HASH Heizung_WZ
MODIFIER 4
NAME Heizung_WZ_4
Heizung_wz_settimerofday:
HASH Heizung_WZ
MODIFIER SetTimerOfDay
NAME Heizung_WZ_SetTimerOfDay
SETTIMERATMIDNIGHT 1
Heizung_wz_delayed:
HASH Heizung_WZ
MODIFIER delayed
NAME Heizung_WZ_delayed
Daynumber:
!$we 8
$we 7
di 2
do 4
fr 5
mi 3
mo 1
sa 6
so 0
Helper:
daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
Switchingtime:
0:
06:00:00 21.5
22:00:00 17
...
Attributes:
disable 0
group Heizplan
room Heizung
switchInThePast 1
verbose 5
windowSensor Terrassentuer
Heating_Control_SetTemp("... ") ist aber richtig
Hast du eine alte Version des Programms?
Zitat von: Dietmar63 am 16 Dezember 2016, 20:36:40
Heating_Control_SetTemp("... ") ist aber richtig
Hast du eine alte Version des Programms?
Eigentlich nicht,
Latest Revision: 12787.
98_Heating_Control.pm 12715 2016-12-04 21:42:11Z dietmar63
Hatte auch die Module immer fleißig aktuell gehalten...
Muss bei Heating_Controll_SetTemp("...") eigentlich das HC (bei mir Heizung_WZ) oder das zum HC gehörige Thermostat (das wäre Thermostat_WZ) eingetragen werden?
Hatte es allerdings auch mit beidem getestet, kam bei mir aufs gleiche raus. :(
Mit Heating_Control_SetallTemps() geht es ja auch nicht
HeatingControl.Aktivator: Heating_Control_SetAllTemps(): Unknown command Heating_Control_SetAllTemps(), try help.
Kannst du den Code posten, wie du Heating_Control_SetTemp (... ) aufrufst
Einmal aus dem HeatingControl.Aktivator([HeizungsAutomatik] eq "on") (Heating_Control_SetAllTemps(),set teleBot message Heizungsautomatik aktiv!) DOELSE (set Heizungsventile thermostatSetpointSet 17.0,set teleBot message Heizungsautomatik deaktiviert!)
dann einmal aus dem Eco-Mode.Aktivator ([HeizungsAbsenkung] eq "on") ({ecomode}) DOELSE ({Heating_Control_SetAllTemps()})
und aus dem Fensterstatus ([Terrassentuer] eq "open") (set Thermostat_WZ thermostatSetpointSet 11) DOELSE (Heating_Control_SetTemp("Heizung_WZ"))
.
Getestet habe ich bisher aber immer nur mit dem HeatingControl.Aktivator und Fensterstatus.
Heating_Control_SetTemp("Heizung_WZ") ist Perlcode.
Der muss in DOIF bestimmt immer in {} geschrieben werden, so wie du es im Eco-Mode.Aktivator gemacht hast.
Wohoo, Dietmar, ich danke dir, genaus so ist es.
Nun tuts genau wie es soll. :)
Durch die Diskussion über schalten vergangener Definitionen bin ich auf eine neue Idee gebracht worden Heizungen/Thermostate einfacher und universeller zu erkennen.
Die Änderung läuft bei mir und ich checke in Kürze ein.
Für ZWAVE benötige ich nur das auszuführende Kommando.
Es scheint mehrere Möglichkeiten zu geben :
setpointHeating ...
Bitte Möglichkeiten posten
Sorry, habe seit dem es gelöst war nicht mehr reingeschaut...
Es gibt "setpointHeating", "setpointCooling" und "thermostatSetpointSet" (welches ich ausschließlich benutze).
setpointHeating und thermostatSetpointSet scheinen das gleiche zu bewirken. Vermutlich weil das Thermostat (Danfoss devolo Thermostat MT2650) als thermostatSetpointSupported ein "heating" ausgibt. Ich weiß nicht, ob es noch spezielle Kühlthermostaten gibt, bei denen dann analog zu diesem der Parameter setpointCooling greift (der scheint bei mir nichts zu bewirken).
Kannst du mir Beispiele für die jeweiligen Aufrufe schicken
Ja, aber leider erst ab dem 29.12., vorher bin ich nicht mehr zu hause.
Ein schönes Weihnachtsfest wünsche ich bis dahin. :)
Ging doch schon eher... :)
Also, wie gesagt diese drei Befehle gibt es:
set Thermostat_WZ setpointCooling 23
set Thermostat_WZ setpointHeating 21
set Thermostat_WZ thermostatSetpointSet 18.0
Wobei setpointHeating und setpointCooling nur als ganze Zahlen gehen, thermostatSetpointSet auch mit Nachkommastellen.
Allerdings führen nur setpointHeating und thermostatSetpointSet bei mir auch zum Setzen der Solltemperatur, setpointCooling tut das nicht; vermutlich weil es das Reading thermostatSetpointSupported, welches mir ausschließlich ein "heating" liefert, gibt; weswegen ich vermute, dass es da u.U. auch Thermostate speziell fürs Kühlen geben könnte.
bitte mal probieren ob zwave jetzt erkannt wird.
Übrigens zwave wird über desired-temp geschaltet.
Zitat von: Dietmar63 am 27 Dezember 2016, 23:35:34
bitte mal probieren ob zwave jetzt erkannt wird.
Übrigens zwave wird über desired-temp geschaltet.
Sorry, dass ich mich erst jetzt melde...
Meinst du jetzt das Schalten der Z-wave-Komponenten via Heating_Control_SetTemp("HC-Device") bzw. Heating_Control_SetAllTemps()?
Das funktioniert nun (zumindest letzteres (das Aus- und wieder Einschalten via AutomatikAktivator und Ecomode funzt), wenn ich im HC statt des "{fhem("set $NAME thermostatSetpointSet $EVENT")} ein {Heating_Control_SetTemp("Thermostat_Bad")} eintrage scheint es nicht zu klappen)...
Beim Testen des Eco-Modes ist mir allerdings was aufgefallen...
Es gibt wohl doch einen Unterschied zwischen SetpointHeating und ThermostatSetpointSet.
Man kann im Thermostat selbst auch ein Zeitprogramm hinterlegen. Dieses Änderungen werden mit relativen Temparaturen zu dem offenbar dafür gesetzten SetpointHeating realisiert (also wenn der SetpointHeating z.B. bei 21° liegt und ich will über Nacht 18 haben, dann sage ich dem Zeitprogramm im Thermostat meinetwegen 22:00 Uhr: -3). ThermostatSetpointSet scheint höher priorisiert als SetpointHeating (der Wert bleibt nämlich trotzdem im Thermostat erhalten). Aufgefallen ist mir das ganze, weil der Eco-Mode sich nämlich auf den Wert von SetpointHeating bezieht.
Was mir im Zuge dessen aufgefallen ist: Kann man nur einen Fensterkontakt pro HC definieren?
Denn wenn ich dort zwei, mit Komma oder Semikolon getrennt eintrage, dann verlinkt er mir nur den ersten zum entsprechenden Device...
Zitat
Was mir im Zuge dessen aufgefallen ist: Kann man nur einen Fensterkontakt pro HC definieren?
Denn wenn ich dort zwei, mit Komma oder Semikolon getrennt eintrage, dann verlinkt er mir nur den ersten zum entsprechenden Device...
Ich meine es funktioniert eine Liste.
HC sollte ZWAVE automatisch erkennen. Ich musste die Änderung aber wieder zurückziehen - ist noch nicht in Ordnung.
Zitat von: Ronaldo am 31 Dezember 2016, 11:07:34
Meinst du jetzt das Schalten der Z-wave-Komponenten via Heating_Control_SetTemp("HC-Device") bzw. Heating_Control_SetAllTemps()?
Das funktioniert nun (zumindest letzteres (das Aus- und wieder Einschalten via AutomatikAktivator und Ecomode funzt), wenn ich im HC statt des "{fhem("set $NAME thermostatSetpointSet $EVENT")} ein {Heating_Control_SetTemp("Thermostat_Bad")} eintrage scheint es nicht zu klappen)...
Muss mich diesbezüglich übrigens korrigieren, habe ja in dem DOIF vom Fensterstatus auch das "Heating_Control_SetTemp("Heizung_Bad")" drin und dort schaltet es sauber zurück.
//Edit: im DOIF des Fensterkontaktes funktionierts im HC nicht... :/
Hattes du es deswegen zurückgezogen?
Zitat von: Dietmar63 am 27 Dezember 2016, 23:35:34
Übrigens zwave wird über desired-temp geschaltet.
Woher hast du die Info (rein interessehalber)?
Zitat von: Dietmar63 am 31 Dezember 2016, 12:57:59
Ich meine es funktioniert eine Liste.
Wenn ich beide mit Komma trenne, dann erkennt er nur den ersten als vorhandenes Device (wird von FHEM dann ja verlinkt), wenn ich sie mit Leerzeichen oder Semikolon trenne, keines von beiden... :/
Zurück gezogen, weil es Fehler verursacht hat.
Die Info kam von Rudi
Ich sehe nochmal nach wie die Trennung aussehen muss
Versuch es mal einfach mit einem Leerzeichen
Ein frohes neues Jahr wünsche ich. :)
Zitat von: Dietmar63 am 31 Dezember 2016, 18:34:44
Versuch es mal einfach mit einem Leerzeichen
Geht nicht, dann nimmt er keinen der beiden Fensterkontakte...
Apropro...
wie ist das, wenn mir nicht der state das open oder closed liefert, sondern das Reading alarm?
Hintergrund ist, dass ich die Tür-/Fensterkontakte von Fibaro habe. Werksseitig liefern die über das Reading state entweder "open" oder "closed".
Nun kann man die aber zusätzlich mit einem Temperatursensor bestücken, was ich bei beiden Kontakten im Kinderzimmer getan habe. Dann liefert das Reading state aber nur "wakeupInterval 86400 1" und das Reading alarm liefert mir " AccessControl: Window/Door is closed" bzw. " AccessControl: Window/Door is open".
Am besten das ganze dann über einen dummy laufen lassen, oder?
auch ein frohes neues Jahr
my %contacts = ( "CUL_FHTTK" => { "READING" => "Window", "STATUS" => "(Open)", "MODEL" => "r" },
"CUL_HM" => { "READING" => "state", "STATUS" => "(open|tilted)", "MODEL" => "r" },
"EnOcean" => { "READING" => "state", "STATUS" => "(open)", "MODEL" => "r" },
"ZWave" => { "READING" => "state", "STATUS" => "(open)", "MODEL" => "r" },
"MAX" => { "READING" => "state", "STATUS" => "(open.*)", "MODEL" => "r" },
"WeekdayTimer" => { "READING" => "delayedExecution","STATUS" => "^1\$", "MODEL" => "a" },
"Heating_Control" => { "READING" => "delayedExecution","STATUS" => "^1\$", "MODEL" => "a" }
);
my $fensterKontakte = AttrVal($hash->{NAME}, "windowSensor", "")." ".$hash->{NAME};
$fensterKontakte =~ s/^\s+//;
$fensterKontakte =~ s/\s+$//;
Log3 $hash, 4, "[$name] list of window sensors found: '$fensterKontakte'";
if ($fensterKontakte ne "" ) {
my @kontakte = split("[ \t]+", $fensterKontakte);
foreach my $fk (@kontakte) {
im obigen Code wird klar, dass nur bestimmte Fensterkontakttypen automatisch erkannt werden.
Die Liste der Fensterkontakte wir nach Leerzeichen gesplittet.
Schalte mal mit verbose 5 die Protokollierung ein, dann kannst du die Details besser verfolgen.
98_WeekdayTimer, 98_Heating_Contorl: a new try to use a new method to check if a device is a heating - the new method is very easy, it checks if a device understand desired-temp ....
The first version, that was checked in, was causing errors.
Zwave, Devolo + FBDECT sollten nun erkannt werden. Bitte prüfen. Mangels Hardware kann ich nicht wirklich testen
Hmm... :(
Habe das {fhem("set $NAME thermostatSetpointSet $EVENT")} im Bad wieder durch ein {Heating_Control_SetTemp("Heizung_Bad")} ersetzt gehabt und er schaltet aber das SetAllTemps() kommt im Thermostat nicht an.
2017.01.03 19:49:02 3: ZWave set Thermostat_WZ thermostatSetpointSet 17.0
2017.01.03 19:49:02 3: ZWave set Thermostat_Bad thermostatSetpointSet 17.0
2017.01.03 19:49:02 3: ZWave set Thermostat_KiZ thermostatSetpointSet 17.0
2017.01.03 19:49:52 3: Heating_Control_SetAllTemps() done on: Heizung_Bad Heizung_KiZ Heizung_WZ
Die ersten drei Zeilen sind das Ausschalten der Heizungsautomatik (dort werden die Temperaturen aber auch per ThermostatSetpointSet gesetzt. Die vierte Zeile ist dann das Wiedereinschalten.
Das HC_Bad im verbose 5:
2017.01.03 19:57:30 3: ZWave set Thermostat_WZ thermostatSetpointSet 17.0
2017.01.03 19:57:30 3: ZWave set Thermostat_Bad thermostatSetpointSet 17.0
2017.01.03 19:57:30 3: ZWave set Thermostat_KiZ thermostatSetpointSet 17.0
2017.01.03 19:57:35 4: Thermostat_Bad 2017-01-03 16:30:00 12455s
2017.01.03 19:57:35 5: [Heizung_Bad] setting Timer: Heizung_Bad_3 2017-01-03 16:30:00
2017.01.03 19:57:35 4: [Heizung_Bad] device type heating recognized, setModifier:desired-temp
2017.01.03 19:57:35 4: [Heizung_Bad] time=16:30/1483457400 delay=12455, nextDelay=12540, nextRetry=1483469940
2017.01.03 19:57:35 4: [Heizung_Bad] delayedExecutionCond:0
2017.01.03 19:57:35 4: [Heizung_Bad] result of delayedExecutionCond:0
2017.01.03 19:57:35 4: [Heizung_Bad] list of window sensors found: 'Fenster_Bad Heizung_Bad'
2017.01.03 19:57:35 5: [Heizung_Bad] sensor 'Fenster_Bad' Reading/Attribute 'state' is 'wakeupInterval 86400 1'
2017.01.03 19:57:35 4: [Heizung_Bad] condition: - Tage:7,8
2017.01.03 19:57:35 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we || !$we))}
2017.01.03 19:57:35 5: [Heizung_Bad] result of condition:1
2017.01.03 19:57:35 4: [Heizung_Bad] condition: - Tage:8
2017.01.03 19:57:35 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || !$we))}
2017.01.03 19:57:35 5: [Heizung_Bad] result of condition:1
2017.01.03 19:57:35 4: [Heizung_Bad] Update - past timer activated
2017.01.03 19:57:35 4: [Heizung_Bad] device type heating recognized, setModifier:desired-temp
2017.01.03 19:57:35 4: [Heizung_Bad] aktParam: newParam:21.0 - is not disabled
2017.01.03 19:57:35 4: [Heizung_Bad] command: '{if (ReadingsVal("HeizungsAutomatik", "state", "") eq "on") {Heating_Control_SetTemp("Heizung_Bad")}}' executed with %EVENT=>21.0,%NAME=>Thermostat_Bad
2017.01.03 19:57:40 5: [Heizung_Bad] removing Timer: Heizung_Bad_4
2017.01.03 19:57:40 5: [Heizung_Bad] removing Timer: Heizung_Bad_3
2017.01.03 19:57:40 5: [Heizung_Bad] removing Timer: Heizung_Bad_7
2017.01.03 19:57:40 4: [Heizung_Bad] device type heating recognized, setModifier:desired-temp
2017.01.03 19:57:40 4: [Heizung_Bad] Heating recognized - switch in the past activated
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:8
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || !$we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:1
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:8
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || !$we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:1
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:8
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || !$we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:1
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:8
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || !$we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:1
2017.01.03 19:57:40 4: [Heizung_Bad] setTimer - timer seems to be active today: 8|22:00|18
2017.01.03 19:57:40 5: [Heizung_Bad] setting Timer: Heizung_Bad_4 2017-01-03 22:00:00
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:7
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:0
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:7
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:0
2017.01.03 19:57:40 4: [Heizung_Bad] condition: - Tage:7
2017.01.03 19:57:40 5: [Heizung_Bad] condition: {my $days={};;map{$days->{$_}=1}();;;;( 1 && (defined $days->{$wday} || $we))}
2017.01.03 19:57:40 5: [Heizung_Bad] result of condition:0
2017.01.03 19:57:40 4: [Heizung_Bad] setTimer - timer seems to be NOT active today: 7|22:00|18
2017.01.03 19:57:40 5: [Heizung_Bad] setting Timer: Heizung_Bad_7 2017-01-03 22:00:00
2017.01.03 19:57:40 4: [Heizung_Bad] time=16:30/1483457400 delay=12460, nextDelay=12540, nextRetry=1483469940
2017.01.03 19:57:40 4: [Heizung_Bad] delayedExecutionCond:0
2017.01.03 19:57:40 4: [Heizung_Bad] result of delayedExecutionCond:0
2017.01.03 19:57:40 4: [Heizung_Bad] list of window sensors found: 'Fenster_Bad Heizung_Bad'
2017.01.03 19:57:40 5: [Heizung_Bad] sensor 'Fenster_Bad' Reading/Attribute 'state' is 'wakeupInterval 86400 1'
2017.01.03 19:57:40 4: [Heizung_Bad] past timer on Thermostat_Bad at 2017-01-03 16:30:00 with 21 activated
2017.01.03 19:57:40 5: [Heizung_Bad] removing Timer: Heizung_Bad_delayed
2017.01.03 19:57:40 5: [Heizung_Bad] setting Timer: Heizung_Bad_delayed 2017-01-03 19:57:45
2017.01.03 19:57:40 5: [Heizung_Bad] removing Timer: Heizung_Bad_delayed
2017.01.03 19:57:40 5: [Heizung_Bad] setting Timer: Heizung_Bad_delayed 2017-01-03 19:57:45
2017.01.03 19:57:40 5: [Heizung_Bad] removing Timer: Heizung_Bad_delayed
2017.01.03 19:57:40 5: [Heizung_Bad] setting Timer: Heizung_Bad_delayed 2017-01-03 19:57:45
2017.01.03 19:57:40 3: Heating_Control_SetAllTemps() done on: Heizung_Bad Heizung_KiZ Heizung_WZ
Der komplette [Heizung_Bad]-Block kommt im 5-Sekunden-Takt...
Als Window-Sensor ist übrigens nur Fenster_Bad eingetragen...
Wenn ich im HC das {fhem("set $NAME thermostatSetpointSet $EVENT")} drinstehen habe läuft eigentlich alles so wie es soll.
wie hast du das gemacht?
Habe das {fhem("set $NAME thermostatSetpointSet $EVENT")} im Bad wieder durch ein {Heating_Control_SetTemp("Heizung_Bad")} ersetzt gehabt und er schaltet aber das SetAllTemps() kommt im Thermostat nicht an.
bitte den kompletten Code veröffentlichen
Das Heating Control:
Thermostat_Bad 8|04:44|22 8|06:30|18 8|16:30|21 8|22:00|18 7|05:55|22 7|09:00|21 7|22:00|18 {if (ReadingsVal("HeizungsAutomatik", "state", "") eq "on") {fhem("set $NAME thermostatSetpointSet $EVENT")}}
Der HC-Aktivator:
([HeizungsAutomatik] eq "on") ({Heating_Control_SetAllTemps()},set teleBot message Heizungsautomatik aktiv!) DOELSE (set Heizungsventile thermostatSetpointSet 17.0,set teleBot message Heizungsautomatik deaktiviert!)
Der Fensterkontakt:
([Fenster_Bad:alarm] eq "AccessControl: Window/Door is open") (set Thermostat_Bad thermostatSetpointSet 11) DOELSE ({Heating_Control_SetTemp("Heizung_Bad")})
Also das Problem, dass jetzt im 5-SekundenTakt immer wieder etwas geschaltet wird, liegt meiner Meinung nach an den DOIFs.
Ich kann dir aber nicht sagen was die wie machen.
Es handelt sich bei ihnen um so etwas wie Multinotify. Jedenfalls habe ich sie unter diesem Namen abgespeichert.
Mit anderen Worten - wenn irgendwie Ereignisse erzeugt werden, auf die die DOIFs reagieren, werden die THEN oder ELSE Zweige ausgeführt.
Man kann es sogar schaffen Zirkelbezüge(wie in Excel) zu erzeugen. Vielleicht ist das hier irgendwie der Fall.
Nagut, vielleicht nehme ich mich des Problems nochmal in einer ruhigeren Stunde an.
Momentan funktioniert ja alles genau so, wie es sein soll. ;)
In jedem Fall hast du mir sehr dabei geholfen nicht mit hunderten von ats arbeiten zu müssen. Danke!
Nun muss ich mir nur noch überlegen, wie ich meinen Urlaubs-dummy nutze um die Schaltzeiten entsprechend der vom Wochenende zu nutzen...