Enphase Envoy - Current state of things

Well prior to them nuking my setup I had each panel displayed as a meter arranged in to three arrays and in the correct order that the panels were in physically. This allowed me to see at a glance the production numbers of each panel. Obviously when I would look into the history I could see the historical production numbers of each panel graphed out as well. This allowed me to quickly and easily see patterns and faults. For example I knew that right after about noon the western most panel on my main south east array would begin to be shaded by the chimney, followed a while later by the one under it and so on. It was a very distinctive pattern in the graphed out production numbers and I knew it was normal. Any anomaly, however, sticks out immediately. If it was a full sun day and every panel is clipping out except for one that is 20, 50, a 100 watts below that point and is not shaded, obviously something is out of sorts.

1 Like

Possix does show per panel current wattage, but Iā€™ve setup something using this method and the production endpoint

 https://{IQ Gateway_ip}/api/v1/production/inverters

Would you mind sharing an example code of one of the cards you have above @JakeK ? Iā€™d like to setup a Lovelace array as well and have been looking around for examples, but it seems not a lot of people use per panel monitoring, or atleast put it into a dashboard. Trying to figure out the right card to use.

Iā€™m currently at work so itā€™ll be a while until I can get the code. Probably wonā€™t have a chance until some time this coming week.

I did find a screenshot of prior the firmware update. It really is just a bunch of vertical cards.

Sure, this is what I use currently (and is working very well for me):

mqtt:
  sensor:
    - name: "Solar Lifetime Production"
      unique_id: '0a7476cc-d6c1-40ba-8ae1-606518c3497d'
      state_topic: "home/envoy/Envoy-S Metered/Production CT"
      unit_of_measurement: "Wh"
      state_class: total_increasing
      device_class: energy
      value_template: "{{ value_json.production[1].whLifetime }}"
    - name: "Solar Current Production"
      unique_id: '0a7476cc-d6c1-40ba-8ae1-606518c3497c'
      state_topic: "home/envoy/Envoy-S Metered/Production CT"
      unit_of_measurement: "W"
      state_class: measurement
      value_template: "{{ value_json.production[1].wNow if value_json.production[1].wNow > 0 else 0 }}"
2 Likes

Hereā€™s the yaml for my dashboard arrays.

type: vertical-stack
cards:
  - type: markdown
    content: North West Array
  - type: grid
    cards:
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 12
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 11
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 10
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 9
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 8
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 7
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 6
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 5
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 4
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 3
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 2
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 1
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
    columns: 4
  - type: markdown
    content: South East Array 2
  - type: grid
    cards:
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
        name: Panel 14
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 13
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 12
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 11
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 10
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 9
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 8
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 7
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 6
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 5
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 4
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 3
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 2
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 1
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
    columns: 4
    square: false
  - type: markdown
    content: South East Array 1
  - type: grid
    cards:
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 16
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 15
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 14
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 13
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 12
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 11
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 10
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 9
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 8
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 7
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 6
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 5
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 4
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 3
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 2
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
      - type: gauge
        entity: sensor.envoy_inverter_
        min: 0
        max: 340
        name: Panel 1
        needle: true
        severity:
          green: 100
          yellow: 10
          red: 0
    square: false
    columns: 4
1 Like

When Sony removed the capability to install Linux on the PS3 post-launch, there was a successful class action suit, just sayinā€™.

Is there any way to downgrade the firmware? I made a mistake in my firewall config and mine upgraded over the weekend. The token situation looks like way more effort than Iā€™m willing to expend to set back up.

I got as far as level 2 tech support on the phone yesterday and the guy swore up and down that it wasnā€™t possible to downgrade it. Instead he told me about some APIv4 that has a free version that doesnā€™t even come close to doing what I was asking. https://developer-v4.enphase.com/developer-plans

Instead I was able to get one of the envoy integrations on hacs to work last night. Now if only I could get my mariadb database tables repaired so I could have the past two years of energy data. :confused:
https://github.com/briancmpbll/home_assistant_custom_envoy

I got it to work thanks to the comments on the Brian Campbell GitHub issues (#71) page:

It involved using that repo after uninstalling and then restarting HASS. My envoy is on D7.3.120 and I did need to move up to the latest 2023.5.2.

I was hopeless but was surprised when it worked. I used my Enphase login and password and clicked the unlabeled button which in other releases was ā€œuse envoyā€ during configuration. It paused for longer than I expected but went through last night (May 5). Because the device name is based on serial number, all my front end stuff came up without having to edit any of the entities.

1 Like

Itā€™s very simple, you can copy/paste the code right out of my post here: Enphase local API with firmware 7.x - my setup

replace the usermame/password/serial number where it says to, and it prints a token - good for a year

1 Like

For 5.x.x firmware we have net-consumption metric and we can calculate net-production (grid-out) value:
net-production[whLifetime] = production[whLifetime] - consumption[whLifetime] + net-consumption[whLifetime]

After asking enphase very nicely over and over again, I finally got documentation for the local REST API Endpoints. Hopefully this will be helpful for the devs working on updating their enphase integrations!

ENVOY-Envoy REST Interface-150523-095555.pdf

9 Likes

Thanks, very useful!

1 Like

Hi HA_n00b,

Trying to get the enphase working, I created the helper as you suggested and created a sensor:

But for some reason this sensor keeps having status unavailable?

Any help would be appreciated :slight_smile:

Hi all,

Iā€™m new here and Iā€™m going to ask maybe a couple of stupid questions but I have to do itā€¦

The main issue here is we donā€™t want go outside home to ask for anything and have it all locally, but this integrations (posixx, jrutski,ā€¦) all try to get the token programatically accessing to enlighten websiteā€¦ why? If we can generate a token valid for 1 year, why not enable a field in the integration to write the token as option and avoid any external comunication? Can I do that already? Where in the config files I have to set the token?

The other question is I had the core integration working until last wednesday enphase decided to upgrade MY envoy without any advise (i opened a case with them very disapointed but I see how they try to monetize the data and the access to it so they donā€™t care). I donā€™t want to lose the historical data so, as iā€™m not installing the integration since the begining but substituing the integration for the new one (i tried with posixx version), how can i update the configuring data from the form? I cannot find how to do it. Any advise? Let me say that home assistant is powerful, amazing and awesome, but the documentation to change things, or fix values or configs is very obscure, not intuitive and mostly inexistent. It will be perfect to understand where to bypass the tries to get token online, set the token manually (i can do that once per year if needed), or simply where to set the host if the ip changesā€¦ I have some programing skills and I could help community, but documentation to understand how things works is not easy to find. Am I right?

My 2c
JA

2 Likes

Does anyone know if it is possible via the API to enable and disable the Power Production?

1 Like

Played around with this over the weekend but used the Enphase portal. When toggling off it took over half an hour to respond, toggling on well over 15 minutes. Could be random?

When using the local access, is the response instantaneous?

Yes, with local access to the Envoy, it responds within minutes with both turning on and off.

I donā€™t have this option in my local webinterface. Is it behind the ā€œinstaller loginā€? [Which would present the next challengeā€¦ how to obtain the password].

Am on FW D05, from the sounds of this discussion I should probably limit internet access and prevent a FW upgrade.

Yes its in the installer section. I have a DIY installer account en installed the system myself.
You can create a DIY account and ask your installer or Enphase Support to give access.

Thanks! I found a py script which derives the installer password from the serial number of the envoyā€¦ gives me the shivers thinking about the security vulnerability of this product especially considering itā€™s not possible to change the installer password. Luckily this is a local only interface - will disconnect my envoy from the internet just to be sureā€¦

https://github.com/sarnau/EnphaseEnergy/blob/23b96326bfa904328fb244a0e727bdf4c3ef85b1/passwordCalc.py#L4

Used the script myself and can confirm it does the trick.