SAX-Power

Begonnen von mhehl, 04 August 2023, 11:50:52

Vorheriges Thema - Nächstes Thema

mhehl

Hallöle
Ich möchte meine SAX Batterie in FHEM einbinden.
https://sax-power.net/wp-content/uploads/2022/03/SAX-Homespeicher-Handbuch.pdf
Mit modbus soll das gehen, aber wie genau?
Mein Stand: define SAX-Power ModbusAttr 1 20 192.168.178.49:3600 TCP
state opened - keine Readings. Hat jemand Tipps?
mit freundlichen Grüßen vom Bodensee
Martin Hehl

CaptainHook

Moin,

du solltest auch die Modbus Register definieren, welche du auslesen möchtest
Beispiel:

attr SAX-Power obj-h46-reading SOC
attr SAX-Power obj-h46-expr $val

attr SAX-Power obj-h47-reading Leistung_Speicher
attr SAX-Power obj-h47-expr $val

attr SAX-Power obj-h48-reading Leistung_Meter
attr SAX-Power obj-h48-expr $val


Grüße,
stephan
Lenovo M53 ThinkCentre 10DC | Docker | SolarEdge SE10K + SE5000H + Energy Bank 10KWh | EspEasy | Tasmota | Hue | Alexa | uvm.

Pappa B

#2
Hallo zusammen,

ich habe mir auch einen solchen Stromspeicher zugelegt und scheitere leider an der Kommuniktion mit dem Teil.
Eingebunden habe ich den Speicher mit ModbusAttr:
Internals:
   DEF        2 20 192.168.1.XXX:3600 RTU
   DeviceName 192.168.1.XXX:3600
   EXPECT     idle
   FUUID      6722152d-f33f-547b-20c3-edeec1d788202a60
   FVERSION   98_ModbusAttr.pm:0.277000/2023-06-23
   IODev      SAX_Power
   Interval   20
   LASTOPEN   1732613196.94365
   MODBUSID   2
   MODE       master
   MODULEVERSION Modbus 4.5.6 - 7.11.2023
   NAME       SAX_Power
   NEXT_OPEN  1732613257.03857
   NOTIFYDEV  global
   NR         696
   NTFY_ORDER 50-SAX_Power
   PARTIAL   
   PROTOCOL   RTU
   STATE      disconnected
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   devioNoSTATE 1
   eventCount 56
   nextOpenDelay 60
   FRAME:
   QUEUE:
   READ:
   READINGS:
     2024-11-26 10:26:37   state           disconnected
   UPDATECACHE:
   defptr:
     SAX_Power  2
   lastRead:
Attributes:
   DbLogExclude .*
   enableControlSet 1
   obj-h46-expr $val
   obj-h46-reading SOC
   obj-h47-expr $val
   obj-h47-reading Leistung_Speicher
   obj-h48-expr $val
   obj-h48-reading Leistung_Meter
   room       Draussen->06-Solar
   userReadings obj-h46-expr obj-h46-reading obj-h47-expr obj-h47-reading obj-h48-expr obj-h48-reading
   verbose    5

State steht auf disconnected.
Mach ich da was falsch????

Ne schöne jroß us Kölle
Thomas

RPort

Hallo,
ich habe bisher noch keinen SAX Speicher - überlege aber, einen solchen anzuschaffen. Deshalb bin ich auf dieses Topic gestoßen.
-> Läuft die Anbindung inzwischen und ggf. wie?

Ansonsten hätte ich möglicherweise folgende Hinweise (die ich mangels eigenem System natrürlich nicht ausprobieren kann - deshalb Alles ohne Gewähr)
Im Manual der SAX zu SAX Power Home steht - nach meinem Verständis -..

- Protokoll ist TCP (mit Standardport 502)
- die Slave-ID ist 64

Dann würde ich versuchen:
define SAX-Power ModbusAttr 1 64 192.168.178.xy:502 TCP

Die Register sind mit Typ uint16 angegeben

dann würde ich versuchen, diesen Typ zu definieren:

dev-type-uint16-len 2
dev-type-uint16-unpack nn


obj-h46-reading SOC
obj-h46-type    uint16
...

Falls das noch jemand interessiert, bitte Feedback, ob es funktioniert.

RPort

Ich habe nun einen SAX und konnte diesen einbinden.

Ich habe die Steuerung per SAX-Smartmeter gewählt.
Bzgl. Vorgabe des Ladestromes per TCP steht im Handbuch, dass die Anpassung nur mit etwa 30W/sec erfolgt.
Das ist mir zu langsam.
Die ebenfalls im Handbuch erwähnte immediate-Variante ist (anscheinend seit längerer Zeit) nicht verfügbar.
-> Ich begrenze nur die Beladung, um den Speicher möglichst spät bzw. nur bei drohender Wirkleistungsbegrenzung zu laden.
   Dazu ist die Freigabe des Schreibens der Register 43/44 notwendig, die man selbst in der SAX-App vornehmen kann.
---
Es gibt einige Besonderheit:
Schreiben erfolgt mit fc 16 (0x10). Der SAX gibt dann aber keinen Wert zurück.
Deshalb setze ich in meiner Ladesteuerung den Wert des Readings "Grenzwert_Beladung_W44" nach dem set zusätzlich selbst, damit der letzte Wert sichtbar ist.

Die Adressen der holding-Register habe ich nach folgender Logik bestimmt:
0x400+Dezimalwert aus dem Handbuch, d.h. z.B. 16384+44=16428 für Grenzwert_Beladung_W44


defmod SAX ModbusAttr 64 30 192.xxx.xxx.xxx:502 TCP
attr SAX dev-h-combine 6
attr SAX dev-h-defPoll 1
attr SAX dev-h-defShowGet 1
attr SAX dev-h-write 16
attr SAX obj-h16427-poll 0
attr SAX obj-h16427-reading Grenzwert_Entladung_W43
attr SAX obj-h16428-poll 0
attr SAX obj-h16428-reading Grenzwert_Beladung_W44
attr SAX obj-h16428-set 1
attr SAX obj-h16429-map 1:Aus, 2:Ein, 3:Verbunden
attr SAX obj-h16429-reading Schaltzustand_45
attr SAX obj-h16430-reading SOC_Proz46
attr SAX obj-h16431-expr $val -16384
attr SAX obj-h16431-reading Leistung_SpeicherW47
attr SAX obj-h16432-expr $val -16384
attr SAX obj-h16432-reading Leistung_SmartmeterW48
attr SAX propagateVerbose 1

Laut Handbuch gibt es noch eine ModbusID 40 mit Sunspecs-Werten - es ist mir aber nicht gelungen, diese (mit analoger Logik) anzusprechen.
-> Falls jemand das geschafft hat, wäre ich für Hinweise dankbar.