Nach FHEM Neustart gehen Lichter und Steckdosen an

Begonnen von peter_w, 05 August 2020, 22:09:00

Vorheriges Thema - Nächstes Thema

peter_w

Hallo zusammen,

in der vorletzten Nacht hat mich die Hausautomatisierung um 3:00 geweckt weil die meisten Lichter angingen und Rolläden gefahren wurden. Es gab wohl ein Problem was zum Neustart von FHM führte.
Das DOIF was ich in Verdacht hatte, habe ich via Notify gelöst und gehofft damit alles im Griff zu haben.
Leider schaltet ein Neustart noch immer etliche Lichter und Steckdosen an, aber zumindest nicht mehr die Rollläden.

Betroffen sind Lichter die über Homematic eingebunden sind (aber nicht alle) und Steckdosen die via MQTT eingebunden sind (ebenfalls nicht alle).
Ich habe vor dem Reboot das statefile an einem Beispiel geprüft, dort ist die Lampe aus. Nach dem Neustart wurde die Lampe angeschaltet.
Im Logfile finde ich für mich nichts verdächtiges:

2020.08.05 21:48:08.541 2: DbLog logdb - Last database write cycle due to shutdown ...
2020.08.05 21:48:08.545 2: DbLog logdb - no data for last database write cycle
2020.08.05 21:48:08.547 2: DbLog pwr_month_dblog1 - Last database write cycle due to shutdown ...
2020.08.05 21:48:08.550 1: Server shutdown delayed due to pwr_month_dblog1,logdb for max 10 sec
2020.08.05 21:48:08.571 2: DbLog pwr_month_dblog1 - no data for last database write cycle
2020.08.05 21:48:18.621 0: Server shutdown
2020.08.05 21:48:18.654 1: Shutdown executed
2020.08.05 21:48:20 3: [UtilsHourCounter] Init Done with Version 1.0.1.0 - 10.12.2014 (john)
2020.08.05 21:48:20.486 1: Including fhem.cfg
2020.08.05 21:48:24.808 2: eventTypes: loaded 14581 events from ./log/eventTypes.txt
2020.08.05 21:48:25.085 2: Switched SCC rfmode to MAX
2020.08.05 21:48:26.813 1: HMLAN_Parse: HMLAN1 new condition disconnected
2020.08.05 21:48:26.824 1: HMLAN_Parse: HMLAN1 new condition init
2020.08.05 21:48:28.168 2: FRITZBOX FritzBox: Define.254 Modul functionality limited because of missing perl modules: Net::Telnet
2020.08.05 21:48:29.017 0: HourCounter CN.IdiFensehBetriebsstunden Define.228 parameters: CN.IdiFensehBetriebsstunden HourCounter KGZR_PSwitch_Sw:on KGZR_PSwitch_Sw:off
2020.08.05 21:48:33.800 2: Switched SCC2 rfmode to WMBus_T
2020.08.05 21:48:43.683 1: Including ./log/fhem.save
2020.08.05 21:49:03.794 1: PERL WARNING: ^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE ._Clima$/ at ./FHEM/33_readingsGroup.pm line 131.
2020.08.05 21:49:03.969 1: usb create starting
2020.08.05 21:49:04.885 1: usb create end
2020.08.05 21:49:05.221 2: [Freezemon] myFreezemon: ready to watch out for delays greater than 1 second(s)
2020.08.05 21:49:05.223 0: Featurelevel: 6
2020.08.05 21:49:05.224 0: Server started with 592 defined entities (fhem.pl:22522/2020-08-02 perl:5.024001 os:linux user:fhem pid:15447)
2020.08.05 21:49:06.145 0: HourCounter CN.IdiFensehBetriebsstunden Run.598 first run done countsOverall:309
2020.08.05 21:49:11.200 1: HMLAN_Parse: HMLAN1 new condition ok
2020.08.05 21:49:12.321 2: [Freezemon] myFreezemon: possible freeze starting at 21:49:06, delay is 6.321 possibly caused by: no bad guy found :-(
2020.08.05 21:49:12.810 1: PERL WARNING: Use of uninitialized value in regexp compilation at ./FHEM/10_MQTT_DEVICE.pm line 251.
2020.08.05 21:49:12.811 1: PERL WARNING: Use of uninitialized value $1 in concatenation (.) or string at ./FHEM/10_MQTT_DEVICE.pm line 252.


Ich würde sagen die Lichter werden ca. zwischen diesen Zeile geschaltet

2020.08.05 21:49:11.200 1: HMLAN_Parse: HMLAN1 new condition ok
2020.08.05 21:49:12.321 2: [Freezemon] myFreezemon: possible freeze starting at 21:49:06, delay is 6.321 possibly caused by: no bad guy found :-(


hat Jemand eine Idee wie ich dem auf die Spur kommen kann ?

Hab meiner Frau versprochen dass wir in der Nacht nicht mehr geweckt werden  :-[

Danke
   Peter

Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O

amenomade

Ähnliches Problem wie hier: https://forum.fhem.de/index.php/topic,113036.msg1073708.html#msg1073708 ?

ZitatDeine Dinge funktionieren nicht (mehr) weil vor kurzem neue Events (cfgState) bei CUL_HM generiert werden, und deine notifies nicht selektiv genug sind.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Beta-User

+1, was den HomeMatic-Teil angeht.

Der MQTT-Teil der Sache dürfte eher was mit "retain" zu tun haben. Tippe auf einen externen Server? (dazu gab's vor einigen Wochen mal ein Thema in der english corner).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

BerndArnold

Hi,
das gleiche habe ich heute bei mir auch beobachtet beim Fhem-Neustart. Erst gingen die Lichter an, und kurz darauf wurden sie wieder abgeschaltet.

Im Log habe ich bei mir ein DOIF stehen, welches anscheinend von einem Button vom HM-PB-6-WM55 getriggert wird. Mein Code sieht so aus:

( [HM_SchluesselbrettSchalter_Btn05] =~ "^Short \\d_\\d+ .to vCCU.\$" )
    ({
        Log 1, "Trigger-DOIF (20 Min. Außenlichter an) von $DEVICE: $EVENTS";;
        fhem( "set Licht1 on-for-timer 1200" );;
        fhem( "set Licht2 on-for-timer 1200" );;
        ...
})
DOELSEIF ([+1] and $cmd == 1)
    ()
    ()
DOELSEIF ( [HM_SchluesselbrettSchalter_Btn06] =~ "^Short \\d_\\d+ .to vCCU.\$" )
    ()
DOELSEIF ([+1] and $cmd == 3)
    ({
        Log 1, "Trigger-DOIF (20 Min. Außenlichter) von $DEVICE: $EVENTS";;
        fhem( "set Licht1 off" );;
        fhem( "set Licht2 off" );;
        ...
})


Ich habe die Definition jetzt hier gekürzt. Im Log sehe ich:

2020.08.05 20:15:17 1: Trigger-DOIF (20 Min. Au<C3><9F>enlichter an) von HM_SchluesselbrettSchalter_Btn05: cfgState: ok
2020.08.05 20:15:17 3: CUL_HM set Licht1 on-for-timer 1200
...
2020.08.05 20:15:25 1: Trigger-DOIF (20 Min. Au<C3><9F>enlichter) von : timer_2
2020.08.05 20:15:25 3: CUL_HM set Licht1 off
2020.08.05 20:15:25 3: CUL_HM set Licht2 off
...


Habe allerdings noch nicht genauer reingeschaut, was da los ist...

Viele Grüße
Bernd
FHEM auf Raspberry Pi mit Arch Linux
2x HM-LAN, 1x CUL
HomeMatic, FS20, Dreambox, Fritzbox
MQTT zur Kommunikation mit zweiter und dritter FHEM-Instanz

amenomade

Und er sagt dir sogar, dass tatsächlich die neue cfgState Events triggern.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

peter_w

So, gefunden und erledigt ! Vielen Dank erst mal für die Tips.

Ich liebe es ja mit FHEM Dinge zu tun, aber ich mache das mit einem ungesunden Halbwissen. Geht in 90% der Fälle gut, aber bei Änderungen an FHEM kann dann schon mal schief gehen wie in diesem Fall.
Für die, die ins gleiche Problem laufen:

Ich hatte zwei DOIFs die wohl dafür verantwortlich waren.
Eine Eq3 Fernbedienung mit 10 Tasten habe ich mit FHEM verschiedene Aufgaben gegeben. Da EQ3 Geräte und verschiedene MQTT Geräte beteiligt waren, musste ich alles zu Fuß machen.
Was bisher funktioniert hatte war:


define DoWZ_FBG12 DOIF ([WZ_FBG12_Btn_01] ) \
      (set WZ_RegalSonoff toggle)         ## Wohnzimmer Regal links\
DOELSEIF\
  ( [WZ_FBG12_Btn_02])\
      (set WZ_FensterSonoff toggle)       ## Wohnzmmer Fenster\
DOELSEIF\
  ( [WZ_FBG12_Btn_03])\
      (set TR_Steckdose_Schalter toggle) ## Deko laterne außen  \
DOELSEIF\
  ( [WZ_FBG12_Btn_04])\
      (set TR_Schalter2_Sw_02 toggle) ## Dekokranz außen\
DOELSEIF\
  ( [WZ_FBG12_Btn_05])\
      (set EZ_SW_DK1 toggle) ## Deko Fensterbank Esszimmer\
DOELSEIF\
  ( [WZ_FBG12_Btn_06])\
      (set EZ_KrippeSonoff toggle) ## Krippe\
DOELSEIF\
  ( [WZ_FBG12_Btn_07])\
      (set WZ_RegalSonoff on,set WZ_FensterSonoff on,set TR_Steckdose_Schalter on,set TR_Schalter2_Sw_02 on,set EZ_SW_DK1 on,set WZ_TannenbaumSonoff on,set EZ_KrippeSonoff on, set WZ_Regal_LedStreifen on) ## alles an\
DOELSEIF\
  ( [WZ_FBG12_Btn_08])\
      (set WZ_RegalSonoff off,set WZ_FensterSonoff off,set TR_Steckdose_Schalter off,set TR_Schalter2_Sw_02 off,set EZ_SW_DK1 off,set WZ_TannenbaumSonoff off,set EZ_KrippeSonoff off,set WZ_Regal_LedStreifen OFF) ## alles aus\
DOELSEIF\
  ( [WZ_FBG12_Btn_09])\
      (set .*_Scene scene TV) \
DOELSEIF\
  ( [WZ_FBG12_Btn_10])\
      (set .*_Scene scene goto_bed)   \
\
\

attr DoWZ_FBG12 cmdState Wohnzimmer Regal|Wohnzimmer Fenster|Draußen Laterne|Draußen Kranz|Fenster Esszimmer|Krippe|All on|All off
attr DoWZ_FBG12 do always


Hat in der Vergangenheit funktioniert.
Da ich den Verdacht hatte, dass nach dem Hochlauf das DOIF vielleicht einen falschen Zustand erwischt hätte, hab ich das in ein Notify umgewandelt.

Die Umwandlung in das Notify war aber auch falsch/unsauber, leider habe ich davon keine Kopie mehr.

Das aktuelle Notify funktioniert und wird auch nicht nach einem Neustart ausgelöst und ich stelle es mal hier als Beispiel als  Raw definition rein:

defmod NtfyWZ_FBG12 notify WZ_FBG12:WZ_FBG12_Btn_(0|1)[0-9].Short {\
if ($EVENT eq "WZ_FBG12_Btn_01 Short") { fhem("set WZ_RegalSonoff toggle") } \
elsif ($EVENT eq "WZ_FBG12_Btn_02 Short") {fhem("set WZ_FensterSonoff toggle")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_03 Short") {fhem("set TR_Steckdose_Schalter toggle")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_04 Short") {fhem("set TR_Schalter2_Sw_02 toggle")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_05 Short") {fhem("set EZ_SW_DK1 toggle")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_06 Short") {fhem("set EZ_KrippeSonoff toggle")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_07 Short") {fhem("set WZ_RegalSonoff on;;set WZ_FensterSonoff on;;set TR_Steckdose_Schalter on;;set TR_Schalter2_Sw_02 on;;set EZ_SW_DK1 on;;set WZ_TannenbaumSonoff on;;set EZ_KrippeSonoff on;; set WZ_Regal_LedStreifen on")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_08 Short") {fhem("set WZ_RegalSonoff off;;set WZ_FensterSonoff off;;set TR_Steckdose_Schalter off;;set TR_Schalter2_Sw_02 off;;set EZ_SW_DK1 off;;set WZ_TannenbaumSonoff off;;set EZ_KrippeSonoff off;;set WZ_Regal_LedStreifen OFF")}\
elsif ($EVENT eq "WZ_FBG12_Btn_09 Short") {fhem("set .*_Scene scene TV")}\
  elsif ($EVENT eq "WZ_FBG12_Btn_10 Short") {fhem("set .*_Scene scene goto_bed")}\
}



Das Device NtfyWZ_FBG12 enthält die definition für 12 Tasten (sind das dann auch Devices oder wie nennt man die ????)

Device:
defmod WZ_FBG12 CUL_HM
attr WZ_FBG12 .mId 0029
attr WZ_FBG12 IODev HMLAN1
attr WZ_FBG12 IOgrp vccu:HMLAN1
attr WZ_FBG12 autoReadReg 4_reqStatus
attr WZ_FBG12 expert defReg,rawReg
attr WZ_FBG12 firmware 1.3
attr WZ_FBG12 model HM-RC-12
attr WZ_FBG12 room 50_Küche,MQTT
attr WZ_FBG12 subType remote
attr WZ_FBG12 webCmd getConfig:clear msgEvents


Und eine Taste als Beispiel:
defmod WZ_FBG12_Btn_01 CUL_HM
attr WZ_FBG12_Btn_01 model HM-RC-12
attr WZ_FBG12_Btn_01 peerIDs peerUnread


Die events der Tasten schauen wie folgt aus:   CUL_HM WZ_FBG12 WZ_FBG12_Btn_02 Short

Zurück zum Notify:

"WZ_FBG12:WZ_FBG12_Btn_(0|1)[0-9].Short" liefert mir alle Ereignisse der Tasten 00 bis 19 (ich habe aber nur 01 bis 12) für das Gerät WZ_FBG12
(0|1) staht da für "0" oder "1" und
[0-9] steht für die Ziffern 0 bis 9

wenn ich noch das lange Drücken unterstützen will, kann ich das so ausdrücken:
"WZ_FBG12:WZ_FBG12_Btn_(0|1)[0-9].(Short|Long)"
Alles was nicht dazu passt, wird verworfen. Hier ein Beispiel:  der Event, der den Batteriestatus verteilt "CUL_HM WZ_FBG12 battery: ok" würde an dieser Stelle schon ignoriert

Sollte die obige Abfrage passen, gilt es nun noch aufzudröseln was passieren soll wenn ein Taster gedrückt wird.
Die Aktionen sind innerhalb {} beschrieben. Man kann mit  $TYPE $Name $EVENT auf das Event zugreifen. In diesem Fall steht dann:
$TYPE = "CUL_HM"
$NAME = "WZ_FBG12"
$EVENT = "WZ_FBG12_Btn_02 Short"  als Beispiel die 2. Taste kurz gedrückt.

In einer "if elseif" wird dann geschaut was sich genau ereignet hat und passend die Aktion ausgeführt:

Hier die erste Zeile:
if ($EVENT eq "WZ_FBG12_Btn_01 Short") { fhem("set WZ_RegalSonoff toggle") }

Wenn das Notify also zuschlägt schaut  if ($EVENT eq "WZ_FBG12_Btn_01 Short") nach ob der Event "CUL_HM WZ_FBG12 WZ_FBG12_Btn_01 Short" ist. Wenn ja wird { fhem("set WZ_RegalSonoff toggle") } ausgeführt.
Sprich der Schalter wird dann umgeschaltet. Sollte es aber ein  Event vom 2. Taster sein, dann würde danach in der 2. Zeile geschaut: elsif ($EVENT eq "WZ_FBG12_Btn_02 Short") {fhem("set WZ_FensterSonoff toggle")}.
Das geht jetzt so lange bis alle Tasten die belegt sind, geprüft sind.

So, ich hoffe das habe ich jetzt sauber implementiert und stolpere beim nächsten Update nicht wieder darüber.
Sollten die Experten etwas sehen was nicht sauber ist, bitte aufschreien.
Ansonsten könnte es ein nettes Beispiel sein.

Gruß Peter




Release  : 5.8
Raspberry Pi 3
CUL V 1.63 CSM868 HomeMatic (SCC)
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-SCo,HM-WDS10-TH-O