Giter Site home page Giter Site logo

vincentwolsink / home_assistant_enphase_envoy_installer Goto Github PK

View Code? Open in Web Editor NEW
46.0 7.0 10.0 370 KB

This is a HACS custom integration for Enphase Envoys with firmware version 7 and up.

License: Apache License 2.0

Python 100.00%
enphase enphase-envoy home-assistant integration hacs-custom hacs-integration home-assistant-component home-assistant-integration

home_assistant_enphase_envoy_installer's People

Contributors

aritmeester avatar bobvandevijver avatar briancmpbll avatar catsmanac avatar fracarma avatar mnederlof avatar posixx avatar upsuper avatar vincentwolsink avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

home_assistant_enphase_envoy_installer's Issues

[BUG] Incorrect Status Display for switch.production After Turning Off in Home Assistant

Describe the bug
I am using the latest version of [home_assistant_enphase_envoy_installer. I've encountered an issue with the synchronization of switch status between my Enphase controller and the switch.production sensor in Home Assistant.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175 (f79c8d)

  • Amount of micro inverters connected: 15

Home Assistant
Core 2024.1.3
Supervisor 2023.12.0
Operating System 11.4
Frontend 20240104.0

Additional context
I created a switch from the switch.production sensor in Home Assistant.
When I turn off this switch, I observe the following behavior:

  • The Enphase controller goes completely offline and becomes accessible again after about 5 minutes.
  • Via https://192.168.178.12/installer/setup/home, I can confirm that the production switch is indeed turned off.
  • In Home Assistant, the sensor sensor.envoy_122227045337_current_power_production correctly drops to 0.

However, the switch.production remains on ON and does not get updated or refreshed.
After half an hour, the Enphase controller is still OFF, but the switch.production switch still remains on ON.

After pressing the switch after 30 minutes in Home Assistant the switch.production goes the OFF state. After a few seconds its going to ON state, but Enphase Production Switch still stays on OFF.

When manually turning on the Power Production switch within the Enphase Web interface, it's turning on again. Also then switching the Power Production within the Enphase Offline, the sensor is not be syncted to OFF state.

image
image
image
image

Expected Result:
When the switch.production switch in Home Assistant is turned off, its status should correctly reflect in both the Enphase controller and in Home Assistant.

Actual Result:
The status of the switch.production switch in Home Assistant remains on ON, despite the Enphase controller being actually turned off. This suggests an issue in reading the switch status on the Enphase controller compared to the switch.production sensor in Home Assistant.

Niet alle metrics/sensoren beschikbaar

Hallo Vincent,

Dank voor de mooi integratie in Home Assistant.
Sinds 1,5 maand ook een Enphase PV systeem.
Zag dat er met deze integratie alle informatie per Inverter zichtbaar zou moeten zijn.
Zou graag deze details ook in Home Assistent beschikbaar hebben.
Dat is bij mij niet het geval maar komt waarschijnlijk doordat ik een DHZ account heb in Enphase Enlighten.
Of zou het met dit account ook moeten werken ?

Flipping messages: Production became unavailable/Production turned on

Describe the bug
I do see very regular messages Production became unavailable/Production turned on in the log files

Account type

  • [X ] Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • [22] Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected:22

Home Assistant

  • Version: 2023.7.2

Additional context
I checked the logfile and noticed that the requests are either made with IPv4 or IPv6. When made with IPv6 I do see some errors in the log file. I can share both log file but please tell be which data (Tokens?) I have to mascaraed.
Below some information

IPV6 log
`2023-07-19 06:38:25.471 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://[fdd4:5e60:243a:0:82f5:b5ff:fe70:3479]/api/v1/production: Header:{} Cookies:<Cookies[<Cookie sessionId=Mql0Nf93i5Qte55jSXsvvod4p45j6kU5 for [fdd4:5e60:243a:0:82f5:b5ff:fe70:3479].local />]>
2023-07-19 06:38:27.537 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetched from https://[fdd4:5e60:243a:0:82f5:b5ff:fe70:3479]/api/v1/production: <Response [200 OK]>: {
"wattHoursToday": 57,
"wattHoursSevenDays": 249346,
"wattHoursLifetime": 10510655,
"wattsNow": 207
}

2023-07-19 06:38:27.541 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] - FETCHING ENDPOINT endpoint_production_v1_results TOOK 2.0696 seconds
2023-07-19 06:38:27.542 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_production_json_results.storage[0]
2023-07-19 06:38:27.542 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_production_json_results.storage[0] did not return anything!
2023-07-19 06:38:27.542 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_ensemble_json_results[0].devices
2023-07-19 06:38:27.542 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_ensemble_json_results[0].devices did not return anything!
2023-07-19 06:38:27.543 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_home_json_results.enpower.grid_status
2`

IPv4 log
`2023-07-19 06:37:41.847 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.10.31/api/v1/production: Header:{} Cookies:<Cookies[<Cookie sessionId=Mql0Nf93i5Qte55jSXsvvod4p45j6kU5 for 192.168.10.31 />]>
2023-07-19 06:37:42.131 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetched from https://192.168.10.31/api/v1/production: <Response [200 OK]>: {
"wattHoursToday": 52,
"wattHoursSevenDays": 249346,
"wattHoursLifetime": 10510651,
"wattsNow": 199
}

2023-07-19 06:37:42.134 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] - FETCHING ENDPOINT endpoint_production_v1_results TOOK 0.2865 seconds
2023-07-19 06:37:42.135 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_devstatus: https://{}/ivp/peb/devstatus
2023-07-19 06:37:42.135 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.10.31/ivp/peb/devstatus: Header:{} Cookies:<Cookies[<Cookie sessionId=Mql0Nf93i5Qte55jSXsvvod4p45j6kU5 for 192.168.10.31 />]>
2023-07-19 06:37:42.410 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetched from https://192.168.10.31/ivp/peb/devstatus: <Response [200 OK]>: { "counters": {"pcu": {"expected": 22,"discovered": 22,"ctrlsTotal": 22,"ctrlsGone": 0,"ctrlsCommunicating": 22,"chansTotal": 22,"chansRecent": 22,"chansProducing": 22}, "acb": {"expected": 0,"discovered": 0,"ctrlsTotal": 0,"ctrlsGone": 0,"ctrlsCommunicating": 0,"chansTotal": 0,"chansRecent": 0,"chansProducing": 0}, "nsrb": {"expected": 2,"discovered": 2,"ctrlsTotal": 2,"ctrlsGone": 0,"ctrlsCommunicating": 2,"chansTotal": 2,"chansRecent": 2,"chansProducing": 0}, "pld": {"expected": 24,"discovered": 24,"ctrlsTotal": 24,"ctrlsGone": 0,"ctrlsCommunicating": 24,"chansTotal": 24,"chansRecent": 24,"chansProducing": 22}, "esub": {"expected": 0,"discovered": 0,"ctrlsTotal": 0,"ctrlsGone": 0,"ctrlsCommunicating": 0,"chansTotal": 0,"chansRecent": 0,"chansProducing": 0}}, "pcu": {"fields": ["serialNumber", "devType", "communicating", "recent", "producing", "reportDate", "temperature", "dcVoltageINmV", "dcCurrentINmA", "acVoltageINmV", "acPowerINmW"], "values": [["122122080954", 1, true, true, true, 1689741410, 18, 32241, 553, 235496, 12150], ["122122078003", 1, true, true, true, 1689741351, 18, 32213, 551, 234928, 11114], ["122122080580", 1, true, true, true, 1689741170, 17, 31052, 384, 235488, 10247], ["122122080773", 1, true, true, true, 1689741171, 17, 31491, 397, 235776, 10160], ["122122070887", 1, true, true, true, 1689741352, 18, 32677, 532, 234912, 11097], ["122122076240", 1, true, true, true, 1689741291, 17, 31296, 391, 235624, 8842], ["122122069990", 1, true, true, true, 1689741141, 17, 31152, 371, 235928, 10265], ["122122075335", 1, true, true, true, 1689741141, 17, 31455, 391, 235768, 10157], ["122122080576", 1, true, true, true, 1689741232, 17, 31485, 426, 235464, 9849], ["122122070007", 1, true, true, true, 1689741293, 17, 31417, 351, 236048, 8616], ["122122070027", 1, true, true, true, 1689741326, 17, 31169, 356, 235328, 8322], ["122122070029", 1, true, true, true, 1689741412, 18, 31326, 264, 235744, 5273], ["122122070055", 1, true, true, true, 1689741413, 18, 31750, 287, 235520, 5683], ["122122070163", 1, true, true, true, 1689741414, 18, 31910, 286, 235464, 5703], ["122122069955", 1, true, true, true, 1689741414, 18, 32162, 274, 235400, 5916], ["122122070034", 1, true, true, true, 1689741415, 18, 31509, 287, 236944, 6588], ["122220089488", 1, true, true, true, 1689741416, 17, 31537, 439, 236216, 9610], ["122221015614", 1, true, true, true, 1689741417, 18, 31237, 418, 236360, 9445], ["122221011599", 1, true, true, true, 1689741418, 17, 30834, 374, 235576, 9026], ["122221014884", 1, true, true, true, 1689741418, 17, 31209, 465, 236536, 10697], ["122221014181", 1, true, true, true, 1689741420, 17, 31493, 486, 236568, 11113], ["122221011562", 1, true, true, true, 1689741421, 17, 30461, 329, 236248, 8958], ["122251092586", 12, true, true, false, 1689741303, 0, 0, 0, 0, 0], ["122244051652", 12, true, true, false, 1689741304, 0, 0, 0, 0, 0]]}, "acb": {"fields": ["serialNumber", "SOC", "minCellTemp", "maxCellTemp", "capacity", "totVoltage", "sleepEnabled", "sleepMinSoc", "sleepMaxSoc" ], "values": []}, "nsrb": {"fields": ["serialNumber", "relay", "forced", "reason_code", "reason", "line-count", "line1-connected", "line2-connected", "line3-connected"], "values": [["122251092586", "closed", false, -1, "ok", 1, true, false, false], ["122244051652", "closed", false, -1, "ok", 1, true, false, false]]}}
2023-07-19 06:37:42.414 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] - FETCHING ENDPOINT endpoint_devstatus TOOK 0.2788 seconds
`

[BUG] Production switch not working

Today it was a negative price in the Netherlands, so I wanted to switch off the production. Unfortunately, the switch was going on again.

Account type
Installer

Envoy
Metered

FW version:D7.0.88
Amount of micro inverters connected: 15

Home Assistant
Version: 2023.6.3

image

Loadoff Failed (Uitladen Mislukt)

Hi,

No real bug to be honest, however I do get the message "uitladen mislukt", which I think is the raw translation of loadoff failed.
As Home Assistant does not display any additional information regarding this alert (yellow alert sign is displayed), I am curious why this is visible and how it impacts the working of this excellent integration.

Kind regards,
Guus

[Feedback] initial setup dialog should mention Enlighten account

The help text of the 'username' - 'password' dialog is not clear IMHO. It mentions to uses 'envoy' or 'installer' as username, and last 6 digits of serial as password. However, almost all gateways (firmware v7) do not work with local logins anymore.
[Edit: The info is here, in the github repo, but it would be nice to also show it during setup.]

Request: please also mention that, if the 'envoy' or 'installer' login does not work, the user should try the Enlighten credentials.
Best solution: check firmware before displaying text, and act accordingly.

[BUG] Envoy S not reporting current power production

Describe the bug
The envoy device does not report current production, lifetime production.
We have the same version of HomeAssistant and Envoy at my parents house with this integration and all is fine there.

I've tried restarting HomeAssistant and restarting the integration.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: 7.6.175

  • Amount of micro inverters connected: 15

Home Assistant

  • Version: 2024.4.0

Additional context
Envoy has connected inverters:
image
The inverters are correctly reporting their data:
image

HomeAssistant debug info:
config_entry-enphase_envoy-8d88b82995dcf247652b38183caed90e.json

Relevant snippet of Home Assistant error log.
See attached log file:
home-assistant_enphase_envoy_2024-04-11T14-47-12.986Z.log

Unexpected error fetching envoy data: list index out of range

Hi, many thanks for your contibutions!

After update 0.1.8, addon will not load.
The error:

Logger: custom_components.enphase_envoy
Source: custom_components/enphase_envoy/envoy_reader.py:655 
Integration: Enphase Envoy (Installer) 
First occurred: 13:27:38 (1 occurrences) 
Last logged: 13:27:38 Unexpected error fetching envoy Envoy 1234567891011 data: list index out of range Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 258, in _async_refresh self.data = await self._async_update_data() File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 217, in _async_update_data return await self.update_method() File "/config/custom_components/enphase_envoy/__init__.py", line 108, in async_update_data data[description.key] = await envoy_reader.consumption_phase( File "/config/custom_components/enphase_envoy/envoy_reader.py", line 655, in consumption_phase return int(raw_json["consumption"][0]["lines"][phase_map[phase]]["wNow"]) IndexError: list index out of range

Gateway is: Envoy-S-Metered-EM without CT's
Firmware is: 7.0.88

Did a fresh install, but got same error.
Rolling back to version 0.1.7 and everything is working again.

[BUG] Failed setup, will retry

Describe the bug
Just installed this version of the integration comming from DEV.
Installed v 0.2.4 and tried 0.3 beta 2 both give about the same issue.
The integration shows as "Failed setup, will retry" on integrations page.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175 (f79c8d)

  • Amount of micro inverters connected: 18

Home Assistant

  • Version: 2023.7.2

Additional context

2023-07-19 13:20:50.650 ERROR (MainThread) [custom_components.enphase_envoy] Unexpected error fetching envoy Envoy 122111010631 data: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 283, in _async_refresh
self.data = await self._async_update_data()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 242, in _async_update_data
return await self.update_method()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/__init__.py", line 91, in async_update_data
data[description.key] = await envoy_reader.relay_status()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 617, in get_data
return self.data.get(name)
^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 336, in __getattr__
result = getattr(self, name)
^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 336, in __getattr__
result = getattr(self, name)
^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 336, in __getattr__
result = getattr(self, name)
^^^^^^^^^^^^^^^^^^^
[Previous line repeated 962 more times]
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 434, in relay_status
status = self._path_to_dict(
^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 317, in _path_to_dict
for d in self._resolve_path(path, default=[]):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/envoy_reader.py", line 301, in _resolve_path
result = jsonpath(self.data, path)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 316, in jsonpath
trace(cleaned_expr, obj, '$')
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 167, in trace
trace(x, obj[loc], s(path, loc))
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 167, in trace
trace(x, obj[loc], s(path, loc))
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 194, in trace
walk(loc, x, obj, path, f05)
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 245, in walk
funct(i, loc, expr, obj, path)
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 189, in f05
eval_result = evalx(loc, obj[int(key)])
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 284, in evalx
loc = re.sub(r'(?<!\\)(@\.[a-zA-Z@_.0-9]+)', varmatch, loc)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/re/__init__.py", line 185, in sub
return _compile(pattern, flags).sub(repl, string, count)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 282, in varmatch
return brackets(elts[1:])
^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 273, in brackets
if isint(e):
^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 112, in isint
return x.isdigit()
^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded while calling a Python object

Envoy integration stopped working at April 12th [BUG]

Describe the bug
Envoy doesn't report solar panel power production since April 12th. The sensors are unavailable: Integration seems to be not working.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy
<I don't know: how to determine this?>

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: 7.6.175

  • Amount of micro inverters connected: 16

Home Assistant

  • Core: 2024.4.3
  • Supervisor: 2024.04.0
  • Operating System: 12.2
  • Frontend: 20240404.2

Additional context
Sensors are not available:
image

image

Relevant snippet of Home Assistant error log:

2024-04-12 13:51:20.585 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Envoy 122241087305 for enphase_envoy
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 551, in async_setup
result = await component.async_setup_entry(hass, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/init.py", line 78, in async_setup_entry
enlighten_serial_num=config[CONF_SERIAL],

KeyError: 'serial'

...

2024-04-15 08:17:39.501 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Envoy 122241087305 for enphase_envoy
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 551, in async_setup
result = await component.async_setup_entry(hass, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/enphase_envoy/__init__.py", line 78, in async_setup_entry
enlighten_serial_num=config[CONF_SERIAL],
~~~~~~^^^^^^^^^^^^^
KeyError: 'serial'

[BUG] Instellen mislukt

Describe the bug
Ik had de normale enphase integratie al ingesteld en probeer nu deze te installeren. Krijg de melding dat instellen mislukt is. Bij de normale integratie was ik ingelogd met mijn home owner account, ik heb tevens ook een installer account. Is de enige manier om dit aan het werk te krijgen de oorspronkelijke configuratie eerst verwijderen? Is er een manier om dit te doen zonder al mijn eerdere data (geschiedenis) te verwijderen?

Account type

  • [x ] Installer
  • DIY / DHZ
  • [ x] Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • [ x] Standard

  • FW version: D7.6.168 (f1975b)

  • Amount of micro inverters connected: 3

Home Assistant

  • Version: 2024.1.5

Additional context

Relevant snippet of Home Assistant error log. 
Logger: homeassistant.config_entries
Source: config_entries.py:406
First occurred: 21:20:03 (2 occurrences)
Last logged: 21:20:24

Error setting up entry Envoy 122329089085 for enphase_envoy
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 406, in async_setup
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/__init__.py", line 77, in async_setup_entry
    enlighten_serial_num=config[CONF_SERIAL],
                         ~~~~~~^^^^^^^^^^^^^
KeyError: 'serial'

[BUG] Entities stop responding after Core update to 2024.5.2

Describe the bug
After I update HA Core from 2024.3.0 to 2024.5.2 the entities stop responding and are no longer showing results.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.xxx

  • Amount of micro inverters connected: 22

Home Assistant

  • Version: 2024.3.0

Additional context

Relevant snippet of Home Assistant error log. 

Production switch

Describe the bug

Production switch seems to work fine in integration. However, after switching production on again (more than 1 hour after switching off, during daylight), production does not resume, even after several hours. Switch is in state ON, but no power anymore.
However, next day, production starts normally again.

Account type

  • Installer

Envoy

  • Metered without CTs

  • FW version: D7.6.175

  • Amount of micro inverters connected: 17

Home Assistant

  • Version: 2024.3

Additional context

none

Relevant snippet of Home Assistant error log. 

none

[BUG]

Describe the bug

When adding the integration, there is no description of the 4 fields. And what information should be added.

Potential Impact of Enphase's Local Web Discontinuation on Home Assistant Plugin?

Hello Vincent,

I hope you're doing well. I've been using your Home Assistant plugin for Enphase, and I wanted to share a recent response I received from Enphase Support, as it might have implications for your add-on:


Hi Werner,

Thank you for contacting Enphase Energy.

I apologize for the delay in response.

Regarding the Errors on ITK GUI page,

  1. [missing "en.envoy_backbone.overview.enpowers_summary.connected.undefined" translation]

  2. [missing %{db_size} value] ([missing %{percent} value]% full)

The Empower is the Enphase smart switch which is now termed an IQ system controller. These system controllers are a part of the battery system.

By default, the gateway will try to recognize the IQ system controller. Now that your site is a PV system without a battery, the Gateway S throws that error.

You may ignore the error as yours is not a battery system or you may reach your installer to know more details on the Enphase battery in your location https://support.enphase.com/s/question/0D53m00009Cf3seCAB/envoys-not-displaying-enpower-connection-state-and-database-size-after-firmware-update-to-d7428

I suggest you use Enlighten or ITK to view the Gateway data as Local Web is no longer a part of the development.

I appreciate your patience with us.

We are constantly striving to provide excellent customer service at Enphase Energy

Please feel free to contact us for any further help. Furthermore, You can also contact our technical support at (877) 797- 4743 if you have any additional queries.

Have a great day ahead!

Thanks & Regards,
Brahmaduth
Enphase Energy | Customer Support Engineer


The part that caught my attention was: "I suggest you use Enlighten or ITK to view the Gateway data as Local Web is no longer a part of the development." I wanted to bring this to your notice specifically. If your code or the functionality of the add-on relies on the Local Web aspect of Enphase, this change could be significant.

I'd appreciate your insights on how this might affect the plugin, and if there are any updates or modifications that might be needed in the future.

Thank you for all the effort you've put into the plugin, and I look forward to your feedback.

Best regards,
Werner

[BUG] stopped working

Describe the bug
A clear and concise description of what the bug is.

Account type

  • [x ] Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • [x ] Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.xxx

  • Amount of micro inverters connected: x

Home Assistant

  • Version: 2023.x

Additional context

Relevant snippet of Home Assistant error log. 

home-assistant_enphase_envoy_2024-03-21T19-01-09.697Z.log

Hi Vincent, as of today it stopped working, I think earlier today Enphase had issues themselves and they have been fixed but the plugin cant load. (error communication with API peer closed connection without sending complete message body)

I have enclosed the log from this afternoon. I tried restarting the plugin, and restarting HA. No luck.

[BUG] maximum recursion depth exceeded while calling a Python object

Describe the bug
After updating to 0.3.0, integration is not loading and keeps initializing.
Downgrading back to 0.2.4 and it is working again.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 12

Home Assistant

  • Version: 2023.7.3

Additional context

Logger: custom_components.enphase_envoy
Source: custom_components/enphase_envoy/envoy_reader.py:301 
Integration: Enphase Envoy (Installer) ([documentation](https://github.com/vincentwolsink/home_assistant_enphase_envoy_installer/), [issues](https://github.com/vincentwolsink/home_assistant_enphase_envoy_installer/issues)) 
First occurred: 15:19:52 (4 occurrences) 
Last logged: 15:22:15
Unexpected error fetching envoy Envoy xxxxxxxxxxxxx data: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 283, in _async_refresh
    self.data = await self._async_update_data()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 242, in _async_update_data
    return await self.update_method()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/__init__.py", line 108, in async_update_data
    battery_data = await envoy_reader.battery_storage()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 621, in get_data
    return self.data.get(name)
           ^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 340, in __getattr__
    result = getattr(self, name)
             ^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 340, in __getattr__
    result = getattr(self, name)
             ^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 340, in __getattr__
    result = getattr(self, name)
             ^^^^^^^^^^^^^^^^^^^
  [Previous line repeated 971 more times]
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 453, in battery_storage
    storage = self._resolve_path("endpoint_production_json_results.storage[0]", {})
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 301, in _resolve_path
    result = jsonpath(self.data, path)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 311, in jsonpath
    cleaned_expr = normalize(expr)
                   ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/jsonpath.py", line 84, in normalize
    x = re.sub(r"[\['](\??\(.*?\))[\]']", f1, x)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/re/__init__.py", line 185, in sub
    return _compile(pattern, flags).sub(repl, string, count)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/re/__init__.py", line 274, in _compile
    if isinstance(flags, RegexFlag):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded while calling a Python object

Seems to be possible to use DIY or Installer features with only a Home Owner account

Describe the feature
Today I made a mistake. On my HASS I have the https://github.com/briancmpbll/home_assistant_custom_envoy repo active and correctly working. The mistake was that I enabled THIS repo (envoy installer) add the same time. I guess it has overwritten scripts etc from the briancmpbll. I was not aware of that at that moment. I configured the installer integration (including the statement I only have a home owner account) and the only weird thing that happened was that, that HASS complained something like "Device already configured". Hmmm ok.
Then I saw something wonderful. HASS was showing me much more than I normally can see as a home owner.
Voltages DC and AC, currents, IQ relays, etc, etc. And....a production switch.
I toggled the switch....and production dropped. I toggled it again and production came back to life. Please note that this switch only works directly on the entity and not on the dashboard.

The mix up between the two integrations created some weird condition, but it turns out that APIs don't deny certain features for home owner accounts. Is it possible to include some of these? Especially turning of production would be nice in the Netherlands (paying for delivering power to the net)

I now have returned everything back to the custom_envoy repo, because home owner is not supported by this integration.

I did a reproduction test and it is reproducable:

  1. Install and configure custom_envoy
  2. Install and configure THIS repo (with the home owner checkbox ENABLED)
  3. Enjoy all entities (although a bit broken in the dashboard, but OK in the entity view)

When I first remove the custom_envoy config and remove the integration before installing THIS repo, the behaviour isn't there. No voltages DC and AC, currents, IQ relays, etc, etc.

Account type

  • [X ] Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • [ X] Standard

  • FW version: D7.0.88

  • Amount of micro inverters connected: 16

Home Assistant

  • Version: 2023.9.0

Failed setup enphase

Describe the bug
After update to core

Home Assistant 2023.9.1
Supervisor 2023.08.3
Operating System 10.5
Frontend 20230908.0 - latest

The enphase is not recognized any more

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.xxx

  • Amount of micro inverters connected: 19

Additional context

Relevant snippet of Home Assistant error log. 

2023-09-10 07:48:16.257 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token expired on: 2023-09-09 14:23:34
2023-09-10 07:48:16.258 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Found Expired token - Retrieving new token
2023-09-10 07:48:16.258 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetching envoy token
2023-09-10 07:48:16.261 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Local auth secret: xxxxxxxxxxxxxx
2023-09-10 07:48:16.261 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Doing authorize at entrez, with codeChallenge: xxxxxxxxxxxxxxxxx
2023-09-10 07:48:16.842 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Checking JWT on envoy with params {'client_id': 'envoy-ui-1', 'code': 'xxxxxxxxxxx', 'code_verifier': 'xxxxxxxxxxxxxxxxxxx', 'grant_type': 'authorization_code', 'redirect_uri': 'https://192.168.1.xx/auth/callback'}
2023-09-10 07:48:21.162 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Envoy Token
2023-09-10 07:48:21.163 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token expires at: 2023-09-10 19:48:17
2023-09-10 07:48:21.163 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token expires at: 2023-09-10 19:48:17
2023-09-10 07:48:21.163 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] TOKEN TYPE: installer
2023-09-10 07:48:21.163 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Attempt: https://192.168.1.xx/auth/check_jwt
2023-09-10 07:48:21.163 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Data: None
2023-09-10 07:48:21.422 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST https://192.168.1.xx/auth/check_jwt: <Response [200 OK]>:

Valid token.


2023-09-10 07:48:21.423 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Cookie: <Cookies[<Cookie sessionId=xx for 192.168.1.xx />]>
2023-09-10 07:48:21.425 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] We got a session cookie (sessionId), empty the auth header
2023-09-10 07:48:21.425 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] Updating endpoints ['endpoint_production_json_results']
2023-09-10 07:48:21.425 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_production_json_results: https://{}/production.json?details=1
2023-09-10 07:48:21.425 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.1.xx/production.json?details=1: Header:{} Cookies:<Cookies[<Cookie sessionId=xx for 192.168.1.xx />]>
2023-09-10 07:48:26.240 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetched from https://192.168.1.xx/production.json?details=1: <Response [200 OK]>: {"production":[{"type":"inverters","activeCount":19,"readingTime":1694324919,"wNow":151,"whLifetime":265542},{"type":"eim","activeCount":0,"measurementType":"production","readingTime":1694324920,"wNow":0.173,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.439,"rmsVoltage":249.252,"reactPwr":0.0,"apprntPwr":2.886,"pwrFactor":0.61,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0,"lines":[{"wNow":0.0,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.0,"rmsVoltage":236.237,"reactPwr":0.0,"apprntPwr":-0.0,"pwrFactor":0.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"wNow":0.113,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.186,"rmsVoltage":6.064,"reactPwr":0.0,"apprntPwr":1.125,"pwrFactor":0.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"wNow":0.06,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.253,"rmsVoltage":6.951,"reactPwr":-0.0,"apprntPwr":1.761,"pwrFactor":1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0}]}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1694324920,"wNow":-1.502,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.121,"rmsVoltage":252.574,"reactPwr":-0.0,"apprntPwr":0.992,"pwrFactor":0.44,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0,"lines":[{"wNow":0.0,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.0,"rmsVoltage":236.236,"reactPwr":-0.0,"apprntPwr":-0.0,"pwrFactor":1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"wNow":-0.55,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.061,"rmsVoltage":9.485,"reactPwr":0.0,"apprntPwr":0.575,"pwrFactor":-0.96,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"wNow":-0.952,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.061,"rmsVoltage":6.854,"reactPwr":-0.0,"apprntPwr":0.416,"pwrFactor":-1.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0}]},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1694324920,"wNow":-1.676,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.318,"rmsVoltage":252.574,"reactPwr":-0.0,"apprntPwr":-2.506,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0,"lines":[{"wNow":0.0,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.0,"rmsVoltage":236.236,"reactPwr":-0.0,"apprntPwr":0.0,"pwrFactor":0.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0},{"wNow":-0.664,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.125,"rmsVoltage":9.485,"reactPwr":0.0,"apprntPwr":-1.185,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0},{"wNow":-1.012,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.193,"rmsVoltage":6.854,"reactPwr":-0.0,"apprntPwr":-1.321,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}]}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}
2023-09-10 07:48:26.242 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] - FETCHING ENDPOINT endpoint_production_json_results TOOK 4.8166 seconds
2023-09-10 07:48:26.243 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_production_json_results.storage[0]
2023-09-10 07:48:26.243 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_production_json_results.storage[0] did not return anything!
2023-09-10 07:48:26.243 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_ensemble_json_results[0].devices
2023-09-10 07:48:26.243 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_ensemble_json_results[0].devices did not return anything!
2023-09-10 07:48:26.243 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_home_json_results.enpower.grid_status
2023-09-10 07:48:26.243 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_home_json_results.enpower.grid_status did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_inventory_results.[?(@.type=='PCU')].devices[?(@.dev_type==1)]
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_inventory_results.[?(@.type=='PCU')].devices[?(@.dev_type==1)] did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_devstatus.pcu[?(@.devType==1)]
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_devstatus.pcu[?(@.devType==1)] did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_production_power.powerForcedOff
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_production_power.powerForcedOff did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)]
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)] did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_devstatus.pcu[?(@.devType==12)]
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_devstatus.pcu[?(@.devType==12)] did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_devstatus.nsrb
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_devstatus.nsrb did not return anything!
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)]
2023-09-10 07:48:26.244 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)] did not return anything!
2023-09-10 07:48:26.245 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] EnvoyData.get(relay_info) -> {}
2023-09-10 07:48:26.245 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] Updating endpoints {'endpoint_home_json_results', 'endpoint_production_power', 'endpoint_devstatus', 'endpoint_info_results', 'endpoint_pdm_energy', 'endpoint_inventory_results', 'endpoint_production_json_results', 'endpoint_ensemble_json_results'}
2023-09-10 07:48:26.245 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_home_json_results: https://{}/home.json
2023-09-10 07:48:26.245 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.1.xx/home.json: Header:{} Cookies:<Cookies[<Cookie sessionId=xxx for 192.168.1.xx />]>
2023-09-10 07:48:41.909 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] TransportError: peer closed connection without sending complete message body (incomplete chunked read)
2023-09-10 07:48:41.911 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #2: https://192.168.1.xx/home.json: Header:{} Cookies:<Cookies[<Cookie sessionId=xx for 192.168.1.xx />]>
2023-09-10 07:48:53.870 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] TransportError: peer closed connection without sending complete message body (incomplete chunked read)
2023-09-10 07:48:53.870 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #3: https://192.168.1.xx/home.json: Header:{} Cookies:<Cookies[<Cookie sessionId=xxxxx for 192.168.1.xx />]>
2023-09-10 07:49:06.404 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] TransportError: peer closed connection without sending complete message body (incomplete chunked read)
2023-09-10 07:49:06.405 DEBUG (MainThread) [custom_components.enphase_envoy] Finished fetching envoy Envoy xxxxx data in 50.148 seconds (success: False)

Missing Lines (phases) for "Current Power Consumption"

First at all, thanks for this nice Envoy firmware D7.x integration, which is today the only one which works with a 3-phase system.

However, as I remarked some discrepancies between the current consumption value of the integration and the one from my Enlighten application (live status), I had a look at the "Current Power Consumption" sensors and found that I have only the "Current Power Consumption L1" sensor. L2 and L3 sensors are missing.

image

Do you have any explanation ? Thanks a lot !

[BUG] Realtime data error in log

Describe the bug
Two major(?) errors in log though everything seems to be working?

Account type

  • [x ] Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • [x ] Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 14

Home Assistant

  • Version: 2023.8.1

Additional context

Deze fout is ontstaan door een aangepaste integratie.

Logger: custom_components.enphase_envoy.envoy_reader
Source: custom_components/enphase_envoy/envoy_reader.py:1084
Integration: Enphase Envoy (Installer) (documentation, issues)
First occurred: 09:25:52 (5 occurrences)
Last logged: 09:36:25
----------------------------------------------------
Stopped reading realtime data
Relevant snippet of Home Assistant error log. 
Deze fout is ontstaan door een aangepaste integratie.

Logger: custom_components.enphase_envoy.envoy_reader
Source: custom_components/enphase_envoy/envoy_reader.py:1061
Integration: Enphase Envoy (Installer) (documentation, issues)
First occurred: 09:25:52 (5 occurrences)
Last logged: 09:36:25

Realtime data error:
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/anyio/streams/tls.py", line 131, in _call_sslobject_method
    result = func(*args)
             ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/ssl.py", line 921, in read
    v = self._sslobj.read(len)
        ^^^^^^^^^^^^^^^^^^^^^^
ssl.SSLWantReadError: The operation did not complete (read) (_ssl.c:2576)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 34, in read
    return await self._stream.receive(max_bytes=max_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/anyio/streams/tls.py", line 196, in receive
    data = await self._call_sslobject_method(self._ssl_object.read, max_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/anyio/streams/tls.py", line 138, in _call_sslobject_method
    data = await self.transport_stream.receive()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1203, in receive
    await self._protocol.read_event.wait()
  File "/usr/local/lib/python3.11/asyncio/locks.py", line 213, in wait
    await fut
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
    yield
  File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 32, in read
    with anyio.fail_after(timeout):
  File "/usr/local/lib/python3.11/site-packages/anyio/_core/_tasks.py", line 119, in __exit__
    raise TimeoutError
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 60, in map_httpcore_exceptions
    yield
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 239, in __aiter__
    async for part in self._httpcore_stream:
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/connection_pool.py", line 347, in __aiter__
    async for part in self._stream:
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 325, in __aiter__
    raise exc
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 317, in __aiter__
    async for chunk in self._connection._receive_response_body(**kwargs):
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 186, in _receive_response_body
    event = await self._receive_event(timeout=timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_async/http11.py", line 200, in _receive_event
    data = await self._network_stream.read(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpcore/_backends/anyio.py", line 31, in read
    with map_exceptions(exc_map):
  File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
    raise to_exc(exc) from exc
httpcore.ReadTimeout

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/enphase_envoy/envoy_reader.py", line 1061, in stream_reader
    async for chunk in response.aiter_text():
  File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 948, in aiter_text
    async for byte_content in self.aiter_bytes():
  File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 927, in aiter_bytes
    async for raw_bytes in self.aiter_raw():
  File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 985, in aiter_raw
    async for raw_stream_bytes in self.stream:
  File "/usr/local/lib/python3.11/site-packages/httpx/_client.py", line 146, in __aiter__
    async for chunk in self._stream:
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 238, in __aiter__
    with map_httpcore_exceptions():
  File "/usr/local/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/httpx/_transports/default.py", line 77, in map_httpcore_exceptions
    raise mapped_exc(message) from exc
httpx.ReadTimeout

Config flow could not be loaded

Describe the bug
When adding integration following message appears:
Config flow could not be loaded: {"message":"Invalid handler specified"}

Home Assistant

  • Version: 2023.6.2

Additional context

![image](https://github.com/vincentwolsink/home_assistant_enphase_envoy_installer/assets/76258060/f4eb1d02-cf57-4f07-8d11-c25eb640efcd)

When configuring, I get always "Failed to connect"

Describe the bug
When configuring, I get always "Failed to connect"

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: R5.0.54

  • Amount of micro inverters connected: 19

Home Assistant

  • Version: 2023.8.4

Additional context
In the Enlighten WebUI, I can retrieve everything, including the temperature of each inverter.

Relevant snippet of Home Assistant error log. 

Add to HA energy dashboard

Can't add "sensor.envoy_SERIAL_current_power_production" to the energy dashboard.
It's not showing up on the "Add Solar production" section.

Is there a way to add it?

[BUG] Error setting up after update 3.0

Describe the bug
A clear and concise description of what the bug is.
Error setting up

Account type

  • [X ] DIY / DHZ

Envoy

  • [ X] Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 15

Home Assistant

Version core-2023.7.3
Installation Type Home Assistant Supervised
Development false
Supervisor true
Docker true
User root
Virtual Environment false
Python Version 3.11.4
Operating System Family Linux
Operating System Version 5.10.0-23-amd64
CPU Architecture x86_64
Timezone Europe/Amsterdam
Configuration Directory /config

Additional context
Relevant snippet of Home Assistant error log.

home-assistant_2023-07-26T17-53-02.251Z.log

Production Switch becomes unavailable after turn off.

Describe the bug

I have put the Production Switch on a dashboard. When I switch off, power production is disabled (verified using https://envoy/home, installer login) and Production Switch is disabled. So, I can switch power production off using HA, but I can not switch back on using HA. After reloading the integration, Power Production Switch becomes available again.

Account type

  • Installer

Envoy

  • Metered without CTs

  • FW version: D7.6.175

  • Amount of micro inverters connected: 17

Home Assistant

  • Version: 2023.9

Relevant snippet of Home Assistant error log.

2023-09-14 23:28:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Attempt: https://192.168.1.9/auth/check_jwt
2023-09-14 23:28:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Data: None
2023-09-14 23:28:23.427 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST https://192.168.1.9/auth/check_jwt: <Response [200 OK]>: <!DOCTYPE html><h2>Valid token.</h2>

2023-09-14 23:28:23.427 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Cookie: <Cookies[]>
2023-09-14 23:28:23.428 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] Updating endpoints {'endpoint_production_json_results', 'endpoint_devstatus', 'endpoint_info_results', 'endpoint_pdm_energy', 'endpoint_home_json_results', 'endpoint_inventory_results', 'endpoint_production_power'}
2023-09-14 23:28:23.428 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_production_json_results: https://{}/production.json?details=1
2023-09-14 23:28:23.428 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.1.9/production.json?details=1: Header:{'Authorization': 'Bearer eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw'} Cookies:<Cookies[]>
2023-09-14 23:28:53.631 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] TransportError: 
2023-09-14 23:28:53.631 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #2: https://192.168.1.9/production.json?details=1: Header:{'Authorization': 'Bearer eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw'} Cookies:<Cookies[]>
2023-09-14 23:29:23.205 ERROR (MainThread) [custom_components.enphase_envoy] Timeout fetching envoy Envoy 122024035221 data
2023-09-14 23:29:23.205 DEBUG (MainThread) [custom_components.enphase_envoy] Finished fetching envoy Envoy 122024035221 data in 60.003 seconds (success: False)
2023-09-14 23:30:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Checking Token value: eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw
2023-09-14 23:30:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token is populated: eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw
2023-09-14 23:30:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token expires at: 2023-09-15 10:32:05
2023-09-14 23:30:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Attempt: https://192.168.1.9/auth/check_jwt
2023-09-14 23:30:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Data: None
2023-09-14 23:30:23.450 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST https://192.168.1.9/auth/check_jwt: <Response [200 OK]>: <!DOCTYPE html><h2>Valid token.</h2>

2023-09-14 23:30:23.451 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Cookie: <Cookies[<Cookie sessionId=irPDeAwhsAT1pHssgwE6WZhlJ4m0jHIA for 192.168.1.9 />]>
2023-09-14 23:30:23.451 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] We got a session cookie (sessionId), empty the auth header
2023-09-14 23:30:23.451 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] Updating endpoints {'endpoint_production_json_results', 'endpoint_devstatus', 'endpoint_info_results', 'endpoint_pdm_energy', 'endpoint_home_json_results', 'endpoint_inventory_results', 'endpoint_production_power'}
2023-09-14 23:30:23.451 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_production_json_results: https://{}/production.json?details=1
2023-09-14 23:30:23.452 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.1.9/production.json?details=1: Header:{} Cookies:<Cookies[<Cookie sessionId=irPDeAwhsAT1pHssgwE6WZhlJ4m0jHIA for 192.168.1.9 />]>
2023-09-14 23:30:53.649 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] TransportError: 
2023-09-14 23:30:53.650 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #2: https://192.168.1.9/production.json?details=1: Header:{} Cookies:<Cookies[<Cookie sessionId=irPDeAwhsAT1pHssgwE6WZhlJ4m0jHIA for 192.168.1.9 />]>
2023-09-14 23:31:23.207 DEBUG (MainThread) [custom_components.enphase_envoy] Finished fetching envoy Envoy 122024035221 data in 60.004 seconds (success: False)
2023-09-14 23:32:23.203 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Checking Token value: eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw
2023-09-14 23:32:23.204 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token is populated: eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw
2023-09-14 23:32:23.204 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Token expires at: 2023-09-15 10:32:05
2023-09-14 23:32:23.204 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Attempt: https://192.168.1.9/auth/check_jwt
2023-09-14 23:32:23.205 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Data: None
2023-09-14 23:32:23.717 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST https://192.168.1.9/auth/check_jwt: <Response [200 OK]>: <!DOCTYPE html><h2>Valid token.</h2>

2023-09-14 23:32:23.718 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST Cookie: <Cookies[]>
2023-09-14 23:32:23.720 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] Updating endpoints {'endpoint_production_json_results', 'endpoint_devstatus', 'endpoint_info_results', 'endpoint_pdm_energy', 'endpoint_home_json_results', 'endpoint_inventory_results', 'endpoint_production_power'}
2023-09-14 23:32:23.720 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_production_json_results: https://{}/production.json?details=1
2023-09-14 23:32:23.720 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://192.168.1.9/production.json?details=1: Header:{'Authorization': 'Bearer eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw'} Cookies:<Cookies[]>
2023-09-14 23:32:53.937 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] TransportError: 
2023-09-14 23:32:53.937 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #2: https://192.168.1.9/production.json?details=1: Header:{'Authorization': 'Bearer eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIwMjQwMzUyMjEiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Imluc3RhbGxlciIsImV4cCI6MTY5NDc2NjcyNSwiaWF0IjoxNjk0NzIzNTI1LCJqdGkiOiJiMDg1YjAwNS1hMDFiLTQ5N2YtODFlOC02Y2Y3MGM4OGRkMTciLCJ1c2VybmFtZSI6InJ1aWpzQGxpdmUuY29tIn0.kJ-9aBk42S6IIFxsL6UXY8zIz6MH0l085S0wa090khj9pRp4z4NQAuQ6xZkKS9ZCob75xYD9Yvf1S0g7v2YSZw'} Cookies:<Cookies[]>

Abilty to set a Grid Profile

Describe the feature
With the installer or DIY installer permissions it would possible to set a "grid profile" (after adding options for those grid profiles in the installer app).

This is useful for setting a variety of aspects of a grid profile. One setting of particular usefulness is the "power export limit" setting that limits the amount of power the enphase system will export back to the grid (by limiting generation). For enphase system users exposed to export charges or negative pricing at some times then the abilty to switch between two grid profiles is useful (to reduce costs from unwanted power in the grid and to help grid stabilty).

Further details for this use case, present to many enphase systems in Australia, see a Ruby tool with the functionality for dynamically setting an appropriate grid profile at https://github.com/ZimbiX/amber-enphase-zero-export-switcher-tool#readme .

The URL/endpoint is (similar to power production):

"#{base_url}/installer/agf/set_profile.json"

The request takes the form:

http.put(set_grid_profile_url, json: { selected_profile: name })

Where selected_profile is one of two profiles of setup on this particular gateway for enabling or limiting power export.
e.g.

AS/NZS 4777.2: 2020 Australia A Region 5 kW Export Limit:1.2.2
AS/NZS 4777.2: 2020 Australia A Region 0 kW Export Limit:1.2.2

As the profiles are only valid for the local setup then some configuration of the profiles would be required for each home assistant/enphase instance.

This feature might be good to have something like a on/off limit_profile option (like for the power production) and a way to configure an on_profile and an off_profile (i.e. setting the two grid profile names in the user insterface for the custom component).

An alternative might be to support a callable service for set_profile so that control is handed back to the user and they can customise and call a service provided by this custom_component from other scripts on their HA system (triggered on appropriate events).

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7++

Lifetime Energy Production starts at 0 after update

Describe the bug
A clear and concise description of what the bug is.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: x

Home Assistant

  • Version: 2023.8.1

This morning I decided to implement the latest version and after the update the Lifetime Energy Production starts at 0, causing high usage to be reported in the Energy usage graphs.

Relevant snippet of Home Assistant error log.
image

[BUG] Initial configuration failed

Describe the bug
Failed to initialize error. First time configuring this addon. The Enphase Envoy (DEV) was working perfectly. I wanted to switch to this integration because of the extra installer functions, but the initial configuration is not working. Debug logging shows that the integration is able to read some data.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • [x ] Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 14

Home Assistant

  • Version: 2024.4.4

Additional context

Relevant snippet of Home Assistant error log. 
2024-04-30 16:54:34.586 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP POST https://xxx.xxx.xxx.xxx/auth/check_jwt: <Response [200 OK]>: <!DOCTYPE html><h2>Valid token.</h2>

2024-04-30 16:54:34.591 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_production_json: https://{}/production.json?details=1
2024-04-30 16:54:34.591 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] HTTP GET Attempt #1: https://xxx.xxx.xxx.xxx/production.json?details=1: Header:{} Cookies:<Cookies[<Cookie sessionId=for xxx.xxx.xxx.xxx />]>
2024-04-30 16:54:38.906 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetched from https://xxx.xxx.xxx.xxx/production.json?details=1: <Response [200 OK]>:  (and a lot of data)

Cannot use Enlighten manager account to switch off production

Describe the bug
Hello, I only have a Home owner and an Enlighten manager account. It is not possible to transfer my installer account to my self.
In the Enlighten manager website, I can enable/disable the power production.
Why is it not possible to enable/disable this with this plugin using the Manager account?
If I use my manager account as an installer account, the plugin does not start.
If I use my home owner account and set the home owner option everything works fine but I cannot control the power production.

Kind regards,

Remco Hannink

Account type

  • Installer
  • DIY / DHZ
  • [ *] Enlighten manager account
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • [ *] Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 19

Home Assistant

  • Version: 2024.3

Wrong sensor information

Hi,

I have installed your software, great!
I’m having a problem with the lifetime sensor.
I have the metered version, and have used the ct for a couple days, but they won’t fit in our electrical panel.
so don’t use them anymore.
The lifetime sensor uses the wrong information from the envoy now.

Envoy-S Metered ?

Dear Vincent,

How do I know if I have a Envoy-S Metered situation to enable real time updates?

image

Help wanted! Product ID mapping

In the newest version of the integration we started displaying friendly model names for Enphase devices. Since there is no way to get these names from the Envoy API itself, and a public mapping does not seem to exist, we need to create this mapping ourselves.

We would be very happy if you could add the product number (this can be found in Home Assistant at the device page and then Hardware) and corresponding product name for the Enphase devices you own to this issue, so we can add them to the mapping.

Our current mapping

Product Number Product Name SKU
800-00598-r04 IQ Relay 1-phase Q-RELAY-1P-INT
800-00597-r02 IQ Relay 3-phase Q-RELAY-3P-INT
800-00654-r08 Envoy-S-Metered-EU ENV-S-WM-230
800-00656-r06 Envoy-S-Standard-EU ENV-S-WB-230
800-01359-r02 IQ8+ Microinverter IQ8PLUS-72-M-INT
800-01736-r02 IQ7+ Microinverter IQ7PLUS-72-M-INT
800-00631-r02 IQ7+ Microinverter IQ7PLUS-72-2-INT
800-01127-r02 IQ7A Microinverter IQ7A-72-M-INT

Thanks 🚀

[BUG] Unknown error occurred

Describe the bug
Error code in Home Assistant when trying to connect: Unknown error occurred.
Tried it both for Installer and Owner account

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 16

Home Assistant

  • Version: 2023.7.1

Additional context

Relevant snippet of Home Assistant error log.

  • output of /api/v1/production:
    {
    "wattHoursToday": 0,
    "wattHoursSevenDays": 0,
    "wattHoursLifetime": 0,
    "wattsNow": 0
    }

  • output of production.json:

  • {"production":[{"type":"inverters","activeCount":16,"readingTime":1689100170,"wNow":706,"whLifetime":895407},{"type":"eim","activeCount":0,"measurementType":"production","readingTime":1689100205,"wNow":-1.991,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.484,"rmsVoltage":251.297,"reactPwr":0.0,"apprntPwr":4.919,"pwrFactor":-0.51,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1689100205,"wNow":-1.891,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.793,"rmsVoltage":242.041,"reactPwr":0.0,"apprntPwr":4.282,"pwrFactor":-0.58,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1689100205,"wNow":0.1,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.309,"rmsVoltage":242.041,"reactPwr":0.0,"apprntPwr":1.634,"pwrFactor":0.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}

[BUG] (or Envoy "feature") Lifetime production value stalls instead of continously increasing

Describe the bug
Great software, very much appreciated!

I was wondering whether the following is really a bug or just the way how the Envoy gateway provides the data.

When looking at the graph of the lifetime production, the value stays the same for several minutes, even tough the sun has been shining during that time and production was ongoing:
image

I would expect (and need for certain calculations) the lifetime production to be in sync with the data provided by the smart meter (which correctly registers energy being provided back to the grid in this case).

I have the following settings on my Envoy S:
image

Is there any logging etc. data I should provide?

Thanks a lot in advance!

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.358

  • Amount of micro inverters connected: 10

Home Assistant

  • Version: 2024.4.3


Entity Todays power production stays at 0 since last Envoy firmware update

Entity Todays power production stays at 0.

Envoy S metered???? but without CTs Softwareversie D7.6.175 (f79c8d)

Problem since last firmware update. with

https://192.168.xx.xx/production.json

{"production":[{"type":"inverters","activeCount":10,"readingTime":1689099613,"wNow":101,"whLifetime":646210},{"type":"eim","activeCount":0,"measurementType":"production","readingTime":1689099624,"wNow":-0.709,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.04,"rmsCurrent":0.319,"rmsVoltage":236.195,"reactPwr":0.853,"apprntPwr":75.334,"pwrFactor":0.0,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.04,"varhLeadToday":0.0,"varhLagToday":0.0}],"consumption":[{"type":"eim","activeCount":0,"measurementType":"total-consumption","readingTime":1689099624,"wNow":-1.336,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":0.404,"rmsVoltage":251.885,"reactPwr":1.399,"apprntPwr":101.217,"pwrFactor":-0.01,"whToday":0.0,"whLastSevenDays":0.0,"vahToday":0.0,"varhLeadToday":0.0,"varhLagToday":0.0},{"type":"eim","activeCount":0,"measurementType":"net-consumption","readingTime":1689099624,"wNow":-0.454,"whLifetime":0.0,"varhLeadLifetime":0.0,"varhLagLifetime":0.0,"vahLifetime":0.0,"rmsCurrent":-0.045,"rmsVoltage":251.885,"reactPwr":0.546,"apprntPwr":24.581,"pwrFactor":-0.06,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}

lots of info, but the v1 api always gives 0

https://192.168.xx.xx/api/v1/production

{
"wattHoursToday": 0,
"wattHoursSevenDays": 0,
"wattHoursLifetime": 0,
"wattsNow": 0
}

thats probably why sensor Today's Energy Production stays at 0 Wh all day.

sensors for inverters and sensor 'current power production' looks ok and do give output.

[FEATURE] Token caching

Describe the feature
Use a cache for the authentication token. The tokens have different lifetimes depending on the account type.
It would be nice if restarting HA and/or the integration did not always result in retrieving a new token.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.6.175

  • Amount of micro inverters connected: 15

Home Assistant

  • Version: 2023.8.3

Missing code for show_phase + enlighten checkbox

I cannot test the integration as i don't have D7 firmware, but there are 2 issues:

the initial show_phase is missing on EnvoyReader (lines should be inserted on line numbers):

init.py line 52:
show_phase=config.get(CONF_SHOW_PHASE, False),

envoy_reader.py:
line 104:
show_phase=False,
line 119:
self.show_phase = show_phase

Also as this integration only wotks with D7 fimrware the option "Use Enlighten" should be removed from the initial config page as this will be always true

Updating state took too long

Describe the bug

Updating state for sensor.inverter_dc_current (<class 'custom_components.enphase_envoy.sensor.EnvoyInverterEntity'>) took 0.925 seconds.

Account type

  • Installer

Envoy

  • Metered without CTs

  • FW version: D7.6.175

  • Amount of micro inverters connected: 17

Home Assistant

  • Version: 2024.3

Additional context

Relevant snippet of Home Assistant error log. 

Logger: homeassistant.helpers.entity
Bron: helpers/entity.py:1155
First occurred: 09:26:35 (1 gebeurtenissen)
Laatst gelogd: 09:26:35

Updating state for sensor.inverter_122011007219_dc_current (<class 'custom_components.enphase_envoy.sensor.EnvoyInverterEntity'>) took 0.925 seconds. Please create a bug report at https://github.com/vincentwolsink/home_assistant_enphase_envoy_installer/issues

Foutmelding bij initialiseren

Hallo Vincent,

Ik krijg bij het instellen van de integratie de volgende foutmelding:

Logger: homeassistant.config_entries
Source: custom_components/enphase_envoy/__init__.py:132 
Integration: Enphase Envoy (DEV) 
First occurred: 23:47:23 (1 occurrences) 
Last logged: 23:47:23

Error setting up entry Envoy 122250101431 for enphase_envoy
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 387, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/config/custom_components/enphase_envoy/__init__.py", line 132, in async_setup_entry
    hass.config_entries.async_setup_platforms(entry, PLATFORMS)
AttributeError: 'ConfigEntries' object has no attribute 'async_setup_platforms'

Ik heb geen idee wat het veroorzaakt. Ik gebruik de volgende versie van HomeAssistant:

Home Assistant 2023.5.2
Supervisor 2023.04.1
Operating System 10.1
Frontend-versie: 20230503.3 - latest

[FEATURE] Ability to upload grid profile

Describe the feature

While #95 allows setting grid profile, it seems at least for my installation, the grid profile gets removed every time I switch away from it. However, it seems that there is an endpoint for uploading grid profile so that it can be switched to again locally.

The endpoint is /installer/agf/upload_profile_package, which accepts a POST with multipart/form-data with field file being the file of the grid profile. This endpoint can be opened directly in the browser as well, which would show a form that can be used to submit the file through this endpoint.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.xxx (Not sure from which version this endpoint starts existing)

(If you want grid profile file to test, I can send you privately. I'm not sure whether it's okay to upload them publicly.)

Lot's of status changes (not available)

I see a lot of disconnects using this integration for the last week now. Every device (gateway. relay and inverters) often disconnects resulting in not available for some time. This happens about every hour.

afbeelding

[Question] Enphase IQ Batteries not showing up

Hi!

Has anyone been able to have this integration pick up Enphase home batteries? And then also added them to the Energy dashboard?

Currently the integration doesn't show the newly installed batteries, even after removing, readding and reauthenticating the integration.

Thanks for any pointers!

[BUG] dead disconnection

Good morning
I just installed the integration on Home Assistant and great job for the community bravo.
On the other hand, it seems that at times there are disconnections because at times my entities are inaccessible and my templates in error then it comes back without doing anything, then it starts again like this all day!
Is there a setting to be made in particular to make it communicate more fluidly? is there a way to have if short disconnection the previous info in retain at least? If disconnection is abnormally long ok to have an unknown value for example

I have this :
image

after that :
image

or that
image

switch.production entity does not toggle correct - it swiches off then it returns to original state[BUG]

Describe the bug
A clear and concise description of what the bug is.

Account type

  • Installer
  • DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • Metered without CTs

  • Standard

  • FW version: D7.xxx

  • Amount of micro inverters connected: x

Home Assistant

  • Version: 2023.x

Additional context

Relevant snippet of Home Assistant error log. 

[BUG] not return 0 at midnight

Hi,
i don't understand why my production not restart to 0 at midnight. each day start with 1,5kwH

Capture5

Account type
-Envoy-S Metered (with CT)
par Enphase
Micrologiciel : D7.6.168

Home Assistant Core
par Home Assistant
Version : 2024.1.5

thank's a lot

[BUG] setup fails

Describe the bug
My enphase is recognized but get this error:
Logger: homeassistant.config_entries
Source: config_entries.py:952
First occurred: 8:09:45 PM (1 occurrences)
Last logged: 8:09:45 PM

Config entry 'Envoy xxxxxxxx' for enphase_envoy integration not ready yet; Retrying in background
in debug:
2023-08-03 19:17:05.851 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Fetched from https://192.168.1.xx/production.json?details=1: <Response [200 OK]>: {"production":[{"type":"inverters","activeCount":19,"readingTime":1691083025,"wNow":189,"whLifetime":686492}, etc..
All OK
2023-08-03 19:17:05.852 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] - FETCHING ENDPOINT endpoint_production_json_results TOOK 0.7850 seconds
2023-08-03 19:17:05.854 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_production_json_results.storage[0]
2023-08-03 19:17:05.854 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_production_json_results.storage[0] did not return anything!
2023-08-03 19:17:05.854 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_ensemble_json_results[0].devices
2023-08-03 19:17:05.854 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_ensemble_json_results[0].devices did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_home_json_results.enpower.grid_status
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_home_json_results.enpower.grid_status did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_inventory_results.[?(@.type=='PCU')].devices[?(@.dev_type==1)]
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_inventory_results.[?(@.type=='PCU')].devices[?(@.dev_type==1)] did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_production_inverters.[?(@.devType==1)]
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_production_inverters.[?(@.devType==1)] did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_devstatus.pcu[?(@.devType==1)]
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_devstatus.pcu[?(@.devType==1)] did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_production_power.powerForcedOff
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_production_power.powerForcedOff did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)]
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)] did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_devstatus.pcu[?(@.devType==12)]
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_devstatus.pcu[?(@.devType==12)] did not return anything!
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_devstatus.nsrb
2023-08-03 19:17:05.855 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_devstatus.nsrb did not return anything!
2023-08-03 19:17:05.856 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] Resolving jsonpath endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)]
2023-08-03 19:17:05.856 DEBUG (MainThread) [custom_components.enphase_envoy.envoy_reader] the configured path endpoint_inventory_results.[?(@.type=='NSRB')].devices[?(@.dev_type==12)] did not return anything!
2023-08-03 19:17:05.856 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] Updating endpoints {'endpoint_production_json_results', 'endpoint_production_inverters', 'endpoint_devstatus', 'endpoint_info_results', 'endpoint_inventory_results', 'endpoint_production_power', 'endpoint_ensemble_json_results', 'endpoint_pdm_energy', 'endpoint_home_json_results'}
2023-08-03 19:17:05.856 INFO (MainThread) [custom_components.enphase_envoy.envoy_reader] UPDATING ENDPOINT endpoint_production_json_results: https://{}/production.json?details=1

and lot more and finally:

2023-08-03 19:17:31.220 DEBUG (MainThread) [custom_components.enphase_envoy] Finished fetching envoy Envoy xxxxxxxxxxxx data in 30.006 seconds (success: False)

Account type

  • Installer
  • [ x ] DIY / DHZ
  • Home Owner (This integration is not (fully) functional with a home owner account!)

Envoy

  • Metered with CTs installed

  • [ x ] Metered without CTs

  • Standard

  • FW version: D7.6.175.230622 (f79c8d)

  • Amount of micro inverters connected: 19

Home Assistant

  • Version: 2023.8.0

Additional context
Same problem with previously working enphase dev plugin. Stopped working this morning. Did remove everything, update HA and
plugin. Hope that some suggestions help......

Relevant snippet of Home Assistant error log.
see above

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.