Hallo Fhem-Gemeinde,
ich bin etwas ratlos. Ich habe folgende Konfig mit Homematic:
define st_1 CUL_HM 1BF264
attr st_1 devInfo 010100
attr st_1 firmware 1.9
attr st_1 hmClass receiver
attr st_1 model unknown
attr st_1 protLastRcv 2013-03-02 17:53:38
attr st_1 protResndCnt 2
attr st_1 protResndLast 2013-02-26 18:50:37
attr st_1 protSndCnt 44
attr st_1 protSndLast 2013-03-02 17:53:38
attr st_1 room Steckdose1
attr st_1 serialNr JEQ0462794
attr st_1 subType switch
define FileLog_st_1 FileLog ./log/st_1-%Y.log st_1
attr FileLog_st_1 logtype text
attr FileLog_st_1 room CUL_HM
define fen_1 CUL_HM 1E570B
attr fen_1 actCycle 028:00
attr fen_1 actStatus alive
attr fen_1 devInfo 810101
attr fen_1 firmware 2.0
attr fen_1 hmClass sender
attr fen_1 model HM-SEC-SC
attr fen_1 protLastRcv 2013-04-01 10:41:58
attr fen_1 protSndCnt 2
attr fen_1 protSndLast 2013-04-01 10:39:13
attr fen_1 room CUL_HM
attr fen_1 serialNr JEQ0715515
attr fen_1 subType threeStateSensor
define FileLog_fen_1 FileLog ./log/fen_1-%Y.log fen_1
attr FileLog_fen_1 logtype text
attr FileLog_fen_1 room CUL_HM
define st_1_n notify st_1 {if ("%" eq "off") {Log 1, " Lampe aus % "} else {Log 1, " % Lampe ein %"}}
define fen_1_n notify fen_1 {if ("%" eq "open") {fhem "set st_1 on";; Log 1, "Fenster %";;} else {fhem "set st_1 off";; Log 1, "Fenster %";;}}
Wenn ich jetzt den Fentsterkontakt öffne wird die Steckdose/Lampe nicht geschaltet bzw. manchmal kurz ein- und dann wieder ausgeschaltet und das sehe ich im Log:
Use of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
2013.04.01 14:43:01 3: CUL_HM set st_1 on
2013.04.01 14:43:02 1: on Lampe ein on
2013.04.01 14:43:02 1: Fenster open
2013.04.01 14:43:02 3: CUL_HM set st_1 off
2013.04.01 14:43:02 1: Lampe aus off
2013.04.01 14:43:02 1: Fenster contact: open (to CUL_0)
2013.04.01 14:43:02 1: deviceMsg: off (to CUL_0) Lampe ein deviceMsg: off (to CUL_0)
2013.04.01 14:43:02 1: Lampe aus off
2013.04.01 14:43:02 1: deviceMsg: off (to CUL_0) Lampe ein deviceMsg: off (to CUL_0)
2013.04.01 14:43:02 1: Lampe aus off
Use of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
2013.04.01 14:44:02 3: CUL_HM set st_1 off
2013.04.01 14:44:02 1: Lampe aus off
2013.04.01 14:44:02 1: Fenster closed
2013.04.01 14:44:02 3: CUL_HM set st_1 off
2013.04.01 14:44:02 1: Lampe aus off
2013.04.01 14:44:02 1: Fenster contact: closed (to CUL_0)
2013.04.01 14:44:03 1: deviceMsg: off (to CUL_0) Lampe ein deviceMsg: off (to CUL_0)
2013.04.01 14:44:03 1: Lampe aus off
2013.04.01 14:44:03 1: deviceMsg: off (to CUL_0) Lampe ein deviceMsg: off (to CUL_0)
2013.04.01 14:44:03 1: Lampe aus off
Hat von Euch jemand eine Idee wie der Fehler behoben werden kann?
Das Logfile sagt dir:
ZitatUse of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
also ein Fehler in der Datei 10_CUL_HM.pm, Zeile 849.
Falls du selbst dort nichts geändert hast, kann es hefen die Datei neu zu installieren.
Hm.
Ich würde erstmal gerne verstehen, was das hier
define st_1_n notify st_1 {if ("%" eq "off") {Log 1, " Lampe aus % "} else {Log 1, " % Lampe ein %"}}
define fen_1_n notify fen_1 {if ("%" eq "open") {fhem "set st_1 on";; Log 1, "Fenster %";;} else {fhem "set st_1 off";; Log 1, "Fenster %";;}}
eigentlich alles machen soll.
Dieser Teil:
define st_1_n notify st_1 {if ("%" eq "off") {Log 1, " Lampe aus % "} else {Log 1, " % Lampe ein %"}}
dient offenbar nur dazu,, im Logfile komische Einträge zu machen (komisch, weil ich nicht verstehe, was der Sinn des Logfileintrags
Lampe aus % sein soll, und erst recht
% Lampe ein %. Das fürt zum Logfileeintrag "Lampe aus off" und "on Lampe ein on"... wozu? Aber egal, tut hier nix zur Sache.) D.H. den Teil würde ich erstmal weglassen, um die Anzhal der Logfileinträge zu verringerm, macht vielleicht die Analyse einfacher.
Bleibt dies:
define fen_1_n notify fen_1 {if ("%" eq "open") {fhem "set st_1 on";; Log 1, "Fenster %";;} else {fhem "set st_1 off";; Log 1, "Fenster %";;}}
Da sind einige Syntaxfehler drin. Zuerstmal müsste das meiner Aufassung nach heissen:
define fen_1_n notify fen_1 {if ("%" eq "open") {fhem ("set st_1 on ;; Log 1,""Fenster %"" ")} else {fhem ("set st_1 off ;; Log 1,""Fenster %"" ")}}
(Beim escapen der Anführugnsstriche bei
Log 1,""Fenster %"" bin ich mir nicht ganz sicher)
(mindestens) zum Testen würde ich ausserdem auch hier das Logging auch erstmal weglassen und dieses versuchen:
define fen_1_n notify fen_1 {if ("%" eq "open") {fhem ("set st_1 on")} else {fhem ("set st_1 off")}}
Da diese Events sowieso alle Logfileeinträge generieren, kann man sehen was passiert oder nicht. Wenn du die ganzen zusätzlichen Logeinträge eirklich brauchst kannst du sie später wieder dazu tun, aber erstmal probier bitte obiges und berichte vom Erfolg.
Ich denke, dass mit der korrekten Syntax auch der Fehler
ZitatUse of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
weg sein könnte.
Hallo Hugo,
im Wiki gibt es gerade auch zu deinem Thema so viel zu stöbern:
Link (//www.fhemwiki.de/wiki/Funktionsbeschreibung_zu_notify)
Gruß
Thomas
Zuerstmal vielen Dank für Antworten.
Diverse Einträge waren nur als zusätzliche Einträge ins Logfile gedacht.
Leider schein das Problem nicht an der Stelle zu sein "define fen_1_n notify fen_1 {if ("%" eq "open") {fhem "set st_1 on"} else {fhem "set st_1 off"}}" sondern der HM-SEC-SC
Wenn ich mit "delete fen_1_n" diesen Eintrag lösche und dann den Fensterkontakt öffne oder schließe erhalte ich die Fehlermeldung:
Use of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849
In der 10_CUL_HM.pm steht dort folgendes, dass ich aber nicht deuten kann.
elsif($st eq "threeStateSensor") { #####################################
#todo: check for correct msgType, see below
#Event: msgType=0x41 p(..)(..)(..) channel , unknown, state
#Info Level: msgType=0x10 p(..)(..)(..)(..) subty=06, chn, state,err (3bit)
#AckStatus: msgType=0x02 p(..)(..)(..)(..) subty=01, chn, state,err (3bit)
if($p =~ m/^(..)(..)(..)(..)?$/) {
my ($b12, $b34, $state, $err) = ($1, $2, $3, hex($4));
my $chn = ($msgType eq "41")?$b12:$b34;
# Multi-channel device: Switch to channel hash
$shash = $modules{CUL_HM}{defptr}{"$src$chn"}
if($modules{CUL_HM}{defptr}{"$src$chn"});
Anbei die Parametereinstellungen vom HM-SEC-SC.
Ich hoffe Ihr habt noch ein paar gute Ideen.
Besten Dank schon mal im voraus.
Kapier ich nicht. Ich bin also leider raus.
Hi hugo,
Zitat von: hugo schrieb am Di, 02 April 2013 21:08... "define fen_1_n notify fen_1 {if ("%" eq "open")...
*Was* soll hier anstelle von "%" Platz finden / stehen?????
Was soll dieser Befehl / Konstrukt bewirken?
Und der HM-SEC-SC mag ja für einiges "verantwortlich" sein, aber bestimmt nicht für *das*(?!).
Erkläre dich erst einmal auf eine andere Art und Weise. So komme *ich* nicht weiter.
Gruß
Thomas
Hallo Thomas,
vielen Dank für deine Bemühungen.
Also ich habe den HM-SEC-SC gepairt. Einträge siehe Screenshot vom letzten Post.
Ich habe keine weiteren Einträge in der fhem.cfg. (alles gelöscht)
Wenn ich jetzt den HM-SEC-SC "öffne" dann erhalte ich dise Meldung in dem Logfile "fhem.log":
Use of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
Beim schließen wieder die Gleiche.
Use of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
Das Logfile des HM-SEC-SC sieht so aus.
2013-04-02_22:54:54 fen_1 open
2013-04-02_22:54:54 fen_1 contact: open (to ActionDetector)
2013-04-02_22:54:56 fen_1 closed
2013-04-02_22:54:56 fen_1 contact: closed (to ActionDetector)
Bevor ich also hier meine Spielchen weiter mit notify treibe, muss ich aber erst den Fehler aus der fhem.log beheben.
Hier die Ausgabe von "list fen_1"
Internals:
CUL_0_MSGCNT 10
CUL_0_RAWMSG A0C0F84411E570B000000010E00F1
CUL_0_RSSI -81.5
CUL_0_TIME 2013-04-02 22:54:56
DEF 1E570B
IODev CUL_0
LASTIODev CUL_0
MSGCNT 10
NAME fen_1
NR 38
STATE closed
TYPE CUL_HM
lastMsg No:0F - t:41 s:1E570B d:000000 010E00
Readings:
2013-04-01 10:39:13 CommandAccepted yes
2013-04-02 17:34:34 alive yes
2013-04-02 17:34:21 battery ok
2013-04-02 22:54:56 contact closed (to ActionDetector)
2013-04-02 17:34:34 cover closed
2013-04-02 22:54:56 state closed
cmdStack:
++A001F110341E570B00040000000000
++A001F110341E570B01040000000001
++A001F110341E570B0103
++A001F110341E570B00040000000000
++A001F110341E570B01040000000001
++A001F110341E570B0103
Helper:
getCfgList all
getCfgListNo 4
mId 002F
rxType 12
Respwait:
Attributes:
actCycle 028:00
actStatus alive
devInfo 810101
firmware 2.0
hmClass sender
model HM-SEC-SC
protCmdPend 6 CMDs pending
protLastRcv 2013-04-02 22:54:56
protSndCnt 2
protSndLast 2013-04-01 10:39:13
room CUL_HM
serialNr JEQ0715515
subType threeStateSensor
Hat noch jemand eine Idee oder an wen kann ich mich wenden?
Hallo Hugo,
teste mal das hier, es sollte tun was Du willst ( wenn Fenster auf st_1 an <> wenn Fenster zu st_1 aus )
define fen_1_n notify fen_1 {if("%" =~ m/contact.*open/) {fhem "set st_1 on"} elsif ("%" =~ m/contact.*closed/){fhem "set st_1 off"}}
PS. st_1 sollte definiert sein
Zitathugo schrieb am Di, 02 April 2013 21:08
... "define fen_1_n notify fen_1 {if ("%" eq "open")...
*Was* soll hier anstelle von "%" Platz finden / stehen?????
Naja, % wird ersetzt durch den Wert, der das notify ausgelöst hat. Das ist meiner Meinung nach okay so und solche Konstrukte habe ich auch im Einsatz. Oder was meinst du?
Und wenn man da einen Fehler macht, also der Wert nie "open" ist, sonder z.b. "Open", dann geht eben nichts, nur eine Fehlermeldung sollte nicht kommen. Das ist ja das Komische.
D.H.:
define fen_1_n notify fen_1 {if ("%" eq "open") {fhem ("set st_1 on")} else {fhem ("set st_1 off")}}
sollte bei einem Event des Fensterkontakts zumindest ein set st_1 off liefern, selbst wenn alles andere falsch ist.
Daher glaube ich auch offen gestanden nicht, dass Andreas' Tip
define fen_1_n notify fen_1 {if("%" =~ m/contact.*open/) {fhem "set st_1 on"} elsif ("%" =~ m/contact.*closed/){fhem "set st_1 off"}}
Verbesserung bringt. (im übrigen fehlen da Klammern meiner Meinung nach)
Darüber hinaus setze den Kontakt selber ein und kann daher sagen, dass er "open" und "closed" liefert und nicht "contact.*irgendwas". Obwohl es natürlich sein kann, das (weil das Teil ja auch Batteriemeldungen gibt) der eigentliche Trigger so aussieht).
So sieht das bei mir aus:
define Tuer_Heizungskeller CUL_HM 191B2A
attr Tuer_Heizungskeller devInfo 810101
attr Tuer_Heizungskeller firmware 2.0
attr Tuer_Heizungskeller hmClass sender
attr Tuer_Heizungskeller model HM-SEC-SC
attr Tuer_Heizungskeller room Keller
attr Tuer_Heizungskeller serialNr IEQ0517419
attr Tuer_Heizungskeller subType threeStateSensor
Ich frage den aber über Value ab, nämlich so:
define act_on_Tuer_Heizungskeller1 notify Tuer_Heizungskeller { if (Value("Tuer_Heizungskeller") eq "closed") { fhem("set AussentuerUG_Heizungskeller zu") } else { fhem("set AussentuerUG_Heizungskeller offen") }}
Und das funktioniert einwandfrei.
@Zrrronggg!
hast recht da fehlen Klammern :-(
define fen_1_n notify fen_1 {if("%" =~ m/contact.*open/) {fhem ("set st_1 on")} elsif ("%" =~ m/contact.*closed/){fhem ("set st_1 off")}}
Guten Morgen,
seid ihr denn immer online?
Das mit dem Licht an und aus ist nicht das Problem.
sondern die Fehlermeldung vom HM-SEC-SC in der fhem.log
Use of uninitialized value $4 in hex at ./FHEM/10_CUL_HM.pm line 849.
oder sollte ich diesen Fehler in einer anderen Kategorie posten?
@Zrrrongg
was macht der Befehlt fhem("set AussentuerUG_Heizungskeller zu")? Was steckt da dahinter? Ist dies ein "Virtuelle Schalter, damit du den Zustand sichtbar machen kannst? Wenn ja würde mich interessieren, wie du das gemacht hat.
Vielleicht ist es möglich einen "list Tuer_Heizungskeller" von dir zuPosten, ob hier ein Fehler beim pairen vorliegt?
Danke Euch allen.
Gehe jetzt meinen Job weiter nach. :-(
Zitatseid ihr denn immer online?
Klar. Schlafen wird überschätzt. ;-)
Zitat@Zrrrongg
was macht der Befehlt fhem("set AussentuerUG_Heizungskeller zu")? Was steckt da dahinter? Ist dies ein "Virtuelle Schalter, damit du den Zustand sichtbar machen kannst? Wenn ja würde mich interessieren, wie du das gemacht hat.
Das ist ein reiner Abstratkionlayer und alles Teil einer Alarmanlage. Es geht darum, die Namen und Zustände sowie das Verhalten diverser Sensoren zu vereinheitlichen D.H. der "echte" Sensor beinflusst den Zustand eines Dummies, und nur der wird von der Alarmanlage ausgewertet. Tatsächlich wird in einer Meldegruppenüberwachung auch angezeigt, ob alle Türen zu sind oder nicht. Das Vorgehen steht grob im Artikel "Alarmanlage" im Wiki. Wenn man das von vornherein sauber plant geht's vermutlich auch ohne, ich fand es aber recht praktisch eine Schicht dazwischen zu haben, vereinfacht vieles.
fhem> list Tuer_Heizungskeller
Internals:
DEF 191B2A
HMLAN1_MSGCNT 18
HMLAN1_RAWMSG E191B2A,0000,FAA25CC5,FF,FFB1,FFA041191B2AFFFA1201FC00
HMLAN1_RSSI -79
HMLAN1_TIME 2013-04-01 19:40:26
IODev HMLAN1
LASTIODev HMLAN1
MSGCNT 18
NAME Tuer_Heizungskeller
NR 112
STATE closed
TYPE CUL_HM
lastMsg 0CFFA041191B2AFFFA1201FC00
Readings:
2013-04-01 19:40:25 state closed
Attributes:
devInfo 810101
firmware 2.0
hmClass sender
model HM-SEC-SC
room Keller
serialNr IEQ0517419
subType threeStateSensor
anbei mal mein list eines Fensterkontakts
Internals:
DEF 1A6295
IODev HMLAN1
NAME WOZ_FK_001_HM
NR 259
STATE zu
TRIGGERTIME 2013-04-03 15:38:05
TYPE CUL_HM
CHANGETIME:
Readings:
2013-04-03 15:38:05 Activity: alive
2013-03-25 16:10:32 alive yes
2013-03-25 16:10:32 battery ok
2013-04-03 11:16:28 contact closed (to WOZ_TH_001_HM)
2013-03-25 16:10:32 cover closed
2013-04-03 11:16:28 state closed
Helper:
mId 002F
rxType 12
Role:
chn 1
dev 1
Attributes:
IODev HMLAN1
actCycle 028:00
actStatus alive
autoReadReg 0
eventMap open:offen closed:zu
expert 2_full
firmware 2.0
fp_2_Obergeschoss 335,802,0,
icon icoFenster
model HM-SEC-SC
peerIDs
room Wohnzimmer
serialNr JEQ0193330
subType threeStateSensor
Hallo Gemeinde,
vielen Dank nochmal für Eure Hilfe.
Ich habe jetzt nochmal alles gelöscht und den Sensor neu gepairt. Jetzt erhalte ich keinen Fehler mehr in der Fhem.log.
Nach genauer Analyse des Logfiles ist mir folgendes aufgefallen, dass der Sender zweimal seinen Zustand ausgibt. Dadurch wurde der Schalter kurz eingeschaltet und dann natürlich wieder aus.
2013-04-04_23:29:44 fen_1 open
2013-04-04_23:29:44 fen_1 contact: open (to CUL_0)
Ich habe jetzt auf das else verzichtet und es funkionert super.
define fen_1_n_o notify fen_1 {if ("%" eq "open") {fhem "set st_1 on"}}
define fen_1_n_c notify fen_1 {if ("%" eq "closed") {fhem "set st_1 off"}}
Werde mich jetzt in die nächste Stufe wagen, Mail versenden und Watchdog.
Bis zum nächsten mal.