Growatt WiFi Module Protocol

Table of Contents

1 Growatt Wifi Module Data Protocol

1.1 Protocol set-up

DataLogger (client) connects to server.

Every 3 minutes, there's a PING that is echoed by the server. This is independent of the other messages.

0000: 00 01 00 02 00 0c 01 16 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37                                            77

Client announces the inverter.

0000: 00 01 00 02 00 d9 01 03 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 4f 50 32 34 35 31 30 30 31 37 00 00 00 00  77OP24510017....
0020: 00 00 02 00 00 00 2c 01 01 00 00 00 00 00 ff 00  ......,.........
0030: ff ff ff 00 01 11 70 17 70 30 43 30 2e 39 20 30  ......p.p0C0.9 0
0040: 44 30 2e 39 20 00 01 00 00 0d ac 00 1e 07 35 0a  D0.9 .........5.
0050: 55 12 91 13 9c 4f 50 32 34 35 31 30 30 31 37 00  U....OP24510017.
0060: 10 f1 71 00 01 00 00 00 00 00 00 00 00 07 35 0a  ..q...........5.
0070: 55 12 91 13 9c 06 40 0a 8c 11 f8 15 18 08 53 02  U.....@.......S.
0080: 03 00 2d 00 59 07 df 00 07 00 17 00 05 00 2a 00  ..-.Y.........*.
0090: 05 03 e8 03 e8 00 64 00 64 03 e8 03 e8 00 00 00  ......d.d.......
00a0: 00 47 72 6f 77 61 74 74 20 49 6e 76 65 72 74 65  .Growatt Inverte
00b0: 72 44 43 41 41 30 34 30 34 00 00 00 05 01 30 00  rDCAA0404.....0.
00c0: 01 00 00 00 00 00 00 00 00 00 00 00 01 13 a6 00  ................
00d0: c8 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ...............

Initially, the server will ACK and then ask for client details.

0000: 00 01 00 02 00 03 01 03 00

      00 01 00 02 00 03 header + length (3)
      01 03 00          ACK 01 03 message

0000: 00 01 00 02 00 10 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 04 00 15                                77.... 

      00 01 00 02 00 10 header + length (16)
      01 19             query
      41..37            data logger id
      00 04 00 15       First / last config item

The client will send a number of messages with details, one for every config item requested. Note some items are skipped.

0000: 00 01 00 02 00 10 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 04 00 15                                77....
0000: 00 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 04 00 01 35                             77....5
0000: 00 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 05 00 01 31                             77....1
0000: 00 01 00 02 00 12 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 06 00 02 33 32                          77....32
0000: 00 01 00 02 00 1a 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 08 00 0a 41 48 34 34 34 36 30 34 37 37  77....AH44460477
0000: 00 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 0a 00 01 30                             77....0
0000: 00 01 00 02 00 1e 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 0b 00 0e 30 23 30 23 30 2e 30 2e 30 2e  77....0#0#0.0.0.
0020: 30 23 30 23                                      0#0#
0000: 00 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 0d 00 01 32                             77....2
0000: 00 01 00 02 00 1e 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 0e 00 0e 31 39 32 2e 31 36 38 2e 31 30  77....192.168.10
0020: 2e 31 30 30                                      .100
0000: 00 01 00 02 00 14 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 0f 00 04 38 38 39 36                    77....8896
0000: 00 01 00 02 00 21 01 19 41 48 34 34 34 36 30 34  .....!..AH444604
0010: 37 37 00 10 00 11 41 43 3a 43 46 3a 32 33 3a 33  77....AC:CF:23:3
0020: 44 3a 38 31 3a 45 35                             D:81:E5
0000: 00 01 00 02 00 22 01 19 41 48 34 34 34 36 30 34  ....."..AH444604
0010: 37 37 00 11 00 12 73 65 72 76 65 72 2e 67 72 6f  77....server.gro
0020: 77 61 74 74 2e 63 6f 6d                          watt.com
0000: 00 01 00 02 00 14 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 12 00 04 35 32 37 39                    77....5279
0000: 00 01 00 02 00 22 01 19 41 48 34 34 34 36 30 34  ....."..AH444604
0010: 37 37 00 13 00 12 73 65 72 76 65 72 2e 67 72 6f  77....server.gro
0020: 77 61 74 74 2e 63 6f 6d                          watt.com
0000: 00 01 00 02 00 17 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 15 00 07 33 2e 31 2e 30 2e 30           77....3.1.0.0

If no data has been sent yet, it starts repeating the inverter announce message every 30 seconds, until the server replies with ACK.

Alternatively, the server may ACK and ask for details again. The above process is repeated.

1.2 Data exchange

Once the communication is established and ACKed, the client will send a DATA message (containing inverter energy data) every 5 minutes.

0000: 00 01 00 02 00 d9 01 04 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 4f 50 32 34 35 31 30 30 31 37 00 00 00 00  77OP24510017....
0020: 00 00 02 00 00 00 2c 00 00 00 00 00 00 0b 15 00  ......,.........
0030: 00 00 00 00 00 0d 08 00 00 00 00 00 00 00 00 00  ................
0040: 00 13 87 09 2c 00 00 00 00 00 00 09 2e 00 00 00  ....,...........
0050: 00 00 00 09 36 00 00 00 00 00 00 00 00 00 00 00  ....6...........
0060: 00 14 91 00 27 4b 60 00 eb 00 00 00 00 00 00 00  ....'K`.........
0070: 00 00 00 00 00 00 00 00 00 00 e9 08 8f 08 7e 00  ..............~.
0080: 00 00 2d 00 59 4e 20 00 00 00 00 00 00 00 00 00  ..-.YN .........
0090: 00 04 39 00 00 00 00 00 00 0f 99 00 00 13 d2 00  ..9.............
00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00b0: 00 00 01 11 70 00 00 00 00 00 00 00 00 00 00 00  ....p...........
00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ...............

Which is immedeately ACKed by the server

0000: 00 01 00 02 00 03 01 04 00                       .........

If no response is received from the server for 15 messages (data, ack, …) the connection is dropped and immedeately re-established.

The server can ask for client details at any time, without interrupting the stream of messages, e.g.

client sends DATA
server sends IDENTIFY
client sends configure data
server ACKs the DATA

1.3 Message details

1.3.1 Basic message format

00 01 00 02 ll ll tt tt data

ll ll = length of tt tt + data
tt tt = message type
        01 03   DATA3 (data > 00)
        01 03   DATA3 ACK (data = 00)
        01 04   DATA4 (data > 00)
        01 04   DATA4 ACK  (data = 00)
        01 16   PING (data = DataloggerId/a)
        01 18   CONFIGURE
        01 19   IDENTIFY (DataloggerId/a + 00 04 00 15)

1.3.2 PING

0000: 00 01 00 02 00 0c 01 16 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37                                            77              

      00 01 00 02     header
      00 0c           length
      01 16           type = PING
      41..37          AH44460477 (data logger id)

1.3.3 DATA4 ACK

0000: 00 01 00 02 00 03 01 04 00                       .........       

      00 01 00 02     header
      00 03           length
      01 04           type = DATA4
      00              additional info

1.3.4 DATA3 ACK + IDENTIFY

0000: 00 01 00 02 00 03 01 03 00 00 01 00 02 00 10 01  ................
0010: 19 41 48 34 34 34 36 30 34 37 37 00 04 00 15     .AH44460477.... 

      00 01 00 02     header
      00 03           length
      01 03           type = DATA3
      00              additional info

      00 01 00 02     header
      00 10           length (16)
      01 19           type = QUERY
      41..37          data logger id
      00 04 00 15     Identify?

1.3.5 ANNOUNCE

ANNOUNCE is a DATA3 message (type = 0x0103).

0000: 00 01 00 02 00 d9 01 03 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 4f 50 32 34 35 31 30 30 31 37 00 00 00 00  77OP24510017....
0020: 00 00 02 00 00 00 2c 01 01 00 00 00 00 00 ff 00  ......,.........
0030: ff ff ff 00 01 11 70 17 70 30 43 30 2e 39 20 30  ......p.p0C0.9 0
0040: 44 30 2e 39 20 00 01 00 00 0d ac 00 1e 07 35 0a  D0.9 .........5.
0050: 55 12 91 13 9c 4f 50 32 34 35 31 30 30 31 37 00  U....OP24510017.
0060: 10 f1 71 00 01 00 00 00 00 00 00 00 00 07 35 0a  ..q...........5.
0070: 55 12 91 13 9c 06 40 0a 8c 11 f8 15 18 08 53 02  U.....@.......S.
0080: 03 00 2d 00 59 07 dc 00 01 00 02 00 10 00 39 00  ..-.Y.........9.
0090: 00 03 e8 03 e8 00 64 00 64 03 e8 03 e8 00 00 00  ......d.d.......
00a0: 00 47 72 6f 77 61 74 74 20 49 6e 76 65 72 74 65  .Growatt Inverte
00b0: 72 44 43 41 41 30 34 30 34 00 00 00 05 01 30 00  rDCAA0404.....0.
00c0: 01 00 00 00 00 00 00 00 00 00 00 00 01 13 a6 00  ................
00d0: c8 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ...............

This message is confirmed by the server with an empty DATA3 message.

00 01 00 02 00 d9 01 03
AH44460477
OP24510017
00 00 00 00 00 00 02 00 00 00 2c 01 01 00 00 00 00 00 ff 00
ff ff ff 00 01 11 70 17 70
0C0.9 0D0.9             !trailing space!
00 01 00 00 0d ac 00 1e 07 35 0a 55 12 91 13 9c
OP24510017
00 10 f1 71 00 01 00 00 00 00 00 00 00 00 07 35
0a 55 12 91 13 9c 06 40 0a 8c 11 f8 15 18 08 53
02 03 00 2d 00 59 07 dc 00 01 00 02 00 10 00 39
00 00 03 e8 03 e8 00 64 00 64 03 e8 03 e8 00 00
00 00
Growatt Inverter
DCAA0404
00 00 00 05 01 30 00 01 00 00 00 00 00 00 00 00
00 00 00 01 13 a6 00 c8 00 00 00 00 00 00 00 00
00 00 00 00 00 00

(inverter > property:0C0.9/DCAA0404/A0B0D1T0PFU1M7S1)?

1.3.6 CLIENT DETAILS

     00 01 00 02 ll ll 01 19 DataloggerId/a
     ss ss ll ll data

     ss ss = subtype
     ll ll = length of data to follow

             00 04 00 01 35                   5 loginterval/a
             00 05 00 01 31                   1/a dev addr range?
             00 06 00 02 33 32                32/a dev addr range?
             00 08 00 ll AH44460477           DataloggerId/a
             00 0a 00 01 30                   0/a
             00 0b 00 0e 0#0#0.0.0.0#0#       ?listen?/a
             00 0d 00 01 32                   2/a
             00 0e 00 0e 192.168.10.100       Local IP/a
             00 0f 00 04 3498                 Local Port/a?
             00 10 00 11 AC:CF:23:3D:81:E5    MAC address/a
             00 11 00 0d 192.168.1.251        Server IP/a?
             00 12 00 04 5279                 Server Port/a
             00 13 00 0d 192.168.1.251        Server IP/a
             00 15 00 07 3.1.0.0              Growatt WiFi version/a

0000: 00 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 04 00 01 35                             77....5         

      00 01 00 02 00 11 01 19 AH44460477
      00 04 00 01 35  log interval? 5 min?

0000: 00 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 05 00 01 31 00 01 00 02 00 12 01 19 41  77....1........A
0020: 48 34 34 34 36 30 34 37 37 00 06 00 02 33 32 00  H44460477....32.
0030: 01 00 02 00 1a 01 19 41 48 34 34 34 36 30 34 37  .......AH4446047
0040: 37 00 08 00 0a 41 48 34 34 34 36 30 34 37 37 00  7....AH44460477.
0050: 01 00 02 00 11 01 19 41 48 34 34 34 36 30 34 37  .......AH4446047
0060: 37 00 0a 00 01 30                                7....0          

      00 01 00 02 00 11 01 19 AH44460477
      00 05 00 01 31
      00 01 00 02 00 12 01 19 AH44460477
      00 06 00 02 33 32                       Max TCP Num (Server)?
      00 01 00 02 00 1a 01 19 AH44460477
      00 08 00 0a AH44460477                  data logger id
      00 01 00 02 00 11 01 19 AH44460477
      00 0a 00 01 30 

0000: 00 01 00 02 00 1e 01 19 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 0b 00 0e 30 23 30 23 30 2e 30 2e 30 2e  77....0#0#0.0.0.
0020: 30 23 30 23 00 01 00 02 00 11 01 19 41 48 34 34  0#0#........AH44
0030: 34 36 30 34 37 37 00 0d 00 01 32 00 01 00 02 00  460477....2.....
0040: 1e 01 19 41 48 34 34 34 36 30 34 37 37 00 0e 00  ...AH44460477...
0050: 0e 31 39 32 2e 31 36 38 2e 31 30 2e 31 30 30 00  .192.168.10.100.
0060: 01 00 02 00 14 01 19 41 48 34 34 34 36 30 34 37  .......AH4446047
0070: 37 00 0f 00 04 33 34 39 38                       7....3498       

      00 01 00 02 00 1e 01 19 AH44460477
      00 0b 00 0e 0#0#0.0.0.0#0#
      00 01 00 02 00 11 01 19 AH44460477
      00 0d 00 01 32
      00 01 00 02 00 1e 01 19 AH44460477
      00 0e 00 0e 192.168.10.100              Local IP
      00 01 00 02 00 14 01 19 AH44460477
      00 0f 00 04 3498                        Local Port?

0000: 00 01 00 02 00 21 01 19 41 48 34 34 34 36 30 34  .....!..AH444604
0010: 37 37 00 10 00 11 41 43 3a 43 46 3a 32 33 3a 33  77....AC:CF:23:3
0020: 44 3a 38 31 3a 45 35 00 01 00 02 00 1d 01 19 41  D:81:E5........A
0030: 48 34 34 34 36 30 34 37 37 00 11 00 0d 31 39 32  H44460477....192
0040: 2e 31 36 38 2e 31 2e 32 35 31 00 01 00 02 00 14  .168.1.251......
0050: 01 19 41 48 34 34 34 36 30 34 37 37 00 12 00 04  ..AH44460477....
0060: 35 32 37 39 00 01 00 02 00 1d 01 19 41 48 34 34  5279........AH44
0070: 34 36 30 34 37 37 00 13 00 0d 31 39 32 2e 31 36  460477....192.16
0080: 38 2e 31 2e 32 35 31 00 01 00 02 00 17 01 19 41  8.1.251........A
0090: 48 34 34 34 36 30 34 37 37 00 15 00 07 33 2e 31  H44460477....3.1
00a0: 2e 30 2e 30                                      .0.0            

      00 01 00 02 00 21 01 19 AH44460477
      00 10 00 11 AC:CF:23:3D:81:E5           MAC address
      00 01 00 02 00 1d 01 19 AH44460477
      00 11 00 0d 192.168.1.251               Server name/IP
      00 01 00 02 00 14 01 19 AH44460477
      00 12 00 04 5279                        Server Port
      00 01 00 02 00 1d 01 19 AH44460477
      00 13 00 0d 192.168.1.251               Server name/IP?
      00 01 00 02 00 17 01 19 AH44460477
      00 15 00 07 3.1.0.0                     WiFi module (firmware) version

The WiFi module will connect to the Growatt server, as configured by items 0x12 and 0x13.

Note that Growatt requires the server name (config item 0x13) to be "server.growatt.com". It will force reconfiguration/reboot of the client if there's a different content. Even the server IP is not accepted. According to Growatt support department:

This is done by Growatt, please don't worry.

We will build a database in US to make visit speed faster, so your wi-fi server address must be server.growatt.com, not the IP address, otherwise your plant data will not come to new database.

Our engineer is searching these Wi-Fi which Server address is not server.growatt.com, and try modify it, to make sure all data can move to new database then.

The switch to the new database is scheduled for July 28 2015, 08.00-11.00 GMT+8.

1.3.7 ENERGY DATA

Energy data is a DATA4 message (type = 0x0104).

0000: 00 01 00 02 00 d9 01 04 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 4f 50 32 34 35 31 30 30 31 37 00 00 00 00  77OP24510017....
0020: 00 00 02 00 00 00 2c 00 01 00 00 0a b1 09 f9 00  ......,.........
0030: 00 00 00 00 00 15 63 00 05 00 00 0a b1 00 00 08  ......c.........
0040: 44 13 84 09 04 00 03 00 00 02 b4 08 fc 00 04 00  D...............
0050: 00 03 98 09 08 00 03 00 00 02 b5 00 00 00 f3 00  ................
0060: 00 01 c3 00 03 0e 47 01 6f 00 00 00 00 00 00 00  ......G.o.......
0070: 00 00 00 00 00 00 00 00 00 01 73 0b 4e 0b 48 00  ..........s.N.H.
0080: 00 00 2d 00 59 4e 20 00 00 00 00 00 00 00 00 00  ..-.YN .........
0090: 00 00 00 00 00 00 f3 00 00 01 bf 00 00 01 bf 00  ................
00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00b0: 04 00 01 11 70 00 00 00 00 00 00 00 00 00 00 00  ....p...........
00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ...............

This message is confirmed by the server with an empty DATA4 message.

1.3.8 CONFIGURE

0000: 00 01 00 02 00 22 01 18 41 48 34 34 34 36 30 34  ....."..AH444604
0010: 37 37 00 13 00 12 73 65 72 76 65 72 2e 67 72 6f  77....server.gro
0020: 77 61 74 74 2e 63 6f 6d                          watt.com        

      00 01 00 02     header
      00 22           length
      01 18           type = CONFIG
      41..37          DataloggerId/a
      00 13           config = SERVERADDRESS
      00 12 ...       length + value

This one ( 00 13 ) sets the server address to server.growatt.com.

Client response

0000: 00 01 00 02 00 0f 01 18 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 13 00                                   77...           

      00 01 00 02     header
      00 0f           length
      01 18           type = CONFIG
      41..37          DataloggerId/a
      00 13           config = SERVERADDRESS
      00              empty => ACK

If something wrong with the request, e.g. an invalid value is requested, the final byte will be 0x03 (NACK).

Note: When changing the interval time (config item 4) the data logger will transmit data messages at the indicated interval. The spreadsheets downloadable from the Growatt server will reflect the changed interval but the graphs on the server will still be adjusted to the standard 5-min interval.

1.3.9 REBOOT

0000: 00 01 00 02 00 11 01 18 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 20 00 01 31                             77. ..1         

      00 01 00 02     header
      00 11           length
      01 18           type = CONFIG
      41..37          DataloggerId/a
      00 20           config = REBOOT
      00 01 31        1/a

Client response

0000: 00 01 00 02 00 0f 01 18 41 48 34 34 34 36 30 34  ........AH444604
0010: 37 37 00 20 00                                   77. .           

      00 01 00 02     header
      00 0f           length
      01 18           type = CONFIG
      41..37          DataloggerId/a
      00 20           config = REBOOT
      00              empty => ACK

And then the WiFi modules reboots.

Author: Johan Vromans

Created: 2018-08-14 Tue 08:19

Emacs 25.3.1 (Org mode 8.2.10)

Validate