Skip to content

Commit

Permalink
Merge pull request #422 from turcotmii/main
Browse files Browse the repository at this point in the history
Working hilo_rate_current solution
  • Loading branch information
ic-dev21 authored May 3, 2024
2 parents 2fbb01f + aad1143 commit fdd340d
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 45 deletions.
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ Home Assistant instance running and already configured with the included
file.

You can use the `pre-commit` settings implemented in this repository to have
linting tool checking your contributions (see deicated section below).
linting tool checking your contributions (see dedicated section below).

## Pre-commit

You can use the [pre-commit](https://pre-commit.com/) settings included in the
repostory to have code style and linting checks.
repository to have code style and linting checks.

With `pre-commit` tool already installed,
activate the settings of the repository:
Expand Down
30 changes: 15 additions & 15 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ This is a beta release. There will be some bugs, issues, etc. Please bear with u
[Hilo](https://www.hydroquebec.com/hilo/en/) integration for Home Assistant

# :warning: Breaking change (v2024.2.2 and lower unusable)
Hilo's login has stoped using "Resource Owner Password Flow" and started using "Authorization Code Flow with PKCE". The old login method has been permanently closed on april 10 2024.
Hilo's login has stopped using "Resource Owner Password Flow" and started using "Authorization Code Flow with PKCE". The old login method has been permanently closed on april 10th, 2024.

## Introduction

This is the unofficial HACS Hilo integration for Home Assistant. [Hilo](https://www.hiloenergie.com/en-ca/) is a smart home platform developed
by an [Hydro Quebec](https://www.hydroquebec.com/hilo/en/) subsidiary.
by a [Hydro Quebec](https://www.hydroquebec.com/hilo/en/) subsidiary.
This integration has no direct tie with Hilo or Hydro Quebec. This is a community initiative. Please don't contact
Hilo or Hydro-Quebec with issues with this Home Assistant integration, you can open an issue in the GitHub repository
instead.
Expand All @@ -41,7 +41,7 @@ he put into this integration, I would probably have never even considered Hilo.

Another big shout out to @ic-dev21 for his implication at multiple levels.

I decided to move the integration here because of the latest updates from Hilo broke the original one and I took the time to completely
I decided to move the integration here because of the latest updates from Hilo broke the original one, and I took the time to completely
rewrite it. Hilo is now pushing device readings via websocket from SignalR.

### Features
Expand All @@ -67,7 +67,7 @@ rewrite it. Hilo is now pushing device readings via websocket from SignalR.
## Installation

### Step 0: Compatible install
This custom component requires that Hilo has carried out the install in your home. It will not be possible to set it up otherwise.
This custom component requires that Hilo has carried out the installation in your home. It will not be possible to set it up otherwise.

This custom component has been tested to work by various users on HA OS (as bare metal or VM), Docker with the official (ghcr.io) image and Podman. Other types of install may cause permission issues during the creation of a few files by the custom component.

Expand Down Expand Up @@ -127,19 +127,15 @@ After correctly linking your account like in the previous section, you should se

### Energy meters

Energy meters are a new feature of this integration. We used to manually generate them with template sensors and automation
Energy meters are a feature of this integration. We used to manually generate them with template sensors and automation,
but they now have been fully integrated into the Hilo integration.

#### Warning

When enabling Hilo generated energy meters, it's recommended to remove the manually generated ones to have the most accurate
statistics, otherwise we might end up with duplicated data.

This wasn't tested with already active data and energy entities (ie: Battery, Gaz, Solar, or even other individual devices).
It's possible that enabling this will break or delete these original sensors. We can't be held responsible for any data loss
service downtime, or any kind as it's described in the license.

If you're facing an issue and you want to collaborate, please enable `debug` log level for this integration and provide a copy
If you're facing an issue, and you want to collaborate, please enable `debug` log level for this integration and provide a copy
of the `home-assistant.log` file. Details on how to enable `debug` are [below](https://github.com/dvd-dev/hilo/blob/main/README.en.md#contributing).

#### Procedure
Expand All @@ -160,10 +156,10 @@ home assistant. You simply need to add a line like this in your `configuration.y
* The `status` should be in `collecting`
* The `state` should be a number higher than 0.

* All generated entities and sensors will be prefixed with `hilo_energy_` or `hilo_rate_`.
* All generated entities and sensors will be prefixed or suffixed with `hilo_energy_` or `hilo_rate_`.

* If you see the following error in your logs, this is a bug in Home Assistant and it's because the power meter in question has 0 w/h
usage so far. This will disappear once usage has been calculated. There's a PR upstream [here](https://github.com/home-assistant/core/pull/60678) to address this.
* If you see the following error in your logs, this is a bug in Home Assistant, and it's because the power meter in question has 0 W/h
usage so far. This will disappear once usage has been calculated.

```
2021-11-29 22:03:46 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Expand All @@ -181,6 +177,10 @@ Other options are available under the `Configure` button in Home Assistant:
- `Generate energy meters`: Checkbox
Automatically generate energy meters, see procedure above for proper setup
Requires this line to be added to your configuration.yaml file:
```
utility_meter:
```
- `Generate only total meters for each devices`: Checkbox
Expand Down Expand Up @@ -215,7 +215,7 @@ Other options are available under the `Configure` button in Home Assistant:
- `Scan interval (min: 60s)`: Integer
Number of seconds between each device update. Defaults to 60 and it's not recommended to go below 30 as it might
Number of seconds between each device update. Defaults to 60 and, it's not recommended to go below 30 as it might
result in a suspension from Hilo. Since [2023.11.1](https://github.com/dvd-dev/hilo/releases/tag/v2023.11.1) the minimum has changed from 15s to 60s.
## Lovelace sample integration and automation example
Expand All @@ -239,7 +239,7 @@ You can find the FAQ in the wiki of the project: https://github.com/dvd-dev/hilo
## Contributing
Reporting any kind of issue is a good way of contributing to the project and it's available to anyone.
Reporting any kind of issue is a good way of contributing to the project, and it's available to anyone.
If you face any kind of problem or weird behavior, please submit an issue and ideal, attach debug logs.
Expand Down
72 changes: 58 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

**BETA**

Ceci est une version Bêta. Il y aura probablements des bogues, irritants, etc. Merci pour votre patience et d'ouvrir des "Issues".
Ceci est une version Bêta. Il y aura probablement des bogues, irritants, etc. Merci pour votre patience et d'ouvrir des "Issues".

# Hilo
Intégration pour Home Assistant d'[Hilo](https://www.hydroquebec.com/hilo/fr/)
Expand Down Expand Up @@ -58,25 +58,25 @@ J'ai décidé de déplacer l'intégration ici, car la dernière mise à jour de

## Installation

### Étape 0: Avoir une installation compatible
### Étape 0 : Avoir une installation compatible
L'intégration nécessite que l'installation du matériel Hilo soit complétée à votre domicile. Il ne sera pas possible de faire l'installation si ça n'est pas fait.

Cette intégration a été testée par des utilisateurs sous HA OS (bare metal et VM), Docker avec l'image officielle (ghcr.io), Podman. Tout autre type d'installation peut mener à des problèmes de permission pour certains fichiers créés lors de l'installation initiale du custom_component.

### Étape 1: Télécharger les fichiers
### Étape 1 : Télécharger les fichiers

#### Option 1: Via HACS
#### Option 1 : Via HACS

[![Ouvrir Hilo dans Home Assistant Community Store (HACS).](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=dvd-dev&repository=hilo&category=integration)

Assurez-vous d'avoir [HACS](https://hacs.xyz/docs/setup/download/) d'installé.
Sous HACS, cliquer le bouton '+ EXPLORE & DOWNLOAD REPOSITORIES' au bas de la page, rechercher "Hilo", le choisir, et cliquer sur _download_ dans HACS.

#### Option 2: Manuellement
#### Option 2 : Manuellement

Télécharger et copier le dossier `custom_components/hilo` de la [dernière version](https://github.com/dvd-dev/hilo/releases/latest) dans votre dossier `custom_components` de Home Assistant.

### Étape 2: Ajouter l'intégration à HA (<--- étape souvent oubliée)
### Étape 2 : Ajouter l'intégration à HA (<--- étape souvent oubliée)

[![Ouvrir Home Assistant et démarrer la configuration d'une nouvelle intégration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=hilo)

Expand Down Expand Up @@ -115,11 +115,51 @@ Après avoir lié votre compte comme montré à la section configuration initial

![Réauthentifié succès](https://github.com/dvd-dev/hilo/assets/108159253/7708b449-24c3-43c1-843b-8697ae192db1)

### :warning: Compteurs de consommation électrique
### Compteurs de consommation électrique

La génération automatique des compteurs de consommation électrique est actuellement brisée. J'avais codé ça quand le panneau d'énergie de Homeassistant venait d'être rendu disponible et malheureusement, cette partie du code a changé énormément. Je n'ai plus le temps pour le moment de me remettre la tête là-dedans, mais si quelqu'un est assez brave pour se pencher là-dessus en détail, ça va me faire plaisir de merger les patchs.
Les compteurs de consommation électrique sont une fonctionalité de cette intégration. Ils étaient initialement générés
par des capteurs "template" et des automatisations mais sont maintenant intégré dans l'intégration.

#### Avertissement

Lorsque l'on active les compteurs, il est recommandé de retirer les anciens capteurs manuels afin de ne pas avoir de
données en double.

Si vous avez un problème et voulez collaborer, merci de mettre en marche la journalisation `debug` et de fournir
un extrait du fichier `home-assistant.log`. La méthode est expliquée [ci-bas.](https://github.com/dvd-dev/hilo?tab=readme-ov-file#contribuer).


#### Procédure

Si vous souhaitez utiliser la génération automatique des capteurs de consommation électrique, suivez les étapes suivantes:

* S'assurer que la plateforme `utility_meter` est chargée dans votre fichier `configuration.yaml` de
Home Assistant. Vous n'avez qu'à ajouter une ligne au fichier comme suit :

```
utility_meter:
```

* Cliquer sur `Configure` dans l'interface utilisateur de l'intégration et cocher `Générer compteurs de consommation électrique`.

* (Optionnel) Redémarrez Home Assistant et attendez 5 minutes environ, l'entité `sensor.hilo_energy_total_low` sera créée
et contiendra des données:
* Le `status` devrait être `collecting`
* L'état `state` devrait être un nombre plus grand que 0.

* Toutes les entités et capteurs créés seront préfixés ou suffixés de `hilo_energy_` ou `hilo_rate_`.

* Si vous voyez l'erreur suivante dans le journal de Home Assistant, ceci est du à un bogue de Home Assistant causé par
le fait que le compteur n'a pas encore accumulé suffisamment de données pour fonctionner. Elle peut être ignorée.

```
2021-11-29 22:03:46 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
[...]
ValueError: could not convert string to float: 'None'
```
Une fois créés, les compteurs devront être ajoutés manuellement au tableau de bord "Énergie".
Voir les issues #204 #281 #292
### Autres options de configuration
Expand All @@ -128,6 +168,10 @@ D'autres options sont disponibles sous le bouton "Configurer" dans Home Assistan
- `Générer compteurs de consommation électrique`: Case à cocher
Générer automatiquement des compteurs de consommation électrique, voir la procédure ci-dessus pour la configuration
Nécessite la ligne suivante dans votre fichier configuration.yaml :
```
utility_meter:
```
- `Générer seulement les compteurs totaux pour chaque appareil`: Case à cocher
Expand Down Expand Up @@ -206,7 +250,7 @@ $ git clone https://github.com/home-assistant/core.git
$ git --git-dir core/ checkout $HASS_RELEASE
```

**NOTE**: On clone aussi le [repo](https://github.com/home-assistant/core) de home-assistant car c'est plus facile d'ajouter du debug à ce niveau.
**NOTE**: On clone aussi le [repo](https://github.com/home-assistant/core) de home-assistant, car c'est plus facile d'ajouter du debug à ce niveau.

2. Lancer le container:

Expand Down Expand Up @@ -253,7 +297,7 @@ Il va sans dire qu'il est important de tester vos modifications sur une installa

N'oubliez pas votre copie de sauvegarde!

Si vous devez modifier python-hilo pour vos tests, il est possible d'installer votre "fork" avec la commande suivante dans votre CLI:
Si vous devez modifier python-hilo pour vos tests, il est possible d'installer votre "fork" avec la commande suivante dans votre CLI :

```console
$ pip install -e git+https://github.com/VOTRE_FORK_ICI/python-hilo.git#egg=python-hilo
Expand All @@ -271,11 +315,11 @@ Et redémarrez Home Assistant

- D'abord, vous devez créer un `fork` du "repository" dans votre propre espace utilisateur.
- Ensuite, vous pouvez en faire un `clone` sur votre ordinateur.
- Afin de maintenir une sorte de propreté et de standard dans le code, nous avons des linters et des validateurs qui doivent être exécutés via `pre-commit` hooks:
- Afin de maintenir une sorte de propreté et de standard dans le code, nous avons des linters et des validateurs qui doivent être exécutés via `pre-commit` hooks :
```console
$ pre-commit install --install-hooks
```
- Vous pouvez mainteant procéder à votre modification au code.
- Vous pouvez maintenant procéder à votre modification au code.
- Lorsque vous avez terminé, vous pouvez `stage` les fichiers pour un `commit`:
```console
$ git add path/to/file
Expand All @@ -285,7 +329,7 @@ $ git add path/to/file
$ git commit -m "J'ai changé ceci parce que ..."
```

- Finalement, vous pouvez `push` le changement vers votre "upstream repository":
- Finalement, vous pouvez `push` le changement vers votre "upstream repository" :
```console
$ git push
```
Expand Down
14 changes: 10 additions & 4 deletions custom_components/hilo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,7 @@ def find_meter(self, hass):
return ", ".join(filtered_names) if filtered_names else ""

def set_state(self, entity, state, new_attrs={}, keep_state=False, force=False):
params = f"entity={entity}, state={state}, new_attrs={new_attrs}, keep_state={keep_state}"
params = f"{entity=} {state=} {new_attrs=} {keep_state=}"
current = self._hass.states.get(entity)
if not current:
if not force:
Expand All @@ -553,14 +553,15 @@ def set_state(self, entity, state, new_attrs={}, keep_state=False, force=False):
attrs = {}
else:
attrs = dict(current.as_dict()["attributes"])
LOG.debug(f"Setting state {params} {current}")
attrs["last_update"] = datetime.now()
attrs["hilo_update"] = True
attrs = {**attrs, **new_attrs}
if keep_state and current:
state = current.state
if "Cost" in attrs:
attrs["Cost"] = state
self._hass.states.async_set(entity, state, attrs)
LOG.debug(f"Setting state {params} {current=} {attrs=}")
self._hass.states.async_set(entity, state, attrs, force_update=force)

@property
def high_times(self):
Expand Down Expand Up @@ -602,12 +603,15 @@ def check_tarif(self):
known_power = 0
smart_meter = self.find_meter(self._hass) # comes from find_meter function
LOG.debug(f"Smart meter used currently is: {smart_meter}")

unknown_source_tracker = "sensor.unknown_source_tracker_power"
for state in self._hass.states.async_all():
entity = state.entity_id
if entity.endswith("hilo_rate_current"):
continue

if self.generate_energy_meters:
self.set_tarif(entity, state.state, tarif)

if entity.endswith("_power") and entity not in [
unknown_source_tracker,
smart_meter,
Expand Down Expand Up @@ -653,6 +657,8 @@ def fix_utility_sensor(self, entity, state):
"""not sure why this doesn't get created with a proper device_class"""
current_state = state.as_dict()
attrs = current_state.get("attributes", {})
if entity.startswith("select.") or entity.find("hilo_rate") > 0:
return
if not attrs.get("source"):
LOG.debug(f"No source entity defined on {entity}: {current_state}")
return
Expand Down
2 changes: 1 addition & 1 deletion custom_components/hilo/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
"iot_class": "cloud_push",
"issue_tracker": "https://github.com/dvd-dev/hilo/issues",
"requirements": ["python-hilo>=2024.4.1"],
"version": "2024.4.3"
"version": "2024.5.1"
}
Loading

0 comments on commit fdd340d

Please sign in to comment.