Created
September 6, 2024 13:41
-
-
Save sorryusernameisalreadytaken/e1c6b1397b13db942c1a2ec3999814de to your computer and use it in GitHub Desktop.
HomeAssistant Rest Call for Zendure AIO 2400 - Balcony power station storage unit - This allows you to get many, but not all, of your values, which can also be seen in the Zendure app. For my buddy, the “electricity” was mainly important, which probably shows the battery level. He can now write automations for this. Why all this when there is a …
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
template: | |
# Simply delete all the ones you don't want or which are zero. But you can also leave them all in, they will all be retrieved anyway | |
# In this case, in addition to the Zendure AIO, there is also an integrated shelly_em3. Attention: if you only have one aio2400, | |
# the all shelly_em3 sensor must be removed here and all sensors aio2400 should point to [0] instead of [1] | |
- sensor: | |
- name: "shelly_em3_id" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].id }}" | |
- name: "shelly_em3_deviceKey" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].deviceKey }}" | |
- name: "shelly_em3_snNumber" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].snNumber }}" | |
- name: "shelly_em3_name" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].name }}" | |
- name: "shelly_em3_productId" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].productId }}" | |
- name: "shelly_em3_productKey" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].productKey }}" | |
- name: "shelly_em3_onlineFlag" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].onlineFlag }}" | |
- name: "shelly_em3_productName" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].productName }}" | |
- name: "shelly_em3_wifiStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].wifiStatus }}" | |
- name: "shelly_em3_blueState" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].blueState }}" | |
- name: "shelly_em3_fourGStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].fourGStatus }}" | |
- name: "shelly_em3_isShareFlag" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].isShareFlag }}" | |
- name: "shelly_em3_input" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].input }}" | |
- name: "shelly_em3_output" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].output }}" | |
- name: "shelly_em3_electricity" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].electricity }}" | |
- name: "shelly_em3_restState" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].restState }}" | |
- name: "shelly_em3_upsMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].upsMode }}" | |
- name: "shelly_em3_upgradeStatusDes" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].upgradeStatusDes }}" | |
- name: "shelly_em3_productType" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].productType }}" | |
- name: "shelly_em3_bindId" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].bindId }}" | |
- name: "shelly_em3_bindStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].bindStatus }}" | |
- name: "shelly_em3_batteryCode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].batteryCode }}" | |
- name: "shelly_em3_inputPower" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].inputPower }}" | |
- name: "shelly_em3_outputPower" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].outputPower }}" | |
- name: "shelly_em3_slowChargePower" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].slowChargePower }}" | |
- name: "shelly_em3_temperature" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].temperature }}" | |
- name: "shelly_em3_temperatureUnit" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].temperatureUnit }}" | |
- name: "shelly_em3_remainOutTime" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].remainOutTime }}" | |
- name: "shelly_em3_bindType" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].bindType }}" | |
- name: "shelly_em3_seriesMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].seriesMode }}" | |
- name: "shelly_em3_parallelMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].parallelMode }}" | |
- name: "shelly_em3_networkType" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].networkType }}" | |
- name: "shelly_em3_standard" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].standard }}" | |
- name: "shelly_em3_isSwitch" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].isSwitch }}" | |
- name: "shelly_em3_url" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].url }}" | |
- name: "shelly_em3_remainOil" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].remainOil }}" | |
- name: "shelly_em3_genMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].genMode }}" | |
- name: "shelly_em3_shortCode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].shortCode }}" | |
- name: "shelly_em3_phaseCheck" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].phaseCheck }}" | |
- name: "shelly_em3_pass" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].pass }}" | |
- name: "shelly_em3_clusterNotice" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].clusterNotice }}" | |
- name: "shelly_em3_nodeStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].nodeStatus }}" | |
- name: "shelly_em3_clusterId" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].clusterId }}" | |
- name: "shelly_em3_phase" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].phase }}" | |
- name: "shelly_em3_reverseState" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[0].reverseState }}" | |
# This is the second device in my case (AIO 2400) | |
- name: "aio2400_id" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].id }}" | |
- name: "aio2400_deviceKey" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].deviceKey }}" | |
- name: "aio2400_snNumber" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].snNumber }}" | |
- name: "aio2400_name" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].name }}" | |
- name: "aio2400_productId" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].productId }}" | |
- name: "aio2400_productKey" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].productKey }}" | |
- name: "aio2400_onlineFlag" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].onlineFlag }}" | |
- name: "aio2400_productName" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].productName }}" | |
- name: "aio2400_wifiStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].wifiStatus }}" | |
- name: "aio2400_blueState" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].blueState }}" | |
- name: "aio2400_fourGStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].fourGStatus }}" | |
- name: "aio2400_isShareFlag" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].isShareFlag }}" | |
- name: "aio2400_input" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].input }}" | |
- name: "aio2400_output" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].output }}" | |
- name: "aio2400_electricity" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].electricity }}" | |
- name: "aio2400_restState" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].restState }}" | |
- name: "aio2400_upsMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].upsMode }}" | |
- name: "aio2400_upgradeStatusDes" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].upgradeStatusDes }}" | |
- name: "aio2400_productType" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].productType }}" | |
- name: "aio2400_bindId" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].bindId }}" | |
- name: "aio2400_bindStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].bindStatus }}" | |
- name: "aio2400_batteryCode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].batteryCode }}" | |
- name: "aio2400_inputPower" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].inputPower }}" | |
- name: "aio2400_outputPower" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].outputPower }}" | |
- name: "aio2400_slowChargePower" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].slowChargePower }}" | |
- name: "aio2400_temperature" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].temperature }}" | |
- name: "aio2400_temperatureUnit" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].temperatureUnit }}" | |
- name: "aio2400_remainOutTime" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].remainOutTime }}" | |
- name: "aio2400_bindType" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].bindType }}" | |
- name: "aio2400_seriesMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].seriesMode }}" | |
- name: "aio2400_parallelMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].parallelMode }}" | |
- name: "aio2400_networkType" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].networkType }}" | |
- name: "aio2400_standard" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].standard }}" | |
- name: "aio2400_isSwitch" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].isSwitch }}" | |
- name: "aio2400_url" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].url }}" | |
- name: "aio2400_remainOil" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].remainOil }}" | |
- name: "aio2400_genMode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].genMode }}" | |
- name: "aio2400_shortCode" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].shortCode }}" | |
- name: "aio2400_phaseCheck" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].phaseCheck }}" | |
- name: "aio2400_pass" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].pass }}" | |
- name: "aio2400_clusterNotice" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].clusterNotice }}" | |
- name: "aio2400_nodeStatus" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].nodeStatus }}" | |
- name: "aio2400_clusterId" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].clusterId }}" | |
- name: "aio2400_phase" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].phase }}" | |
- name: "aio2400_reverseState" | |
state: "{{ state_attr('sensor.zendure_device_infos', 'data')[1].reverseState }}" | |
rest: | |
#This rest call fetches a bearer token with your log-in data. You should use another account. you can invite more guests in the app. If you don't do this, your app will log you out again and again | |
- resource: "https://app.zendure.tech/v2/auth/app/token" | |
method: POST | |
payload: '{"account": "[email protected]", "appType": "Android", "grantType": "password", "password": "yourZendureAppPasswort", "tenantId": ""}' | |
headers: | |
Content-Type: "application/json" | |
appVersion: "4.3.1" | |
sensor: | |
- name: "zendure_access_token" | |
value_template: "{{ value_json.data.accessToken }}" | |
json_attributes_path: $.data | |
json_attributes: | |
- accessToken | |
#This 1 hour is guessed! The bearer Token runs out after while | |
scan_interval: 3600 # this is 1 hour in seconds | |
#This rest call then uses your bearer tokens to retrieve the actual values from all (!) your devices. Not all are filled with values. | |
- resource: "https://app.zendure.tech/eu/productModule/device/queryDeviceListByConsumerId" | |
method: POST | |
headers: | |
Blade-Auth: "bearer {{ state_attr('sensor.zendure_access_token', 'accessToken') }}" | |
Content-Type: "application/json" | |
appVersion: "4.3.1" | |
sensor: | |
- name: "zendure_device_infos" | |
# value_template: "{{ value_json }}" #That was too big!!! 255 max characters! Therefore now saved as data | |
value_template: "{{ value_json.msg }}" | |
json_attributes: | |
- data | |
#The 20 seconds could also lead to the API being requested too often, but could also work without problems | |
scan_interval: 20 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment