hassio-ecoflow icon indicating copy to clipboard operation
hassio-ecoflow copied to clipboard

Smart Home Panels Support

Open adampagot opened this issue 2 years ago • 132 comments

Is it possible to support the smart home panel? If there is anything I could do to help please let me know.

adampagot avatar Aug 01 '22 23:08 adampagot

The local API for the Smart Home Panel is Bluetooth only, and no TCP API is provided, so this integration cannot handle it.

If you want to support it, you will have to develop EcoFlow integration for Bluetooth or EcoFlow integration for ESPHome separately.

vwt12eh8 avatar Aug 02 '22 21:08 vwt12eh8

Hi, you can use Node-Red. What smart home panel do you like to use?

franki29 avatar Aug 18 '22 13:08 franki29

Unfortunately I have never used Smart Home Panel myself. The reason I'm not able to use TCP is based on speculation based on the behavior of the official app.

If you have an example of using it with NodeRed, please share it.

vwt12eh8 avatar Aug 27 '22 00:08 vwt12eh8

Hi, if you have not yet used one I would recommend:

https://www.openhasp.com https://github.com/sieren/Homepoint https://github.com/souravj96/max7219-mqtt-esp8266

All are working over a MQTT Broker, so you do not need Node Red for it unless you like to change some messages. I am not a expert in Home Assistant, but it should be possible to send the hassio-ecoflow information using home assistant mqtt connector to the panels.

franki29 avatar Aug 27 '22 08:08 franki29

Hi, if you have not yet used one I would recommend:

https://www.openhasp.com https://github.com/sieren/Homepoint https://github.com/souravj96/max7219-mqtt-esp8266

All are working over a MQTT Broker, so you do not need Node Red for it unless you like to change some messages. I am not a expert in Home Assistant, but it should be possible to send the hassio-ecoflow information using home assistant mqtt connector to the panels.

@franki29 I think you've misunderstood the OP. The "Smart Home Panel" is another Ecoflow product, not a display device. See: https://www.ecoflow.com/us/smart-home-panel for reference.

lwsrbrts avatar Sep 03 '22 14:09 lwsrbrts

Oh sorry, yes I misunderstood. Sorry.

franki29 avatar Sep 03 '22 14:09 franki29

Just wanted to add to this issue that, while I haven't done a full port scan on my Smart Home Panel, its details and control topics (as in, an MQTT topic) are populated in Ecoflow's MQTT server. So it does like like the Smart Home Panel offers more than just Bluetooth as a connection mechanism.

lwsrbrts avatar Nov 11 '22 17:11 lwsrbrts

The local API for the Smart Home Panel is Bluetooth only, and no TCP API is provided, so this integration cannot handle it.

If you want to support it, you will have to develop EcoFlow integration for Bluetooth or EcoFlow integration for ESPHome separately.

It appears SHP data is available and settings can be controlled via public MQTT server @ mqtt.echoflow.com ... not certain how to obtain the keys/schema for SHP but it would appear there may be a way to integrate SHP similar to Delta Pro with the caveat of being dependent on a cloud server...

Ne0-Hack3r avatar Nov 12 '22 02:11 Ne0-Hack3r

It appears SHP data is available and settings can be controlled via public MQTT server @ mqtt.echoflow.com ... not certain how to obtain the keys/schema for SHP but it would appear there may be a way to integrate SHP similar to Delta Pro with the caveat of being dependent on a cloud server.

Have you looked into this further or made any progress? I can't really help figure this out, but I would be happy to help test if it proceeded that far. Monitoring individual circuits isn't that important to me, but switching circuits between automatic and battery using HA automation would be amazing. The Ecoflow app is so limited in that respect.

lk229 avatar Mar 24 '23 02:03 lk229

Currently access has been limited to beta testers. I have been selected as a beta tester. I have been able to switch automations on/off with a mqtt explorer app for windows. Unfortunately I have no experience developing for HA so trying to get things working in home assistant is going very slowly for me.

adampagot avatar Mar 24 '23 09:03 adampagot

Have you looked into this further or made any progress? I can't really help figure this out, but I would be happy to help test if it proceeded that far. Monitoring individual circuits isn't that important to me, but switching circuits between automatic and battery using HA automation would be amazing. The Ecoflow app is so limited in that respect.

This has been achieved for the Smart Home Panel using Ecoflow's MQTT servers but implementation is non-trivial.

This all started here: https://github.com/v1ckxy/ecoflow-withoutflow/issues/1#issuecomment-1312544256 - which gives you an indication of where to be looking to do things.

When configuring your mosquitto.conf file however, follow this recommended format from @Ne0-Hack3r: https://github.com/v1ckxy/ecoflow-withoutflow/issues/1#issuecomment-1333115521 since that provides a method of subscribing to the topics in a non-specific manner and allows easy configuration of your HA sensors and controls.

I have slightly altered a PowerShell script I wrote to generate a suitable mosquitto.conf file.

#Requires –Version 7
$useremail = '[user email address]' # Edit this
$password = '[user password]' # Edit this

# The normal use is Unicode encoding but must specify UTF8 instead.
$base64password = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($password))

$authObject = [PSCustomObject]@{
    os         = 'android'
    scene      = 'IOT_APP'
    appVersion = '4.0.0.53'
    osVersion  = '13'
    password   = $base64password
    oauth      = @{
        bundleId = 'com.ef.EcoFlow'
    }
    email      = $useremail
    userType   = 'ECOFLOW'
}

$Result = Invoke-RestMethod -Method Post -Uri 'https://api.ecoflow.com/auth/login/' -ContentType 'application/json' -Body $($authObject | ConvertTo-Json) -ResponseHeadersVariable 'Headers' -StatusCodeVariable 'StatusCode'

$TokenString = ConvertTo-SecureString -AsPlainText -Force -String $Result.data.token

$certificateData = Invoke-RestMethod -Method Get -Uri 'https://api.ecoflow.com/iot-auth/app/certification' -ContentType 'application/json' -Authentication Bearer -Token $TokenString


Write-Host "Ecoflow User ID: $($Result.data.user.userId)"

<#
Write-Host "Certificate (MQTT) User: $($certificateData.data.certificateAccount)"
Write-Host "Certificate (MQTT) Password: $($certificateData.data.certificatePassword)"
Write-Host "URL: $($certificateData.data.url)"
Write-Host "Port: $($certificateData.data.port)"
Write-Host "Protocol: $($certificateData.data.protocol)"
#>

$SHPserial = Read-Host "Please enter the correct serial number of your smart home panel"

Write-Host "Example mosquitto.conf file:"

"
connection ecoflow-bridge
address $($certificateData.data.url):$($certificateData.data.port)
remote_username $($certificateData.data.certificateAccount)
remote_password $($certificateData.data.certificatePassword)
cleansession true
remote_clientid ANDROID_$([guid]::NewGuid().ToString().ToUpper())_$($Result.data.user.userId)
try_private true
bridge_insecure false
bridge_protocol_version mqttv311
bridge_tls_version tlsv1.2
bridge_cafile /etc/ssl/certs/ca-certificates.crt

# Smart Home Panel
topic """" in 0 ecoflow/SHP/data /app/device/property/$SHPserial
topic """" both 0 ecoflow/SHP/set /app/$($Result.data.user.userId)/$SHPserial/thing/property/set
"

This basically describes how to configure mosquitto in HA to connect to Ecoflow's MQTT server to subscribe to the correct topics (and bring them to your HA MQTT server) such that you can configure sensors and other controls to act on and send actions to Ecoflow's MQTT server from HA, and have those actions happen on your SHP.

There are lots of example YAML configurations for sensors in the same thread as above, including ones for SHP.

@Ne0-Hack3r has a private Github repository where implementation is fairly well documented for SHP, but you would have to ask him for access of course.

An example control for the circuit mode might look something like:

mqtt:
 binary_sensor:
    - name: SHP Circuit 1 Auto
      object_id: shp_circuit_1_auto
      unique_id: shp_circuit_1_auto
      state_topic: "ecoflow/SHP/data"
      payload_on: "0"
      payload_off: "1"
      qos: 0
      value_template: "{{ value_json.params.loadCmdChCtrlInfos[0].ctrlMode if value_json['params']['id'] == 2 else this.state }}"
 sensor:
    - name: SHP Circuit 1 State
      object_id: shp_circuit_1_state
      unique_id: shp_circuit_1_state
      state_topic: "ecoflow/SHP/data"
      qos: 0
      value_template: "{{ value_json.params.loadCmdChCtrlInfos[0].ctrlSta if value_json['params']['id'] == 2 else this.state }}"
template:
  - select:
      - name: "SHP Circuit 1 Mode"
        unique_id: shp_circuit_1_mode
        state: >-
          {% if is_state('binary_sensor.shp_circuit_1_auto','on') %}Auto
          {% else %}
              {% set i = int(states('sensor.shp_circuit_1_state')) %}
              {% set o = {0:'Grid',1:'Battery',2:'Off'} %}
              {{ o[i] if i in o.keys() }}
          {% endif %}
        options: "{{ ['Auto','Grid','Battery','Off'] }}"
        icon: >-
          {% set i = int(states('sensor.shp_circuit_1_state')) %}
          {% set o = {0:'mdi:home-lightning-bolt-outline',1:'mdi:home-battery-outline',2:'mdi:home-off-outline'} %}
          {{ o[i] if i in o.keys() }}
        select_option:
          - service: mqtt.publish
            data:
              topic: ecoflow/SHP/set
              payload: >-
                {% set i = option %}
                {% set p = '{"from":"HA","id":"' %}
                {% set s = '","moduleType":0,"operateType":"TCP","params":' %}
                {% set id = 999900000+(range(10000,99999)|random) %}
                {% set o = {
                  'Auto':'{"sta":0,"ctrlMode":0,"ch":0,"cmdSet":11,"id":16},"version":"1.0"}',
                  'Grid':'{"sta":0,"ctrlMode":1,"ch":0,"cmdSet":11,"id":16},"version":"1.0"}',
                  'Battery':'{"sta":1,"ctrlMode":1,"ch":0,"cmdSet":11,"id":16},"version":"1.0"}',
                  'Off':'{"sta":2,"ctrlMode":1,"ch":0,"cmdSet":11,"id":16},"version":"1.0"}'
                  }
                %}
                {% if i in o.keys() %}{{p}}{{id}}{{s}}{{o[i]}}{% endif %}

lwsrbrts avatar Mar 24 '23 15:03 lwsrbrts

This has been achieved for the Smart Home Panel using Ecoflow's MQTT servers but implementation is non-trivial.

@lwsrbrts Wow. Thanks for all this info and sample scripts. This is exactly what I need. I've got a lot to learn in order to implement this but it looks doable.

lk229 avatar Mar 24 '23 17:03 lk229

@lwsrbrts I've been fighting with the MQTT bridge, your instructions allowed me to set it up. @Ne0-Hack3r Would it be possible to get access to your repo where you have more documents? I am a beta tester

adampagot avatar Mar 24 '23 21:03 adampagot

just for info... sorry if off topic. https://github.com/nielsole/ecoflow-bt-reverse-engineering/issues/2

ipalchuk avatar Mar 24 '23 22:03 ipalchuk

@lwsrbrts Warning! Stupid Question Ahead: I've used your Powershell script to create a mosquitto.conf file, but I can't figure out where it goes. Can you give a n00b some more help? I'm not sure if this is a stand-alone file or if it gets merged into an existing conf file.

I assume I'll be able to access the location using Samba. I'm running on a RPI 4 so don't think I can run Visual Studio and the File Editor seems to be limited to the config directory (unless that's where it goes). I've spent the last few weeks moving from Hubitat to HA and while I've learned a lot, I've got a very long way to go.

Thanks.

lk229 avatar Mar 25 '23 01:03 lk229

I think you need to activate custom configs first. In home assistant settings - device and services - supervisor - misqutto broker - visit - customize - set active to true.

Make sure you go to supervisor, not misqutto on the same screen

The file needs to go into \share\mosquito which you will need to create

I have samba and visual code studio, either would work, but I'm running on a odroid

adampagot avatar Mar 25 '23 02:03 adampagot

Thanks @adampagot I followed your instructions and now have my mosquitto.conf file in the \share\mosquitto directory. Tomorrow I'll read through the referenced thread more thoroughly and try setting up a yaml file to access and maybe even control a circuit. Hopefully I'm able to piece this together as I'm coming into this with absolutely no prior MQTT knowledge.

lk229 avatar Mar 25 '23 03:03 lk229

I'm now at the point where MQTT Explorer can see the Ecoflow SHP topic ~~but I don't really know where to go from here. I see all the samples of sensor definitions and control but don't know where the yaml coding for this should go. What file names, folders, are there pointers needed in configuration.yaml? I guess I'm still looking for basics that most would assume someone in the forum already knew.~~

Just started editing my configuration.yaml file and now have access to tested SHP items. Lots of work ahead but this has been a good breakthrough for me.

@Ne0-Hack3r Could I get access to your repo?

lk229 avatar Mar 25 '23 20:03 lk229

Just started editing my configuration.yaml file and now have access to tested SHP items. Lots of work ahead but this has been a good breakthrough for me.

@Ne0-Hack3r Could I get access to your repo?

All what follows assumes your HA MQTT broker is configured properly and is receiving messages in the correct topics.

Instead of modifying your configuration.yaml file directly, add this to it instead.

homeassistant:
  packages: !include_dir_named packages

Then download my YAML config gist for the Smart Home Panel from: https://gist.github.com/lwsrbrts/8d6a77b4306f284cd193635e5722ffcd

Some of the data access methods and set controls in the config were determined by @Ne0-Hack3r so I won't take credit for those.

Create a folder in the same location as your configuration.yaml file called packages

Then place the gist file as a .yaml extension in the packages folder.

From that configuration, I've created the following dashboards in HA - where you can also see some controls.

image

image

lwsrbrts avatar Mar 26 '23 12:03 lwsrbrts

Lewis @lwsrbrts - Thanks so much! I've added your smart_home_panel.yaml as instructed and cleaned up my configuration.yaml. I now have access to every function of my SHP and can control it through HA. Now I can automate switching circuits to/from battery use to get the most from my solar panels. Of course, my dashboard doesn't look as nice as yours, but it works perfectly.

Thanks again to you and Adam @adampagot for helping me out and making this possible. Lee

lk229 avatar Mar 26 '23 14:03 lk229

@lwsrbrts I've been fighting with the MQTT bridge, your instructions allowed me to set it up. @Ne0-Hack3r Would it be possible to get access to your repo where you have more documents? I am a beta tester

Done.

Everything in the repo is related to the Ecoflow public MQTT server. This access is not supported by Ecoflow and was gained by collaboration between a number of people on this and other forums (which began by decompiling the native app on Android IIRC). There is no guarantee it will continue to work once the official API is publicly released. Also, EF recently added filtering of client IDs which my documentation/scripts have not been updated to reflect.

Bottom line: I'm not sure how much of what is in the repo will work with the API. It will depend on how much data EF decides to provide via that mechanism and if they keep the same topic structure or not...

Hopefully it can be helpful to you for at least providing ideas and some insight into the YAML configuration for Home Assistant.

Ne0-Hack3r avatar Apr 08 '23 22:04 Ne0-Hack3r

I'm now at the point where MQTT Explorer can see the Ecoflow SHP topic ~but I don't really know where to go from here. I see all the samples of sensor definitions and control but don't know where the yaml coding for this should go. What file names, folders, are there pointers needed in configuration.yaml? I guess I'm still looking for basics that most would assume someone in the forum already knew.~

Just started editing my configuration.yaml file and now have access to tested SHP items. Lots of work ahead but this has been a good breakthrough for me.

@Ne0-Hack3r Could I get access to your repo?

DONE

Ne0-Hack3r avatar Apr 08 '23 22:04 Ne0-Hack3r

@Ne0-Hack3r Could I get access to your repo as well? I am trying to integrate charging with my AC solar production on my roof. I'm brand new to Home Assistant and Github so any help would be amazing. I have managed to get Home Assistant running and Delta Pros linked with the Hassio-ecoflow repo already.

Maxctran avatar Apr 10 '23 19:04 Maxctran

Maxctran

Done.

Ne0-Hack3r avatar Apr 11 '23 01:04 Ne0-Hack3r

Thanks to this thread and the other one linked above, I have tons of data coming from Ecoflow into Home Assistant. Small sample:

image

@Ne0-Hack3r I'd love access to your repo if possible to see what else can be done. For one, I saw mention in the other thread about you monitoring the Delta Pro state of charge. That's one of the main things I am wanting...

aflusche avatar May 14 '23 02:05 aflusche

@Ne0-Hack3r nice job. Could you please grant me also access to your EcoFlow-Repo ? Thanks in advance :)

romsch1 avatar May 14 '23 13:05 romsch1

@aflusche @romsch1

Done and Done

Ne0-Hack3r avatar May 15 '23 00:05 Ne0-Hack3r

Anyone on this thread worked with the SHP automations via MQTT? Anyone have a dashboard example that displays automation data or allows manipulating it?

I'm playing with this now but any ideas or examples are appreciated.

Ne0-Hack3r avatar May 15 '23 00:05 Ne0-Hack3r

Thank you!!

Anyone on this thread worked with the SHP automations via MQTT? Anyone have a dashboard example that displays automation data or allows manipulating it?

Not yet. My DREAM concept is for HA to monitor my DP battery level and smartly turn off non-critical circuits during an outage.

aflusche avatar May 15 '23 01:05 aflusche

Not yet. My DREAM concept is for HA to monitor my DP battery level and smartly turn off non-critical circuits during an outage.

I'm pretty certain you could achieve that already with the custom integration in this repo and the work that @Ne0-Hack3r has put in on pulling in the sensors from the SHP using MQTT.

The gist I linked to above gives the code for all of the sensors you'd need to create an automation that would do exactly what you're dreaming of.

lwsrbrts avatar May 15 '23 21:05 lwsrbrts