SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: SMA Energy Meter Binding - Textfile Konfiguration

Beitrag von Selter »

Das Passwort habe ich jetzt und ich konnte damit auch den Modbus aktivieren.

Jetzt habe ich die .things (erstmal für einen Wechselrichter) in den entsprechenden Ordner kopiert:

Code: Alles auswählen

Bridge modbus:tcp:sma "SMA" @ "Modbus" [ host="192.168.178.139", port=502, id=3, connectMaxTries=3] {

// SMA Inverter Device Type
	Bridge poller DevType              [ start=30053, length=4, refresh=5000, type="input" ] {
	    	Thing data type            [ readStart="30053", readValueType="uint32" ] 
  	 }

// SMA Inverter Status
	Bridge poller SMA_Status           [ start=30201, length=36, refresh=6000, type="input" ] {
               Thing data status           [ readStart="30201", readValueType="int32" ]
               Thing data Grid_Contactor   [ readStart="30217", readValueType="int32" ]

               Thing data Max_Power        [ readStart="30231", readValueType="int32" ]
               Thing data Set_Max_Power    [ readStart="30233", readValueType="int32" ]
  	 }

// SMA Inverter Operation
	Bridge poller SMA_Operation           [ start=33001, length=36, refresh=6000, type="input" ] {
               Thing data Standby           [ readStart="33001", readValueType="uint32" ]
               Thing data Betrieb   [ readStart="33003", readValueType="uint32" ]
  	 }

// SMA Inverter Temperatur
Bridge poller SMA_Temp_Innen          [ start=30953, length=2, refresh=6000, type="input" ] {
			Thing data Temp1    [ readStart="30954", readValueType="int16", readTransform="JS(divide10.js)" ]
 }
Bridge poller SMA_Temp_Kuehl          [ start=34113, length=2, refresh=6000, type="input" ] {
			Thing data Temp2    [ readStart="34114", readValueType="int16", readTransform="JS(divide10.js)" ]
 }
// SMA Inverter Yield
	Bridge poller Yield                [ start=30517, length=16, refresh=5000, type="input" ] {
               Thing data Day_Yield        [ readStart="30517", readValueType="int64", readTransform="JS(divide1000.js)" ]
               Thing data Total_Yield      [ readStart="30529", readValueType="int32", readTransform="JS(divide1000.js)" ]
   	 }

// SMA Inverter Power Section A
	Bridge poller power_a              [ start=30769, length=20, refresh=5000, type="input" ] {
	       Thing data current_input    [ readStart="30769", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
	       Thing data voltage_input    [ readStart="30771", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
	       Thing data power_west       [ readStart="30773", readValueType="int32", readTransform="JS(smalimit1000.js)"]
	       Thing data active_power     [ readStart="30775", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
		Thing data active_powerWatt     [ readStart="30775", readValueType="int32", readTransform="JS(smalimit.js)" ]
	       Thing data power_L1         [ readStart="30777", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
	       Thing data power_L2         [ readStart="30779", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
	       Thing data power_L3         [ readStart="30781", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
	       Thing data volt_G1          [ readStart="30783", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
	       Thing data volt_G2          [ readStart="30785", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
	       Thing data volt_G3          [ readStart="30787", readValueType="uint32", readTransform="JS(smalimit100A.js)"]
  	 }

// SMA Inverter Power B
	Bridge poller power_b              [ start=30957, length=8, refresh=5000, type="input" ] {
    Thing data currentB_input   [ readStart="30957", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
	Thing data voltageB_input   [ readStart="30959", readValueType="int32", readTransform="JS(smalimit100.js)" ]
	Thing data power_east       [ readStart="30961", readValueType="int32", readTransform="JS(smalimit1000.js)" ] 
   	 }


// SMA Inverter Operation
	Bridge poller SMA_Status_Operate   [ start=40029, length=4, refresh=5000, type="holding" ] {
	       Thing data operatestatus    [ readStart="40029", readValueType="uint32" ]
   	 }

Bridge poller SunSpecTest   [ start=40200, length=4, refresh=5000, type="holding" ] {
	       Thing data Amp    [ readStart="40200", readValueType="int16" ]
   	 }


// SMA Inverter Operation
	Bridge poller SMA_Betriebszeit   [ start=30521, length=8, refresh=5000, type="input" ] {

	       Thing data Betriebszeit   [ readStart="30521", readValueType="uint64", readTransform="JS(divide3600.js)" ]
			Thing data Einspeisezeit  [ readStart="30525", readValueType="uint64", readTransform="JS(divide3600.js)" ]
   	 }
}
Aber auch nach einem Neustart des openhab.service bekomme ich diese Fehlermeldungen:

Code: Alles auswählen

[ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 1/3 error: Connection refused (Connection refused). Connection TCPMasterConnection@1e09008[socket=Socket[unconnected]]. Endpoint ModbusTCPSlaveEndpoint@167ed4[address=192.168.178.139,port=502]

[ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 2/3 error: Connection refused (Connection refused). Connection TCPMasterConnection@1e09008[socket=Socket[unconnected]]. Endpoint ModbusTCPSlaveEndpoint@167ed4[address=192.168.178.139,port=502]

[ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 3/3 error: Connection refused (Connection refused). Connection TCPMasterConnection@1e09008[socket=Socket[unconnected]]. Endpoint ModbusTCPSlaveEndpoint@167ed4[address=192.168.178.139,port=502]

[ing.ModbusSlaveConnectionFactoryImpl] - re-connect reached max tries 3, throwing last error: Connection refused (Connection refused). Connection TCPMasterConnection@1e09008[socket=Socket[unconnected]]. Endpoint ModbusTCPSlaveEndpoint@167ed4[address=192.168.178.139,port=502]

[ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - Error connecting connection TCPMasterConnection@1e09008[socket=Socket[unconnected]] for endpoint ModbusTCPSlaveEndpoint@167ed4[address=192.168.178.139,port=502]: Connection refused (Connection refused)

[WARN ] [rt.modbus.internal.ModbusManagerImpl] - Could not connect to endpoint ModbusTCPSlaveEndpoint@167ed4[address=192.168.178.139,port=502] -- aborting request ModbusReadRequestBlueprint@afe13[slaveId=3,functionCode=READ_INPUT_REGISTERS,start=30521,length=8,maxTries=3] [operation ID 23a2a74c-508b-4aae-8fbc-c1aa8bf7c4df]
Ich vermute, der TCP-Server muss auch aktiviert werden, oder?

Code: Alles auswählen

Ethernet
Proxy-Einstellungen
Eingeschaltet	Nein			
Port	80		
(1 … 65535)
Server	255.255.255.255			
Login				
Passwort	••••••••			

Modbus
Unit ID	3		
(3 … 123)
P-Vorgaben auf Eingang 2	Ein			

TCP-Server
Eingeschaltet	Nein			
Port	502		
(1 … 65535)

UDP-Server
Eingeschaltet	Nein			
Port	502		
(1 … 65535)

Webconnect
Software-Version	1.5.2.R			
Eingeschaltet	Nein		

Kann für den 2. Wechselrichter einfach eine zweite .things Datei angelegt werden mit der anderen IP-Adresse?
Aber dann müssen alle Things einen anderen Namen bekommen, oder (also z.B. ein X anhängen)?

Code: Alles auswählen

// SMA Inverter Device Type
	Bridge poller DevTypeX              [ start=30053, length=4, refresh=5000, type="input" ] {
	    	Thing data typeX            [ readStart="30053", readValueType="uint32" ] 
  	 }

// SMA Inverter Status
	Bridge poller SMA_StatusX           [ start=30201, length=36, refresh=6000, type="input" ] {
               Thing data statusX           [ readStart="30201", readValueType="int32" ]
               Thing data Grid_ContactorX   [ readStart="30217", readValueType="int32" ]

               Thing data Max_PowerX        [ readStart="30231", readValueType="int32" ]
               Thing data Set_Max_PowerX    [ readStart="30233", readValueType="int32" ]
  	 }
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von udo1toni »

Die IP ist ja in der Modbus Bridge anzugeben. Wenn die Wandler nicht im gleichen Modbus Netz hängen, musst Du eine 2. Modbus Bridge einrichten. Da die Things dann zur 2. Bridge gehören, können die Namen identisch sein, denn die UID unterscheidet sich ja durch den Bridge-Anteil.

Eventuell kannst Du aber auch alles an einen Modbus hängen. Ich kenne mich damit aber zu wenig aus, um genau erklären zu können, was zu tun ist. Gibt es da sowas wie Master/Slave? Und dann müsste der Adressbereich für den einen Wechselrichter geändert werden, damit sich die Geräte nicht ins Gehege kommen.


Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

am66798
Beiträge: 14
Registriert: 11. Aug 2020 19:45
Answers: 0
Wohnort: Gisingen

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von am66798 »

Hallo Selter,

ja, der TCP-Server muss eingeschaltet sein.
Der Port ist 502, aber das weißt du ja schon.
Die ID=3 ist ein voreingestellter Wert von SMA und gilt für alle WR.

Zunächst empfehle ich dir dieses Modbus-Tool auf deinem PC zu installieren.
http://en.radzio.dxp.pl/modbus-master-simulator/
Es wird auch von SMA empfohlen.
Damit kannst du testen, ob der Modbus deiner WR funktioniert.
Kurze Bedienungsanleitung:
Nach dem Programmstart, klickst du auf Connection, Protocol = Modbus TCP
Im Feld "Modbus TCP" gibst du die IP des WR ein und den TCP Port 502
Dann legt's du ein neues File an (z.B. SB3.rmf), klickst wieder auf Connection und Connect.
Dann kann es 15 bis 30 Sekunden dauern und ein Fenster öffnet sich.
Dann gibst du bei "Device ID" 3 ein und rechts daneben stellst du "Input registers" ein.
Im Feld Adress gibts du 30775 ein (Power), bei Length kannst du 4 eingeben.
In der Statuszeile des Fensters siehst du Polls, OK und Errors.
Lass dich anfangs nicht irritieren! Möglicherweise kommt zuerst ein Modbus-Timeout und einige Errors bevor reale Zahlen in der Adress-Spalte ausgegeben werden.
Wenn das funktioniert, können wir mit openHAB weitermachen.
openHAB 4.1.1 auf Raspberry Pi 4B

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von Selter »

Prima - ich probiere das mal aus und melde mich.
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von Selter »

Also - für den ersten Wechselrichter (139) habe ich es soweit hinbekommen, dass die korrekten Werte angezeigt werden.

Jetzt komme ich aber nicht so recht mit dem 2. WR (140) weiter: aktuell werden mir da die gleichen Werte von WR1 angezeigt.
(obwohl heute WR1 heute 5,746 kWh generiert hat und WR2 5,976 kWh)

Das habe ich gemacht:
smainverter140.things erstellt (auf Basis von smainverter139.things)

IP und ID angepasst für WR2 (140):

Code: Alles auswählen

Bridge modbus:tcp:sma "SMA" @ "Modbus" [ host="192.168.178.140", port=502, id=4, connectMaxTries=3] {
Die Things-Namen um "_WR2" erweitert

Code: Alles auswählen

// SMA Inverter Yield_WR2
	Bridge poller Yield_WR2                [ start=30517, length=16, refresh=5000, type="input" ] {
			Thing data Day_Yield_WR2        [ readStart="30517", readValueType="int64", readTransform="JS(divide1000.js)" ]
			Thing data Total_Yield_WR2      [ readStart="30529", readValueType="int32", readTransform="JS(divide1000.js)" ]
   	}
bei WR1 war das:

Code: Alles auswählen

Bridge modbus:tcp:sma "SMA" @ "Modbus" [ host="192.168.178.139", port=502, id=3, connectMaxTries=3] {

Code: Alles auswählen

// SMA Inverter Yield
	Bridge poller Yield                [ start=30517, length=16, refresh=5000, type="input" ] {
			Thing data Day_Yield        [ readStart="30517", readValueType="int64", readTransform="JS(divide1000.js)" ]
			Thing data Total_Yield      [ readStart="30529", readValueType="int32", readTransform="JS(divide1000.js)" ]
   	}

.items

Für WR2:

Code: Alles auswählen

	Number     SMAWR140_DaylyYield       "Tagesertrag [%s kWh]"                             <line>              (gM,gR,gI,Gsmawr140)    ["Measurement","Energy"]         {channel="modbus:data:sma:Yield_WR2:Day_Yield_WR2:number"}
	Number     SMAWR140_TotalYield       "Gesamtertrag [%s kWh]"                            <line>              (gM,gR,gI,Gsmawr140)    ["Measurement","Energy"]         {channel="modbus:data:sma:Yield_WR2:Total_Yield_WR2:number"}

War bei WR1:

Code: Alles auswählen

Number     SMAWR139_DailyYield       "Tagesertrag [%s kWh]"                             <line>              (gM,gR,gI,Gsmawr139)    ["Measurement","Energy"]         {channel="modbus:data:sma:Yield:Day_Yield:number"}
	Number     SMAWR139_TotalYield       "Gesamtertrag [%s kWh]"                            <line>              (gM,gR,gI,Gsmawr139)    ["Measurement","Energy"]         {channel="modbus:data:sma:Yield:Total_Yield:number"}
	
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von int5749 »

Benenne mal Deine Brigdes eindeutig ;-)

WR1

Code: Alles auswählen

Bridge modbus:tcp:sma1
WR2

Code: Alles auswählen

Bridge modbus:tcp:sma2
Und dann natürlich die Items entsprechend anpassen.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

am66798
Beiträge: 14
Registriert: 11. Aug 2020 19:45
Answers: 0
Wohnort: Gisingen

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von am66798 »

Bridge modbus:tcp:sma "SMA" @ "Modbus" [ host="192.168.178.140", port=502, id=4, connectMaxTries=3] {
id=4 ist falsch!
SMA hat die ID's auf 3 voreingestellt. Guck mal in mein erstes Posting.
openHAB 4.1.1 auf Raspberry Pi 4B

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von Selter »

am66798 hat geschrieben: 6. Nov 2021 11:56 id=4 ist falsch!
SMA hat die ID's auf 3 voreingestellt. Guck mal in mein erstes Posting.
Also tatsächlich auf beiden WR die ID 3 einstellen?
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von int5749 »

Selter hat geschrieben: 6. Nov 2021 14:25
am66798 hat geschrieben: 6. Nov 2021 11:56 id=4 ist falsch!
SMA hat die ID's auf 3 voreingestellt. Guck mal in mein erstes Posting.
Also tatsächlich auf beiden WR die ID 3 einstellen?
Nur, wenn Du es nicht geändert hast. Ich habe meine WR auf unterschiedliche ID gestellt.
Default ist die besagte ID 3

Dennoch muß die Bridge eindeutig sein und dies ist unabhängig von der IP oder der ID.

Meine Bridges habe ich z.B. mit der WR Kennung angelegt.

Code: Alles auswählen

Bridge modbus:tcp:smaSB25
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: SMA Energy Meter Binding / Wechselrichter über Modbus - Textfile Konfiguration

Beitrag von Selter »

Vielen Dank!
Mit Euren Tipps funktioniert es nun :-)

Jetzt fehlen nur noch ein paar Dinge ...
(Aktuell kann ich leider auch nicht weiter testen, da die Sonne weg ist)

Werte für Eingang B

In der .things Codevorlage sind leider für Eingang B nicht alle Register aufgeführt.
Insbes. "active_power" wäre wichtig, da das die momentane Leistung ist und die wird pro Eingang (Strang) separat ausgewiesen, oder?

Code: Alles auswählen

// SMA Inverter Power Section A
	Bridge poller power_a              	[ start=30769, length=20, refresh=5000, type="input" ] {
			Thing data current_input    [ readStart="30769", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
			Thing data voltage_input    [ readStart="30771", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
			Thing data power       		[ readStart="30773", readValueType="int32", readTransform="JS(smalimit1000.js)"]
			Thing data active_power     [ readStart="30775", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
			Thing data active_powerWatt	[ readStart="30775", readValueType="int32", readTransform="JS(smalimit.js)" ]
			Thing data power_L1         [ readStart="30777", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
			Thing data power_L2         [ readStart="30779", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
			Thing data power_L3         [ readStart="30781", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
			Thing data volt_G1          [ readStart="30783", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
			Thing data volt_G2          [ readStart="30785", readValueType="uint32", readTransform="JS(smalimit100A.js)" ]
			Thing data volt_G3          [ readStart="30787", readValueType="uint32", readTransform="JS(smalimit100A.js)"]
  	}

// SMA Inverter Power B
	Bridge poller power_b              	[ start=30957, length=8, refresh=5000, type="input" ] {
			Thing data currentB_input   [ readStart="30957", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
			Thing data voltageB_input   [ readStart="30959", readValueType="int32", readTransform="JS(smalimit100.js)" ]
			Thing data power       		[ readStart="30961", readValueType="int32", readTransform="JS(smalimit1000.js)" ] 
   	}

In der Modbus-Beschreibung https://forum.iobroker.net/assets/uploa ... -de-13.pdf kann ich nichts dazu finden.
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Antworten