alryaz / hass-hekr-component

Hekr integration using python-hekr
Other
35 stars 11 forks source link
consumption hekr homeassistant-components python wisen-application

HomeAssistant Hekr Integration

HomeAssistant implementation of Hekr API communicator

hacs_badge License Maintenance

πŸ’΅ Donation options to support development
Donate using YooMoney Donate using Tinkoff Donate using Sberbank Donate using DonationAlerts

πŸ’¬ Technical Support
Telegram Group
Warning: The group is primarily oriented toward Russian users, however do not hesitate to join and ask questions in English, to which I usually reply in a timely manner.

❗❗❗ WARNING ❗❗❗

THIS PROJECT IS HIGHLY WORK-IN-PROGRESS!!! Things are subject to change drastically until at least two to three different Hekr implementations are discovered and added to the integration as well as the parent python module. Please, read release notes carefully before installing or upgrading. I am not responsible for damaging your devices in any way!

❗❗❗ Elro Connects owners ❗❗❗

This module does not yet support Elro Connects, however work has been done to make a testing implementation. Testers with Elro K1 gateways are needed. Please, contact me via e-mail [alryaz@xavux.com](mailto:alryaz@xavux.com?subject=Elro%20Connects%20Integration).

Contribution

If you found yourself using Wisen application with any of your Smart Home devices, contact me via e-mail [alryaz@xavux.com](mailto:alryaz@xavux.com?subject=Hekr%20for%20HomeAssistant%20Contribution). The process of adding new devices is not yet completely formalized, the milestone is set for a release-candidate version.

Check original repository with HekrAPI bindings: hekrapi-python: Hekr protocol bindings for Python

You can also help with translating this component. Fork this repository, make changes to preferred language files in custom_components/hekr/translations, remove the _remove_me_after_making_translations_or_everything_will_be_replaced translation key, and submit a pull request. Alternatively you can send a translation file directly through one of the communication channels listed at the end of this page.

Supported protocols

Power meter protocol: power_meter

Loaded badges for power meter protocol

_(more screenshots available at: images/power_meter)_

Supported devices

Example configuration

hekr:
  devices:
    - host: home-power-meter.lan
      device_id: ESP_2M_AABBCCDDEEFF
      control_key: 202cb962ac59075b964b07152d234b70
      protocol: power_meter
      sensors:
        - general
        - detailed
      switches: main_power

In this state, the plugin will generate three sensors, all obtained via a single queryDev command. These sensors are:

Also the following sensors are available, but not enabled by default (as they increase the amount of requests required to poll the device, leading to infrequent, but possible timeouts):

Recent release added support for switches, but so far there is only one supported:

Custom sensors, set polling interval and name

hekr:
  devices:
    - device_id: ESP_2M_AABBCCDDEEFF
      host: home-power-meter.lan
      control_key: 202cb962ac59075b964b07152d234b70
      scan_interval:
        seconds: 15
      protocol: power_meter
      sensors:
        - general
        - detailed
        - status
        - current_consumption
        - total_consumption
        - voltage
        - current
        - power_factor
        - active_power
        - reactive_power

Enable main_power switch, do not add any sensors

hekr:
  devices:
    - device_id: ESP_2M_AABBCCDDEEFF
      host: home-power-meter.lan
      control_key: 202cb962ac59075b964b07152d234b70
      scan_interval:
        seconds: 15
      protocol: power_meter
      sensors: false
      switches:
        - main_power

Power socket protocol: power_socket

Loaded switches for power socket protocol

Device | Board picture

Supported devices

Example configuration

hekr:
  devices:
    - host: tv-power-socket.lan
      device_id: ESP_2M_AABBCCDDEEFF
      control_key: 202cb962ac59075b964b07152d234b70
      protocol: power_socket

In this state, the component will generate a single switch (main_power) obtained via a single Quary command.

Fetching device_id and control_key for local setup

The following steps (evidently) assume you already paired target device using Wisen.

Integrations menu

The easiest way to accomplish this is to begin an integration flow with account setup type.

Tick the box Create notification with device info during setup, and a persistent notification will appear containing compatible YAML config.

Wisen application (Only Android ! Doesn't work with Apple App anymore)

To obtain device_id and control_key:

HttpCanary (packet sniffing, Android)

The following tutorial is left for educational purposes / explanation on how protocol decoding was done.

Pre-requisites:
Capturing instructions:
  1. Open HttpCanary application, and do the following:
    1. (required) Accept VPN configuration and (optional) install root certificate
    2. Open Target Apps from the side menu
    3. Tap + in the top right corner
    4. Search for Wisen in the search box, and select Wisen from search results
    5. Go back to the main screen; you will see Wisen's icon with Tap the floating button to start capture text under it appear in the middle of your screen. !!! DO NOT START CAPTURE YET !!!
  2. Force-close and re-open Wisen application, and do the following:
    1. Open Settings from the side menu
    2. Open LAN settings submenu
    3. Flick the switch to on position
  3. Go back to the HttpCanary application, and start listening by pressing button in the bottom left corner; you will now observe Capturing... as well as possibly some of cloud Wisen's requests appear on screen; should they not appear, go back to Wisen and open up your device from the grid of available devices. After than, enough requests will be made to successfully extract needed data.
  4. Look for requests with of WebSocket type, or UDP type to port 10000. Once you found at least one, open it and look for messages containing ctrlKey (=control_key) and devTid (=device_id). An example response would look something like this, mind the linebreaks:
    {
     "msgId": 7,
     "action": "devSend",
     "params": {
       "devTid": "ESP_2M_AABBCCDDEEFF", // This will be your `device_id`
       "appTid": [],
       "subDevTid": null,
       "ctrlKey": "202cb962ac59075b964b07152d234b70", // This will be your `control_key`
       // more data...
     },
     // more data...
    }
  5. Congratulations, you're ready! You can proceed by using any of the configuration methods described above to add your device to HomeAssistant.

Author

πŸ‘€ Alexander Ryazanov (@alryaz)

Give a ⭐ if this project helped you!