Wago /SPS über Modbus(TCP/IP) in FHEM steuern

Begonnen von lechez, 05 Mai 2013, 10:50:13

Vorheriges Thema - Nächstes Thema

ChrisD

#465
Hallo,

Mit der Variante unten sollte es funktionieren. Im 1. Schritt wird der Preset nur übernommen wenn der Befehl von FHEM kommt oder der Taster gedrückt wird und noch nicht eingeschaltet ist. Wenn du möchtest dass auch FHEM nicht mehr auf das Preset umschaltet, kannst du die Position vom AND und OR tauschen.

Im 2. Schritt wird der Wert auf 255 gesetzt wenn der Taster gedrückt wird und das Licht bereits eingeschaltet ist.

Alternativ kannst du auch Variante 2 verwende, die packt alles in einen Schritt.

Grüße,

ChrisD

der-Lolo

Auch das funktioniert sehr gut - jetzt kann ich endlich den preset Tageszeit / Heilligkeit abhängig schieben... Das ist FHEM sache, ich denke mit Lightscene kann man da was schönes basteln.. Bin schon gespannt wie gut das funktioniert.

Tausend Dank - ich komm sicher bald mit fragen bzgl. der Rollos ;-)

xha1

Hallo zusammen,

erst einmal super Implementierung. Das Auslesen funktioniert ohne Probleme.

Folgende Herausforderung. Unsere WAGO Automatisierung wurde extern programmiert. Für jede Lampe wurde folgendes angelegt:


_B04_Esszimmertisch_status %MX1010.3 BOOL
_B04_Esszimmertisch_EIN %MX1013.7 BOOL (Beim Drücken 1 senden und beim loslassen 0 senden)
_B04_Esszimmertisch_AUS %MX1013.8 BOOL (Beim Drücken 1 senden und beim loslassen 0 senden)


Sprich Status, Ein und Aus sind voneinander getrennt. Für Ein bzw. Aus wird einmalig "1" geschrieben und danach "0".

Wie lässt sich das in FHEM implementieren?

define _B04_Esszimmertisch_status ModbusCoil wago MX1010.3

Damit wird zwar der Status angezeigt, aber auch der "Ein" und "Aus" button, wobei dieser ja anders funktioniert...

ChrisD

Hallo,

Du kannst das mit dem Attribut writeMode realisieren:

attr _B04_Esszimmertisch_status writeMode SetReset:MX1013.7:MX1013.8

Damit erzeugt ein Klick auf den Ein-Button einen Impuls auf MX1013.7 und ein Klick auf den Aus-Button einen Impuls auf MX1013.8.

Grüße,

ChrisD

xha1


xha1

Zwei weitere Fragen:

Zum einen wird jedes Register bzw. Coil nahezu sekundlich ausgelesen. Kann man das für jedes Register/Coil einzeln definieren (z. B. alle 5 Minuten) bzw. für alle zusammen?


Für die Rollos gibt es ebenfalls drei Werte. Lässt sich dies auch in einem Bedienelement kombinieren?
_M01_Kueche_AUF_VISU   %MX1020.7
_M01_Kueche_AB_VISU   %MX1020.8
_M01_EG_Kueche_status_Behang   %MW500   WORD    (1-100 %)

ChrisD

Hallo,

Du kannst die Abfragezeit pro Coil und Register einzeln mit dem Attribut updateInterval festlegen.

Du kannst auch die Verarbeitung der Daten optimieren indem du das Attribut event-on-change-reading setzt:
attr TYPE=ModbusCoil event-on-change-reading .*
attr TYPE=ModbusRegister event-on-change-reading .*


ZitatFür die Rollos gibt es ebenfalls drei Werte. Lässt sich dies auch in einem Bedienelement kombinieren?
Dafür kannst du readingsGroup verwenden, z.B.:
define rg_M01_Kueche readingsGroup _M01_EG_Kueche_status_Behang:state,<auf>,<ab>
attr rg_M01_Kueche commands { 'rg_M01_Kueche.auf' => 'set _M01_Kueche_AUF_VISU on-for-timer 1', 'rg_M01_Kueche.ab' => 'set _M01_Kueche_AB_VISU on-for-timer 1'}
attr rg_M01_Kueche notime 1


In der Commandref und im Wiki gibt es zusätzliche Informationen zu readingsGroup.

Grüße,

ChrisD

der-Lolo

#472
...

Mic91

Hi,
Gibt es auch die Möglichkeit einen einfachen Wago Buskoppler einzufügen und dann einzelne Coils (Ausgänge) zu schalten Bzw. Eingänge abzufragen? Ich habe hier einen Wago 750-342 Buskoppler.

Über eine grobe Einrichtung Bzw. Eine Anleitung dazu wäre ich sehr dankbar.

Gruß Michael

ChrisD

Hallo,

Hier eine kurze ungetestete Anleitung:

- Module installieren:
update force https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mb/controls_modbustcp.txt

- Verbindung zum Koppler definieren (IP-Adresse anpassen):
define wago750_342 ModbusTCPServer 192.168.178.89
attr wago750_342 serverType Wago
attr wago750_342 combineReads 20:80


- Eingänge anlegen:
define Eingang_0 ModbusCoil wago IX0.0
attr Eingang_0 event-on-change-reading .*


- Ausgänge anlegen:
define Ausgang_0 ModbusCoil wago QX0.0
attr Ausgang_0 event-on-change-reading .*


Grüße,

ChrisD

Hollo

Zitat von: Mic91 am 05 August 2018, 12:39:48
...Möglichkeit einen einfachen Wago Buskoppler einzufügen...habe hier einen Wago 750-342 Buskoppler...
Dito
Zitat von: ChrisD am 05 August 2018, 16:03:47
Hier eine kurze ungetestete Anleitung:
...
Getestet und für gut befunden; habe aktuell nur ein "Digital Out"-Modul dran, aber das funktioniert einwandfrei.
Digitale Eingänge und Analog-Module folgen in Kürze.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

bitvilla

Hallo,

in Bezug auf den Beitrag #474 ergeben sich aus meiner Sicht noch Fragen.

Es wurde folgender Beispiel-Code zur Anbindung des Kopplers gepostet:

define wago750_342 ModbusTCPServer 192.168.178.89
attr wago750_342 serverType Wago
attr wago750_342 combineReads 20:80


Genau diese Version habe ich auch seit mehr als zwei Jahren in meiner Config stehen.
Wundere mich aber schon seit längerer Zeit, dass bei jedem Start von FHEM im Logfile die Meldung "ModbusTCPServer_Parse: except (code 2)" erscheint.

Auszug aus dem Logfile:

2018.11.06 12:29:08 1: Including ./log/fhem.save
2018.11.06 12:29:08 3: Opening wago device 192.168.13.240:502
2018.11.06 12:29:08 3: wago device opened
2018.11.06 12:29:08 0: Featurelevel: 5.9
2018.11.06 12:29:08 0: Server started with 175 defined entities (fhem.pl:17652/2018-10-31 perl:5.020002 os:linux user:fhem pid:4952)
2018.11.06 12:29:09 2: ModbusTCPServer_Parse: except (code 2)
2018.11.06 12:29:19 3: telnetForBlockingFn_1541503759: port 33635 opened


Habe mich also mal auf die Suche gemacht und meine Wago-Konfiguration Stück für Stück zerlegt um den vermeintlichen Tippfehler zu finden.
Aber zu meiner Überraschung wurde die Meldung durch das Attribut "attr wago serverType Wago" ausgelöst.
Meine Config habe ich nun wie folgt angepasst:


define wago ModbusTCPServer 192.168.131.24
attr wago combineReads 20:80
attr wago pollInterval 1.6
# attr wago serverType Wago
attr wago verbose 3


Somit stellt sich für mich die Frage ob das Attribut "serverType" noch verwendet werden soll?
In der commandRef ist es zudem auch nicht mehr genannt.


Grüße,

bitvilla

ChrisD

Hallo,

Das Attribut wird benötigt wenn du statt der Modbus-Adressen direkt Speicher und I/O-Adressen verwenden möchtest.

Wenn das Attribut gesetzt ist, versucht das Modul beim Start den Typ und die Konfiguration der Wago-SPS auszulesen da die I/O-Adressen zum Teil von der Art und Anzahl der Scheiben abhängen. Beim 342 kann es sein dass diese Abfrage nicht funktioniert.

Kannst du verbose beim Server auf 4 setzen und FHEM mit gesetztem Attribut serverType neu starten ?

Grüße,

ChrisD

bitvilla

Hallo,

in meinem Fall handelt es sich um eine Wago 750-881 mit folgender IO-Config:

Pos Module Type Mapping
1 750-4xx 2DI PLC
2 750-5xx 2DO PLC
3 750-4xx 8DI PLC
4 750-4xx 8DI PLC
5 750-4xx 8DI PLC
6 750-4xx 8DI PLC
7 750-4xx 8DI PLC
8 750-4xx 8DI PLC
9 750-4xx 8DI PLC
10 750-5xx 8DO PLC
11 750-5xx 8DO PLC
12 750-5xx 8DO PLC
13 750-5xx 8DO PLC
14 750-5xx 8DO PLC
15 750-5xx 8DO PLC
16 750-5xx 8DO PLC
17 750-4xx 8DI PLC
18 750-4xx 8DI PLC
19 750-5xx 8DO PLC
20 750-5xx 8DO PLC
21 750-5xx 8DO PLC
22 750-5xx 8DO PLC


Anbei nochmal die gewünschte FHEM-Config:

define wago ModbusTCPServer 192.168.13.240
attr wago combineReads 20:80
attr wago pollInterval 1.6
attr wago presenceLink wago_presence
attr wago verbose 4
attr wago serverType Wago

define wago_presence PRESENCE lan-ping 192.168.13.240


... und der Auszug aus dem Logfile mit verbose 4:

2018.11.07 15:16:35 3: WagoMD203: I/O device is wago
2018.11.07 15:16:35 3: WagoMD216: I/O device is wago
2018.11.07 15:16:35 3: WagoMD217: I/O device is wago
2018.11.07 15:16:35 3: WagoMW206: I/O device is wago
2018.11.07 15:16:35 3: WagoMW207: I/O device is wago
2018.11.07 15:16:35 1: Including FHEM/fhem_myConfig_allgemein.cfg
2018.11.07 15:16:37 3: SUSV: using I2C Address 15
2018.11.07 15:16:37 3: SUSV: Found firmware 2.61 - Basic
2018.11.07 15:16:37 1: Including ./log/fhem.save
2018.11.07 15:16:37 3: Opening wago device 192.168.13.240:502
2018.11.07 15:16:37 4: AddRQueue [20 10 00 00 00 06] 00 03 20 10 00 05
2018.11.07 15:16:37 4: AddRQueue [10 22 00 00 00 06] 00 03 10 22 00 04
2018.11.07 15:16:37 3: wago device opened
2018.11.07 15:16:37 0: Featurelevel: 5.9
2018.11.07 15:16:37 0: Server started with 176 defined entities (fhem.pl:17652/2018-10-31 perl:5.020002 os:linux user:fhem pid:450)
2018.11.07 15:16:38 3: telnetForBlockingFn_1541600198: port 37881 opened
2018.11.07 15:16:38 2: ModbusTCPServer_Parse: except (code 2)
2018.11.07 15:16:40 4: RQUEUE: 1
2018.11.07 15:16:43 4: AddRQueue [FD E8 00 00 00 06] 00 03 30 C8 00 08
2018.11.07 15:16:43 4: AddRQueue [FD E9 00 00 00 06] 00 03 31 90 00 24
2018.11.07 15:16:43 4: AddRQueue [FA 00 00 00 00 06] 00 01 00 20 00 20
2018.11.07 15:16:43 4: AddRQueue [FA 01 00 00 00 06] 00 01 02 28 00 18
2018.11.07 15:16:43 4: AddRQueue [FA 02 00 00 00 06] 00 01 10 00 00 50
2018.11.07 15:16:43 4: AddRQueue [FA 03 00 00 00 06] 00 01 36 40 00 30
2018.11.07 15:16:43 4: RQUEUE: 5
2018.11.07 15:16:45 4: RQUEUE: 4
2018.11.07 15:16:45 4: RQUEUE: 3
2018.11.07 15:16:45 4: RQUEUE: 2
2018.11.07 15:16:45 4: RQUEUE: 1
2018.11.07 15:16:47 4: AddRQueue [FD EA 00 00 00 06] 00 03 30 C8 00 08
2018.11.07 15:16:47 4: AddRQueue [FD EB 00 00 00 06] 00 03 31 90 00 26
2018.11.07 15:16:47 4: AddRQueue [FA 04 00 00 00 06] 00 01 00 20 00 20
2018.11.07 15:16:47 4: AddRQueue [FA 05 00 00 00 06] 00 01 02 28 00 18
2018.11.07 15:16:47 4: AddRQueue [FA 06 00 00 00 06] 00 01 10 00 00 50
2018.11.07 15:16:47 4: AddRQueue [FA 07 00 00 00 06] 00 01 36 40 00 30
2018.11.07 15:16:47 4: RQUEUE: 5
2018.11.07 15:16:47 4: RQUEUE: 4
2018.11.07 15:16:49 4: RQUEUE: 3
2018.11.07 15:16:49 4: RQUEUE: 2
2018.11.07 15:16:49 4: RQUEUE: 1
... usw. ...


Bei Bedarf kann ich auch gerne verbose 5 setzten und die Detailmeldung senden.

Betreibe die Modbus-Anbindung jetzt seit einigen Tagen ohne "attr wago serverType Wago" und konnte bis keine Fehler feststellen.
Hier noch ein kurzer Auszug aus meiner WAGO-Config:

# SPS-Ausgang DO2_F, Eltern, Deckenlicht
# fhemDO2_F -> WagoDO2_F
define WagoDO2_F ModbusCoil wago QX256.5
attr WagoDO2_F IODev wago
attr WagoDO2_F alias Deckenlicht
attr WagoDO2_F devStateIcon on:on:toggle off:off:toggle set_.*:toggle
attr WagoDO2_F event-on-change-reading .*
attr WagoDO2_F eventMap toggle:Schalten
attr WagoDO2_F group Eltern
attr WagoDO2_F room Obergeschoss
attr WagoDO2_F sortby 1
attr WagoDO2_F webCmd Schalten
attr WagoDO2_F writeMode Impulse:IX256.5:1.0


Freundliche Grüße
bitvilla

ChrisD

Hallo,

Danke für die Informationen.

Das Auslesen des SPS-Typs scheint nicht zu funktionieren, kannst du testen ob es mit der angehängten Version geht ?

Wenn das Attribut serverType nicht gesetzt ist, wird die I/O-Konfiguration nicht ausgelesen und die Adressierung der Ein- und Ausgänge ist falsch wenn analoge Ein- oder Ausgänge vorhanden sind. Da du nur digitale I/Os hast, gibt es keine Probleme.

Grüße,

ChrisD