Hallo zusammen,
ich habe das Update auf 5.7 durchgeführt und diverse Anpassungen bzgl. Verwendung von @ / % gemacht. Folgende zwei Probleme bekomme ich allerdings nicht gelöst, hat evtl. jemand einen Tipp für mich:
1.) Notify, das einen Event an zwei Schalter weiterleiten soll läuft nach der Anpassung bei "off" auf einen Fehler:
- Bisher: define wz_Alles_N notify Alles set Stehlampe %;;set Hifi %;;setstate Alles -
- Neu: define wz_Alles_N notify Alles set Stehlampe $EVENT;;set Hifi $EVENT;;setstate Alles -
Problem bei Neu:
- On auf dem FS20-Schalter "Alles" funktioniert problemlos ("Hifi" und " Stehlampe" werden eingeschaltet)
- Off führt zum Fehler "wz_Alles_N return value: Unknown argument $EVENT, choose one of off off-for-timer on on-for-timer reset timer toggle on-till on-till-overnight blink off-till-overnight intervals off-till" und nur Stehlampe wird ausgeschaltet.
- Wenn ich im define Hifi und Stehlampe vertausche dann wird nur Hifi ausgeschaltet und der entsprechende Fehler kommt.
2.) Fehler bei "set ... on-for-timer" im automatisch angelegten at "..._timer"
- Code: define ZirkulationspumpeMorgensOn_A at *05:30:00 { fhem("set Heizungsschalter_8_ZP on-for-timer 320") if(!$we) }
- Fehler im Log: "Heizungsschalter_8_ZP_timer: unknown attribute Heizung_Betriebsart. Type 'attr Heizungsschalter_8_ZP_timer ?' for a detailed list."
- Heizung_Betriebsart ist ein dummy, der an ganz anderer Stelle für meine Viessmann-Anbindung einen Zustand zwischenspeichert. Wird auch eingesetzt als Ziel-Device in HCS-Heizungssteuerung, außerdem ist ein watchdog darauf definiert.
- Der Schaltbefehl auf "Heizungsschalter_8_ZP" wird korrekt ausgeführt.
- Ein "at" mit Namen "Heizungsschalter_8_ZP_timer" wurde angelegt (vgl. Screenshot).
Viele Grüße,
Carsten
Bitte die komplette Definition aller betroffenen Geraete hier anhaengen.
Gerne und danke für die schnelle Nachfrage:
Zu 1.):
define wz_Alles_N notify Alles set Stehlampe $EVENT;;set Hifi $EVENT;;setstate Alles -
define Alles FS20 <mein 4-stelliger Housecode> 03
attr Alles IODev CUL
attr Alles model fs20st
attr Alles room Wohnzimmer
define Stehlampe FS20 <mein 4-stelliger Housecode> 00
attr Stehlampe IODev CUL
attr Stehlampe fp_Dachgeschoss 319,58,1,
attr Stehlampe fp_Kachel 307,290,0,
attr Stehlampe model fs20st
attr Stehlampe room Wohnzimmer
#attr Stehlampe eventMap on:an off:aus
define Hifi FS20 <mein 4-stelliger Housecode> 01
attr Hifi IODev CUL
attr Hifi fp_Dachgeschoss 225,184,1,
attr Hifi fp_Kachel 400,261,0,
attr Hifi model fs20st
attr Hifi room Wohnzimmer
Zu 2.)
Ausgelöst durch:
define ZirkulationspumpeMorgensOn_A at *05:30:00 { fhem("set Heizungsschalter_8_ZP on-for-timer 320") if(!$we) }
Definitionen:
define Heizungsschalter_8_ZP FS20 <mein 4-stelliger Housecode> 66
attr Heizungsschalter_8_ZP IODev CUL
attr Heizungsschalter_8_ZP comment Zirkulationspumpe_WW
attr Heizungsschalter_8_ZP follow-on-for-timer 320
attr Heizungsschalter_8_ZP fp_Kachel 165,450,0,
attr Heizungsschalter_8_ZP fp_Obergeschoss 328,352,1,Zirkulationspumpe
attr Heizungsschalter_8_ZP model fs20sm8
attr Heizungsschalter_8_ZP room Heizung
#-----------------------------------------------------------------------------
# Heizung_*
# Speichert Betriebsmodus der Heizung
#
# Heizung_Betriebsart:
# Heizung_Wasser = Heizung und Warmwasser
# Wasser = Nur Warmwasser
#
# Heizung_Partymodus:
# Normal = Normaler Betrieb
# Party = Partymodus (in FHEM um 24h zurückgesetzt ohne weiteres Kommando
#-----------------------------------------------------------------------------
define Heizung_Betriebsart dummy
attr Heizung_Betriebsart room Heizung
attr Heizung_Betriebsart setList Heizung_Wasser Wasser
attr Heizung_Betriebsart webCmd Heizung_Wasser:Wasser
define Heizung_Umwaelzpumpensteuerung HCS Heizung_Betriebsart
attr Heizung_Umwaelzpumpensteuerung deviceCmdOff Wasser
attr Heizung_Umwaelzpumpensteuerung deviceCmdOn Heizung_Wasser
attr Heizung_Umwaelzpumpensteuerung event-on-change-reading state,devicestate,eco,overdrive
attr Heizung_Umwaelzpumpensteuerung idleperiod 10
attr Heizung_Umwaelzpumpensteuerung interval 1
#attr Heizung_Umwaelzpumpensteuerung loglevel 4
attr Heizung_Umwaelzpumpensteuerung verbose 2
attr Heizung_Umwaelzpumpensteuerung mode valve
attr Heizung_Umwaelzpumpensteuerung room Heizung
attr Heizung_Umwaelzpumpensteuerung thermostatThresholdOff 0.5
attr Heizung_Umwaelzpumpensteuerung thermostatThresholdOn 0.5
attr Heizung_Umwaelzpumpensteuerung valveThresholdOff 5
attr Heizung_Umwaelzpumpensteuerung valveThresholdOn 12
#-----------------------------------------------------------------------------
# wd_HeizungBetriebsartHzgWW
#
# Überwacht, ob der Befehl, die Heizung auf Heizbetrieb zu schalten ankommt
#
# Nur 6 Minuten warten, FHEM-HZG alle 5 Minuten Status liefert
#
# Ggf. den Befehl nochmal absetzen (Übertragsungprobleme beim Senden?)
# Danach 2x Trigger, damit wieder zuerst in Status defined und dann aktiviert
# Jedoch nur, wenn die Betriebsart noch gewünscht ist
#-----------------------------------------------------------------------------
define wd_HeizungBetriebsartHzgWW watchdog Heizung_Betriebsart:Heizung_Wasser 00:06 Vies_Heizung:H.*WW {\
if (Value("Heizung_Betriebsart") eq "Heizung_Wasser") {\
Log 3, '...wd_HeizungBetriebsart: Befehl HzgWW erneut absetzen';;\
fhem("set Heizung_Betriebsart Heizung_Wasser");;\
fhem("trigger wd_HeizungBetriebsartHzgWW .");;\
fhem("trigger wd_HeizungBetriebsartHzgWW .")\
}\
else {\
Log 3, '...wd_HeizungBetriebsartHzgWW: Befehl HzgWW nicht mehr nötig';;\
fhem("trigger wd_HeizungBetriebsartHzgWW .")\
};;\
}
define wd_HeizungBetriebsartWW watchdog Heizung_Betriebsart:Wasser 00:06 Vies_Heizung:WW {\
if (Value("Heizung_Betriebsart") eq "Wasser") {\
Log 3, '...wd_HeizungBetriebsart: Befehl WW erneut absetzen';;\
fhem("set Heizung_Betriebsart Wasser");;\
fhem("trigger wd_HeizungBetriebsartWW .");;\
fhem("trigger wd_HeizungBetriebsartWW .")\
}\
else {\
Log 3, '...wd_HeizungBetriebsartWW: Befehl WW nicht mehr nötig';;\
fhem("trigger wd_HeizungBetriebsartHzgWW .")\
};;\
}
1. Das kann nicht alles gewesen sein: wenn ich es nachstelle, dann sehe ich keine Probleme:
fhem> trigger Alles on
fhem> 2015-11-19 09:08:02 FS20 Stehlampe on
2015-11-19 09:08:02 FS20 Hifi on
2015-11-19 09:08:02 FS20 Alles on
trigger Alles off
fhem> 2015-11-19 09:08:10 FS20 Stehlampe off
2015-11-19 09:08:10 FS20 Hifi off
2015-11-19 09:08:10 FS20 Alles off
set Alles on
fhem> 2015-11-19 09:08:14 FS20 Stehlampe on
2015-11-19 09:08:14 FS20 Hifi on
2015-11-19 09:08:14 FS20 Alles on
set Alles off
fhem> 2015-11-19 09:08:17 FS20 Stehlampe off
2015-11-19 09:08:17 FS20 Hifi off
2015-11-19 09:08:17 FS20 Alles off
2. Hier fehlt auch was:
fhem> info timer
fhem> set Heizungsschalter_8_ZP on-for-timer 320
fhem> 2015-11-19 09:15:30 at Heizungsschalter_8_ZP_timer Next: 09:20:50
2015-11-19 09:15:30 Global global DEFINED Heizungsschalter_8_ZP_timer
2015-11-19 09:15:30 FS20 Heizungsschalter_8_ZP on-for-timer 320
fhem> list Heizungsschalter_8_ZP_timer
Internals:
CFGFN
COMMAND {readingsSingleUpdate($defs{'Heizungsschalter_8_ZP'},'state','off', 1); undef}
DEF +00:05:20 {readingsSingleUpdate($defs{'Heizungsschalter_8_ZP'},'state','off', 1); undef}
NAME Heizungsschalter_8_ZP_timer
NR 48
NTM 09:20:50
PERIODIC no
RELATIVE yes
STATE Next: 09:20:50
TIMESPEC 00:05:20
TRIGGERTIME 1447921250.00323
TRIGGERTIME_FMT 2015-11-19 09:20:50
TYPE at
VOLATILE 1
Readings:
2015-11-19 09:15:30 state Next: 09:20:50
Attributes:
Im FHEM-Log ist in beiden Faellen kein Fehler zu sehen.
Als weitere debugging Methode empfehle ich in einem minimalen fhem.cfg zunaechst
define CUL CUL none 1234
und danach einzeln deine Definitionen einzufuegen (evtl. attr.*fp_.* vorher entfernen), und selbst zu testen. Sobald du auf diesem Wege was reproduzieren kannst, kann ich versuchen zu helfen.
Nochmal zu 1.)
Ich habe die Demo-Config um die Teile erweitert und konnte den Fehler bisher noch nicht nachvollziehen. Folgende Beobachtung aber noch bei meiner cfg, die ich um ein notify ohne jeden Bezug zu einem anderen Device ergänzt habe.
Kann es sein, dass "setstate" irgendwie ein Problem mit $EVENT verursachen kann?
a.) Ich habe ein neues notify mit DEF "A1 {Log 1, "1: "."$EVENT"};{Log 1, "2: "."$EVENT"};setstate A1 -" angelegt.
(Ergänzung: neben dem Notify habe ich noch define A1 FS20 <Hauscode> 03 hinzugefügt)
trigger A1 on liefert im Log:
2015.11.19 10:19:50 1: 1: on
2015.11.19 10:19:50 3: wz_Alles_N1 return value: Global symbol "$EVENT" requires explicit package name at (eval 1749) line 1.
b.) Ich habe setstate weg gelassen (DEF="A1 {Log 1, "1: "."$EVENT"};{Log 1, "2: "."$EVENT"}")
trigger A1 on liefert diesmal richtig im Log:
2015.11.19 10:21:18 1: 1: on
2015.11.19 10:21:18 1: 2: on
c.) Fall a.) nochmal mit Verbose=5 liefert im Log
2015.11.19 10:26:38 5: Cmd: >trigger A1 on<
2015.11.19 10:26:38 5: Triggering A1 (1 changes)
2015.11.19 10:26:38 5: Notify loop for A1 on
2015.11.19 10:26:38 5: Triggering wz_Alles_N1
2015.11.19 10:26:38 4: wz_Alles_N1 exec {Log 1, "1: "."$EVENT"};{Log 1, "2: "."$EVENT"};setstate A1 -
2015.11.19 10:26:38 5: Cmd: >{Log 1, "1: "."$EVENT"}<
2015.11.19 10:26:38 1: 1: on
2015.11.19 10:26:38 5: Cmd: >{Log 1, "2: "."$EVENT"}<
2015.11.19 10:26:38 5: Cmd: >setstate A1 -<
2015.11.19 10:26:38 3: wz_Alles_N1 return value: Global symbol "$EVENT" requires explicit package name at (eval 4868) line 1.
d.) Zur Sicherheit habe ich das "-" beim setstate durch "normalen" Text ersetzt aber gleiches Resultat.
ZitatKann es sein, dass "setstate" irgendwie ein Problem mit $EVENT verursachen kann?
Ich beschreibe das mal genauer: Wenn man in einer Befehlskette nach einem Perl Ausdruck was anderes folgt (noch ein Perl-Ausdruck, FHEM-Befehle, Shell-Befehle), dann ist $EVENT nur in dem erste Perl-Ausdruck gültig. Lösung: Alles in einem Perl-Ausdruck packen.
Ich habe fhem.pl jetzt modifiziert, damit auch dieser Fall funktioniert, allerdigs befuerworte ich solche Konstrukte weiterhin nicht.
Danke!
define wz_Alles_N notify Alles { \
fhem("set Stehlampe $EVENT");; \
fhem("set Hifi $EVENT");; \
fhem("setstate Alles -");;\
}
funktioniert. Ich werde mal durchforsten, wo ich so was noch habe und bereinigen.
In der commandref unter notify steht folgendes Beispiel:
define b3lampV3 notify btn3 set lamp1 $EVENT;;set lamp2 $EVENT
Wäre vielleicht gut wenn das noch jemand anpassen könnte.
Warum? Das hatte nie ein Problem. Nur sowas wie {};;{}
Ich hatte übersehen, dass ich in meinem zweiten Beispiel um die "Log"-Einträge jeweils eine Klammer gesetzt und somit das Konstrukt verändert hatte.
Aber mein ursprüngliches Problem konnte durch die Umstellung von mehreren FHEM-Befehlen auf einen Perl-Block auch behoben werden, insofern hat mir der Hinweis geholfen.
Konnte das allerdings auf einer Demo-Umgebung nicht nachvollziehen, so dass wohl doch noch irgendetwas anderes aus meiner Konfiguration eine Rolle spielt.