At my parents place, we installed photovoltaic cells. The produced electricity is converted to AC power and is coupled with the normal grid: if we produce too little, the grid provides the remaining power; overproduction is given to the grid.

The inverter (the device that converts DC into AC) is a SolarMax C-series. It has a 2-line LCD display that gives out some basic information: current, voltage, power; produced energy today, this month, this year, … This is very useful information, but is a bit hard to access. The instruction manual reveals that there is a computer interface available to read out its data. Naturally, I wanted to explore this!

The interface is physically an 8P8C (usually called RJ45). Electrically it’s a serial interface. The manual isn’t exactly clear whether it’s an RS-232 or an RS-485 interface. After some mailing and calling, the people at Sputnik Engineering just mailed us the pinout diagram and document (both in German); it appeared to be RS-232. Their website even has a free utility called MaxTalk to read out the data!

The MaxTalk program is very basic. It only reads out the data, but does not process it in any way. However, it showed that the PC communicated with the inverter, which is great news!
maxtalk-1

Reverse engineering the protocol

I wanted to get access to this data myself. This would allow me to run some statistics and/or graphing tools on them. I did not find any documentation on the protocol on the Internet, so I started to reverse engineer it myself.

I’m not sure of the legal aspect of this. Some facts to keep me safe: the software did not present a EULA; I only inspected the bytes traveling over the serial interface and did not touch the application in any way.

There is a wonderful tool called socat that allows me do some plumbing with a data stream: The MaxTalk application is running inside a VMware machine. The serial port of this machine is connected to a unix-domain socket by VMware itself. Socat connects this socket to the real serial interface and spits out a copy of the stream as a bonus. You can even bridge the serial line over TCP if you want to!

Since RS-232 is a fairly easy protocol, the easyest way is just to try out the different settings. I figured out that the SolarMax talked at 19200bps, using 8 databits, no parity and a single stop bit (19200 8N1 for short). The corresponding socat line thus became:

# socat -v /dev/ttyS1,b19200,cs8,parenb=0,cstopb=0 UNIX-CONNECT:/tmp/serial

Here is (some of) the output I got. I re-assembled the fragments together to make it more readable:

<  {FB;05;4E|64:E1D;E11;E1h;E1m;E1M;E2D;E21;E2h;E2m;E2M;E3D;E31;E3h;E3m;E3M|1270}
>  {05;FB;7C|64:E1D=16;E11=8002;E1h=12;E1m=39;E1M=3;E2D=1C;E21=8004;E2h=E;E2m=21;
>  E2M=3;E3D=6;E31=8004;E3h=10;E3m=23;E3M=4|1C4E}
--
<  {FB;05;36|64:CAC;KHR;KDY;KMT;KYR;KT0;KLD;KLM;KLY|0D34}
>  {05;FB;59|64:CAC=1F3E;KHR=26D6;KDY=8E;KMT=8D;KYR=221;KT0=18C7;KLD=78;KLM=F8;
>  KLY=A8F|154C}
--
<  {FB;05;3E|64:ADR;DDY;DMT;DYR;PIN;SWV;THR;TMI;TYP;FRD;LAN|0FC4}
>  {05;FB;61|64:ADR=5;DDY=E;DMT=4;DYR=9;PIN=1428;SWV=7B;THR=13;TMI=A;TYP=BC2;
>  FRD=7D60905;LAN=1|178D}

The socat output shows that the messages are pure ASCII, which is a lot easier to figure out than raw binary.

From this point on, it’s just some trail-and-error to figure out what the message format looks like, how the responses are formatted and what they mean.

The message format

Each message has the following format:

  • ‘{‘ : start of message indicator
  • 2 characters source address in hex
  • ‘;’
  • 2 characters destination address in hex
  • ‘;’
  • 2 characters message length in hex
  • ‘|64:’
  • data
  • ‘|’
  • 4 characters checksum in hex
  • ‘}’ : end of message indicator

The computer seems to have address 0xFB. The SolarMax has address 0x05, which is what we configured.

The length field is over the complete message, including the curly braces.

The checksum field is a standard 16-bit checksum over the body: the first character is the source address, the last character is the ‘|’ before the checksum.

In messages from computer to SolarMax, the data consists of one or more question-codes, separated by a ‘;’. The response contains the same codes, but includes the answers after an ‘=’ sign.

The codes

The meaning of the codes was largely educated guessing. Grab all known codes several times and compare what differs. Also compare this with what the Windows-interface shows.

This perl-script enumerates all codes that I found. I figured out the meaning of most of them.

# ./solarmax-test.pl /dev/ttyS1 5
Opening serial port /dev/ttyS1
Setting 19200 8N1
Reading all pending bytes
Address (ADR): 5
Type (TYP): 0xBC2
Software version (SWV): 12.3
Date day (DDY): 15
Date month (DMT): 4
Date year (DYR): 9
Time hours (THR): 18
Time minutes (TMI): 11
Error 1, number (E11): 32770
Error 1, day (E1D): 22
Error 1, month (E1M): 3
Error 1, hour (E1h): 18
Error 1, minute (E1m): 57
Error 2, number (E21): 32772
Error 2, day (E2D): 28
Error 2, month (E2M): 3
Error 2, hour (E2h): 14
Error 2, minute (E2m): 33
Error 3, number (E31): 32772
Error 3, day (E3D): 6
Error 3, month (E3M): 4
Error 3, hour (E3h): 16
Error 3, minute (E3m): 35
Operating hours (KHR): 9953
Energy today [Wh] (KDY): 12900
Energy yesterday [Wh] (KLD): 14200
Energy this month [kWh] (KMT): 154
Energy last monh [kWh] (KLM): 248
Energy this year [kWh] (KYR): 558
Energy last year [kWh] (KLY): 2703
Energy total [kWh] (KT0): 6356
Language (LAN): 1
DC voltage [mV] (UDC): 344700
AC voltage [mV] (UL1): 239400
DC current [mA] (IDC): 330
AC current [mA] (IL1): 520
AC power [mW] (PAC): 89000
Power installed [mW] (PIN): 2580000
AC power [%] (PRL): 3
??? Start ups ??? (CAC): 8004
??? (FRD): 0x7D60905
??? (SCD): 0x3C
??? (SE1): 0x0
??? (SE2): 0x0
??? (SPR): 0x1
#

The result

sm_power20090415

For those interested: the above graph (with the exception of the ‘Showing from […] to […]’ lines) was generated using the following rrdtool command:

rrdtool --imgformat PNG --start "06:00" --end "21:00" --upper-limit 3100 --lower-limit 0 --rigid \
DEF:Pac=/var/lib/rrdtool/solarmax.1.rrd:Pac:AVERAGE \
DEF:Energy=/var/lib/rrdtool/solarmax.2.rrd:energy:AVERAGE \
VDEF:Pac_cur=Pac,LAST \
VDEF:Pac_avg=Pac,AVERAGE \
VDEF:Pac_peak=Pac,MAXIMUM \
CDEF:Pac_Wh=Pac,3600,/ \
VDEF:Eac=Pac_Wh,TOTAL \
VDEF:Eac2=Energy,TOTAL \
"AREA:Pac#0000ff:Pac    " \
"GPRINT:Pac_cur:%6.2lf%sW" \
"COMMENT:\\n" \
"HRULE:Pac_avg#bbbbff:Average" \
"GPRINT:Pac_avg:%6.2lf%sW" \
"COMMENT:\\n" \
"HRULE:Pac_peak#ff0000:Peak   " \
"GPRINT:Pac_peak:%6.2lf%sW" \
"COMMENT:\\n" \
"GPRINT:Eac:int(Pac)   %6.2lf%sWh\\n" \
"GPRINT:Eac2:meas       %6.2lf%sWh\\n" \
--vertical-label "Watt" --title "Power"

The total energy for the day is calculated in two ways: ‘int(Pac)’ uses the sampled power-gauge to calculate the total; ‘meas’ uses the energy-counter of the inverter. The latter one should be more accurate, but can’t be read out with as much precision.

Update 2009-10-09

Chris has made his own variant of the above Perl script:

Hi Niobos,

here we go… find attached to this mail my modification to
your script (a very helpful piece of code :-).

Since i am not the perl-crack i’ve not yet implemented the
command “SYS” and the translation of the returned value
into a readable Operation-State.

At the moment i don’t know how to convert the returned
value i.e. of “SYS=4E24,0” which is 20004,0 in decimal
and means an “Operation at MPP”.

ThX…
Chris

93 Comments

  1. Niobos says:

    junkete,

    There is no CRC involved, it’s a simple checksum: just sum up all the bytes and keep the lowest 16 bits of the sum.

  2. jn says:

    In the RJ45 connector there is a RS232 and a RS485 interface.
    you can use any one you like.
    With the rs485 you can diasychain the inverters. in the protocol you adress the inverter with it’s number.

    You don’t have to reverse engineer the protokoll. you only have to download the software from solarmax. locate the jar files and decompile the java code. in the java there is all the information you need to see how everything works.

  3. jn says:

    got this from solarmax. a long time ago. so i’m not sure if they are still valid.

    für RS232:
    RJ45 Pin 4 —– GND —– subd9 Pin 5
    RJ45 Pin 5 —– TXD —– subd9 Pin 3
    RJ45 Pin 6 —– RXD —– subd9 Pin 2

    für RS485
    RJ45 Pin 1 —– V+ —–
    RJ45 Pin 2 —– V+ —–
    RJ45 Pin 3 —– GND —–
    RJ45 Pin 4 —– GND —–
    RJ45 Pin 5 —– NC —–
    RJ45 Pin 6 —– NC —–
    RJ45 Pin 7 —– A —–
    RJ45 Pin 8 —– B —–

    i think the V+ is used to power the tranceiver chips.
    the internal inverter and the external interface part are opto isolated.
    that’s why the power has to be provided externaly.
    but i’m not copletely sure.
    i bought a cheap RS485 interface and installed it long ago.
    should have taken more notes then.

  4. Niobos says:

    While decompiling may give you the same information (or maybe more), there is a legal difference. In theory decompiling is forbidden by copyright laws, although the legislation is a bit vague on that.
    And I just wanted a challenge!

  5. jn says:

    @Niobos
    my fist attempt was to put a palmpilot in between the PC and the inverter.

    the second attempt was to seen why this software behaves so strange.
    it needs at least a pentIII with 800MHz to run smoothly. for a task that a 8bit embedded processor is needed.
    they use a DCOM interface to communicate via windows to the rs232.
    maybe there lies the problem. and the timeing gets too slow.
    but you have to see the code for yourself.

    at least the inverters and their software work without problems.

    even without decompliling you can get a lot of information by reflection. you can debug the software.
    there are some configuration dialogs. a loop to get the values from the inverters and to write them to a file. also a dialog to display the current values.
    and you dont realy have to decompile the files just look at them with a hex editor.
    i belive that you will find all the strings you need to complete you communication.

    i also like challanges. but their software(hopefully not the one in the inverters) just does not deserve to be treated by respect.
    the secrect password for changing the inverter settings was given to us as a PDF document. but over the password was a black box. so nobody could see the password.
    but viewed with a slow computer the adobe reader would print the password and put the black box over it. so you had time enough to see ist. and printed with an old laserprinter the box was not printed black at all and you could see the password under the box.

    after that i dont see a need to be challanged. if you use java or some .net language and you dont want your code to be reverse engineered then us an obfuscator or write your software in C/C++. then it would run on a 386 processor.
    and why use java in the first place. when you use DCOM runs just on windows machines.

    the solarmax people may have good intentions. but somehow they failed to impress me.
    the expection are there inverters. they work without problems. (only one was replaced and this one only lost its time an configuration settings. we would not have noticed it without the monitoring.)

  6. borsti says:

    Hi,
    does anyone have a list of error codes?

    Thanks

  7. Yves says:

    You can get list (20 last errors) of error by sending follow command :
    EC00,EC01,EC02,…,EC19
    Returns are textbased with error discription.

  8. sushiguru says:

    Hi there

    I’ve been building on the outstanding work on this post, and have translated the original Perl code into PHP, which allows me to locally poll my inverter (2000S) from my home server, and post the data out to a web service which logs it for me and gives (or will give) a nice dashboard of its operation.

    I’ve posted the code in a git repository as Open Source, so please feel free to use/contribute.

    https://github.com/sushiguru/solar-pv.git

    Cheers,
    sg.

  9. Jeroen says:

    Thank you so much for this work. From here I worked my way to sushiguru’s work (see reply above), and took that as a basis for my somewhat unusual home setup. Note that the Solarmax inverters cannot “talk” outside of the local subnet.

    My NAS, a small Freecom FSG can run PHP webpages, so I created a php (4!) page that queries the Solarmax 4000S inverter and returns all parameters as a JSON string, in essence acting as an application proxy. The page is queried every 10 minutes by a hosted server, which does further storage and processing. Next up is of course some nifty google graphs.

  10. dodegkr says:

    Fantastic work.

    I have both my inverters working using the chris code.
    I will now try sushiguru’s

    The inverters are connected together with RS485 and then one to the network with Ethernet.

    Well done Guys!

  11. dodegkr says:

    Has anyone tried integrating this with http://openenergymonitor.org/emon/node/90

    It looks perfect

    sushiguru have you seen that ?

  12. sardylan says:

    Hi all,
    Thanks to you and all informations published in this post I was able to write a little C daemon which periodically query my SolarMax inverter via TCP port and collect data into a MySQL DB.
    You can find the source code in https://github.com/sardylan/smlgr
    Thanks for all.

  13. Statistiche sul fotovoltaico | Luca Cireddu says:

    […] alle preziose informazioni raccolte in questo post, dove è accuratamente spiegato il protocollo di comunicazione tra l’inverter ed i vari […]

  14. Jeroen says:

    Hi all.

    I have implemented the code to readout my 4200 using bash. It i all a bit rough around the edges, i.e., I only send a static string with a preset checksum, but let’s face it, once in production, we always ask for the same data. The fun thing is that it requires nothing but something -ix do do the work and cron it.

    My ancient NAS runs it (bash 3!), a Raspberry Pi runs it, my Ubuntu laptop runs it.

    I use ethernet for it now, but I have done the same thing with a Raspberry Pi, a $4 USB-to-RS485 converter and another brand inverter using RS485, so only the low level routines would have to be changed if you want to do that.

    It is my intention to redo this once more on the arduino. It will ONLY post to pvoutput.

    If anyone is interested in the code , let me know!

  15. StevenMa says:

    Hello, I have two new SolarMax inverters; 8MT2 & 15MT2 both with RS485 and Ethernet ports. I am generally competent with the hardware and have a Raspberry Pi but my coding skills are currently limited – but planning to learn by making mistakes!

    To implement this code what should my computer platform look like if I am planning to upload to this site’s dashboard implementation like the guy in this link http://openenergymonitor.org/emon/node/2605 Hardware & Software?

    Is it sufficient just to have an Ethernet LAN / WAN connection.

    I posted here rather than http://openenergymonitor.org to understand the platform requirements and if there was any experience of SolarMax MT series inverters.

    Many thanks in anticipation.

    Regards,
    Steve

  16. Jeroen says:

    Hi there Steve.

    I see you asked in openenergy too.

    That is quite some equipment you have there. I only have a modest 4200S but I assume this is in terms of the interfacing the same or almost the same. Hardware should be no issue. You loop the inverters using RS485, ensuring different device addresses. The last-in-chain you can hook up to your rPi using RS485 and a RS485-to-USB, or ethernet (I would use the latter).

    Since the Solarmax inverters are deliberatly TCP-cripled (they refuse any routing) the rPi needs to be on the same subnet.

    Not sure if the scrips you want to use are capable of handling multiple inverters, but if not to should not be too crazy hard to modify.

    Have fun with the project!

    Jeroen

  17. StevenMa says:

    Hello, I wonder if someone could point me in the right direction please?

    I am using a version that sends to emoncms.org the Open Energy Monitoring project.

    Unfortunately I get this error:

    Invalid response at solarmax2emon.pl line 226

    Line 226 is this:

    die("invalid response") unless $V_MSG =~ m/^\|64:(\w{3})=([0-9A-F]+)\|([0-9A-F]{4})}$/;
    # TODO: check checksum
    die("wrong response") unless $1 eq $P_COMMAND->{'name'};
    
    return $P_COMMAND->{convert}($2);

    I haven’t tried to work out what it’s doing yet and not being a programmer it might take me some time. I’d be grateful therefore if someone could enlighten me please about line 226 and what its trying to do.

    I am guessing it might be related to me having MT series inverters. I decoupled the RS485 link between the two inverters and changed the TYP hex & dec codes and description to my 15MT2 inverter codes but that didn’t change things – and from looking at the script I didn’t really expect it to. I also changed the IP, port and device addresses to my inverter in the script of course. The comms are OK as I’ve been able to test it successfully with SolarMax’s MaxTalk 2.

    I do want to get this to work and plan, when I have more time, to try to start from the basics and build up from there using the existing script as the basis for my own script build-up, learning as I go – hopefully.

    If anyone does have any pointers they will be gratefully received.

    Thank you.

    Regards,
    Steve

  18. Niobos says:

    Hi StevenMa,

    I have never used or looked at the script you use, but as far as I understand the Perl snippet you copied it verifies if the received message is in the expected format: it starts with “|64:”, followed by 3 letters, followed by an “=”-sign, followed by hex-digits, followed by a “|”-character, followed by 4 hex-digits, and ending with a “}”.

    Apparently, your message does not match the above format, so the script barks.

  19. Kiino says:

    Hi y’all!!!

    I don’t have anything to say but congrats to everybody for the work you have been doing of reverse engineering whit this protocol.

    You have discoverd almost everything by your self, but in case there is someone interested in oficial MaxComm Protocol Documentation I can send it to you.

    Keep working!!!

  20. Niobos says:

    Hi Kiino,

    I would very much like to see the official MaxComm protocol. Can you send it to me (niobos@dest-unreach.be)?

  21. coucou39 says:

    Hi Niobos, Kiino
    Thank you for the great interesting job. I own for a short time now a Solarmax 10MT2 and would be really interested in having the official MaxComm protocol as I have to adapt the solarmax-logger to fit to myMT serie.
    Could any of you send it to me (or tell me where it could be retreieved from) : jeanmarie.lureau39(at)orange.fr
    Thank you in advance

  22. coucou39 says:

    Hi All,
    I was able ,by asking Sputnik about their communication protocoll, to receive a basic description of the main codes accepted by the Solarmax inverters.
    Unfortunately I would like to register the cos phi of my inverter and do not find anywhere the code for this value. Has anybody already suceeded in retrieving this value from a solarmax inverter ?
    best regards

  23. Jeroen says:

    Hi coucou,

    This might be a really stupid answer, but would argue the inverter does not HAVE a cos phi. It can be forced to operate less than optimal by an inductive or capacitive load, but there is nothing, again in my opinion, the inverter itself could “do” about it. It simply tries to push in electrons following the sine of the grid. As soon as it would “phi” by itself it would not be inverting at all I’d think.

    Oh well, I’d say you can always take the AC current and AC voltage and compare it’s product with the AC power, and that would be your cos(phi) by definition, but I still think it is a bit weird.

    Warm regards!

    Jeroen

  24. coucou39 says:

    Hi Jeroen
    there is never any stupid answer, don’t worry.

    I don’t really know where the value come from (maybe you’re right in saying it’s a calculated value from other available values from the inverter) but if you look the inverter through the “official” software Maxtalk 2, the cos phi value is displayed.

    Most of the time the value = 1 but when the inverter start and stop (during arround 15 minutes after or before) the cos phi value varies and it’s this variation I would like to register.

    If you know how to calculate it maybe you could give me the formula I should use, I’ll then look in the available variables retrieved from the inverter if I have everything to recalculate it or maybe someone already succeded in retrieving this value form the solarmax protocoll ?

    sunny regards

  25. Jeroen says:

    Ah I see. Well I would argue it is the (AC_VOLTAGE * AC_CURRENT)/AC_POWER. That would boil down to the efficiency of the AC circuit.

    Personally, I display (DC_VOLTAGE * DC_CURRENT)/AC_POWER, as that is the real efficiency loss of the entire inverter. For mine (a 4200S) it around 0.95 in fair sun, but in low light conditions, it can get really bad.

  26. François says:

    Hello Jeroen,

    You said earlier that you connected to your 4200 through a USB-RS485 converter. I want to do the same with my 3000S but I have to power the RS485 card of the inverter externally with +15V. Then I am afraid that it destroys my USB-RS485 converter which runs in 5V. Did you have that kind of problem or not?
    Also, I’m very interested in your bash code for the readout 🙂
    Thanks!

    François

  27. Jeroen says:

    Hi Francois. I am sorry but no, that is not how my 4200 is hooked up. I was responding to Steve’s setup.

    My 4200 is hooked up to Ethernet. On the 4200 this is physically the same port as the primary RS485 port; the inverter can use either/or on the same physical port. Your 3000S is exactly the same as far as I know, and if you have a choice, I would REALLY prefer to use Ethernet. Converting USB to 485 is messy and some of the converters are really unstable and “hang” the Pi after one or two days of operation.

    I am confused about what you mean with powering the inverter’s 485 card with 15 volts. Are you sure this is correct? The 3000S does not need any external power supply as far as I know. If am wrong, there should absolutely not be a problem with voltage levels. These are well defined in 485 and cover a broad range.

    To be honest, I have not finished the “driver” part for the bash script. The reason is that is was written for a Mastervolt inverter (which my brothers has), and my own setup dus not use a Pi but my linux based NAS with some more nifty stuff 😉 I did however hash out the inverter-specific code. It is not a terrible hard thing to do.

    Would love to hear more about your intended setup,

    Jeroen

  28. Statistiche sul fotovoltaico | Sardylan Site says:

    […] alle preziose informazioni raccolte in questo post, dove è accuratamente spiegato il protocollo di comunicazione tra l’inverter ed i vari […]

  29. ipimpianti says:

    Hello everyone,
    I’m looking for the string to be sent to an inverter SolarMax 10MT2, someone manages to allegarmela the answer? Thanks in advance

  30. Jeroen says:

    Dear Ipimplanti,

    I think all solarmax speak the same language (but I am not sure about it!) The first post is this thread has it pretty much described. And as you can see, there is not “the” string, but you can ask the inverter lots of things 🙂
    Jeroen

  31. DavidG says:

    Thanks for doing this work guys and thanks for sharing.
    I have just commissioned a SolarMax 4600P. None of the comments mention the P Series which I gather came out about mid 2014. It comes with Ethernet standard and RS485. From a quick look the comms protocol looks the same as described above.

    I have a few questions I am hoping someone can help with:
    – I found a program on the SolarMax website called MaxMonitoring. It provides dashboard style displays and graphs. The help screens don’t mention P series 🙁 and I can’t get it to talk to my inverter. (MaxTalk works OK). Wireshark is showing what seems to be a valid command going out and a valid response coming back, but MM says Plant Unreachable. Any information about this program?

    – I can happily connect to my inverter using MaxTalk via Ethernet. When I look with Wireshark I am seeing about 30 or 40 binary bytes before the {ASCII} commands. ??

    – I presume it is possible to configure the inverter by sending commands to it. Has anyone tried this and what is the command format? (just the same as the response format I’m guessing).

    Thanks for any help and Merry Christmas!

    DG

  32. Niobos says:

    Hi DavidG,

    I have no experience with the MaxMonitoring program, so I can’t help you there.

    About Wireshark: What view are you looking at? Maybe these are the ethernet & IP headers?

    I also suppose that configuring should work in “CODE=VALUE” style, but haven’t tried it.

    Niobos

  33. Bios says:

    Hi DaveG
    MaxMonitoring will not work properly with P series inverters. Dashboard gauges fail etc only text data and graphs display, The windows version works partly as does the Ipad app version. It will not work with android systems. IT (MM) will hopefully be updated, but with SolarMax now bankrupt it may never happen.
    Bios

  34. DavidG says:

    Thanks for the info. I don’t like the chances of seeing any enhancements. Just have to write my own 🙂

  35. john says:

    hi.
    i have a problem (error code 11)solarmax inverter 13mti can anybody help me
    it dose not work and the red led is on i have no production.evrithing on thai mains power are corecct and the dc power is corecct

  36. Jeroen says:

    Hi John,

    I don’t think anyone can help you here. This topic is about data communication with the inverter. If I understand you correctly the inverter is not working at all.

  37. Jan says:

    Hi Guys,
    I would like to regulate Power and Power factor for SolarMax inverter SM80C. Any idea how to do it using some packet? I have MaxTalk installed but I cant find the option to regulate a concrete inverter. Any idea how the regulation packet should look like?
    Thanks,
    Jan

  38. Chris says:

    I have a solarmax 5000 P series inverter which I guess has different query codes than the units discussed here.
    I am hoping somebody might know what the correct query codes might be to write to the LAN to get the proper response
    I am using the perl script solarmax-test-chris.pl
    I have the inverter connected via Ethernet and im fairy sure it’s connected ok because I get COMMUNICATION..: OFFLINE when the inverter is off at night.
    When the inverter is on I get:
    Writing “{FB;FF;16|64:PAC|0461}” to Socket
    Reading response header from Socket
    Timeout
    Exiting subroutine via next at ./solarmax-test-chris.pl line 214.

    Regards,
    Chris

  39. DavidG says:

    I am talking to my SolarMax 4600P with these commands, so I am sure the 5000P would be the same.
    I am not using the Perl script so I cannot comment on that.
    Try using the MaxTalk utility to prove communications (it is also a useful utility).

  40. JeroenS says:

    In reply to StevenMa questions about the script failing for the MT series converters. I have found the issue but I am not a coder and would appreciate if somebody can help me with the following.
    Is seems the MT series does not know the UDC command but instead has the UD01 and UD02 commands.
    However, this peace of code:

    die(“invalid response”) unless $V_MSG =~ m/^\|64:(\w{3})=([0-9A-F]+)\|([0-9A-F]{4})}$/;
    # TODO: check checksum
    die(“wrong response”) unless $1 eq $P_COMMAND->{‘name’};

    Checks the length of the returned values and expect a 3 letter code to identify the returned value. But, we are getting back a 4 letter identification code. I can change the w{3} to w{4} but than it fails for all the other queries.
    Here is a query and response from the converter getting CUD02 from one of them (I have two):

    Query: {FB;D6;27|64:UD02;UGD;UI1;UI2;UI3|08B4}
    Response: {D6;FB;3C|64:UD02=1251;UGD=D28;UI1=F45;UI2=F45;UI3=F4E|0D86}

    How can I change the piece of code to also accept both 3 and 4 letter commands?

    Thanks in advance.

  41. Niobos says:

    To accept either between 3 and 4 characters, you need to change it to \w{3,4}

  42. Sam says:

    Trying just to access my SM3000S. I’m a server admin so I think I know a little about connecting networking kit but this thing just does not want to communicate, I have it connected to a powerline network system which I tested with a laptop and works fine, the LAN connecton light goes on when I turn on the ethernet on the SM3000S but the static IP I have set does not show on my router and I cant access it via the powertalk software. 🙁