Connecting a Growatt Inverter to ShineNet
|[Previously, on randomnoun]. This post is a followup from my earlier entry on the trials and tribulations of getting solar panels hooked up to my house in Red Hill.
So I thought it would be interesting to graph my solar energy using ShineNet, a defunct software package created by Growatt, the manufacturers of the inverter that sits on the side of the house, connecting the panels to my newly-upgraded switchboard.
There’s not much in the way of instructions on how to do this on the internet, so here’s how to set it up. What you’ll need in order to do this is:
- vast amounts of time
- a Solar Inverter. Mine is a Growatt 3000TL 3kW inverter (or something that looks very similar to it) which was installed as part of my TVS solar panel install, which I’ve gone into in more detail here.
- a DB9 (9-pin) M/F serial cable ($12 from umart)
- a DB9 F RS232 to Bluetooth adapter that’s capable of running off power supplied over pin 9 (USD $59+USD $16 P&P; or perhaps this one instead for USD$65+P&P which has a chunky antenna attached to it)
- a DB9 M/M null modem adapter ($2.49 inc P&P from ebay), and when that doesn’t work, a
- a DB9 M/F null modem adapter ($3.16 inc P&P from ebay) and an DB9 M/M gender changer ($1.00 + $0.19 P&P from ebay)
- a USB to DB9 M COM serial adapter (if your laptop is less than ~10 years old)
- a USB to Bluetooth adapter (if your laptop is more than ~5 years old)
- the ShineNet software, and a machine capable of running it (i.e. is still on Windows XP)
In the images above, the
icon indicates a Male DB9 connector, | |
indicate Female DB9, | |
indicates a null modem or cross-over connection, and | |
indicate extension or straight-through connections, | |
represents USB, and | |
represents Bluetooth. |
Drivers
If you’re anything like me, your Windows XP laptop (and it has to be Windows XP), is in that sweet spot between being too old to have bluetooth, and too young to have actual physical COM ports, in which case you’ll need to grab a couple of usb adapters to provide those things. Get the cheapest ones you can find from ebay , and then be amazed when they’re not recognised automatically when you plug them in.
I got these devices:
- a USB 2.0 to RS232 Serial 9 Pin 9P DB9 Adapter Converter for AUD$2.09 inc P&P, and
- a New Mini USB 2.0 EDR Dongle Wireless V2.0 Bluetooth Adapter which they can somehow profitably manufacture and post from China for AUD$1.00
Neither of these so-called XP-compatible devices come with drivers, so what I did eventually was to install an old trial version of the BlueSoleil bluetooth stack (limited to 5MB data transfer), and the driver for the HL-340 chipset serial adapter from some random website (after finding some instructions on this forum post).
You may find the usbview
utility from FTDI helpful when scouring websites looking for anything vaguely useful. (usbview
gives you the Vendor:Product IDs of all USB devices attached to your system; the devices above for me were listed as 1A86:7523
and 0A12:0001
) .
Once you do that, go into Device Manager and take note of the COM port assigned to the Bluetooth and DB9 USB adapters. On my laptop, the wired DB9 adapter is attached to COM24, and the wireless BT adapter takes up COM ports 11 to 23.
You might want to pair up a bluetooth device that you know works, just to prove that the device driver is functioning correctly. I used some headphones.
ShineNet
ShineNet is the truly awful software package created by Growatt to track solar energy collection from the array of PV cells on your roof. So awful, in fact, that they’re no longer providing it via their website, and any requests to their eight different contact email addresses will fail to get a response from them. What you might want to try doing is sending pleading emails every week or so to people who mention that they’ve installed ShineNet on the solar software section of the whirlpool forum, and hope that someone responds.
There are two types of ShineNet in the world, v1 and v2. This link will give you v1.2, which for the purposes of this entry is actually v1.
Here’s a comparison table, bearing in mind that I haven’t actually tried v2 yet:
Version | ShineNet v1 | ShineNet v2 |
---|---|---|
RS232 Protocol | Proprietary | modbus |
Operating System | Windows XP | Windows XP |
Software Quality | Crap | Probably crap |
Persistence | ? | HyperSQL (HSQL) (info) |
Inverter COM port setting |
Anything other than ‘MOVE ‘(e.g. ‘ COM1 ‘) |
‘MOVE ‘ |
Yes, there are other software packages that profess to comprehend modbus (used by v2) and the proprietary protocol that v1 uses, but I thought it would be slightly less time consuming to use the software made by the manufacturer of the inverter first, before hooking up something with more bells and whistles (controlled by DMX, I’d imagine).
Configuration 1
This was the ‘simplest possible thing that could work’ configuration I thought I’d try first.
Unscrew the coverplate on the bottom of the inverter, plug in a cable, and throw that through the closest window. Whilst your outside, knock on your inverter a few times to set the COM port to anything other than the default “MOVE
” setting (e.g. “COM1
“).
Go back inside and attach the cable to the USB->COM DB9 adapter connected to your laptop.
Fire up ShineNet, from the main menu select SoftSystem
-> System Set
, set the COM port to the value shown in Device Manager for your USB->COM DB9 adapter and click Set
.
From the main menu again, select Inverter
-> Connect/Disconnect
, and with any luck you’ll eventually get this:
It will probably help if you do this during the day, otherwise your inverter will probably be in shutdown mode due to the lack of photons in the air.
In an ideal world, you wouldn’t have a cable permanently hanging outside of your house, so let’s try running this over bluetooth.
Configuration 2
This configuration is just to verify that the Bluetooth to DB9 adapter works. For this configuration, the adapter is being powered by an external power source (using the mini-USB port on the side of the adapter)
What I’m attempting to do here is to transfer data over the air between the two bluetooth devices which are now plugged into the same laptop (if your laptop was made in the last 5 years, you probably have bluetooth built in, and don’t need the second adapter above). It may be easier to use a separate laptop to connect to, if you’ve got access to one.
On the DB9 to Bluetooth adapter check the settings on the casing to ensure that they’re in this position:
-
DCE(F)
/DTE
toggle switch is inDCE(F)
mode - the
S
/M
dip switch is pointing toM
- the
N/G
/G
dip switch is pointing toG
- the
USB/Battery
/DB9-Pin9(5V)
toggle switch is pointing toUSB/Battery
(and you’ve got the adapter powered by a mini-USB cable). If it’s powered up, there should be some red and blue lights flashing on the thing.
Bring up two HyperTerminal windows (you’re on XP, so you still have HyperTerminal… it’s probably under Start -> Programs -> Accessories -> Communications -> HyperTerminal. Alternatively, you could also use PuTTY in ‘Serial’ mode). Set one window to point to the COM port that the Bluetooth DB9 adapter is plugged into, and type this into it:
AT
and press Enter, at which point, you’ll get either this:
OK
which is good, or this
ERROR
which seems to go away if you type ‘AT’ again, or this
(incomprehensible garbage)
which probably means the adapter is a bit loose or you’re set to the wrong line speed / flow control / stop bits / parity bits, (it seems to default to 19200 bps / None / 0 / 1 out of the box), or this
(nothing at all)
which probably means the adapter isn’t plugged in, or something else is loose, or it’s not powered on, or you’ve selected the wrong COM port, or you’re looking at the wrong laptop, or your keyboard doesn’t work, or the serial port driver doesn’t work, or the serial port driver isn’t configured correctly, or the operating system has crashed, or something else entirely, or some combination of those things. Try shaking it and trying again.
Now that you’re talking to the Bluetooth adapter in old-school Hayes-speak , have the following conversation with it:
AT OK DEVICE=? 0000 00 000000 OK NAME=? Serial Adaptor OK NAME=Growatt Inverter OK NAME=? Growatt Inverter OK PIN=? 1234 OK PIN=RaRaRaSomething OK PIN=? RaRaRaSomething OK ROLE=? Slave Mode OK STATUS=? Celsius : 41 VERSION : VER : 4.6.3 ADDRESS : 0018 DB 010000 ROLE : SLAVE MODE FLOW : DISABLE ECHO : ENABLE PROMPT : ENABLE DISCOVER : ENABLE RECONNECT : DISABLE AUTO : DISABLE DIP : DISABLE <<< : ENABLE >>> : ENABLE DETECT : DISABLE SERIAL_PROTOCOL : 19200,N,1 NAME : Growatt Inverter PIN : RaRaRaSomething DEVICE : 0000 00 000000 CONNECT : 0000 00 000000 OK
Now in BlueSoleil (or the native Windows Bluetooth device stack, if you can manage to get that working), search for your BlueTooth/DB9 adapter using the other bluetooth adapter (it should appear with the NAME
you assigned above). You might want to try this from a completely different machine if you like, since this is testing BT<->BT connectivity. Pair with the adapter (using the PIN
you entered above), and then allocate it a COM port. On my machine, BlueSoleil assigns the port COM11 to this device.
You should now be able to talk to yourself even more than usual by opening up another HyperTerminal window connected to the BlueSoleil COM port and tapping keys into it, which should appear on the HyperTerminal connected to the DB9 adapter COM port, and vice versa.
Now back on the DB9 adapter COM port, and this will save you mountains of time later on, type this:
AT ERROR AT OK BAUD=? 19200 bps OK BAUD=9600 OK àøæ
That àøæ
at the end is HyperTerminal/PuTTY not being able to deal with changing linespeeds. Try reconnecting using 9600bps and everything should be right as rain a bright, electricity producing day.
If you don’t do that, be prepared to spend a couple of entertaining hours with portmon and on websites containing pages titled ‘Adventures In Bluetooth‘ trying to discover why the next bit doesn’t work.
Configuration 3
Now we want to test connecting the inverter by Bluetooth. You’ll notice the Bluetooth to DB9 adapter is still connected to the Inverter via a cable and the null modem adapter, and is powered through an external 5V USB.
This is the part that probably won’t work, so why not fire up portmon (from SysInternals) anyway and watch the bits fly over the air.
You’ll find that portmon doesn’t work for some reason, so try it in client/remote mode by going to Start -> Run and typing “c:\util\portmon /c
“, then Start -> Run and typing “c:\util\portmon
“, typing Ctrl-R
, then “localhost
“, selecting the bluetooth adapter COM port, sit back, and enjoy watching things like this appear:
Or, in a slightly more readable form:
0 | 0.01816823 | ShineNET.exe | IRP_MJ_CREATE | Serial2 | SUCCESS | Options: Open | |
1 | 0.00000335 | ShineNET.exe | IOCTL_SERIAL_GET_PROPERTIES | Serial2 | SUCCESS | ||
2 | 0.00683802 | ShineNET.exe | IOCTL_SERIAL_GET_MODEMSTATUS | Serial2 | SUCCESS | ||
3 | 0.00001145 | ShineNET.exe | IOCTL_SERIAL_GET_BAUD_RATE | Serial2 | SUCCESS | ||
4 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_LINE_CONTROL | Serial2 | SUCCESS | ||
5 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_CHARS | Serial2 | SUCCESS | ||
6 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_HANDFLOW | Serial2 | SUCCESS | ||
7 | 0.00000223 | ShineNET.exe | IOCTL_SERIAL_GET_BAUD_RATE | Serial2 | SUCCESS | ||
8 | 0.00000251 | ShineNET.exe | IOCTL_SERIAL_GET_LINE_CONTROL | Serial2 | SUCCESS | ||
9 | 0.00000168 | ShineNET.exe | IOCTL_SERIAL_GET_CHARS | Serial2 | SUCCESS | ||
10 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_HANDFLOW | Serial2 | SUCCESS | ||
11 | 0.00583650 | ShineNET.exe | IOCTL_SERIAL_SET_BAUD_RATE | Serial2 | SUCCESS | Rate: 9600 | |
12 | 0.00000279 | ShineNET.exe | IOCTL_SERIAL_SET_RTS | Serial2 | SUCCESS | ||
13 | 0.00295345 | ShineNET.exe | IOCTL_SERIAL_CLR_DTR | Serial2 | SUCCESS | ||
14 | 0.00297021 | ShineNET.exe | IOCTL_SERIAL_SET_LINE_CONTROL | Serial2 | SUCCESS | StopBits: 1 Parity: NONE WordLength: 8 | |
15 | 0.00000251 | ShineNET.exe | IOCTL_SERIAL_SET_CHAR | Serial2 | SUCCESS | EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13 | |
16 | 0.00697212 | ShineNET.exe | IOCTL_SERIAL_SET_HANDFLOW | Serial2 | SUCCESS | Shake:0 Replace:40 XonLimit:17248 XoffLimit:17248 | |
17 | 0.00000279 | ShineNET.exe | IOCTL_SERIAL_GET_BAUD_RATE | Serial2 | SUCCESS | ||
18 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_LINE_CONTROL | Serial2 | SUCCESS | ||
19 | 0.00000168 | ShineNET.exe | IOCTL_SERIAL_GET_CHARS | Serial2 | SUCCESS | ||
20 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_HANDFLOW | Serial2 | SUCCESS | ||
21 | 0.00000223 | ShineNET.exe | IOCTL_SERIAL_SET_BAUD_RATE | Serial2 | SUCCESS | Rate: 9600 | |
22 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_SET_RTS | Serial2 | SUCCESS | ||
23 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_CLR_DTR | Serial2 | SUCCESS | ||
24 | 0.00000223 | ShineNET.exe | IOCTL_SERIAL_SET_LINE_CONTROL | Serial2 | SUCCESS | StopBits: 1 Parity: NONE WordLength: 8 | |
25 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_SET_CHAR | Serial2 | SUCCESS | EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13 | |
26 | 0.00685366 | ShineNET.exe | IOCTL_SERIAL_SET_HANDFLOW | Serial2 | SUCCESS | Shake:0 Replace:40 XonLimit:17248 XoffLimit:17248 | |
27 | 0.00000251 | ShineNET.exe | IOCTL_SERIAL_CLR_DTR | Serial2 | SUCCESS | ||
28 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_BAUD_RATE | Serial2 | SUCCESS | ||
29 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_LINE_CONTROL | Serial2 | SUCCESS | ||
30 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_CHARS | Serial2 | SUCCESS | ||
31 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_GET_HANDFLOW | Serial2 | SUCCESS | ||
32 | 0.00000223 | ShineNET.exe | IOCTL_SERIAL_SET_BAUD_RATE | Serial2 | SUCCESS | Rate: 9600 | |
33 | 0.00286349 | ShineNET.exe | IOCTL_SERIAL_CLR_RTS | Serial2 | SUCCESS | ||
34 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_CLR_DTR | Serial2 | SUCCESS | ||
35 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_SET_LINE_CONTROL | Serial2 | SUCCESS | StopBits: 1 Parity: NONE WordLength: 8 | |
36 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_SET_CHAR | Serial2 | SUCCESS | EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13 | |
37 | 0.00695703 | ShineNET.exe | IOCTL_SERIAL_SET_HANDFLOW | Serial2 | SUCCESS | Shake:0 Replace:0 XonLimit:17248 XoffLimit:17248 | |
38 | 0.00000279 | ShineNET.exe | IOCTL_SERIAL_CLR_RTS | Serial2 | SUCCESS | ||
39 | 0.00000196 | ShineNET.exe | IOCTL_SERIAL_SET_TIMEOUTS | Serial2 | SUCCESS | RI:-1 RM:-1 RC:-2 WM:0 WC:0 | |
40 | 0.00000475 | ShineNET.exe | IOCTL_SERIAL_SET_WAIT_MASK | Serial2 | SUCCESS | Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING | |
41 | 0.00000335 | ShineNET.exe | IOCTL_SERIAL_SET_QUEUE_SIZE | Serial2 | SUCCESS | InSize: 4096 OutSize: 2048 | |
42 | 2.24699592 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
43 | 0.00000363 | ShineNET.exe | IOCTL_SERIAL_PURGE | Serial2 | SUCCESS | Purge: TXABORT TXCLEAR | |
44 | 0.00000475 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
45 | 0.00021679 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#~1D..T | |
46 | 0.00000531 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
47 | 0.00123060 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
48 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
49 | 0.00958809 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
50 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
51 | 0.00285958 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
52 | 0.00000307 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
53 | 3.08693367 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
54 | 0.00000559 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
55 | 0.00000391 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 18: #?.1A.LW03511224.\ | |
56 | 0.00071294 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 19: ?#.1B.LW03511224..r | |
57 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
58 | 2.92590567 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
59 | 0.00000475 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
60 | 0.00000335 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 9: #?.1B.O.) | |
61 | 0.00068472 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.2D… | |
62 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
63 | 0.01190570 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
64 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
65 | 0.00388290 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
66 | 0.00000251 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
67 | 3.01195040 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
68 | 0.00000531 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
69 | 0.00000391 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 27: #?.2D………..F…..3…. | |
70 | 0.00118814 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.2C… | |
71 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
72 | 0.01190906 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
73 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
74 | 0.01288851 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
75 | 0.00000335 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
76 | 0.00890951 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
77 | 0.00000279 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
78 | 2.97897331 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
79 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
80 | 0.00000335 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 39: #?.2C.1..oT.B.3G.1.8Growatt Inverter… | |
81 | 0.00078055 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.2B… | |
82 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
83 | 0.01189090 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
84 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
85 | 0.00789877 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
86 | 0.00000307 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
87 | 2.99196322 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
88 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
89 | 0.00000335 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 29: #?.2B…………@…9….3.. | |
90 | 0.00032546 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.2A… | |
91 | 0.00000447 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
92 | 0.01288404 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
93 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
94 | 0.01091116 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
95 | 0.00000363 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
96 | 0.01291253 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
97 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
98 | 0.00390664 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
99 | 0.00000391 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
100 | 27.37493927 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
101 | 0.00000475 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
102 | 0.00000335 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 43: #?.2A#..V………..)……………..q…f | |
103 | 0.00066992 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
104 | 0.00000615 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
105 | 0.00037966 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
106 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
107 | 0.00109595 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
108 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
109 | 0.00120015 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
110 | 0.00000559 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
111 | 0.00028300 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
112 | 0.00000531 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
113 | 0.00035675 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
114 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
115 | 0.00043497 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.2A… | |
116 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
117 | 0.02389326 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
118 | 0.00000447 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
119 | 0.00989539 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
120 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
121 | 26.05390769 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
122 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
123 | 0.00000335 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 43: #?.2A#..J………………………..q…. | |
124 | 0.00037994 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
125 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
126 | 0.00047576 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
127 | 0.00000615 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
128 | 0.00052130 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
129 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
130 | 0.00060678 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
131 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
132 | 0.00066126 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
133 | 0.00000475 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
134 | 0.00073277 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
135 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
136 | 0.00079340 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.2A… | |
137 | 0.00000447 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
138 | 0.01190850 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
139 | 0.00000419 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
140 | 0.01191353 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
141 | 0.00000363 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
142 | 0.01090111 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
143 | 0.00000447 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | SUCCESS | ||
144 | 33.64178799 | ShineNET.exe | IOCTL_SERIAL_WAIT_ON_MASK | Serial2 | CANCELLED | ||
145 | 0.00000503 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
146 | 0.00000363 | ShineNET.exe | IRP_MJ_READ | Serial2 | SUCCESS | Length 43: #?.2A#……P…………………….q…. | |
147 | 0.00082552 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
148 | 0.00000587 | ShineNET.exe | IOCTL_SERIAL_GET_COMMSTATUS | Serial2 | SUCCESS | ||
149 | 0.00102248 | ShineNET.exe | IRP_MJ_WRITE | Serial2 | SUCCESS | Length 8: ?#.1A… | |
150 | 0.00000643 | ShineNET.exe | IRP_MJ_CLEANUP | Serial2 | SUCCESS | ||
151 | 0.00679947 | ShineNET.exe | IRP_MJ_CLOSE | Serial2 | SUCCESS |
portmon
has the ability to save logs of your COM port communications, so when things go pear-shaped, try grabbing a trace of a successful connection (over the wired serial cable) and the unsuccessful connection (over bluetooth), and compare and contrast in your favourite text editor or comparison tool.
The trace above shows what portmon
gives me for a successful connection to my inverter, if that’s of any use whatsoever.
So for this test, fire up ShineNet again, give it the COM port address assigned to your (now remote) Bluetooth/RS232 adapter in BlueSoleil and, with any luck, you’ll get some more stats flowing over the air.
Configuration 4
Configuration 4a gets us a bit closer to how this thing should typically run.
Righteo, now it’d be nice if I didn’t have a 5v power adapter plugged into the side of the DB9 to Bluetooth adapter, since the whole purpose of using bluetooth was to get this working wirelessly, which kind of defeats the purpose if I’ve got an extension cable connected to the adapter outside the house.
I have it on good authority that it’s possible to power this adapter directly from the inverter, using current on pin 9 of the DB9 connector. Try flicking the switch on the side of the adapter from ‘USB/Battery
‘ to ‘DB9 Pin 9(5V)
‘ and then be amazed when the lights go out and it ceases to work.
This is because the cheap-arse null modem you purchased doesn’t actually have a pin 9. Go on, check it. Check it twice. Isn’t that fascinating ? Yes. Yes it is.
So as a workaround, use that DB9 M/F null modem you definitely purchased weeks in advance instead, and a DB9 M/M gender changer so that everything’s boy/girl/boy/girl from the bluetoothy adapter to the inverter.
This is where I’m up to at the moment, so this probably be revised in two weeks or so when the new null modem turns up.
That presumably works first time, so rip out the cable, put the bluetoothy adapter in a plastic bag so it won’t break the first time it rains, replace ShineNet with something that doesn’t look like as if it was written by the solar panel guy’s son over the course of a weekend, and there you go. Have you learnt nothing ? Of course it’s not going to work.
You’ll probably find that the ebay seller just skirts a day short of their paypal-guarantee window and you receive the DB9 F/M null modem adapter exactly 30 days after you order it. Because life is meant to be spent waiting for other things to happen. Close the paypal dispute when the package arrives.
Break the adapter out of it’s bubble-wrap, attach it, turn everything on, and be amazed when it still appears to work. Flick the switch to get power from the DB9 line, and lo and behold, the power does flow, but the ones and zeroes that comprise the solar panel data don’t appear to make it to the bluetooth receiver on the laptop. So that’s annoying.
So it’s about this time that I receive a comment on this post through the absolute shart load of spam that I receive asking whether I should have the bluetooth thing in slave or master mode which gets me flicking through the specs sheet for this thing again. And what do you know, that DTE/DCE switch thing on the left hand side actually swaps the transmit/receive lines for you, meaning I didn’t need to get a separate null modem adaptery thing at all.
So there you go.
Log in to the adapter through HyperTerminal/PuTTY again, and enable the dip switch settings by entering this into it:
AT OK DIP=? Disable DIP Switch OK DIP=Y OK DIP=? Enable DIP Switch OK
Now that the device is noticing what it’s dip switches are set to, flick the Master/Slave ( M
/ S
) dip switch to ‘ S
‘, and (this is the exciting part) the DCE(F)
/ DTE
toggle on the side to DTE
.
You can now remove the (possibly not working at all) DB9 F/M null modem adapter that took four weeks to arrive from the chain of doodads, and still get something that could be described as vaguely functional.
So now everything seems to be working hunkydory in Configuration 5a:
meaning (and this is the last time I’ll be firing up Paintshop Pro for this blog post hopefully), it now appears to work in Configuration 5b:
I shall leave replacing the laptop with a raspi, and replacing the ShineNet software with something else completely for another thrilling installment. Stay tuned, Solar Warriors.
Although to be fair, these inverters are starting to have wifi built-in now, so all of this will probably be obsolete in a month or two. Enjoy !
I noticed you flicked the switch from Slave to Master, yet when you viewed the settings, it display Slave.
The bluetooth guide says:
If you want to use the DIP switches on top of the adapter then you need to first enable these. You do that by sending the command DIP=Y in Tera Term; this will enable the two DIP switches. The DIP switches can be a convenient way of switching between Master and Slave mode. Did you intend to set the adapter as Slave or Master?
Hi Andrew
Yeah that’s a valid question. I guess out-of-the-box the adapter is configured to ignore the DIP settings (
DIP=N
).I’ve switched it to Slave and enabled the DIP settings (
DIP=Y
); details are in the post above.Cheers,
gk
I have a copy of the last shinenet software release ver 2.1.1 if you’d like me to send it to you. The hardest part about the software is getting past the default password, no mention of what it is in the manual. After many frustrating hours it was ‘123456’ hope this helps someone.
Cheers Mark
Why not just use the PV Beancounter V2?
Can download that here –
http://www.pvbeancounter.com
Needs .net and is also windows based, but works better than ShineNet.
Yes, you briefly mentioned it in the post, but I see you’re a glutton for punishment 🙂
Shinenet versions –
2.4.03 64bit
2.5.0.0 32bit
All their files / software is readily available on their FTP site.
ftp://202.105.137.83
User: ftpguest
Pass: ftpguest.
ShineNet is in the folder 8.Shine Tools
Hmm.. Just tried now and I can log in (which is further than I could get before), but there’s still no files available for download (it’s just an empty folder).
Dear this User and Pass not working
Hi Greg, I wonder if you ever attempted and succeeded at connecting to pvoutput…. so many have tried with a rs232-bluetooth to laptop/pc connection and failed. Most can get the bluetooth part working but no data upload to pvoutput.
Hello Guys
I saw in the Growatt Inverter word but i don’t some short cut word in
the PV inverter
could anyone tell me about some meaning with this word(Etoday, Eall, PPV )
Etoday=1.3KWh
Eall=8028.7KWh
PPV=790/939W
Note: My boss ask me about the meaning of that word but i don’t
Help me please guys
Hi,
Thanks for the info about pin 9. I’ve hooked up an esp8266 and a ttl to rs232 converter. My inverter is a mtl4200 and can talk modbus so it was possible to talk to it via an Arduino library.
Ive programmed some code to upload to pvoutput.org every 5 minutes and also to a local open energy monitor emoncms instance.
I’ve also done some extra calculations to work out the kWh to the nearest watt hour for pvoutput
Here is the pvoutput link
https://pvoutput.org/list.jsp?userid=65029
Jeffrey,
could you please expand or link to how you did this?
I have one of these inverters and i would love to connect it to my home automation system, but growatt wont give access to there API. So no live data, but your solution gives me hope.
Being able to get it to a EMON might be able to give me what i need.
I’m also Keen to know how you did this? I have this inverter and would like to do the same. Could you please help?
guys
After reading about your pain here, and it has been entertaining for me to read, I am going to stay with SMA and SolarEdge inverters.
Thanks for providing the information. Keep sharing
G’Day Guys
This is exactly what I was looking for, now that I’m going to have much more time at home due to ‘BeerVirus’ I’m going to get the data from our Growatt 3K so I can determine if I can hook up batteries to the current panels or buy extras and risk the very high feed-in tariff we currently enjoy.
TIA
NG
BTW – I tried to use ‘Nigel ‘ and your site said ‘Not Valid email address’ this is a valid email address 🙂
Never seen so much angist. Why do you want to monitor a system that’s working fine? Just press the ‘activities’ button on the inverter, and hey presto, all the info is displayed. My way of keeping in touch with an excellent performing system on my way to my Man Cave.
> Why do you want to monitor a system that’s working fine?
Because, and this might seem a little obvious, the only reason you know that it’s working fine is because you monitor it.
> My way of keeping in touch with an excellent performing system on my way to my Man Cave.
Well, my inverter is in a narrow stretch of land outside the house and my ‘man cave’ is the interior of the house so that doesn’t apply to me. I suspect you’re not pressing that activities button 24 hours a day either.