Hi Thomas.
Thanks for your data
Finding the “correct” registers was quite a job as there are so many different version of the Growatt modbus docu out there (and none is either complete or 100% correct ).
I’m sure I still have quite some registers wrong but all those I use in rules and UI’s do properly work.
I did try to read the Eastron (used by the Growatt) directly by bringing it onto the modbus line to the openHab server but this resulted in issues in communication bt. Growatt SPH and the Eastron so I discarded this attempt.
The Growatt (my SPH-10000) “forwards” the Eastron data so I read the forwarded data. I also have some additional Eastrons in the modbus line to the openHab to monitor additional consumers not related to the Growatt solar system.
The battery is only connected to my SPH (none on my MOD) and the SPH provides very detailed data on the battery and BMS (address ranges 1082-1096 BMS-Data, 1009;1014 charging data, and 118-119, 608, etc).
As far as I see the register addresses differ significantly bt. MOD and SPH as MOD mostly uses addresses in the 3000 range, on my SPH there’s not a single one in that range.
Below you find my current addresses of the SPH-, MOD- and Eastron- (those not used by Growatt but only monitor other consumers) - thete might have some additions/changes since my original post.
I also tried to integrate the Wallbox into the Modbus line to the Server but was I was not successful. I neither found register addresses for the Thor-Wallbox on the internet nor was I able to detect any myself.
Have you been more successful in integrating the Wallbox to the modbus network?
It would be great to start/stop the chargin process or limit/increse charging power via the openHab Server.
I’ll take a deep dive on your register addresses ASAP and check if I find some that I can use for my applications
Did you find any errors in my addresses? Of course I’d love to correct them.
Thanks and kind regards,
Ralph…
MOD-Register:
//Growatt MOD-3000:
Bridge modbus:serial:MOD3000 "Modbus MOD3000" [port="/dev/ttyUSB0", id=17, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu", timeBetweenTransactionsMillis=1000 ]
{
//HOLDING registers:
Bridge poller Firmware "Firmware" [start=9, length=6, type="holding", refresh=12000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data FwH "Firmware High" [readStart="9", readValueType="uint16"]
Thing data FwM "Firmware M" [readStart="10", readValueType="uint16"]
Thing data FwL "Firmware Low" [readStart="11", readValueType="uint16"]
Thing data Fw2H "Firmware 2 High" [readStart="12", readValueType="uint16"]
Thing data Fw2M "Firmware 2 M" [readStart="13", readValueType="uint16"]
Thing data Fw2L "Firmware 2 Low" [readStart="14", readValueType="uint16"]
}
Bridge poller GeneralSettings "Allgemeine Einstellungen" [start=15, length=1, type="holding", refresh=1200000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data LcdLanguage "LCD Sprache" [readStart="15", readValueType="uint16"]
}
Bridge poller Modbus "Modbus" [start=73, length=2, type="holding", refresh=60000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data version "Modbus-Version" [readStart="73", readValueType="uint16"]
}
Bridge poller Serial "Seriennummer" [start=3001, length=15, type="holding", refresh=1200000, maxTries=2] //für TL-X und TL-XH ab holding register 3000!
{
Thing data Serial1 "Seriennummer1" [readStart="3001", readValueType="uint16"]
Thing data Serial2 "Seriennummer2" [readStart="3002", readValueType="uint16"]
Thing data Serial3 "Seriennummer3" [readStart="3003", readValueType="uint16"]
Thing data Serial4 "Seriennummer4" [readStart="3004", readValueType="uint16"]
Thing data Serial5 "Seriennummer5" [readStart="3005", readValueType="uint16"]
Thing data Serial6 "Seriennummer6" [readStart="3006", readValueType="uint16"]
Thing data Serial7 "Seriennummer7" [readStart="3007", readValueType="uint16"]
Thing data Serial8 "Seriennummer8" [readStart="3008", readValueType="uint16"]
Thing data Serial9 "Seriennummer9" [readStart="3009", readValueType="uint16"]
Thing data Serial10 "Seriennummer10" [readStart="3010", readValueType="uint16"]
Thing data Serial11 "Seriennummer11" [readStart="3011", readValueType="uint16"]
Thing data Serial12 "Seriennummer12" [readStart="3012", readValueType="uint16"]
Thing data Serial13 "Seriennummer13" [readStart="3013", readValueType="uint16"]
Thing data Serial14 "Seriennummer14" [readStart="3014", readValueType="uint16"]
Thing data Serial15 "Seriennummer15" [readStart="3015", readValueType="uint16"]
}
//INPUT registers:
Bridge poller status "Status-Daten" [start=0, length=1, type="input", refresh=12000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data inverterStatus "Inverter-Status" [readStart="0", readValueType="uint16"]
Thing data inverterStatusTxt "Inverter-Status" [readStart="0", readValueType="uint16", readTransform="MAP:growattModStatus.map"]
}
Bridge poller InverterPvDaten1 "PV-Daten 1" [start=1, length=10, type="input", refresh=10000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data InputPower "Eingangsleistung" [readStart="1", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Pv1V "String 1 Spannung" [readStart="3", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv1A "String 1 Stromstärke" [readStart="4", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv1W "String 1 Leistung" [readStart="5", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Pv2V "String 2 Spannung" [readStart="7", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv2A "String 2 Stromstärke" [readStart="8", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv2W "String 2 Leistung" [readStart="9", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller InverterPvDaten2 "PV-Daten 2" [start=35, length=2, type="input", refresh=10000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data OutputPower "Ausgangsleistung" [readStart="35", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller InverterNetzDaten "Netz-Daten" [start=37, length=13, type="input", refresh=60000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data Netzfrequenz "Netzfrequenz" [readStart="37", readValueType="uint16", readTransform="JS:divide_100.js"]
Thing data Phase1V "Spannung Phase 1" [readStart="38", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase1A "Stromstärke Phase 1" [readStart="39", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase1W "Leistung Phase 1" [readStart="40", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Phase2V "Spannung Phase 2" [readStart="42", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase2A "Stromstärke Phase 2" [readStart="43", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase2W "Leistung Phase 2" [readStart="44", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Phase3V "Spannung Phase 3" [readStart="46", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase3A "Stromstärke Phase 3" [readStart="47", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase3W "Leistung Phase 3" [readStart="48", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller ProduktionsDaten "Produktions-Daten" [start=53, length=6, type="input", refresh=60000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data energyToday "Tagesproduktion" [readStart="53", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyTotal "Gesamtproduktion" [readStart="55", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data workTimeTotal "Betriebszeit" [readStart="57", readValueType="uint32", readTransform="JS:growattWtUint32To2xUint16.js"] //kommt als 2x uint16
Thing data workTimeTotalTxt "Betriebszeit" [readStart="57", readValueType="uint32", readTransform="JS:growattWtUint32To2xUint16.js∩JS:secondsToDDHHMMSS.js"] //kommt als 2x uint16, jeweils in 0.5sec Einheiten
}
Bridge poller PvProduktionsDaten1 "Produktions-Daten" [start=59, length=8, type="input", refresh=60000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data energyPv1Today "Tagesproduktion String-1" [readStart="59", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyPv1Total "Gesamtproduktion String-1" [readStart="61", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyPv2Today "Tagesproduktion String-2" [readStart="63", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyPv2Total "Gesamtproduktion String-2" [readStart="65", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller PvProduktionsDaten2 "PV-Produktions-Daten" [start=91, length=2, type="input", refresh=60000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data energyPvTotal "PV-Gesamtproduktion" [readStart="91", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller FehlerDaten "Fehler-Daten" [start=86, length=9, type="input", refresh=12000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data StrFault "StrFault" [readStart="86", readValueType="uint16"]
Thing data StrWarn "StrWarn" [readStart="87", readValueType="uint16"]
Thing data StrBreak "StrBreak" [readStart="88", readValueType="uint16"]
Thing data PIDFaultCode "PIDFaultCoude" [readStart="89", readValueType="uint16"]
Thing data GridFaultRecord1Code "GridFaultRecord1Code" [readStart="90", readValueType="uint16"]
}
Bridge poller Netzdaten "Netzdaten" [start=1015, length=24, type="input", refresh=10000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data pacToUser1 "pacToUser1" [readStart="1015", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToUser2 "pacToUser2" [readStart="1017", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToUser3 "pacToUser3" [readStart="1019", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToUserTotal "pacToUserTotal" [readStart="1021", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGrid1 "pacToGrid1" [readStart="1023", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGrid2 "pacToGrid2" [readStart="1025", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGrid3 "pacToGrid3" [readStart="1027", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGridTotal "pacToGridTotal" [readStart="1029", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoad1 "pacToLocalLoad1" [readStart="1031", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoad2 "pacToLocalLoad2" [readStart="1033", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoad3 "pacToLocalLoad3" [readStart="1035", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoadTotal "pacToLocalLoadTotal" [readStart="1037", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
}
SPH-Register:
//Modbus message parser: https://rapidscada.net/modbus/
Bridge modbus:serial:SPH10000 "Growatt SPH10000" [ port="/dev/ttyUSB0", id=1, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu", timeBetweenTransactionsMillis=1000 ]
{
//Holding registers ************************************************************************************************
Bridge poller growattGeneralSettings "Allgemeine Einstellungen" [start=15, length=1, type="holding", refresh=1200000, maxTries=2] //start=608, length=1, refresh=12000, type="holding", maxTries=2 ]
{
Thing data growattLcdLanguage "LCD Sprache" [readStart="15", readValueType="uint16"]
}
Bridge poller InverterPvDaten1 "PV-Daten 1" [start=1, length=10, type="input", refresh=10000, maxTries=2]
{
Thing data InputPower "Eingangsleistung" [readStart="1", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Pv1V "String 1 Spannung" [readStart="3", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv1A "String 1 Stromstärke" [readStart="4", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv1W "String 1 Leistung" [readStart="5", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Pv2V "String 2 Spannung" [readStart="7", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv2A "String 2 Stromstärke" [readStart="8", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Pv2W "String 1 Leistung" [readStart="9", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller InverterPvDaten2 "PV-Daten 2" [start=35, length=2, type="input", refresh=10000, maxTries=2]
{
Thing data OutputPower "Ausgangsleistung" [readStart="35", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller status "Inverter-Daten 1" [start=0, length=1, type="input", refresh=12000, maxTries=2]
{
Thing data inverterStatus "Inverter-Status" [readStart="0", readValueType="uint16"]
Thing data inverterStatusTxt "Inverter-Status" [readStart="0", readValueType="uint16", readTransform="MAP:UwSysWorkMode.map"]
}
Bridge poller Firmware "Firmware" [start=9, length=6, type="holding", refresh=1200000, maxTries=2]
{
Thing data FwH "Firmware High" [readStart="9", readValueType="uint16"]
Thing data FwM "Firmware M" [readStart="10", readValueType="uint16"]
Thing data FwL "Firmware Low" [readStart="11", readValueType="uint16"]
Thing data Fw2H "Firmware 2 High" [readStart="12", readValueType="uint16"]
Thing data Fw2M "Firmware 2 M" [readStart="13", readValueType="uint16"]
Thing data Fw2L "Firmware 2 Low" [readStart="14", readValueType="uint16"]
}
Bridge poller growattSerial "Seriennummer" [start=23, length=5, type="holding", refresh=1200000, maxTries=2]
{
Thing data growattSerial5 "Seriennummer5" [readStart="23", readValueType="uint16"]
Thing data growattSerial4 "Seriennummer4" [readStart="24", readValueType="uint16"]
Thing data growattSerial3 "Seriennummer3" [readStart="25", readValueType="uint16"]
Thing data growattSerial2 "Seriennummer2" [readStart="26", readValueType="uint16"]
Thing data growattSerial1 "Seriennummer1" [readStart="27", readValueType="uint16"]
}
Bridge poller Batteriewerte "Modbus Batteriewerte" [start=608, length=1,type="holding", refresh=60000, maxTries=2]
{
Thing data BatterieMinSoc "Minimum SOC" [readStart="608", readValueType="uint16"]
}
Bridge poller batteryFirst "Battery first" [start=1041, length=14, type="holding", refresh=6000, maxTries=2]
{
Thing data minSocLoadFirst "Min-SOC (Verbraucher-zuerst)" [readStart="1041", readValueType="uint16", writeStart="1041", writeValueType="int16", writeType="holding"]
Thing data minSocBatteryFirst "Min-SOC (Batterie-zuerst)" [readStart="1042", readValueType="uint16", writeStart="1042", writeValueType="int16", writeType="holding"]
Thing data batteryFirstAcCharge "Beladung mit Netzstrom erlaubt" [readStart="1043", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data pvUsageMode "PV-Energie-Verwendungs-Modus" [readStart="1044", readValueType="uint16", writeStart="1044", writeValueType="int16", writeType="holding"]
Thing data pvUsageModeTxt "PV-Energie-Verwendungs-Modus" [readStart="1044", readValueType="uint16", readTransform="MAP:growattPvUsageMode.map"]
Thing data batteryFirstChargePowerRate "Charge Power Rate" [readStart="1045", readValueType="uint16", writeStart="1045", writeValueType="int16", writeType="holding"]
Thing data batteryFirst1046 "1046" [readStart="1046", readValueType="uint16", writeStart="1046", writeValueType="int16", writeType="holding"]
Thing data batteryFirst1047 "1047" [readStart="1047", readValueType="uint16", writeStart="1047", writeValueType="int16", writeType="holding"]
Thing data batteryType "Battery Type" [readStart="1048", readValueType="uint16"] //1:Lithium, 0:Lead-acid, 2:other Mapping ist in growatt V1.24 modbus doku falsch!
Thing data batteryTypeTxt "Battery Type" [readStart="1048", readValueType="uint16", readTransform="MAP:growattBatteryType.map"] //1:Lithium, 0:Lead-acid, 2:other Mapping ist in growatt V1.24 modbus doku falsch!
Thing data batteryFirst1049 "1049" [readStart="1049", readValueType="uint16", writeStart="1049", writeValueType="int16", writeType="holding"]
Thing data batteryFirstTimeslot1 "Battery first time slot 1" [readStart="1050", readValueType="uint16", writeStart="1050", writeValueType="int16", writeType="holding"]
Thing data batteryirst1051 "1051" [readStart="1051", readValueType="uint16", writeStart="1051", writeValueType="int16", writeType="holding"]
Thing data batteryFirstTimeslot2 "Battery first time slot 2" [readStart="1052", readValueType="uint16", writeStart="1052", writeValueType="int16", writeType="holding"]
Thing data batteryirst1053 "103" [readStart="1053", readValueType="uint16", writeStart="1053", writeValueType="int16", writeType="holding"]
Thing data batteryFirstTimeslot3 "Battery first time slot 3" [readStart="1054", readValueType="uint16", writeStart="1054", writeValueType="int16", writeType="holding"]
}
Bridge poller prioritySet1 "Prio Einstellungen 1" [start=1017, length=49, type="holding", refresh=6000, maxTries=2]
{
//battery-first (bf) settings:
Thing data bfStartTime4 "Battery-first start time 4" [readStart="1017", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStopTime4 "Battery-first stop time 4" [readStart="1018", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfTime4Switch "Battery-first time 4 switch" [readStart="1019", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStartTime5 "Battery-first start time 5" [readStart="1020", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStopTime5 "Battery-first stop time 5" [readStart="1021", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfTime5Switch "Battery-first time 5 switch" [readStart="1022", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStartTime6 "Battery-first start time 6" [readStart="1023", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStopTime6 "Battery-first stop time 6" [readStart="1024", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfTime6Switch "Battery-first time 6 switch" [readStart="1025", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
//grid-first (gf) settings:
Thing data gfStartTime4 "Grid-first start time 4" [readStart="1026", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStopTime4 "Grid-first stop time 4" [readStart="1027", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfTime4Switch "Grid-first time 4 switch" [readStart="1028", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStartTime5 "Grid-first start time 5" [readStart="1029", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStopTime5 "Grid-first stop time 5" [readStart="1030", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfTime5Switch "Grid-first time 5 switch" [readStart="1031", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStartTime6 "Grid-first start time 6" [readStart="1032", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStopTime6 "Grid-first stop time 6" [readStart="1033", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfTime6Switch "Grid-first time 6 switch" [readStart="1034", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
}
Bridge poller prioritySet2 "Prio Einstellungen 2" [start=1070, length=49, type="holding", refresh=6000, maxTries=2]
{
//grid-first (gf) settings:
Thing data gfDischargePowerRate "Grid-first discharge power rate" [readStart="1070", readValueType="uint16", writeStart="1041", writeValueType="int16", writeType="holding"]
Thing data gfStopSOC "Grid-first stop SOC" [readStart="1071", readValueType="uint16", writeStart="1042", writeValueType="int16", writeType="holding"]
Thing data gfStartTime1 "Grid-first start time 1" [readStart="1080", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStopTime1 "Grid-first stop time 1" [readStart="1081", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfTime1Switch "Grid-first time 1 switch" [readStart="1082", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStartTime2 "Grid-first start time 2" [readStart="1083", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStopTime2 "Grid-first stop time 2" [readStart="1084", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfTime2Switch "Grid-first time 2 switch" [readStart="1085", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStartTime3 "Grid-first start time 3" [readStart="1086", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfStopTime3 "Grid-first stop time 3" [readStart="1087", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data gfTime3Switch "Grid-first time 3 switch" [readStart="1088", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
//battery-first (bf) settings:
Thing data bfChargePowerRate "Battery-first charge power rate" [readStart="1090", readValueType="uint16", writeStart="1041", writeValueType="int16", writeType="holding"]
Thing data bfStopSOC "Battery-first stop SOC" [readStart="1091", readValueType="uint16", writeStart="1042", writeValueType="int16", writeType="holding"]
Thing data bfAllowAcCharge "Battery-first allow AC-charge" [readStart="1092", readValueType="uint16", writeStart="1042", writeValueType="int16", writeType="holding"] //1=enable, 0= disable
Thing data bfStartTime1 "Battery-first start time 1" [readStart="1100", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStopTime1 "Battery-first stop time 1" [readStart="1101", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfTime1Switch "Battery-first time 1 switch" [readStart="1102", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStartTime2 "Battery-first start time 2" [readStart="1103", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStopTime2 "Battery-first stop time 2" [readStart="1104", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfTime2Switch "Battery-first time 2 switch" [readStart="1105", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStartTime3 "Battery-first start time 3" [readStart="1106", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfStopTime3 "Battery-first stop time 3" [readStart="1107", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data bfTime3Switch "Battery-first time 3 switch" [readStart="1108", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
//load first (lf) settings
Thing data lfStartTime1 "Load-first start time 1" [readStart="1110", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfStopTime1 "Load-first stop time 1" [readStart="1111", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfTime1Switch "Load-first time 1 switch" [readStart="1112", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfStartTime2 "Load-first start time 2" [readStart="1113", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfStopTime2 "Grid-first stop time 2" [readStart="1114", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfTime2Switch "Load-first time 2 switch" [readStart="1113", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfStartTime3 "Load-first start time 3" [readStart="1116", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfStopTime3 "Load-first stop time 3" [readStart="1117", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
Thing data lfTime3Switch "Load-first time 3 switch" [readStart="1118", readValueType="uint16", writeStart="1043", writeValueType="int16", writeType="holding"]
}
//Input-registers **************************************************************************************************
Bridge poller InverterNetzDaten "Netz-Daten" [start=37, length=13, type="input", refresh=60000, maxTries=2]
{
Thing data Netzfrequenz "Netzfrequenz" [readStart="37", readValueType="uint16", readTransform="JS:divide_100.js"]
Thing data Phase1V "Spannung Phase 1" [readStart="38", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase1A "Stromstärke Phase 1" [readStart="39", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase1W "Leistung Phase 1" [readStart="40", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Phase2V "Spannung Phase 2" [readStart="42", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase2A "Stromstärke Phase 2" [readStart="43", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase2W "Leistung Phase 2" [readStart="44", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data Phase3V "Spannung Phase 3" [readStart="46", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase3A "Stromstärke Phase 3" [readStart="47", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data Phase3W "Leistung Phase 3" [readStart="48", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller ProduktionsDaten1 "Produktions-Daten" [start=53, length=14, type="input", refresh=60000, maxTries=2]
{
Thing data energyToday "Tagesproduktion" [readStart="53", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyTotal "Gesamtproduktion" [readStart="55", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data workTimeTotal "Betriebszeit" [readStart="57", readValueType="uint32", readTransform="JS:growattWtUint32To2xUint16.js"] //kommt als 2x uint16, jeweils in 0.5sec Einheiten
Thing data workTimeTotalTxt "Betriebszeit" [readStart="57", readValueType="uint32", readTransform="JS:growattWtUint32To2xUint16.js∩JS:secondsToDDHHMMSS.js"] //kommt als 2x uint16, jeweils in 0.5sec Einheiten
Thing data energyPv1Today "PV-Tagesproduktion String-1" [readStart="59", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyPv1Total "PV-Gesamtproduktion String-1" [readStart="61", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyPv2Today "PV-Tagesproduktion String-2" [readStart="63", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data energyPv2Total "PV-Gesamtproduktion String-2" [readStart="65", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller ProduktionsDaten2 "Produktions-Daten" [start=91, length=2, type="input", refresh=60000, maxTries=2]
{
Thing data energyPvTotal "PV-Gesamtproduktion" [readStart="91", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller Modbus "Modbus" [start=73, length=2, type="holding", refresh=60000, maxTries=2]
{
Thing data version "Modbus-Version" [readStart="73", readValueType="uint16"]
}
Bridge poller FehlerDaten "Fehler-Daten" [start=86, length=9, type="input", refresh=1200000, maxTries=2]
{
Thing data StrFault "StrFault" [readStart="86", readValueType="uint16"]
Thing data StrWarn "StrWarn" [readStart="87", readValueType="uint16"]
Thing data StrBreak "StrBreak" [readStart="88", readValueType="uint16"]
Thing data PIDFaultCode "PIDFaultCoude" [readStart="89", readValueType="uint16"]
Thing data GridFaultRecord1Code "GridFaultRecord1Code" [readStart="90", readValueType="uint16"]
}
Bridge poller batterie1 "Batterie1" [start=118, length=2, type="input", refresh=10000, maxTries=2]
{
Thing data priority "PV-Verwendung" [readStart="118", readValueType="uint16"]
Thing data batteryType "Battery Type" [readStart="119", readValueType="uint16"]
}
Bridge poller BatterieLadedaten "Batterie-Ladedaten" [start=1009, length=6, type="input", refresh=10000, maxTries=2]
{
Thing data batteryDischarge "Batterie-Entladeleistung" [readStart="1009", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data batteryCharge "Batterie-Ladeleistung" [readStart="1011", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data batteryVoltage "Batteriespannung" [readStart="1013", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data batterySoc "Batterie-Ladestand" [readStart="1014", readValueType="uint16"]
}
Bridge poller Netzdaten "Netzdaten" [start=1015, length=24, type="input", refresh=10000, maxTries=2]
{
Thing data pacToUser1 "pacToUser1" [readStart="1015", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToUser2 "pacToUser2" [readStart="1017", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToUser3 "pacToUser3" [readStart="1019", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToUserTotal "pacToUserTotal" [readStart="1021", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGrid1 "pacToGrid1" [readStart="1023", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGrid2 "pacToGrid2" [readStart="1025", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGrid3 "pacToGrid3" [readStart="1027", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToGridTotal "pacToGridTotal" [readStart="1029", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoad1 "pacToLocalLoad1" [readStart="1031", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoad2 "pacToLocalLoad2" [readStart="1033", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoad3 "pacToLocalLoad3" [readStart="1035", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data pacToLocalLoadTotal "pacToLocalLoadTotal" [readStart="1037", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller spDspStatus "SP DSP Status" [start=1041, length=1, type="input", refresh=10000, maxTries=2]
{
Thing data spDspStatus "SP DSP Status" [readStart="1041", readValueType="uint16"]
}
Bridge poller VerwendungsDaten "Verwendungs-Daten" [start=1044, length=20, type="input", refresh=10000, maxTries=2]
{
Thing data eToUserToday "eToUserToday" [readStart="1044", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eToUserTotal "eToUserTotal" [readStart="1046", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eToGridToday "eToGridToday" [readStart="1048", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eToGridTotal "eToGridTotal" [readStart="1050", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eDischarge1Today "eDischarge1Today" [readStart="1052", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eDischarge1Total "eDischarge1Total" [readStart="1054", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eCharge1Today "eCharge1Today" [readStart="1056", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eCharge1Total "eCharge1Total" [readStart="1058", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eLocalLoadToday "eLocalLoadToday" [readStart="1060", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
Thing data eLocalLoadTotal "eLocalLoadTotal" [readStart="1062", readValueType="uint32", readTransform="JS:growattUint32To2xUint16.js"] //kommt als 2x uint16
}
Bridge poller bms "BMS-Daten" [start=1082, length=15, type="input", refresh=10000, maxTries=2]
{
Thing data statusOld "StatusOld" [readStart="1082", readValueType="uint16"]
Thing data status "Status" [readStart="1083", readValueType="uint16"]
Thing data errorOld "ErrorOld" [readStart="1084", readValueType="uint16"]
Thing data error "Error" [readStart="1085", readValueType="uint16"]
Thing data soc "SOC" [readStart="1086", readValueType="uint16"]
Thing data batteryVolt "BatteryVolt" [readStart="1087", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data batteryCurr "BatteryCurr" [readStart="1088", readValueType="int16", readTransform="JS:divide_100.js"]
Thing data batteryTemp "BatteryTemp" [readStart="1089", readValueType="int16", readTransform="JS:divide_10.js"]
Thing data maxCurr "MaxCurr" [readStart="1090", readValueType="uint16", readTransform="JS:divide_10.js"]
Thing data gaugeRm "GaugeRM" [readStart="1091", readValueType="uint16"]
Thing data gaugeFcc "GaugeFCC" [readStart="1092", readValueType="uint16"]
Thing data fw "Firmware" [readStart="1093", readValueType="uint16"]
Thing data deltaVolt "DeltaVolt" [readStart="1094", readValueType="uint16"]
Thing data cycleCnt "Ladezyklen" [readStart="1095", readValueType="uint16"]
Thing data soh "State of health" [readStart="1096", readValueType="uint16"]
}
}
SDM230 Register:
//Modbus message parser: https://rapidscada.net/modbus/
Bridge modbus:serial:SDM230_1 "SDM230 SmartMeter Nr 1" [ port="/dev/ttyUSB0", id=23, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu", timeBetweenTransactionsMillis=1000 ]
{
Bridge poller inputRegisters1 [ start=0, length=80, refresh=60000, type="input" ]
{
Thing data Voltage "Voltage" [ readStart="0", readValueType="float32" ]
Thing data Current "Current" [ readStart="6", readValueType="float32" ]
Thing data ActivePower "Active Power" [ readStart="12", readValueType="float32" ]
Thing data ApparentPower "Apparent Power" [ readStart="18", readValueType="float32" ]
Thing data ReactivePower "Reactive Power" [ readStart="24", readValueType="float32" ]
Thing data PowerFactor "Power Factor" [ readStart="30", readValueType="float32" ]
Thing data PhaseAngle "Phase Angle" [ readStart="36", readValueType="float32" ]
Thing data Frequency "Frequency" [ readStart="70", readValueType="float32" ]
Thing data ImportActiveEnergy "Import Active Energy" [ readStart="72", readValueType="float32" ]
Thing data ExportActiveEnergy "Export Active Energy" [ readStart="74", readValueType="float32" ]
Thing data ImportReactiveEnergy "Import Reactive Energy" [ readStart="76", readValueType="float32" ]
Thing data ExportReactiveEnergy "Export Reactive Energy" [ readStart="78", readValueType="float32" ]
}
Bridge poller Frequenz [start=70, length=2, type="input", refresh=60000]
{
Thing data frequency "Netzferquenz" [readStart="70", readValueType="float32" ]
}
Bridge poller SystemPower [start=52, length=2, type="input", refresh=60000] {
Thing data systemPower "Systemleistung" [readStart="52", readValueType="float32" ]
}
Bridge poller kwh [start=342, length=22, type="input", refresh=60000] {
Thing data totalKwh "Gesamtverbrauch" [readStart="342", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalkVarh "Gesamt VARH" [readStart="344", readValueType="float32" ]
Thing data importKwh1 "Import 1" [readStart="346", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh2 "Import 2" [readStart="348", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh3 "Import 3" [readStart="350", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh1 "Export 1" [readStart="352", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh2 "Export 2" [readStart="354", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh3 "Export 3" [readStart="356", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh1 "Gesamt 1" [readStart="358", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh2 "Gesamt 2" [readStart="360", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh3 "Gesamt 3" [readStart="362", readValueType="float32", readTransform="JS:round2Decimals.js"]
}
Bridge poller powerDemand [ start=84, length=12, refresh=60000, type="input" ]
{
Thing data TotalSysPowerDemand "Total system power demand" [ readStart="84", readValueType="float32" ]
Thing data MaxTotalSysPowerDemand "Maximum total system power demand" [ readStart="86", readValueType="float32" ]
Thing data CurrentSysPositivePowerDemand "Current system positive power demand" [ readStart="88", readValueType="float32" ]
Thing data MaxSysPositivePowerDemand "Maximum system positive power demand" [ readStart="90", readValueType="float32" ]
Thing data CurrentSysReversePowerDemand "Current system reverse power demand" [ readStart="92", readValueType="float32" ]
Thing data MaxSysReversePowerDemand "Maximum system reverse power demand" [ readStart="94", readValueType="float32" ]
}
Bridge poller currentDemand [ start=258, length=8, refresh=60000, type="input" ]
{
Thing data CurrentDemand "Current demand" [ readStart="258", readValueType="float32" ]
Thing data MaximumCurrentDemand "Maximum current Demand" [ readStart="264", readValueType="float32" ]
}
Bridge poller totalEnergy [ start=342, length=4, refresh=60000, type="input" ]
{
Thing data TotalActiveEnergy "Total Active Energy" [ readStart="342", readValueType="float32" ]
Thing data TotalReactiveEnergy "Total Reactive Energy" [ readStart="344", readValueType="float32" ]
}
}
SDM54-Register:
//Modbus message parser: https://rapidscada.net/modbus/
Bridge modbus:serial:SDM54_1 "SDM54-T2 SmartMeter Nr 1" [ port="/dev/ttyUSB0", id=21, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu", timeBetweenTransactionsMillis=1000 ]
{
Bridge poller BasisWerte [start=0, length=36, type="input", refresh=60000]
{
Thing data voltage1 "Spannung Phase 1" [readStart="0", readValueType="float32" ]
Thing data voltage2 "Spannung Phase 2" [readStart="2", readValueType="float32" ]
Thing data voltage3 "Spannung Phase 3" [readStart="4", readValueType="float32" ]
Thing data current1 "Stromstärke Phase 1" [readStart="6", readValueType="float32" ]
Thing data current2 "Stromstärke Phase 2" [readStart="8", readValueType="float32" ]
Thing data current3 "Stromstärke Phase 3" [readStart="10", readValueType="float32" ]
Thing data power1 "Leistung Phase 1" [readStart="12", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data power2 "Leistung Phase 2" [readStart="14", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data power3 "Leistung Phase 3" [readStart="16", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data va1 "VA 1" [readStart="18", readValueType="float32" ]
Thing data va2 "VA 2" [readStart="20", readValueType="float32" ]
Thing data va3 "VA 3" [readStart="22", readValueType="float32" ]
Thing data var1 "VAR 1" [readStart="24", readValueType="float32" ]
Thing data var2 "VAR 2" [readStart="26", readValueType="float32" ]
Thing data var3 "VAR 3" [readStart="28", readValueType="float32" ]
Thing data powerfactor1 "Leistungsfaktor 1" [readStart="30", readValueType="float32" ]
Thing data powerfactor2 "Leistungsfaktor 2" [readStart="32", readValueType="float32" ]
Thing data powerfactor3 "Leistungsfaktor 3" [readStart="34", readValueType="float32" ]
}
Bridge poller Frequenz [start=70, length=2, type="input", refresh=60000]
{
Thing data frequency "Netzferquenz" [readStart="70", readValueType="float32" ]
}
Bridge poller SystemPower [start=52, length=2, type="input", refresh=60000] {
Thing data systemPower "Systemleistung" [readStart="52", readValueType="float32" ]
}
Bridge poller kwh [start=342, length=22, type="input", refresh=60000] {
Thing data totalKwh "Gesamtverbrauch" [readStart="342", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalkVarh "Gesamt VARH" [readStart="344", readValueType="float32" ]
Thing data importKwh1 "Import 1" [readStart="346", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh2 "Import 2" [readStart="348", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh3 "Import 3" [readStart="350", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh1 "Export 1" [readStart="352", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh2 "Export 2" [readStart="354", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh3 "Export 3" [readStart="356", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh1 "Gesamt 1" [readStart="358", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh2 "Gesamt 2" [readStart="360", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh3 "Gesamt 3" [readStart="362", readValueType="float32", readTransform="JS:round2Decimals.js"]
}
}
//Modbus message parser: https://rapidscada.net/modbus/
Bridge modbus:serial:SDM54_2 "SDM54-T2 SmartMeter Nr 2" [ port="/dev/ttyUSB0", id=22, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu", timeBetweenTransactionsMillis=1000 ]
{
Bridge poller BasisWerte [start=0, length=36, type="input", refresh=60000]
{
Thing data voltage1 "Spannung Phase 1" [readStart="0", readValueType="float32" ]
Thing data voltage2 "Spannung Phase 2" [readStart="2", readValueType="float32" ]
Thing data voltage3 "Spannung Phase 3" [readStart="4", readValueType="float32" ]
Thing data current1 "Stromstärke Phase 1" [readStart="6", readValueType="float32" ]
Thing data current2 "Stromstärke Phase 2" [readStart="8", readValueType="float32" ]
Thing data current3 "Stromstärke Phase 3" [readStart="10", readValueType="float32" ]
Thing data power1 "Leistung Phase 1" [readStart="12", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data power2 "Leistung Phase 2" [readStart="14", readValueType="float32", readTransform="JS:round2Decimals.js" ]
Thing data power3 "Leistung Phase 3" [readStart="16", readValueType="float32", readTransform="JS:round2Decimals.js" ]
Thing data va1 "VA 1" [readStart="18", readValueType="float32" ]
Thing data va2 "VA 2" [readStart="20", readValueType="float32" ]
Thing data va3 "VA 3" [readStart="22", readValueType="float32" ]
Thing data var1 "VAR 1" [readStart="24", readValueType="float32" ]
Thing data var2 "VAR 2" [readStart="26", readValueType="float32" ]
Thing data var3 "VAR 3" [readStart="28", readValueType="float32" ]
Thing data powerfactor1 "Leistungsfaktor 1" [readStart="30", readValueType="float32" ]
Thing data powerfactor2 "Leistungsfaktor 2" [readStart="32", readValueType="float32" ]
Thing data powerfactor3 "Leistungsfaktor 3" [readStart="34", readValueType="float32" ]
}
Bridge poller Frequenz [start=70, length=2, type="input", refresh=60000]
{
Thing data frequency "Netzferquenz" [readStart="70", readValueType="float32" ]
}
Bridge poller SystemPower [start=52, length=2, type="input", refresh=60000] {
Thing data systemPower "Systemleistung" [readStart="52", readValueType="float32" ]
}
Bridge poller kwh [start=342, length=22, type="input", refresh=60000] {
Thing data totalKwh "Gesamtverbrauch" [readStart="342", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalkVarh "Gesamt VARH" [readStart="344", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh1 "Import 1" [readStart="346", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh2 "Import 2" [readStart="348", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data importKwh3 "Import 3" [readStart="350", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh1 "Export 1" [readStart="352", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh2 "Export 2" [readStart="354", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data exportKwh3 "Export 3" [readStart="356", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh1 "Gesamt 1" [readStart="358", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh2 "Gesamt 2" [readStart="360", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data totalKwh3 "Gesamt 3" [readStart="362", readValueType="float32", readTransform="JS:round2Decimals.js"]
}
}
SDM630-Adressen (aktuell nicht in Verwendung, weil wird vom Growatt SPH ausgelsen und von diesem “weitergegeben”):
Bridge modbus:serial:SDM630 "SDM630 SmartMeter Nr 1" [ port="/dev/ttyUSB0", id=3, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu", timeBetweenTransactionsMillis=1000 ]
{
Bridge poller BasisWerte [start=0, length=36, type="input", refresh=5000]
{
Thing data voltage1 "Spannung Phase 1" [readStart="0", readValueType="float32" ]
Thing data voltage2 "Spannung Phase 2" [readStart="2", readValueType="float32" ]
Thing data voltage3 "Spannung Phase 3" [readStart="4", readValueType="float32" ]
Thing data current1 "Stromstärke Phase 1" [readStart="6", readValueType="float32" ]
Thing data current2 "Stromstärke Phase 2" [readStart="8", readValueType="float32" ]
Thing data current3 "Stromstärke Phase 3" [readStart="10", readValueType="float32" ]
Thing data power1 "Leistung Phase 1" [readStart="12", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data power2 "Leistung Phase 2" [readStart="14", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data power3 "Leistung Phase 3" [readStart="16", readValueType="float32", readTransform="JS:round2Decimals.js"]
Thing data va1 "VA 1" [readStart="18", readValueType="float32" ]
Thing data va2 "VA 2" [readStart="20", readValueType="float32" ]
Thing data va3 "VA 3" [readStart="22", readValueType="float32" ]
Thing data var1 "VAR 1" [readStart="24", readValueType="float32" ]
Thing data var2 "VAR 2" [readStart="26", readValueType="float32" ]
Thing data var3 "VAR 3" [readStart="28", readValueType="float32" ]
Thing data powerfactor1 "Leistungsfaktor 1" [readStart="30", readValueType="float32" ]
Thing data powerfactor2 "Leistungsfaktor 2" [readStart="32", readValueType="float32" ]
Thing data powerfactor3 "Leistungsfaktor 3" [readStart="34", readValueType="float32" ]
}
//Bridge poller Frequenz [start=70, length=2, type="input", refresh=5000] {
//Thing data sdm_frequency [readStart="70", readValueType="float32" ]
//}
//Bridge poller SystemPower [start=52, length=2, type="input", refresh=5000] {
//Thing data sdm_systemPower [readStart="52", readValueType="float32" ]
//}
//Bridge poller kWh [start=342, length=22, type="input", refresh=5000] {
//Thing data sdm_kwh_Totalkwh [readStart="342", readValueType="float32" ]
//Thing data sdm_kwh_Totalkvarh [readStart="344", readValueType="float32" ]
//Thing data sdm_kwh_L1_import_kWh [readStart="346", readValueType="float32" ]
//Thing data sdm_kwh_L2_import_kWh [readStart="348", readValueType="float32" ]
//Thing data sdm_kwh_L3_import_kWh [readStart="350", readValueType="float32" ]
//Thing data sdm_kwh_L1_export_kWh [readStart="352", readValueType="float32" ]
//Thing data sdm_kwh_L2_export_kWh [readStart="354", readValueType="float32" ]
//Thing data sdm_kwh_L3_export_kWh [readStart="356", readValueType="float32" ]
//Thing data sdm_kwh_L1_total_kWh [readStart="358", readValueType="float32" ]
//Thing data sdm_kwh_L2_total_kWh [readStart="360", readValueType="float32" ]
//Thing data sdm_kwh_L3_total_kWh [readStart="362", readValueType="float32" ]
//
//}
}