FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hugo am 01 April 2013, 14:53:19

Titel: Tür/Fensterkontakt
Beitrag von: hugo am 01 April 2013, 14:53:19
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?
Titel: Aw: Tür/Fensterkontakt
Beitrag von: broadway am 01 April 2013, 15:35:47
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.
Titel: Aw: Tür/Fensterkontakt
Beitrag von: Zrrronggg! am 01 April 2013, 19:05:25
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.

Titel: Aw: Tür/Fensterkontakt
Beitrag von: Rohan am 01 April 2013, 19:40:14
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
Titel: Aw: Tür/Fensterkontakt
Beitrag von: hugo am 02 April 2013, 21:08:53
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.
Titel: Aw: Tür/Fensterkontakt
Beitrag von: Zrrronggg! am 02 April 2013, 21:42:13
Kapier ich nicht. Ich bin also leider raus.
Titel: Aw: Tür/Fensterkontakt
Beitrag von: Rohan am 02 April 2013, 22:12:01
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
Titel: Aw: Tür/Fensterkontakt
Beitrag von: hugo am 02 April 2013, 23:12:02
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?
Titel: Aw: Tür/Fensterkontakt
Beitrag von: Fennek am 02 April 2013, 23:36:05
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
Titel: Aw: Tür/Fensterkontakt
Beitrag von: Zrrronggg! am 03 April 2013, 00:03:53

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.

Titel: Aw: Tür/Fensterkontakt
Beitrag von: Fennek am 03 April 2013, 00:54:06
@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")}}

Titel: Aw: Tür/Fensterkontakt
Beitrag von: hugo am 03 April 2013, 07:55:22
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. :-(


Titel: Aw: Tür/Fensterkontakt
Beitrag von: Zrrronggg! am 03 April 2013, 12:35:59
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
Titel: Aw: Tür/Fensterkontakt
Beitrag von: Fennek am 03 April 2013, 15:49:47
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
Titel: Aw: Tür/Fensterkontakt
Beitrag von: hugo am 05 April 2013, 21:19:32
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.