Guten morgen zusammen,
ich wage mich hiermit aus dem Anfänger Forum heraus, da ich denke dass so besser passt.
Ich selber bin Automatisierer und damit "faul" und immer bestrebt die Sache zu verbessern.
Ich habe in meinem Haus die vorhandene S7 erfolgreich (hoffe ich zumindest) mit FHEM und HomeKit gekoppelt.
In der S7 habe ich fast alle Schaltaktoren als "Stomstoßrelais" nachgebildet. Die Kopplung mit FHEM habe ich folgender Maßen ausgeführt:
Dummy:
Internals:
NAME Licht_Einfahrt
NR 41
STATE off
TYPE dummy
Readings:
2017-02-26 08:52:44 state off
Attributes:
genericDeviceType light
group Licht Außenbereich
homebridgeMapping On=state,valueOn=on,cmdOn=on,cmdOff=off
room Beleuchtung,Homekit
setList on off
webCmd on : off
Ein Device um den Status von der SPS einzulesen:
Internals:
ADDRESS 3.2
AREA db
CHANGED
DB 800
DEF db 800 3.2
IODev SPS
LASTInputDev SPS
LENGTH 1
MSGCNT 110027
NAME S7Licht_Einfahrt
NR 259
POSITION 26
SPS_MSGCNT 110027
SPS_TIME 2017-02-26 08:58:01
STATE off
TYPE S7_DRead
Readings:
2017-02-26 08:58:01 state off
Attributes:
IODev SPS
event-min-interval .*:600
event-on-change-reading state
Ein Device um von FHEM zur SPS den Status ändern zu können:
Internals:
ADDRESS 3.2
AREA db
CHANGED
DB 802
DEF db 802 3.2
IODev SPS
LASTInputDev SPS
LENGTH 1
MSGCNT 110077
NAME S7Licht_Einfahrt_ein
NR 218
POSITION 26
SPS_MSGCNT 110077
SPS_TIME 2017-02-26 08:58:55
STATE off
TYPE S7_DWrite
Readings:
2017-02-26 08:58:55 state off
Attributes:
IODev SPS
event-min-interval .*:600
event-on-change-reading state
Um am Ende die gewünschte Funktion zu erhalten gibt es zwei Notifys:
Einmal wird einfach der Staus von der SPS gelesen und auf das Dummy geschrieben.
Internals:
DEF S7Licht_Einfahrt set Licht_Einfahrt $EVENT
NAME n_S7Licht_Einfahrt
NR 65
NTFY_ORDER 50-n_S7Licht_Einfahrt
REGEXP S7Licht_Einfahrt
STATE 2017-02-26 08:52:44
TYPE notify
Weiterhin wird dann geschaut ob in FHEM oder Homekit eine Schalthandlung vorgenommen wurde und wenn dies passiert ist, das Bit an die SPS abgesetzt.
Internals:
DEF Licht_Einfahrt {
if ( (Value("S7Licht_Einfahrt") eq "off" and Value("Licht_Einfahrt") eq "on") or (Value("S7Licht_Einfahrt") eq "on" and Value("Licht_Einfahrt") eq "off") )
{ fhem ("set S7Licht_Einfahrt_ein on") } else
{ fhem ("set S7Licht_Einfahrt_ein off") }
}
NAME n_Licht_Einfahrt
NOTIFYDEV Licht_Einfahrt
NR 137
NTFY_ORDER 50-n_Licht_Einfahrt
REGEXP Licht_Einfahrt
STATE 2017-02-26 09:02:46
TYPE notify
Das ist natürlich doch schon etwas komplexer.
All meine einfachen Schaltfunktionen sind so aufgebaut. Ich habe auch alle nach dem selbem Muster benannt.
Ich sehe hier zwei Sachen um zu Optimieren.
Sicher gibt es eine Möglichkeit die Kopplung einfacher aufzubauen.
Des Weiteren wäre es Interessant ob man nicht ein Funktion oder ähnliches schreiben könnte, da ja immer wieder das Selbe ausgeführt wird, nur der eigentliche Name ist anders.
Was denkt Ihr, wo kann man ansetzen und wie macht man das mit diesem System? :-)
Vielen Grüße und schon einmal vielen Dank
Martin
Hallo martin2day,
Ich bekomme zwar den richtigen Zustand angezeigt, allerdings schaltet meine Lampe nicht. Kannst du mal den Script Code einstellen, damit ich meinen Fehler identifizieren kann?
Danke
Zitat von: martin2day am 26 Februar 2017, 09:07:23
Was denkt Ihr, wo kann man ansetzen und wie macht man das mit diesem System? :-)
Vorab: Ich habe keine S7.
Ich würde aber aus dem Bauch raus vermuten, dass das ReadingsProxy den dummy und die beiden notify ersetzen kann.