Skip to content

Commit

Permalink
Merge pull request #166 from m4dm4rtig4n/0.8.8
Browse files Browse the repository at this point in the history
0.8.8
  • Loading branch information
m4dm4rtig4n committed Dec 7, 2022
2 parents fbf6068 + cd33461 commit da5da9c
Show file tree
Hide file tree
Showing 26 changed files with 574 additions and 260 deletions.
6 changes: 5 additions & 1 deletion .github/workflows/build_push_docker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ jobs:
uses: Ilshidur/action-discord@master
with:
args: '**MyElectricalData** : Version **${{ needs.informations.outputs.version }}** is in building state...'
- name: Switch app/VERSION
run: |
echo "${{ needs.informations.outputs.version }}" > app/VERSION
##################################################################################################################
# VERSION
- name: Build and push ${{ needs.informations.outputs.version }}
Expand Down Expand Up @@ -97,6 +100,7 @@ jobs:
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
if: ${{ github.event.release.prerelease }}
with:
args: '**MyElectricalData** : **latest-dev** image version is up to date'
# ##################################################################################################################
Expand All @@ -112,10 +116,10 @@ jobs:
m4dm4rtig4n/enedisgateway2mqtt:latest
m4dm4rtig4n/myelectricaldata:latest
- name: Discord notification
if: ${{ !github.event.release.prerelease }}
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
if: github.event.release.prerelease == 'false'
with:
args: '**MyElectricalData** : **latest** image version is up to date'
##################################################################################################################
Expand Down
158 changes: 108 additions & 50 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,33 +100,54 @@ Un template est disponible sur le repo [config.yaml](https://github.com/m4dm4rti
| discovery_prefix | Préfixe configuré dans Home Assistant pour l'auto-discovery | homeassistant |

### influxdb
| Champs | Information | Défaut |
|----------|----------------------------------------------------|------------------|
| enable | Activation ou non des exports vers InfluxDB | False |
| hostname | Addresse IP ou domaine vers votre serveur InfluxDB | influxdb |
| port | Port du serveur InfluxDB | 8086 |
| token | Token en V2 & USERNAME:PASSWORD pour la V1 | myelectricaldata |
| org | Nom de l'organisation V2, en V1 mettre "-" | myelectricaldata |
| bucket | Nom du bucket en V2 et "DATABASE/RETENTION" en V1 | myelectricaldata |

#### v1.X :

> Version supportée minimun 1.8
| Champs | Information | Défaut |
|------------------|---------------------------------------------------------------|------------------|
| enable | Activation ou non des exports vers InfluxDB | False |
| hostname | Addresse IP ou domaine vers votre serveur InfluxDB | influxdb |
| port | Port du serveur InfluxDB | 8086 |
| token | Token en V2 & USERNAME:PASSWORD pour la V1 | myelectricaldata |
| org | Nom de l'organisation V2, en V1 mettre "-" | myelectricaldata |
| bucket | Nom du bucket en V2 et "DATABASE/RETENTION" en V1 | myelectricaldata |
| method | synchronous / asynchronous / batching | synchronous |
| batching_options | https://github.com/influxdata/influxdb-client-python#batching | |

#### **method & batching_options :**

Ces 2 propriétés vont vous permettre de jouer sur la rapidité d'importation dans l'influxdb.

> ATTENTION, en fonction de la configuration, vous risquez de surcharger votre serveur.
- **synchronous** : Mode classique assez lent sur l'importation, mais évite de surcharger le CPU & la mémoire.
- **asynchronous** : Mode "bourrin", la totalité des valeurs seront envoyée en même temps et donc consommer énormément de ressources le temps du traimement
- **batching** : Mode custom qui va vous permettre de jouer sur divers paramètres. A utilisé si le mode synchronous est encore trop gourmand. Plus d'information disponible [ici](https://github.com/influxdata/influxdb-client-python#batching).

#### Configuration par version :

##### v1.8 :
```yaml
influxdb:
host: influxdb
port: 8086
token: USERNAME:PASSWORD
org: "-"
bucket: "DATABASE/RETENTION"
enable: 'true'
hostname: influxdb
port: 8086
token: USERNAME:PASSWORD
org: "-"
bucket: "DATABASE/RETENTION"
method: asynchronous
```
#### v2.X :
##### v2.X :
```yaml
influxdb:
host: influxdb
port: 8086
token: MY_TOKEN
org: MY_ORG
bucket: MY_BUCKET
enable: 'true'
hostname: influxdb
port: 8086
token: MY_TOKEN
org: MY_ORG
bucket: MY_BUCKET
method: batching
```
### mqtt
Expand All @@ -147,31 +168,38 @@ influxdb:
Dictionnaire avec comme clef votre Point de Livraison (entre double quote) contenant toute sa configuration.
| Champs | Information | Défaut |
|------------------------|--------------------------------------------------------------------------------|--------|
| token | Activation ou non des exports vers MQTT | "" |
| name | Alias de votre point livraison pour faciliter la navigation | "" |
| addresses | Récupération des coordonnées du point de livraison | False |
| cache | Activation du cache sur la passerelle | True |
| consumption | Activation de la collecte de consommation journalière | True |
| consumption_detail | Activation de la collecte de consommation horaire | True |
| consumption_price_base | Prix d'achat du kW sans forfait HP/HC | 0 |
| consumption_price_hc | Prix d'achat du kW en Heure Creuse | 0 |
| consumption_price_hp | Prix d'achat du kW en Heure Pleine | 0 |
| enable | Activation du PDL | True |
| offpeak_hours_0 | Heure creuse du Lundi | "" |
| offpeak_hours_1 | Heure creuse du Mardi | "" |
| offpeak_hours_2 | Heure creuse du Mercredi | "" |
| offpeak_hours_3 | Heure creuse du Jeudi | "" |
| offpeak_hours_4 | Heure creuse du Vendredi | "" |
| offpeak_hours_5 | Heure creuse du Samedi | "" |
| offpeak_hours_6 | Heure creuse du Dimanche | "" |
| plan | Votre type de plan BASE ou HP/HC | BASE |
| production | Activation de la collecte de production journalière | False |
| production_detail | Activation de la collecte de production horaire | False |
| production_price | Prix de revente à Enedis (Inutile pour l'instant) | 0 |
| refresh_addresse | Permet de forcer un rafraichissement des informations "postale" dans le cache | False |
| refresh_contract | Permet de forcer un rafraichissement des informations du contrat dans le cache | False |
| Champs | Information | Défaut |
|-----------------------------|--------------------------------------------------------------------------------|--------|
| token | Activation ou non des exports vers MQTT | "" |
| name | Alias de votre point livraison pour faciliter la navigation | "" |
| addresses | Récupération des coordonnées du point de livraison | False |
| cache | Activation du cache sur la passerelle | True |
| consumption | Activation de la collecte de consommation journalière | True |
| consumption_detail | Activation de la collecte de consommation horaire | True |
| consumption_max_date | Permet de la date boutoir de récupération de la consommation journalière | "" |
| consumption_detail_max_date | Permet de la date boutoir de récupération de la consommation détaillée | "" |
| consumption_price_base | Prix d'achat du kW sans forfait HP/HC | 0 |
| consumption_price_hc | Prix d'achat du kW en Heure Creuse | 0 |
| consumption_price_hp | Prix d'achat du kW en Heure Pleine | 0 |
| enable | Activation du PDL | True |
| offpeak_hours_0 | Heure creuse du Lundi | "" |
| offpeak_hours_1 | Heure creuse du Mardi | "" |
| offpeak_hours_2 | Heure creuse du Mercredi | "" |
| offpeak_hours_3 | Heure creuse du Jeudi | "" |
| offpeak_hours_4 | Heure creuse du Vendredi | "" |
| offpeak_hours_5 | Heure creuse du Samedi | "" |
| offpeak_hours_6 | Heure creuse du Dimanche | "" |
| plan | Votre type de plan BASE ou HP/HC | BASE |
| production | Activation de la collecte de production journalière | False |
| production_detail | Activation de la collecte de production horaire | False |
| production_price | Prix de revente à Enedis (Inutile pour l'instant) | 0 |
| production_max_date | Permet de la date boutoir de récupération de la production journalière | "" |
| production_detail_max_date | Permet de la date boutoir de récupération de la production détaillée | "" |
| refresh_addresse | Permet de forcer un rafraichissement des informations "postale" dans le cache | False |
| refresh_contract | Permet de forcer un rafraichissement des informations du contrat dans le cache | False |
> Si les valeurs **consumption_max_date**, **consumption_max_detail_date**, **production_max_date**, **production_detail_max_date**
> ne sont pas défini, ce sera la date de début de contrat remonté par Enedis qui sera prise en compte.
#### offpeak_hours
Expand Down Expand Up @@ -235,7 +263,7 @@ services:
image: m4dm4rtig4n/myelectricaldata:latest
restart: unless-stopped
volumes:
-./:/data
- ./:/data
environment:
TZ: Europe/Paris
ports:
Expand Down Expand Up @@ -279,11 +307,41 @@ Pour ce connecter au docker en bash :
make bash
````

## F.A.Q

### Si vous rencontrez des erreurs SQL au démarrage ?

La plus simple est de supprimer le fichier cache.db et de relancer l’intégration, mais attention, vous allez perdre tt l’historique dans le cache.
Il est cependant possible de le récupérer via la procédure ci-dessous en nommant votre fichier de cache actuel en enedisgateway.db.

### Comment migrer de EnedisGateway2MQTT vers MyElectricalData ?

Pour migrer proprement depuis EnedisGateway2MQTT et avant de lancer la migration vers une version >= 0.8.0, merci de respecter cette procédure :
- Arrêter l’integration
- Backup le fichier enedisgateway.db (au cas où)
- Renommer l’actuel en enedisgateway.db.wait
- Migrer en 0.8.X (Attention le fichier de config à changé vous pouvez reprendre l’exemple [ici](https://github.com/m4dm4rtig4n/myelectricaldata/blob/master/config.exemple.yaml))
- Démarrer en 0.8.X pour initialiser le nouveau cache.
- Arrêter l’integration.
- Renommer le enedisgateway.db.wait en enedisgateway.db
- Re-lance l’intégration, il va migrer les anciennes données du enedisgateway.db vers le cache.db (visible dans les logs)

Pour ceux qui auraient eu des soucis lors de la migration et souhaite récupérer leur anciennes données en cache:
- Arrêter l’intégration
- Supprimer le cache.db
- Démarré l’intégration pour initialiser correctement le cache.db.
- Arrêter l’intégration
- Reprendre le backup (où le enedisgateway.db.migrate) et le positionner au même endroit que le cache.db avec le nom enedisgateway.db
- Lancer l’intégration en v0.8.X
- L’import du enedisgateway.db vers cache.db ce fera au lancement
- Le fichier enedisgateway.db sera renommé en enedisgateway.db.migrate.

## Roadmap

- Gestion du **DJU18** pour une meilleur estimation de l'évolution de la votre consommation.
- Ajout d'un connecteur PostgreSQL / MariaDB
- [Remonter la puissance max](https://github.com/m4dm4rtig4n/enedisgateway2mqtt/issues/66)
- Intégrer Tempo.
- Gestion du **DJU18** pour une meilleure estimation de l'évolution de la vôtre consommation.
- Ajout d'un connecteur PostgreSQL / MariaDB.
- [Remonter la puissance max](https://github.com/m4dm4rtig4n/enedisgateway2mqtt/issues/66).

## Change log:

Expand Down
2 changes: 1 addition & 1 deletion app/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.8.0-dev
0.8.8-dev
16 changes: 8 additions & 8 deletions app/alembic/versions/0c07baa8d7b2_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def upgrade() -> None:
op.create_index(op.f('ix_addresses_id'), 'addresses', ['id'], unique=True)
op.create_index(op.f('ix_addresses_usage_point_id'), 'addresses', ['usage_point_id'], unique=False)
op.create_table('consumption_daily',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('id', sa.String(), nullable=False),
sa.Column('usage_point_id', sa.Text(), nullable=False),
sa.Column('date', sa.DateTime(), nullable=False),
sa.Column('value', sa.Integer(), nullable=False),
Expand All @@ -81,7 +81,7 @@ def upgrade() -> None:
op.create_index(op.f('ix_consumption_daily_id'), 'consumption_daily', ['id'], unique=True)
op.create_index(op.f('ix_consumption_daily_usage_point_id'), 'consumption_daily', ['usage_point_id'], unique=False)
op.create_table('consumption_detail',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('id', sa.String(), nullable=False),
sa.Column('usage_point_id', sa.Text(), nullable=False),
sa.Column('date', sa.DateTime(), nullable=False),
sa.Column('value', sa.Integer(), nullable=False),
Expand All @@ -91,7 +91,7 @@ def upgrade() -> None:
sa.Column('fail_count', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['usage_point_id'], ['usage_points.usage_point_id'], ),
sa.PrimaryKeyConstraint('id'),
sqlite_autoincrement=True
# sqlite_autoincrement=True
)
op.create_index(op.f('ix_consumption_detail_id'), 'consumption_detail', ['id'], unique=True)
op.create_index(op.f('ix_consumption_detail_usage_point_id'), 'consumption_detail', ['usage_point_id'], unique=False)
Expand All @@ -116,25 +116,25 @@ def upgrade() -> None:
sa.Column('count', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['usage_point_id'], ['usage_points.usage_point_id'], ),
sa.PrimaryKeyConstraint('id'),
sqlite_autoincrement=True
# sqlite_autoincrement=True
)
op.create_index(op.f('ix_contracts_id'), 'contracts', ['id'], unique=True)
op.create_index(op.f('ix_contracts_usage_point_id'), 'contracts', ['usage_point_id'], unique=False)
op.create_table('production_daily',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('id', sa.String(), nullable=False),
sa.Column('usage_point_id', sa.Text(), nullable=False),
sa.Column('date', sa.DateTime(), nullable=False),
sa.Column('value', sa.Integer(), nullable=False),
sa.Column('blacklist', sa.Integer(), nullable=False),
sa.Column('fail_count', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['usage_point_id'], ['usage_points.usage_point_id'], ),
sa.PrimaryKeyConstraint('id'),
sqlite_autoincrement=True
# sqlite_autoincrement=True
)
op.create_index(op.f('ix_production_daily_id'), 'production_daily', ['id'], unique=True)
op.create_index(op.f('ix_production_daily_usage_point_id'), 'production_daily', ['usage_point_id'], unique=False)
op.create_table('production_detail',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('id', sa.String(), nullable=False),
sa.Column('usage_point_id', sa.Text(), nullable=False),
sa.Column('date', sa.DateTime(), nullable=False),
sa.Column('value', sa.Integer(), nullable=False),
Expand All @@ -144,7 +144,7 @@ def upgrade() -> None:
sa.Column('fail_count', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['usage_point_id'], ['usage_points.usage_point_id'], ),
sa.PrimaryKeyConstraint('id'),
sqlite_autoincrement=True
# sqlite_autoincrement=True
)
op.create_index(op.f('ix_production_detail_id'), 'production_detail', ['id'], unique=True)
op.create_index(op.f('ix_production_detail_usage_point_id'), 'production_detail', ['usage_point_id'], unique=False)
Expand Down
18 changes: 9 additions & 9 deletions app/db_schema.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from sqlalchemy import (Column, ForeignKey, Float, Integer, Text, Boolean, DateTime)
from sqlalchemy import (Column, ForeignKey, Float, Integer, Text, Boolean, DateTime, String)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Expand Down Expand Up @@ -351,9 +351,9 @@ def __repr__(self):

class ConsumptionDaily(Base):
__tablename__ = 'consumption_daily'
__table_args__ = {'sqlite_autoincrement': True}
# __table_args__ = {'sqlite_autoincrement': True}

id = Column(Integer,
id = Column(String,
primary_key=True,
index=True,
unique=True,
Expand Down Expand Up @@ -393,9 +393,9 @@ def __repr__(self):

class ConsumptionDetail(Base):
__tablename__ = 'consumption_detail'
__table_args__ = {'sqlite_autoincrement': True}
# __table_args__ = {'sqlite_autoincrement': True}

id = Column(Integer,
id = Column(String,
primary_key=True,
index=True,
unique=True,
Expand Down Expand Up @@ -443,9 +443,9 @@ def __repr__(self):

class ProductionDaily(Base):
__tablename__ = 'production_daily'
__table_args__ = {'sqlite_autoincrement': True}
# __table_args__ = {'sqlite_autoincrement': True}

id = Column(Integer,
id = Column(String,
primary_key=True,
index=True,
unique=True,
Expand Down Expand Up @@ -485,9 +485,9 @@ def __repr__(self):

class ProductionDetail(Base):
__tablename__ = 'production_detail'
__table_args__ = {'sqlite_autoincrement': True}
# __table_args__ = {'sqlite_autoincrement': True}

id = Column(Integer,
id = Column(String,
primary_key=True,
index=True,
unique=True,
Expand Down
Loading

0 comments on commit da5da9c

Please sign in to comment.