openWB Anbindung an IPSymcon
Verfasst: Fr Jul 19, 2019 12:46 pm
Für alle, die sich dafür Interessieren ihre SMA Komponenten und openWB in die Hausautomation IPSymcon einzubinden, kann dieser Hinweis ggf. hilfreich sein. Da Kevin bereits das smaemd Modul vom "Datenschuft" [https://github.com/datenschuft/SMA-EM] nutzt, kann dieses durch entsprechende Erweiterung der Konfiguration dafür genutzt werden.
smaemd erweitert den Funktionsumfang über sogenannte "Features". Das nette ist, dass es bereits mit fertigen "Features" ausgeliefert wird. Eines davon ist das Auslesen der EVU Werte des SMA Homemanagers. Dieses nutzt Kevin wie erwähnt bereits. Weiterhin können jedoch auch die Modbus Register der SMA Wechselrichter ausgelesen werden. Dies geschieht über das Feature "pvdata.py". Und im die Sache abzurunden, gibt es ein weiteres Feature, um die abgefragten Werte dann an IPSymcon zu übermitteln ("symcon.py")
Alles was dafür getan werden muss, ist die Konfiguration des smaemd Daemon etwas anzupassen, um diese zusätzlichen "Features" zu aktivieren. Hier mein Beispiel (/etc/smaemd/config). Fett markiert sind die Werte, die ich hinzugefügt habe. Eine entsprechende Doku ist aber auch im Configfile bzw. auf der GitHub Seite des Projekts vorhanden
https://github.com/datenschuft/SMA-EM
[SMA-EM]
# serials of sma-ems the daemon should take notice
# seperated by space
serials=<Home Manager Serial>
# features could filter serials to, but wouldn't see serials if these serials was not defines in SMA-EM serials
# list of features to load/run
features=simplefswriter sample symcon pvdata
[FEATURE-pvdata]
# How frequently to send updates over (defaults to 20 sec)
min_update=10
#debug output
debug=1
#inverter connection
inv_host = 192.168.178.52 #Wechselrichter IP (Modbus Server muss aktiviert sein)
inv_port = 502 #Port des Modbus Servers
inv_modbus_id = 3 # Static
inv_manufacturer = SMA
#['address', 'type', 'format', 'description', 'unit', 'value']
registers = [ #Register, die beim WR ausgelesen werden sollen. s. angehängte Liste für Dokumentation
['30057', 'U32', 'RAW', 'serial', ''],
['30201','U32','ENUM','Status',''],
['30051','U32','ENUM','DeviceClass',''],
['30053','U32','ENUM','DeviceID',''],
# ['40631', 'STR32', 'UTF8', 'Device Name', ''], # Beim Auslesen gab es Probleme mit der UTF-8 Codierung dieses Feldes, daher entfernt
['30775', 'S32', 'FIX0', 'AC Power', 'W'],
['30813', 'S32', 'FIX0', 'AC apparent power', 'VA'],
['30979', 'S32', 'FIX3', 'Grid current phase L2', 'A'],
['30783', 'S32', 'FIX2', 'AC voltage', 'V'],
['30803', 'U32', 'FIX2', 'grid frequency', 'Hz'],
['30773', 'S32', 'FIX0', 'DC power', 'W'],
['30771', 'S32', 'FIX2', 'DC input voltage', 'V'],
['30769', 'S32', 'FIX3', 'DC current input', 'A'],
['30777', 'S32', 'FIX0', 'Power L1', 'W'],
['30779', 'S32', 'FIX0', 'Power L2', 'W'],
['30781', 'S32', 'FIX0', 'Power L3', 'W'],
['30953', 'S32', 'FIX1', u'device temperature', u'\xb0C'],
['30517', 'U64', 'FIX3', 'daily yield', 'kWh'],
['30513', 'U64', 'FIX3', 'total yield', 'kWh'],
['30521', 'U64', 'FIX0', 'operation time', 's'],
['30525', 'U64', 'FIX0', 'feed-in time', 's'],
['30975', 'S32', 'FIX2', 'intermediate voltage', 'V'],
['30225', 'S32', 'FIX0', 'Isolation resistance', u'\u03a9'],
['30581', 'U32', 'FIX0', u'energy from grid', 'Wh'],
['30583', 'U32', 'FIX0', u'energy to grid', 'Wh'],
['30783', 'U32', 'FIX2', 'Grid voltage phase L1', 'V'],
['30785', 'U32', 'FIX2', 'Grid voltage phase L2', 'V'],
['30787', 'U32', 'FIX2', 'Grid voltage phase L3', 'V'],
['40009', 'U32', 'ENUM', 'Operation Condition', ''],
['30865', 'S32', 'FIX0', 'Power from grid', 'W'],
['30867', 'S32', 'FIX0', 'Power to grid', 'W']
]
[FEATURE-symcon]
# symcon
host=192.168.178.39 #IP der IP Symcon Instanz
port=3777 # Port der Symcon Instanz
emhook=/hook/smaem # Webkook URL für die Übertragung der HomeManager Werte. muss zuvor in IP Symcon eingerichtet werden
pvhook=/hook/smawr # Webkook URL für die Übertragung der Wechselrichter Werte. muss zuvor in IP Symcon eingerichtet werden
timeout=5
user=<user> # User und PW zur Authentifizierung an IP Symcon
password=<pw>
fields=pregard,pregardcounter,psurplus,psurplus,psurpluscounter,p1regard,p1surplus,p2regard,p2surplus,p3regard,p3surplus
pvfields=AC Power,Grid voltage phase L2,Grid current phase L2,grid frequency,DC power,DC input voltage,DC current input,daily yield,total yield,Power L1,Power L2,Power L3,Status,DeviceID,Power to grid,Power from grid,device temperature # Die Register die übertragen werden sollen, müssen jeweils unter registers oben beim Feature PV definiert sein
# How frequently to send updates over (defaults to 20 sec)
min_update=10
debug=0
Ich musste noch ein paar Anpassungen an dem smamodbus.py Skript vornehmen, damit es wirklich rund läuft. Lag aber daran, dass die Sunny Boys noch nicht offiziell in der Konfiguration vorhanden waren.
Die Webhooks IPSymcon seitig müssen übrigens auch nicht selbst geschrieben werden. Entsprechende php Skripte findet ihr ebenfalls im /opt/smaemd/features Ordner => symcon_smaem_webhook.php, symcon_smawr_webhook.php
Das legt euch auch gleich alle benötigten Variablen an. In den Scripten müsst ihr nur hinterlegt, welche Werte vom smaemd übertragen werden, also analog zur symcon Konfiguration oben.
Und das wars dann. Das ganze könnte dann z.B. so aussehen: Darauf basierend könnt ihr euch dann entsprechenden Graphen, Alarmierungen, Schaltvorgänge, etc. definieren
Modbus Register je SMA Wechselrichter:
Bleibt nur die Frage, ob Kevin die Konfiguration mal bei einem Ugrade überschreibt. Also am Besten nach dem Anpassen im Homefolder zwischensichern.
Viel Spass beim Nachbasteln,
Michael
smaemd erweitert den Funktionsumfang über sogenannte "Features". Das nette ist, dass es bereits mit fertigen "Features" ausgeliefert wird. Eines davon ist das Auslesen der EVU Werte des SMA Homemanagers. Dieses nutzt Kevin wie erwähnt bereits. Weiterhin können jedoch auch die Modbus Register der SMA Wechselrichter ausgelesen werden. Dies geschieht über das Feature "pvdata.py". Und im die Sache abzurunden, gibt es ein weiteres Feature, um die abgefragten Werte dann an IPSymcon zu übermitteln ("symcon.py")
Alles was dafür getan werden muss, ist die Konfiguration des smaemd Daemon etwas anzupassen, um diese zusätzlichen "Features" zu aktivieren. Hier mein Beispiel (/etc/smaemd/config). Fett markiert sind die Werte, die ich hinzugefügt habe. Eine entsprechende Doku ist aber auch im Configfile bzw. auf der GitHub Seite des Projekts vorhanden
https://github.com/datenschuft/SMA-EM
[SMA-EM]
# serials of sma-ems the daemon should take notice
# seperated by space
serials=<Home Manager Serial>
# features could filter serials to, but wouldn't see serials if these serials was not defines in SMA-EM serials
# list of features to load/run
features=simplefswriter sample symcon pvdata
[FEATURE-pvdata]
# How frequently to send updates over (defaults to 20 sec)
min_update=10
#debug output
debug=1
#inverter connection
inv_host = 192.168.178.52 #Wechselrichter IP (Modbus Server muss aktiviert sein)
inv_port = 502 #Port des Modbus Servers
inv_modbus_id = 3 # Static
inv_manufacturer = SMA
#['address', 'type', 'format', 'description', 'unit', 'value']
registers = [ #Register, die beim WR ausgelesen werden sollen. s. angehängte Liste für Dokumentation
['30057', 'U32', 'RAW', 'serial', ''],
['30201','U32','ENUM','Status',''],
['30051','U32','ENUM','DeviceClass',''],
['30053','U32','ENUM','DeviceID',''],
# ['40631', 'STR32', 'UTF8', 'Device Name', ''], # Beim Auslesen gab es Probleme mit der UTF-8 Codierung dieses Feldes, daher entfernt
['30775', 'S32', 'FIX0', 'AC Power', 'W'],
['30813', 'S32', 'FIX0', 'AC apparent power', 'VA'],
['30979', 'S32', 'FIX3', 'Grid current phase L2', 'A'],
['30783', 'S32', 'FIX2', 'AC voltage', 'V'],
['30803', 'U32', 'FIX2', 'grid frequency', 'Hz'],
['30773', 'S32', 'FIX0', 'DC power', 'W'],
['30771', 'S32', 'FIX2', 'DC input voltage', 'V'],
['30769', 'S32', 'FIX3', 'DC current input', 'A'],
['30777', 'S32', 'FIX0', 'Power L1', 'W'],
['30779', 'S32', 'FIX0', 'Power L2', 'W'],
['30781', 'S32', 'FIX0', 'Power L3', 'W'],
['30953', 'S32', 'FIX1', u'device temperature', u'\xb0C'],
['30517', 'U64', 'FIX3', 'daily yield', 'kWh'],
['30513', 'U64', 'FIX3', 'total yield', 'kWh'],
['30521', 'U64', 'FIX0', 'operation time', 's'],
['30525', 'U64', 'FIX0', 'feed-in time', 's'],
['30975', 'S32', 'FIX2', 'intermediate voltage', 'V'],
['30225', 'S32', 'FIX0', 'Isolation resistance', u'\u03a9'],
['30581', 'U32', 'FIX0', u'energy from grid', 'Wh'],
['30583', 'U32', 'FIX0', u'energy to grid', 'Wh'],
['30783', 'U32', 'FIX2', 'Grid voltage phase L1', 'V'],
['30785', 'U32', 'FIX2', 'Grid voltage phase L2', 'V'],
['30787', 'U32', 'FIX2', 'Grid voltage phase L3', 'V'],
['40009', 'U32', 'ENUM', 'Operation Condition', ''],
['30865', 'S32', 'FIX0', 'Power from grid', 'W'],
['30867', 'S32', 'FIX0', 'Power to grid', 'W']
]
[FEATURE-symcon]
# symcon
host=192.168.178.39 #IP der IP Symcon Instanz
port=3777 # Port der Symcon Instanz
emhook=/hook/smaem # Webkook URL für die Übertragung der HomeManager Werte. muss zuvor in IP Symcon eingerichtet werden
pvhook=/hook/smawr # Webkook URL für die Übertragung der Wechselrichter Werte. muss zuvor in IP Symcon eingerichtet werden
timeout=5
user=<user> # User und PW zur Authentifizierung an IP Symcon
password=<pw>
fields=pregard,pregardcounter,psurplus,psurplus,psurpluscounter,p1regard,p1surplus,p2regard,p2surplus,p3regard,p3surplus
pvfields=AC Power,Grid voltage phase L2,Grid current phase L2,grid frequency,DC power,DC input voltage,DC current input,daily yield,total yield,Power L1,Power L2,Power L3,Status,DeviceID,Power to grid,Power from grid,device temperature # Die Register die übertragen werden sollen, müssen jeweils unter registers oben beim Feature PV definiert sein
# How frequently to send updates over (defaults to 20 sec)
min_update=10
debug=0
Ich musste noch ein paar Anpassungen an dem smamodbus.py Skript vornehmen, damit es wirklich rund läuft. Lag aber daran, dass die Sunny Boys noch nicht offiziell in der Konfiguration vorhanden waren.
Die Webhooks IPSymcon seitig müssen übrigens auch nicht selbst geschrieben werden. Entsprechende php Skripte findet ihr ebenfalls im /opt/smaemd/features Ordner => symcon_smaem_webhook.php, symcon_smawr_webhook.php
Das legt euch auch gleich alle benötigten Variablen an. In den Scripten müsst ihr nur hinterlegt, welche Werte vom smaemd übertragen werden, also analog zur symcon Konfiguration oben.
Und das wars dann. Das ganze könnte dann z.B. so aussehen: Darauf basierend könnt ihr euch dann entsprechenden Graphen, Alarmierungen, Schaltvorgänge, etc. definieren
Modbus Register je SMA Wechselrichter:
Bleibt nur die Frage, ob Kevin die Konfiguration mal bei einem Ugrade überschreibt. Also am Besten nach dem Anpassen im Homefolder zwischensichern.
Viel Spass beim Nachbasteln,
Michael