Hallo,
ich habe folgendes Problem. Ich will den Zustand des Homematic Fensterkontaktes in den S7 Merker M62.4 schreiben um damit meine Heizung in diesem Raum abzustellen. Der Fensterkontakt ist in der Homematic angelernt und ich sehe auch den Wechsel in FHEM von 0-->1. Leider bekomme ich diesen Wert nicht in die SPS geschrieben.
Wenn ich den Merker "defmod FensterArbeitszimmer_M_62_4" über den Set On Befehl setze dann kommt das Signal auch richtig in der SPS an.
Ich vermute es liegt an dem Notify. Hat jemand eine Idee was ich falsch mache ?
defmod ArbeitszimmerStatus notify FensterArbeitszimmer:on set FensterArbeitszimmer_M ON
defmod FensterArbeitszimmer_M_62_4 S7_DWrite flags 0 62.4
defmod FensterArbeitszimmer HMCCUDEV OEQ0164XXX
attr FensterArbeitszimmer IODev CCU2
attr FensterArbeitszimmer ccureadingfilter (STATE|LOWBAT|ON_TIME)
attr FensterArbeitszimmer icon fts_window_1w_open
attr FensterArbeitszimmer room Testraum
attr FensterArbeitszimmer statevals on:true,off:false
attr FensterArbeitszimmer webCmd on:off
Danke !!
Trickster444
defmod ArbeitszimmerStatus notify FensterArbeitszimmer:on
Zu mindest meine Fensterkontakte liefern ein open oder closed. Sicher das es bei dir on ist? Was liefert der Eventmonitor.
Bitte benutze Codetags, die Raute oben in der Symbolleiste des Forums.
Und ein list der Devices ist immer besser.
Ah sehe gerade das hast ne CCU2 angebunden.
Ok, aber gerade deswegen brauchen wir Auszug aus dem Eventmonitor und list der beiden Devices
So, hier nochmal der korrekte Code
defmod ArbeitszimmerStatus notify FensterArbeitszimmer:on set FensterArbeitszimmer_M_62_4 ON
attr ArbeitszimmerStatus room Testraum
setstate ArbeitszimmerStatus active
setstate ArbeitszimmerStatus 2017-10-22 11:55:20 state active
defmod FensterArbeitszimmer_M_62_4 S7_DWrite flags 0 62.4
attr FensterArbeitszimmer_M_62_4 IODev mySPS
attr FensterArbeitszimmer_M_62_4 room Testraum
setstate FensterArbeitszimmer_M_62_4 off
setstate FensterArbeitszimmer_M_62_4 2017-10-22 11:03:35 state off
defmod FensterArbeitszimmer HMCCUDEV OEQ0164649
attr FensterArbeitszimmer IODev CCU2
attr FensterArbeitszimmer ccureadingfilter (STATE|LOWBAT|ON_TIME)
attr FensterArbeitszimmer room Testraum
attr FensterArbeitszimmer webCmd on:off
setstate FensterArbeitszimmer 1
setstate FensterArbeitszimmer 2017-10-21 15:51:38 1.LOWBAT 0
setstate FensterArbeitszimmer 2017-10-21 15:51:38 1.STATE 1
setstate FensterArbeitszimmer 2017-10-21 15:51:38 hmstate 1
setstate FensterArbeitszimmer 2017-10-22 12:19:07 state Initialized
Das Fenster ist aktuell im Zustand "offen" deshalb der State"1"
Die Eventliste kann ich schicken sobald ich vor Ort bin und nicht über Fernwartung verbundenn bin.
TRICKSTER444
Damit kann ich nichts anfangen.
Ich bräuchte bitte ein list, kein Code.
In FHEMWEB gibst du in der Commandline ein
list DEVICENAME
Ausgabe dann hier posten.
Ich hoffe jetzt ist es richtig.
2017-10-22 17:14:21 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:23 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:24 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:25 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:27 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:30 HMCCUDEV FensterArbeitszimmer 1.LOWBAT: 0
2017-10-22 17:14:30 HMCCUDEV FensterArbeitszimmer 1.STATE: 0
2017-10-22 17:14:30 HMCCUDEV FensterArbeitszimmer 0
2017-10-22 17:14:30 HMCCUDEV FensterArbeitszimmer hmstate: 0
2017-10-22 17:14:30 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:31 HMCCUDEV FensterArbeitszimmer 1.STATE: 1
2017-10-22 17:14:31 HMCCUDEV FensterArbeitszimmer 1
2017-10-22 17:14:31 HMCCUDEV FensterArbeitszimmer 1.LOWBAT: 0
2017-10-22 17:14:31 HMCCUDEV FensterArbeitszimmer hmstate: 1
2017-10-22 17:14:32 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:33 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:35 S7_DWrite FensterArbeitszimmer_M_62_4 off
2017-10-22 17:14:36 S7_DWrite FensterArbeitszimmer
Internals:
CFGFN
DEF OEQ0377018
IODev CCU2
NAME Garage
NR 84837
STATE 0
TYPE HMCCUDEV
ccuaddr OEQ0377018
ccudevstate active
ccuif BidCos-RF
ccuname HM-LC-Sw1-FM OEQ0377018
ccutype HM-LC-Sw1-FM
channels 2
statevals devstate
READINGS:
2017-10-21 19:48:38 1.STATE 0
2017-10-21 19:48:37 1.WORKING 0
2017-10-21 19:48:38 hmstate 0
2017-10-21 19:48:38 state 0
hmccu:
dp:
0.STICKY_UNREACH:
OSVAL 1
OVAL 1
SVAL 1
VAL 1
0.UNREACH:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.STATE:
OSVAL 1
OVAL 1
SVAL 0
VAL 0
1.WORKING:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
Attributes:
IODev CCU2
icon fts_garage
room Testraum
Internals:
ADDRESS 62.4
AREA flags
CFGFN
DB 0
DEF flags 0 62.4
IODev mySPS
LASTInputDev mySPS
LENGTH 1
MSGCNT 566806
NAME FensterArbeitszimmer_M_62_4
NR 191296
POSITION 500
STATE off
TYPE S7_DWrite
mySPS_MSGCNT 566806
mySPS_TIME 2017-10-22 16:09:04
READINGS:
2017-10-22 16:09:04 state off
Attributes:
IODev mySPS
room Testraum
webCmd TRIGGER
Internals:
CFGFN
DEF FensterArbeitszimmer:on set FensterArbeitszimmer_M_62_4 TRIGGER
NAME ArbeitszimmerStatus
NOTIFYDEV FensterArbeitszimmer
NR 181309
NTFY_ORDER 50-ArbeitszimmerStatus
REGEXP FensterArbeitszimmer:on
STATE active
TYPE notify
READINGS:
2017-10-22 12:57:22 state active
Attributes:
room Testraum
Danke
FensterArbeitszimmer_M_62_4 ist ungleich FensterArbeitszimmer
Hallo,
also ich habe es jetzt geschafft mit dem Notify:
defmod ArbeitszimmerStatus notify FensterArbeitszimmer set FensterArbeitszimmer_M_62_4 on
den Merker in der SPS zu setzten, leider bleibt der Merker dann immer anstehen in der SPS ist. Ich würde gerne der Merker auf "1" schalten wenn der Fensterkontakt auf "1" ist und wieder auf "0" schalten wenn der Fensterkontakt wieder auf "0" ist. Das Rücksetzten bei Notify scheint nicht zu funktionieren.
Hier nochmal der aktuelle Code.
FensterArbeitszimmer --> der Fensterkontakt der in die CCU2 geht
Internals:
CFGFN
DEF OEQ0164649
IODev CCU2
NAME FensterArbeitszimmer
NR 181091
STATE 1
TYPE HMCCUDEV
ccuaddr OEQ0164649
ccudevstate active
ccuif
ccuname HMW-RCV-50 BidCoS-Wir:0
ccutype HM-Sec-SC-2
channels
statevals devstate
READINGS:
2017-10-22 15:52:25 0.LOWBAT 0
2017-10-23 19:26:07 1.LOWBAT 0
2017-10-23 19:26:07 1.STATE 1
2017-10-23 19:26:07 hmstate 1
2017-10-23 19:26:07 state 1
hmccu:
dp:
0.LOWBAT:
OSVAL 1
OVAL 1
SVAL 0
VAL 0
1.ERROR:
OVAL 0
VAL 0
1.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.STATE:
OSVAL 0
OVAL 0
SVAL 1
VAL 1
Attributes:
IODev CCU2
ccureadingfilter (STATE|LOWBAT|ON_TIME)
room Testraum
webCmd on:off
FensterArbeitszimmer_M_62_4 --> der Merker der in der SPS gesetzt werden soll
Internals:
ADDRESS 62.4
AREA flags
CFGFN
DB 0
DEF flags 0 62.4
IODev mySPS
LASTInputDev mySPS
LENGTH 1
MSGCNT 662274
NAME FensterArbeitszimmer_M_62_4
NR 191296
POSITION 500
STATE off
TYPE S7_DWrite
mySPS_MSGCNT 662274
mySPS_TIME 2017-10-24 15:13:04
READINGS:
2017-10-24 15:13:04 state off
Attributes:
IODev mySPS
room Testraum
webCmd trigger
ArbeitszimmerStatus --> Notify das den Merker schalten soll wenn der Fensterkontakt geschaltet wird.
Internals:
CFGFN
DEF FensterArbeitszimmer set FensterArbeitszimmer_M_62_4 on
NAME ArbeitszimmerStatus
NOTIFYDEV FensterArbeitszimmer
NR 181309
NTFY_ORDER 50-ArbeitszimmerStatus
REGEXP FensterArbeitszimmer
STATE 2017-10-23 19:26:07
TYPE notify
READINGS:
2017-10-23 19:24:37 state active
Attributes:
room Testraum
Danke.
defmod ArbeitszimmerStatus notify FensterArbeitszimmer.[0-1] { fhem("set FensterArbeitszimmer_M_62_4 " . ($EVENT == 1 ? "on" : "off") );
}
Wenn 1 dann sende on ansonsten Off
Passt das so? Kann gerade nicht testen.
Genial !!!!! Das passt !!!
Super, vielen Dank !
Kannst du mir mal noch erklären was die Befehle genau machen ?
Trickster444
FensterArbeitszimmer.[0-1]
RegEx auf die er matchen/triggern soll
{ fhem("set FensterArbeitszimmer_M_62_4 "
{ Auf Perlebene gehen
fhem("
FHEM Befehl ausführen
set FensterArbeitszimmer_M_62_4
FHEM Befehl
. ($EVENT == 1 ? "on" : "off")
Punkt bedeutet String anfügen und der Rest ist eine Bedingungsabfrage
Ist einfaches Perl und schnell gelernt.
Grüße
Hallo CoolTux,
Ich habe noch ein Problem das der Befehl immer nur triggert wird bei Signalwechsel und nicht den Signalzustand von FensterArbeitszimmer weitergibt. Das Problem ist bei Hardwareänderungen und Neustart der SPS wird der Status des Merkers getriggert, obwohl ich nicht weiß ob das Fenster offen oder geschlossen ist.
Danke für die Hilfe im Voraus.
Lass uns schauen ob ich Dich richtig verstanden habe.
Wenn Du zum Beispiel FHEM neu startest, kann es sein das im Device FensterArbeitszimmer_M_62_4 ein on steht obwohl im Device FensterArbeitszimmer eine 0 steht?
Das Problem ist der Neustart der SPS, dann werden die Merker auf 0 gesetzt und ich bekommen dann keinen sauberen Status auch wenn der Fensterkontakt auf 1 steht. Erst wenn der Kontakt auf 0 wechselt , dann wird das Signal in der SPS getriggert. Also habe ich nach dem Neustart der SPS keinen eindeutigen Zustand ob die Fenster offen oder geschlossen sind. Ist es möglich den Status des Fensterkontaktes aus der CCU an die SPS zu schicken ? Was ich versucht habe, war der Befehlt set:on, hat aber nicht funktioniert.
Danke
Bekommt FHEM einen Neustart der SPS mit? Eventuell kann man hier ein Event triggern um eine Abfrage zu starten.
FHEM bekommt den Neustart nicht mit.
Versuch bitte deine Merker in einen Remanenz Bereich zu verschieben. Die Speicherbereiche kannst du in der Hardwareconfig einstellen.
Um den Neustart der SPS Fhem mitzuteilen, kannst du den Anlauf OB (OB100) nutzen.
Moin
Wie MarkBinary schon geschrieben hat, remanente Merker nutzen, oder einen DB benutzen!
Grundsaetzlich halte ich das aber sowieso nicht fuer einen guten Plan! Was ist denn, wenn fhem mal ausfaellt? Ich weiss, dies ist unwahrscheinlich, aber durchaus moeglich! Du musst ja hierfuer auch ein Szenario entwickeln, und ich denke es ist schlimmer, wenn die Heizung nicht wieder warm wird, wenn man das Fenster schliesst, als anders herum!?
Ich werde mir bei Gelegenheit einen Watchdog implementieren, so dass meine S7 weiss, ob fhem lebt. Damit kann ich dann entscheiden, ob fhem oder die S7 steuert.
Gruss Christoph
FHEM bekommt leider nichts von dem Neustart der SPS mit.
Zitat von: trickster444 am 02 November 2017, 13:35:04
FHEM bekommt leider nichts von dem Neustart der SPS mit.
Das hattest Du bereits gepostet! Hast du inzwischen etwas geaendert, wie vorgeschlagen?
Gruss Christoph