Closed GoogleCodeExporter closed 8 years ago
This may be related to the sum of inverters issue also reported.
The code has
my $e_total = $data[$DATA_BYTES{'E_TOTAL'}]/10;
So the returned number is 65535... that is the maximum number you can get with
16 bits. I think it is safe to assume, that we run into that limitation either
due to the protocol running out of space or some bug in the perl script.
Can you try and enable logging and see if you can provide me with a package to
look at?
My inverters are currently about a year from crossing that performance
treshold, and testing is restricted to weekends due to the northern
placement/work hours, so any help would be appreciated.
Henrik
Original comment by henrik.m...@gmail.com
on 19 Nov 2014 at 6:06
Ok, I found the issue in the documentation from Eversolar.. I think!
We read out the strings of the inverters with this code snippet
f($config->options_strings == 1) {
%DATA_BYTES = (
"TEMP" => 0,
"E_TODAY" => 1,
"VPV" => 2,
"IPV" => 3,
"IAC" => 4,
"VAC" => 5,
"FREQUENCY" => 6,
"PAC" => 7,
"IMPEDANCE" => 8,
"NA_1" => 9,
"E_TOTAL" => 10,
"NA_2" => 11,
"HOURS_UP" => 12,
"OP_MODE" => 13
);
} elsif($config->options_strings == 2) {
%DATA_BYTES = (
"TEMP" => 0,
"E_TODAY" => 1,
"VPV" => 2,
"VPV2" => 3,
"IPV" => 4,
"IPV2" => 5,
"IAC" => 6,
"VAC" => 7,
"FREQUENCY" => 8,
"PAC" => 9,
"NA_0" => 10,
"NA_1" => 11,
"E_TOTAL" => 12,
"NA_2" => 13,
"HOURS_UP" => 14,
"OP_MODE" => 15
);
All data is read as two byte sections, so we need to find both the E-Total H
byteset and the E-Total L byteset
I am a bit lost, as the 0x11, 0x02 read query in section 3.2.1 in the protocol
documentation specifies this order : Temperature, Vpv1, Vpv2, but our read
takes E_today as second item... But the documentation has the lower and upper
double bytes of total production as neighbours so it should be simple to dig
out.
We need to look at the bitstream returned from your inverter - what inverter is
it / how many strings? NA_1 or NA_2 in the response will probably contain the
missing bit of produced power, so we should modify this part of the code for
debugging purposes:
my $e_today_kwh = $data[$DATA_BYTES{'E_TODAY'}]/100;
my $e_today_wh = $e_today_kwh * 1000;
my $e_total = $data[$DATA_BYTES{'E_TOTAL'}]/10;
Add the following lines:
print "NA1 $data[$DATA_BYTES{'NA_1'}] \n"
print "NA2 $data[$DATA_BYTES{'NA_2'}] \n"
Let me know what you get from this. I live so far north, that I still have no
sunlight outside working hours, so the above is not tested here yet. I expect
to get a nice couple of zeros, and you should get a '1' as NA1 or NA2
Henrik
Original comment by henrik.m...@gmail.com
on 21 Jan 2015 at 7:55
Issue 7 has been merged into this issue.
Original comment by henrik.m...@gmail.com
on 22 Jan 2015 at 7:45
I had to add a semi colon to the end of those extra lines ;)
Here's the output (The first inverter to link up is the one with > 6553.5 kWh
on it i.e the 2102.3 should be 8655.8 kWh)
I hope it helps, Steve.
2015-01-23 09:57:33: Severity 3, No response to 'offline query' request - no
offline inverters
sending packet to inverter...
aa 55 01 00 00 10 11 02 00 01 23
received packet from inverter:
aa 55 00 10 01 00 11 82 2c 01 5d 00 48 0b db 00 0a
00 0b 09 b5 13 84 01 11 ff ff 00 01 52 1f 00 00 3b
b3 00 01 00 00 00 00 ff ff 00 00 00 00 00 00 00 00
00 00 0a 34
NA1 1
NA2 0
2015-01-23 09:57:35: Severity 3, 8881500A11200910 output: 273 W, Total: 2102.3
kWh, Today: 0.72 kWh
sending packet to inverter...
aa 55 01 00 00 11 11 02 00 01 24
received packet from inverter:
aa 55 00 11 01 00 11 82 2c 01 5c 00 44 0b 5e 00 09
00 09 09 b8 13 80 00 ee ff ff 00 00 87 c7 00 00 18
a6 00 01 00 00 00 00 ff ff 00 00 00 00 00 00 00 00
00 00 0b 37
NA1 0
NA2 0
2015-01-23 09:57:37: Severity 3, B881500A12980009 output: 238 W, Total: 3475.9
kWh, Today: 0.68 kWh
Original comment by wot...@gmail.com
on 22 Jan 2015 at 11:03
It looks like we found the culprit. I'll try having this confirmed, but it'll
take some time. If your outputs are consistent, then you can add
6553,5*$data[$DATA_BYTES{'NA_1'}] to the line
my $e_total = $data[$DATA_BYTES{'E_TOTAL'}]/10
Sorry about the missing semicolons
Henrik
Original comment by henrik.m...@gmail.com
on 23 Jan 2015 at 5:01
Hi Henrik,
What will the end result of the line look like once altered?
Thanks,
Steve.
Original comment by wot...@gmail.com
on 23 Jan 2015 at 5:13
That'll be
my $e_total = $data[$DATA_BYTES{'E_TOTAL'}]/10
+$data[$DATA_BYTES{'NA_1'}]*65535/10;
Henrik
Original comment by henrik.m...@gmail.com
on 23 Jan 2015 at 5:24
There is a similar bug in total hours, we'll probably get the high bits from
NA_2
Henrik
Original comment by henrik.m...@gmail.com
on 23 Jan 2015 at 5:26
Thanks again.
Looks good. It'll be a while before I get to 65532 hours though :)
ID string 1 1500E1.00 TL1500 AS Ever-Solar 8881500A112009103600 V 00009-05
Serial number 8881500A11200910
Total uptime 15290 hours
Total energy 8663.2kwh
Operation mode 1
Inverter temperature 42.6C
Updated 2015-01-23 16:31:28
Connect time 2015-01-23 16:30:58
Original comment by wot...@gmail.com
on 23 Jan 2015 at 5:34
Updated eversolar.pl with code and comments
Original comment by henrik.m...@gmail.com
on 31 Jan 2015 at 12:20
Original issue reported on code.google.com by
phill.gl...@bigpond.com
on 4 Aug 2014 at 9:56