Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ich glaube das wird so nicht funktionieren, diese id wird ja irgendwo ins tcp paket reingewurschdelt, d.h. eigentlich müsste es eine default id geben und dann pro item die option ne andre id zu wählen .. da ja gleiche ip/port genutzt wird...
Lt wikipedia
Unit identifier is used with Modbus/TCP devices that are composites of several Modbus devices, e.g. on Modbus/TCP to Modbus RTU gateways. In such case, the unit identifier tells the Server Address of the device behind the gateway. Natively Modbus/TCP-capable devices usually ignore the Unit Identifier.
modBusUnit musste ich leider aus den Items nehmen und in die Plugins-Konfig geben, da die unit-Adresse bereits beim Öffnen der Verbindung mitgegeben wird. Prinzipiell sollte es mit zwei Instanzen des Plugins möglich sein. Die Multiinstanz-Fähigkeit habe ich derzeit im Plugin jedoch nicht implementiert, da ich nur einen Modbus-Client (Wechselrichter) habe.
Derzeit müsste es möglich sein auf beide Units zuzugreifen, jedoch leider nicht gleichzeitig.
Code:
slaveUnit:
type: num
default: 1
description:
de: 'Slave-Addresse der zu lesenden Modbus-Einheit'
en: 'slave-address of the Modbus-Unit to read'
Ich kann natürlich auf meinem Git-Fork eine Multiinstanz-Fähige Test-Version bereitstellen, damit ihr Multiinstanz testen könnt. Könnte allerdings bei Problemen mit der Ferndiagnose etwas umständlicher werden.
Vielleicht finde ich einen online Modbus-Server um die Multiinstanz zu testen.
Ja, nur leider ist der Hersteller unwahrscheinlich stark am Markt vertreten.
Außerdem hatte ivande offensichtlich schon eine Lösung dafür, denn der hatte in seinem Post #21 auf dieser Seite ja schon Items definiert, die eine
Code:
modBusUnit: '71' #(optional) default: 1
als Unit mitgeben.
Daher hatte ich es auch damit versucht, aber leider ohne Erfolg. Scheinbar hat er es irgendwie implementiert; es ist aber scheinbar nicht Bestandteil des aktuellen Plugins.
Theoretisch müsste man das so machen, diese unit ist ja nix andres wie ne id, ist aber schon ne spezialgeschichte von dem hersteller...
andrerseits wenn man 2instanzen hat, dann kann man bestimmt nicht die gleiche ip nutzen d.h. man müsste noch nen parameter einführen ..
Genial!
Mit einem kleinen Wermutstropfen: Das Plugin unterscheidet nicht nach den ModBusUnits in den Items.
Ich habe hier grade die Fronius-Modbus-Tabellen zurechtgebogen und stoße da nämlich auf ein Problem:
Ich habe hier einen GEN24-Wechselrichter mit einem Smartmeter, welches über Modbus RTU mit dem Wechselrichter verbunden wird.
Der Wechselrichter nimmt die gesammelten (Smartmeter UND Wechselrichter) Daten und gibt die wiederum über Modbus TCP aus auf Port 502 aus.
Daher gibt 2 Tabellen mit ähnlichen Registerinhalten; jedoch einmal fürs Smartmeter und für den Wechselrichter separat.
Die Register vom Wechselrichter und vom Smartmeter sind nummernmäßig ähnlich, das SM hört allerdings auf die Adresse "200", der Wechselrichter hingegen auf die "1". Unterschieden werden diese Daten jedoch über die unterschiedliche ModBusUnit.
Beispiel: (Wechselrichter Modbus intern IP 192.168.178.70 Port 502)
WR Register 40073 mit der Unit 1 gibt den Strom eines Aussenleiters des Wechselrichters (an den Klemmen des WR) aus
WR Register 40073 mit der Unit 200 gibt den Strom eines Aussenleiters des Smartmeters (Netzbezug oder -einspeisung) aus
Wie kann man das lösen?
Baustein mit mehreren Instanzen (Unit 1 und 200) geht nicht, oder?
ich habe ein universelles modbus_tcp-Plugin in meinem Kasten, noch ein paar Test's (mit meinem solaredge -Wechselrichter) dann kann ich es versuchsweise auf Git hochladen. Modbus-Register, DatenType,.. usw. werden über SH-Items konfiguriert:
Laut Handbuch ist auf jeden Fall ein RJ45 Anschluss dran
Ja, an der Trovis auch. Für die serielle Schnittstelle.
Merke: Der Stecker sagt manchmal nichts, aber auch rein garnichts über die Art der Schnittstelle aus.
Die Trovis ist über einen Adapter angebunden, der seriell auf LAN umsetzt - siehe Wiki. Der Adapter hat sehr wohl eine IP - die aber per socat-Unix-Befehl auf Deinem Raspi auf eine virtuelle Schnittstelle /dev/irgendwas gemapped wird. So kann das Plugin über /dev/irgendwas kommunizieren, ohne die spezifische IP des Adapters zu kennen - es muss nur noch der gleiche Port wie im Adapter eingestellt werden, wie von Dir gezeigt.
Wenn Dein Gerät von Hause aus eine Netzwerkschnittstelle hat (und nicht nur seriell, wie die Trovis), mapped socat eben auf diese IP. Fertig.
/tom
Zuletzt geändert von Tom Bombadil; 11.12.2021, 13:33.
die kosalmodbus und ksemmodbus sind bereit recht universell aufgebaut, und man könnte mit dem selben Prinzip andere Gerätschaften adaptiert. Für das solaredge - Plugin geht das leider nicht so ganz universell, da dort einige Werte aus zwei Registern berechnet werden müssen: in einem Register steht der Wert und im anderen der Scale-Faktor. (dies könnte natürlich dann über die SH-Items mit eval,.. verrechnet werden)
Code:
'I_AC_Power' : 40083, # 40084: AC Power Value, int16
'I_AC_Power_SF' : 40084, # 40085: AC Power Scale Factor, int16
Result = Value + ScaleFaktor
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: