In this post I will try to share the details about how to communicate with Wattsonic inverters using modbus protocol. Understanding the connection details and list of registers is very useful if you want to get live data from the inverter directly, not relying only on the cloud app. This is essential thing if you want to connect your solar inverter into any smarthome solution, which then allows you to properly balance the load, manage your energy consumption and export, and minimize the need to purchase additional energy from the grid. Also, there is the ability to control some of the functions of the inverter using that modbus connection.
In this (three page long) list below you will find groups of registers with the brief description. You won’t find this in the user manual. But, I strongly recommend to consult the user manual for additional details, especially to better understand inverter working modes and other settings, that might be available in the app and you will be able to read and also (in cases of RW registers) write into the device.
Now there is a warning. First, the Wattsonic Cloud App and its back-end hosted somewhere in Hong-Kong is not expecting that changes will be done via Modbus directly to the inverter. So in case you do write a change, that will not become instantly visible in the Wattsonic App. I spent quite a while investigating why the Operating modes do not change, until I went to see the inverter myself and saw that changes are happening and are just not propagating back to the cloud. So, some of the updates between cloud and the inverter are just one directional, but this is probably a small design flaw. Second, there could certainly be some inaccuracies in the lists below as well caused by multiple factors, so if you see that something has changed or does not work as described, it would be great to leave comment so that we can keep the tables up-to date. I am using it with 3rd generation of Wattsonic 3P 10K inverter. It could (potentially) work with other models, but I have not been testing it.
How to connect
I have connected the Wattsonic inverter with my Loxone smarthome using Loxone Modbus extension, which is extra piece of HW I had to purchase. But these settings below are applicable for any other master system of your choice.
Now, if you want to establish Modbus connection between Loxone Modbus extension and Wattsonic Hybrid inverter you need to know the following:
- Wattsonic inverter uses Modbus RTU for communication with Loxone. Some people posted elsewhere that they use ModbusServer and Modbus over TCP, and in my opinion this was just a photo mock-up, completely misleading and wrong. So Loxone Modbus Extension is the right way to go. There might be other ways how to convert Modbus to TCP, but I have not tested this.
- The wiring between Loxone Modbus extension and Wattsonic inverter needs to be done using separate twisted pair and it must be connected to PIN 13 and 14. [PIN 14 = A, PIN 13 = B]. It cannot be on the same bus with the SmartMeter (this was my initial mistake!).
- The Modbus line settings are 9600 baud, No parity, Stop 1.
- Not all values that come with the template from official Loxone library are being populated by live data. Try to use this updated template (below).
- The terminating 120 Ohm resistor (supplied with the Loxone Modbus extension) is not needed in this case, the terminating resistor is already built-in to the Wattsonic Multi-function communication connector. You need to switch it on using small screwdriver (see detailed view).
Disclaimer
I take absolutely no responsibility for any damages you cause as a result of the use of any material shared on this site. It is for development purposes only.
You must accept that You and You alone are responsible for your safety and safety of others in any endeavor in which you engage. While the material on smarthome.exposed is provided in hopes that you build or tweak your own smarthome system, You are responsible for verifying its accuracy and applicability to your project. You are responsible for knowing your limitations of knowledge and experience. If you do any work with “main power” such as 240 or 400 VAC power wiring, you should consult a Licensed Electrician. Same applies for any high voltage circuits related to battery storage which I strongly recommend to not touch at all!
The following tables are showing the Modbus registers that can be used when communicating with Wattsonic Inverters. Please note that there might be some changes over time. This list was built for Third Generation of Wattsonic hybrid inverters. With any updates happening after that milestone some inaccuracy might be introduced. Use with caution.
So after the obligatory warnings, here are the lists of Modbus registers for 3rd gen. of Wattsonic hybrid inverters:
Read Only registers
ID | Register | Bytes | Description | Data Type | Unit | Accuracy | Note |
1 | 10000 | 8 | Inverter SN | STR | N/A | 1 | Read Bytes to string |
…… | |||||||
2 | 10008 | 1 | Equipment Info | U16 | N/A | 1 | Please refer to table Equipment info |
3 | 10011 | 2 | Firmware Version | U32 | N/A | 1 | Read Bytes |
10012 | |||||||
4 | 10100 | 1 | Date: Y/M | U16 | N/A | 1 | Continuous read |
5 | 10101 | 1 | Time: D/H | U16 | N/A | 1 | |
6 | 10102 | 1 | Time: M/S | U16 | N/A | 1 | |
7 | 10104 | 1 | Grid Regulation | U16 | N/A | 1 | |
8 | 10105 | 1 | Inverter Running Status | U16 | N/A | 1 | 0:wait, wait for on-grid 1:check, self-check 2:On Grid 3:fault 4:flash, firmware update 5.Off Grid |
9 | 10112 | 2 | Fault FLAG1 | U32 | N/A | 1 | Please refer to table Fault registers |
10113 | |||||||
10 | 10114 | 2 | Fault FLAG2 | U32 | N/A | 1 | |
10115 | |||||||
11 | 10120 | 2 | Fault FLAG3 | U32 | N/A | 1 | |
10121 | |||||||
12 | 10994 | 2 | Phase A Power on Meter | I32 | kW | 1000 | |
10995 | |||||||
13 | 10996 | 2 | Phase B Power on Meter | I32 | kW | 1000 | |
10997 | |||||||
14 | 10998 | 2 | Phase C Power on Meter | I32 | kW | 1000 | |
10999 | |||||||
15 | 11000 | 2 | Total Power on Meter | I32 | kW | 1000 | |
11001 | |||||||
16 | 11002 | 2 | Total Grid-Injection Energy on Meter | U32 | kWh | 100 | |
11003 | |||||||
17 | 11004 | 2 | Total Purchasing Energy from Grid on Meter | U32 | kWh | 100 | |
11005 | |||||||
18 | 11006 | 1 | Grid Lines A/B Voltage | U16 | V | 10 | |
19 | 11007 | 1 | Grid Lines B/C Voltage | U16 | V | 10 | |
20 | 11008 | 1 | Grid Lines C/A Voltage | U16 | V | 10 | |
21 | 11009 | 1 | Grid Phase A Voltage | U16 | V | 10 | |
22 | 11010 | 1 | Grid Phase A Current | U16 | A | 10 | |
23 | 11011 | 1 | Grid Phase B Voltage | U16 | V | 10 | |
24 | 11012 | 1 | Grid Phase B Current | U16 | A | 10 | |
25 | 11013 | 1 | Grid Phase C Voltage | U16 | V | 10 | |
26 | 11014 | 1 | Grid Phase C Current | U16 | A | 10 | |
27 | 11015 | 1 | Grid Frequency | U16 | Hz | 100 | |
28 | 11016 | 2 | P_AC | I32 | kW | 1000 | |
11017 | |||||||
29 | 11018 | 2 | Total PV Generation on that day | U32 | kWh | 10 | |
11019 | |||||||
30 | 11020 | 2 | Total PV Generation from Installation | U32 | kWh | 10 | |
11021 | |||||||
31 | 11022 | 2 | Total PV Generation Time from Installation | U32 | H | 1 | |
11023 | |||||||
32 | 11028 | 2 | PV Input Total Power | U32 | kW | 1000 | |
11029 | |||||||
33 | 11032 | 1 | Temperature Sensor 1 | I16 | ℃ | 10 | |
34 | 11033 | 1 | Temperature Sensor 2 | I16 | ℃ | 10 | |
35 | 11034 | 1 | Temperature Sensor 3 | I16 | ℃ | 10 | |
36 | 11035 | 1 | Temperature Sensor 4 | I16 | ℃ | 10 | |
37 | 11038 | 1 | PV1 Voltage | U16 | V | 10 | |
38 | 11039 | 1 | PV1 Current | U16 | A | 10 | |
39 | 11040 | 1 | PV2 Voltage | U16 | V | 10 | |
40 | 11041 | 1 | PV2 Current | U16 | A | 10 | |
41 | 11062 | 2 | PV1 Input Power | U32 | kW | 1000 | |
11063 | |||||||
42 | 11064 | 2 | PV2 Input Power | U32 | kW | 1000 | |
11065 | |||||||
43 | 18000 | 2 | ARM Fault FLAG1 | U32 | N/A | 1 | Please refer to table Fault registers |
18001 | |||||||
44 | 30200 | 1 | Backup_A_V | U16 | V | 10 | AC Voltage |
45 | 30201 | 1 | Backup_A_I | U16 | A | 10 | AC Current |
46 | 30202 | 1 | Backup_A_F | U16 | Hz | 100 | Frequency |
47 | 30204 | 2 | Backup_A_P | I32 | kW | 1000 | AC Active Power |
30205 | |||||||
48 | 30210 | 1 | Backup_B_V | U16 | V | 10 | AC Voltage |
49 | 30211 | 1 | Backup_B_I | U16 | A | 10 | AC Current |
50 | 30212 | 1 | Backup_B_F | U16 | Hz | 100 | Frequency |
51 | 30214 | 2 | Backup_B_P | I32 | kW | 1000 | AC Active Power |
30215 | |||||||
52 | 30220 | 1 | Backup_C_V | U16 | V | 10 | AC Voltage |
53 | 30221 | 1 | Backup_C_I | U16 | A | 10 | AC Current |
54 | 30222 | 1 | Backup_C_F | U16 | Hz | 100 | Frequency |
55 | 30224 | 2 | Backup_C_P | I32 | kW | 1000 | AC Active Power |
30225 | |||||||
56 | 30230 | 2 | Total_Backup_P | I32 | kW | 1000 | AC Active Power |
30231 | |||||||
57 | 30236 | 2 | Invt_A_P | I32 | kW | 1000 | Phase A Active Power |
30237 | |||||||
58 | 30242 | 2 | Invt_B_P | I32 | kW | 1000 | Phase B Active Power |
30243 | |||||||
59 | 30248 | 2 | Invt_C_P | I32 | kW | 1000 | Phase C Active Power |
30249 | |||||||
60 | 30254 | 1 | Battery_V | U16 | V | 10 | DC Voltage |
61 | 30255 | 1 | Battery_I | I16 | A | 10 | DC Current |
62 | 30256 | 1 | Battery_Mode | U16 | N/A | 1 | 0:discharge;1:charge |
63 | 30258 | 2 | Battery_P | I32 | kW | 1000 | Battery Power |
30259 | |||||||
64 | 31000 | 1 | Grid Injection Energy on that day[Meter] | U16 | kWh | 10 | |
65 | 31001 | 1 | Grid Purchasing Energy on that day[Meter] | U16 | kWh | 10 | |
66 | 31002 | 1 | Backup Output Energy on that day | U16 | kWh | 10 | |
67 | 31003 | 1 | Battery Charge Energy on that day | U16 | kWh | 10 | |
68 | 31004 | 1 | Battery Discharge Energy on that day | U16 | kWh | 10 | |
69 | 31005 | 1 | PV Generation Energy on that day | U16 | kWh | 10 | |
70 | 31006 | 1 | Loading Energy on that day | U16 | kWh | 10 | |
71 | 31008 | 1 | Energy Purchased from Grid on that day | U16 | kWh | 10 | |
72 | 31102 | 2 | Total Energy injected to grid | U32 | kWh | 10 | |
31103 | |||||||
73 | 31104 | 2 | Total Energy Purchased from Grid from Meter | U32 | kWh | 10 | |
31105 | |||||||
74 | 31106 | 2 | Total Output Energy on backup port | U32 | kWh | 10 | |
31107 | |||||||
75 | 31108 | 2 | Total Energy Charged to Battery | U32 | kWh | 10 | |
31109 | |||||||
76 | 31110 | 2 | Total Energy Discharged from Battery | U32 | kWh | 10 | |
31111 | |||||||
77 | 31112 | 2 | Total PV Generation | U32 | kWh | 10 | |
31113 | |||||||
78 | 31114 | 2 | Total Loading Energy consumed at grid side | U32 | kWh | 10 | |
31115 | |||||||
79 | 31118 | 2 | Total Energy Purchased from Grid at inverter side | U32 | kWh | 10 | |
31119 | |||||||
80 | 32000 | 1 | Battery Types | U16 | N/A | 1 | |
81 | 32001 | 1 | Battery strings | U16 | N/A | 1 | |
82 | 32002 | 1 | Battery protocol | U16 | N/A | 1 | |
83 | 32003 | 1 | Software Version | U16 | N/A | 1 | |
84 | 32004 | 1 | Hardware Version | U16 | N/A | 1 | |
85 | 32005 | 1 | BMS Charge Imax | U16 | A | 10 | |
86 | 32006 | 1 | BMS Discharge Imax | U16 | A | 10 | |
87 | 33000 | 1 | SOC | U16 | % | 100 | |
88 | 33001 | 1 | SOH | U16 | % | 100 | |
89 | 33002 | 1 | BMS Status | U16 | N/A | 1 | |
90 | 33003 | 1 | BMS Pack Temperature | U16 | ℃ | 10 | |
91 | 33008 | 1 | Max Cell Temperature ID | U16 | N/A | 1 | |
92 | 33009 | 1 | Max Cell Temperature | U16 | ℃ | 10 | |
93 | 33010 | 1 | Min Cell Temperature ID | U16 | N/A | 1 | |
94 | 33011 | 1 | Min Cell Temperature | U16 | ℃ | 10 | |
95 | 33012 | 1 | Max Cell Voltage ID | U16 | N/A | 1 | |
96 | 33013 | 1 | Max Cell Voltage | U16 | V | 1000 | |
97 | 33014 | 1 | Min Cell Voltage ID | U16 | N/A | 1 | |
98 | 33015 | 1 | Min Cell Voltage | U16 | V | 1000 | |
99 | 33016 | 2 | BMS ERROR CODE | U32 | N/A | 1 | |
33017 | |||||||
100 | 33018 | 2 | BMS WARN CODE | U32 | N/A | 1 | |
33019 |
Read-Write registers continue on the next page…
Hey
Thanks, great information, very helpful.
I’m owning an M-Tec system (the same, just different badge) and I’m currently trying to decipher some of the values and there are two that confuse me, maybe you got some more experience and you can help.
What is Invt_A_P (And B and C of course)? In total it’s always up to 100 W above the sum of PV power and battery power. PV power and battery power are matching the values in the official dashboard, so I do trust them, at least as far as you can trust companies and their dashboards. Might it be the inverter power including heat losses? The inverter has a big heat sink and it is still above 40 °C, so that might match. I’ wouldn’t be surprised at all if the company hides the system losses in its dashboard. What’s your experience, do you think that might be right?
Second items isn’t that important, just confusing: Backup power is always something like 60 W, though the backup line isn’t even connected. I guess that’s a measurement error, probably tolerances on the current sensors, plus maybe something like a tolerance compensation to be sure to never get a measurement below the real value. Do you see something similar?
Hm, while writing this, I begin to wonder if the things might be related, with the system pulling it’s own power demand from the backup line.
Cheers,
Holger
Hi Holger,
Invt_A_P (And B and C of course) translates to Inverter_L1_Power, Inverter_L2_Power and Inverter_L3_Power in Germany and is simply the english naming convention for the three phases in use. It represents the AC output power of the inverter per phase and is not directly related to either PV power nor battery power.
You don’t find these values on the overview page of the app or webpage, but you can see it under Devices -> realtime information in the “inverter AC parameters” block
Regards,
Martin
Hi, thank you, this site helped a lot. I also wanted to connect via Modbus TCP, this worked for me at the end (i just used QModMaster):
Slave-IP: IP of the Inverter (device “espressif” on the router)
TCP-Port: 502
Modbud Mode: TCP
Unit ID: 255
Read Holding Registers (0x03)
Start Address: e.g. 33001 for the charging state (you must add 1 to the register number)
This should word on Wattsonic inverters Gen3, M-Tec Gen3 and some other brands with the same inverter inside.
Hi,
thanks for the Wattsonic template and documentation. I want to change the “Grid Injection Power Limit Setting” register value, it is read/write register. I have imported the Wattsonic template into Loxone Config, but the register is not listed in actuators only in sensors. I can read it but can not write into it.
Am I missing something? Using wrong template version,…
Jan
OK, got it. The template does not contain all the read/write registers, but I can add them myself.
Good day,
may i know what register is for the current % battery level? I can not find it.
Thank you