Now Reading
Enphase Envoy-S “Information Scraping”. | thecomputerperson

Enphase Envoy-S “Information Scraping”. | thecomputerperson

2024-01-20 00:59:44

If you’re enthusiastic about different Enphase data the next different pages might also be of curiosity:
What is inside the Enphase Envoy-S (teardown)
Reverse Engineering the Enphase Installer Toolkit
Enphase Envoy-S Open Ports!

I’ve lately needed to interface with an EnPhase Envoy Photo voltaic PV system. The annoying factor is the dearth of documentation.

The API for the “cloud service” exists and is properly documented however the API for the native gadget itself doesn’t appear to exist.

There may be one tiny one page document that appears to counsel you will get some knowledge from the gadget. The data gleaned from their instance API ” http://device.ip.address.here/api/v1/production ” is poor.

{
 "wattHoursToday": 6641,
 "wattHoursSevenDays": 6641,
 "wattHoursLifetime": 6669,
 "wattsNow": 90
}

First.. it provides far LESS data than you may simply retrieve from the primary internet web page for the gadget on the LAN. Secondly the wattsNow discipline doesn’t appear to match the data displayed on the primary web page of the gadget. The wattsHoursSevenDays can also be barely off. Third.. it doesn’t even replace recurrently. You possibly can’t have a system that detects dips in manufacturing on account of cloud cowl and so on.

Nevertheless. I did discover another wise sources for data – and data that updates at an much more common charge than the gadgets fundamental web site!

Whenever you go to the location on the gadget working firmware D4.2.27 it makes the next requests:

http://10.0.0.177/backbone/application.js?version=04.02.43
This URL comprises lots of references to different json information that I must analysis. See additional down on this publish for the opposite URLs uncovered.

http://10.0.0.177/home.json
This json file comprises the Database dimension / utilisation, date and time on the gadget, connection standing and settings and replace standing.

http://10.0.0.177/production.json
Accommodates most helpful data.. Manufacturing and (if fitted) consumption knowledge!

{
   "manufacturing":[
      {
         "type":"inverters",
         "wNow":74,
         "whLifetime":6815.014722222222,
         "readingTime":1470250044,
         "activeCount":14
      },
      {
         "type":"eim",
         "activeCount":1,
         "whLifetime":6704.458,
         "whLastSevenDays":6676.458,
         "whToday":6676.458,
         "wNow":66.236,
         "rmsCurrent":1.179,
         "rmsVoltage":246.433,
         "reactPwr":276.774,
         "apprntPwr":290.494,
         "pwrFactor":0.23,
         "readingTime":1470250044
      }
   ],
   "consumption":[
      {
         "type":"eim",
         "activeCount":1,
         "whLifetime":8025.821,
         "whLastSevenDays":7899.821,
         "whToday":7899.821,
         "wNow":2641.386,
         "varhLeadToday":2822.701,
         "varhLagToday":1810.03,
         "vahToday":9018.68,
         "varhLeadLifetime":2951.701,
         "varhLagLifetime":1922.03,
         "vahLifetime":9473.68,
         "rmsCurrent":11.924,
         "rmsVoltage":246.458,
         "reactPwr":-284.009,
         "apprntPwr":2938.817,
         "pwrFactor":0.9,
         "readingTime":1470250044
      }
   ]
}

http://10.0.0.177/inventory.json
Additionally comprises some very helpful data. Detailed standing in regards to the state of every micro-inverter. To this point I’ve seen the next states:

– “envoy.world.okay”
– “envoy.cond_flags.pcu_ctrl.commandedreset”
– “envoy.cond_flags.pcu_ctrl.dc-pwr-low”
– “envoy.cond_flags.obs_strs.discovering”
– “envoy.cond_flags.obs_strs.failure”
The total conversion desk on what these standing messages imply in english is on the finish of this text.

The total output of the web page is as follows:

[
   {
      "type":"PCU",
      "devices":[
         {
            "part_num":"800-00356-r04",
            "installed":"1470228526",
            "serial_num":"REDACTED",
            "device_status":[
               "envoy.cond_flags.pcu_ctrl.commandedreset",
               "envoy.cond_flags.pcu_ctrl.dc-pwr-low"
            ],
            "last_rpt_date":"1470249596",
            "admin_state":1,
            "created_date":"1470228526",
            "img_load_date":"1424997903",
            "img_pnum_running":"520-00045-r01-v01.22.00",
            "ptpn":"540-00087-r01-v01.22.00",
            "producing":true,
            "speaking":true,
            "chaneid":1627392273,
            "device_control":[
               {
                  "gficlearset":false
               }
            ]
         },
         {
            "part_num":"800-00356-r04",
            "put in":"1470228529",
            "serial_num":"REDACTED",
            "device_status":[
               "envoy.cond_flags.obs_strs.discovering"
            ],
            "last_rpt_date":"1470249602",
            "admin_state":1,
            "created_date":"1470228529",
            "img_load_date":"1424997903",
            "img_pnum_running":"520-00045-r01-v01.22.00",
            "ptpn":"540-00087-r01-v01.22.00",
            "producing":false,
            "speaking":true,
            "chaneid":1627392529,
            "device_control":[
               {
                  "gficlearset":false
               }
            ]
         },
         {
            "part_num":"800-00356-r04",
            "put in":"1470228533",
            "serial_num":"REDACTED",
            "device_status":[
               "envoy.global.ok"
            ],
            "last_rpt_date":"1470249613",
            "admin_state":1,
            "created_date":"1470228533",
            "img_load_date":"1424997903",
            "img_pnum_running":"520-00045-r01-v01.22.00",
            "ptpn":"540-00087-r01-v01.22.00",
            "producing":true,
            "speaking":true,
            "chaneid":1627392785,
            "device_control":[
               {
                  "gficlearset":false
               }
            ]
         }
      ]
   }
]

And due to Stuart Graves:
/stream/meter
Which produces a continuous stream of knowledge for every section. It does require authentication. It is likely to be helpful to learn Stuart’s remark here.

All of this implies you may make your individual system that (in my case) refreshes technology and consumption standing up-to-the-second!

A few notes: The Consumption metering / knowledge appears to provide unusual low and even minus values in the event you fetch the json file greater than roughly as soon as per second. (Probably as a result of it really works on a counter and the mathematics goes incorrect?)
Throughout nighttime the Manufacturing metering goes right into a minus worth, for instance -7 Watts. That is in truth the proper studying. The Envoy-S javascript filters out minus values and ensures a 0 is displayed. Cheeky!
The panel rely on the primary manufacturing.json file is the rely of related panels and never the at present producing panels. I’ve used the stock.json file to rely the variety of panels “producing”, I refresh this data each 3 minutes as an alternative of each second.

solar status

solar panel status

My subsequent steps are to analyze the JavaScript and see what different pages are accessible. I additionally must see if I can reverse engineer, discover out or ask the installer for the “Installer Login” password (UPDATE: This has been finished, see here!).

See Also

I additionally want there was public documentation. No google searches for the standing strings or different knowledge I’ve discovered within the JSON information have returned any outcomes to do with Enphase / SolarPV.

The spine/utility.js file exposes the next sub-files on the gadgets internet server.
– /admin/lib/admin_dcc_display.json
– /ivp/tpm/functionality
– /datatab/event_dt.rb?begin=0&size=153
– /data.xml
– /ivp/meters
– /installer/pcu_comm_check
– /api/v1/manufacturing/inverters
– /prov
– /ivp/peb/newscan
– /installer/profiles/index.json
– /installer/profiles/particulars.json
– /installer/profiles/inverters_status.json
– /installer/profiles/set_profile.json
– /admin/lib/admin_pmu_display.json
– /ivp/peb/reportsettings
– /ivp/tpm/choose
– /ivp/tpm/tpmstatus
– /ivp/tpm/parameters
– /admin/lib/dba.json
– /admin/lib/security_display.json
– /admin/lib/date_time_display.json?tzlist=1&locale=en
– /admin/lib/network_display.json
– /api/v1/manufacturing/inverters
– /admin/lib/wireless_display.json?site_info=0

Full standing messages system strings to plain english:

        cond_flags: {
            acb_ctrl: {
                bmuhardwareerror: "BMU {Hardware} Error",
                bmuimageerror: "BMU Picture Error",
                bmumaxcurrentwarning: "BMU Max Present Warning",
                bmusenseerror: "BMU Sense Error",
                cellmaxtemperror: "Cell Max Temperature Error",
                cellmaxtempwarning: "Cell Max Temperature Warning",
                cellmaxvoltageerror: "Cell Max Voltage Error",
                cellmaxvoltagewarning: "Cell Max Voltage Warning",
                cellmintemperror: "Cell Min Temperature Error",
                cellmintempwarning: "Cell Min Temperature Warning",
                cellminvoltageerror: "Cell Min Voltage Error",
                cellminvoltagewarning: "Cell Min Voltage Warning",
                cibcanerror: "CIB CAN Error",
                cibimageerror: "CIB Picture Error",
                cibspierror: "CIB SPI Error"
            },
            obs_strs: {
                discovering: "Discovering",
                failure: "Failure to report",
                flasherror: "Flash Error",
                notmonitored: "Not Monitored",
                okay: "Regular",
                plmerror: "PLM Error",
                secmodeenterfailure: "Safe mode enter failure",
                secmodeexitfailure: "Safe mode exit failure",
                sleeping: "Sleeping"
            },
            pcu_chan: {
                acMonitorError: "AC Monitor Error",
                acfrequencyhigh: "AC Frequency Excessive",
                acfrequencylow: "AC Frequency Low",
                acfrequencyoor: "AC Frequency Out Of Vary",
                acvoltage_avg_hi: "AC Voltage Common Excessive",
                acvoltagehigh: "AC Voltage Excessive",
                acvoltagelow: "AC Voltage Low",
                acvoltageoor: "AC Voltage Out Of Vary",
                acvoltageoosp1: "AC Voltage Out Of Vary - Part 1",
                acvoltageoosp2: "AC Voltage Out Of Vary - Part 2",
                acvoltageoosp3: "AC Voltage Out Of Vary - Part 3",
                agfpowerlimiting: "AGF Energy Limiting",
                dcresistancelow: "DC Resistance Low",
                dcresistancelowpoweroff: "DC Resistance Low - Energy Off",
                dcvoltagetoohigh: "DC Voltage Too Excessive",
                dcvoltagetoolow: "DC Voltage Too Low",
                dfdt: "AC Frequency Altering too Quick",
                gfitripped: "GFI Tripped",
                gridgone: "Grid Gone",
                gridinstability: "Grid Instability",
                gridoffsethi: "Grid Offset Hello",
                gridoffsetlow: "Grid Offset Low",
                hardwareError: "{Hardware} Error",
                hardwareWarning: "{Hardware} Warning",
                highskiprate: "Excessive Skip Price",
                invalidinterval: "Invalid Interval",
                pwrgenoffbycmd: "Energy technology off by command",
                skippedcycles: "Skipped Cycles",
                vreferror: "Voltage Ref Error"
            },
            pcu_ctrl: {
                alertactive: "Alert Energetic",
                altpwrgenmode: "Alternate Energy Technology Mode",
                altvfsettings: "Alternate Voltage and Frequency Settings",
                badflashimage: "Dangerous Flash Picture",
                bricked: "No Grid Profile",
                commandedreset: "Commanded Reset",
                criticaltemperature: "Crucial Temperature",
                "dc-pwr-low": "DC Energy Too Low",
                iuplinkproblem: "IUP Hyperlink Drawback",
                manutestmode: "In Manu Take a look at Mode",
                nsync: "Grid Perturbation Unsynchronized",
                overtemperature: "Over Temperature",
                poweronreset: "Energy On Reset",
                pwrgenoffbycmd: "Energy technology off by command",
                runningonac: "Operating on AC",
                tpmtest: "Transient Grid Profile",
                unexpectedreset: "Sudden Reset",
                watchdogreset: "Watchdog Reset"
            },
            rgm_chan: {
                check_meter: "Meter Error",
                power_quality: "Poor Energy High quality"
            }
        }

Some extra data about errors could be discovered on page 45 of the manual.
CommandedReset Beneficial Motion: No motion is required; it should robotically resume regular operation momentarily. Description: The microinverter was reset, both following a profitable software program obtain or by person command.

DcPowerTooLow Beneficial Motion: This situation ought to appropriate itself. No motion is required. Description: This situation might happen at dawn or sundown, whereas the modules are lined with snow, or throughout excessive climate. This occasion signifies that daylight ranges are too low for efficient manufacturing. As soon as daylight ranges enhance, the microinverter resumes energy manufacturing and this occasion message will clear.

DcVoltageTooLow Beneficial Motion: That is often a standard situation throughout hours of low mild and at daybreak and nightfall. No motion is required. Description: The microinverter studies that DC enter voltage from the PV module is simply too low. If this situation doesn’t clear throughout hours of full day

PowerOnReset Description: The microinverter has powered on after having DC disconnected.

Source Link

What's Your Reaction?
Excited
0
Happy
0
In Love
0
Not Sure
0
Silly
0
View Comments (0)

Leave a Reply

Your email address will not be published.

2022 Blinking Robots.
WordPress by Doejo

Scroll To Top