10 Commits

Author SHA1 Message Date
d050b31022 fix: CI 2024-02-16 18:33:53 +01:00
f457a08404 bump: teleinfo-exporter version to v1.1.0 2024-02-16 18:30:29 +01:00
02dabe1daa bump: workflows modules versions 2024-02-16 18:28:17 +01:00
5da09093f5 Merge pull request #1 from d3vyce/v1.1.0
V1.1.0
2024-02-16 18:19:45 +01:00
a734ca1979 fix: lint warning 2024-02-16 18:18:32 +01:00
73c3e25b91 update: CHANGELOG 2024-02-16 18:16:12 +01:00
9e64905fe3 add: Grafana dashboard to README 2024-02-16 18:15:56 +01:00
e2631e4e3d fix: lint warning 2024-02-16 18:13:49 +01:00
0160aa6197 fix: MQTT brocker disconnection when client connection timeout 2024-02-16 18:09:34 +01:00
90f9414d2d fix workflows 2023-12-19 23:06:38 +01:00
7 changed files with 46 additions and 30 deletions

View File

@ -5,25 +5,25 @@ on:
types: [published]
jobs:
build docker:
build-docker:
runs-on: ubuntu-latest
steps:
- name: checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4.1.1
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- name: Login to Docker registry
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
uses: docker/build-push-action@v5.1.0
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.REGISTRY }}/${{ github.repository }}:latest,${{ env.REGISTRY }}/${{ github.repository }}:${{ github.ref_name }}
tags: ghcr.io/${{ github.repository }}:latest,ghcr.io/${{ github.repository }}:${{ github.ref_name }}

View File

@ -6,11 +6,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v4.1.1
- name: Set up Python 3.11
run: |
apt update
apt install -y python3 python3-pip
sudo apt update
sudo apt install -y python3 python3-pip
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip

View File

@ -8,27 +8,30 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: checkout code
uses: actions/checkout@v4.1.1
- name: Set up Python
uses: actions/setup-python@v5
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install --yes python3-setuptools python3-wheel
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
- name: Build
run: |
python3 -m build
- uses: actions/upload-artifact@v3
run: python3 -m build
- uses: actions/upload-artifact@v4.3.1
with:
path: ./dist
name: dist
pypi-publish:
runs-on: ubuntu-latest
needs: build
environment:
name: pypi
url: https://pypi.org/p/teleinfo_exporter/
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4.1.2
with:
path: ./dist
name: dist

View File

@ -1,5 +1,8 @@
# Changelog
## [1.0.0] - 12-19-2023
## 1.1.0 - 02-11-2024
add: Grafana dashboard to README
fix: MQTT brocker disconnection when client connection timeout
Initial release
## 1.0.0 - 12-19-2023
Initial release

View File

@ -1,8 +1,12 @@
# Teleinfo Exporter
![Grafana Dashboard](https://grafana.com/api/dashboards/20182/images/15332/image)
Simple prometheus exporter for Linky teleinfo.
Teleinfo Tasmota project :
https://github.com/NicolasBernaerts/tasmota/tree/master/teleinfo
Grafana Dashboard:
https://grafana.com/grafana/dashboards/20182-linky-teleinfo/
## Installation
### Pip
@ -12,15 +16,11 @@ teleinfo-exporter --help
```
### Docker
```
docker pull teleinfo-exporter
```
Minimal Docker compose:
```yaml
services:
web:
image: teleinfo_exporter:latest
image: ghcr.io/d3vyce/teleinfo-exporter:latest
environment:
- BROKER_HOSTNAME=10.10.0.10
ports:

View File

@ -1,6 +1,6 @@
[project]
name = "teleinfo-exporter"
version = "1.0.0"
version = "1.1.0"
dependencies = [
"bcrypt ~= 4.1",
"configargparse ~= 1.7",

View File

@ -3,6 +3,7 @@
import json
import random
import string
import time
import bcrypt
import configargparse
@ -92,6 +93,7 @@ teleinfo_contract_type = Gauge("teleinfo_contract_type", "contract type", ["type
def on_connect(client, userdata, flags, rc): # pylint: disable=unused-argument
client.subscribe("teleinfo/tele/SENSOR")
if rc == 0:
print("Connected to broker")
else:
@ -146,6 +148,16 @@ def on_message(client, userdata, message): # pylint: disable=unused-argument
teleinfo_contract_type.labels(message["TIC"]["OPTARIF"]).set(0)
def on_disconnect(client, userdata, rc): # pylint: disable=unused-argument
print("Diconnected from broker, reconnecting...")
while True:
try:
if not client.reconnect():
break
except ConnectionRefusedError:
time.sleep(1)
@app.before_request
@auth.login_required()
def global_auth():
@ -186,7 +198,6 @@ def main():
p.add("--http_cert", help="HTTP Server Certificate", env_var="HTTP_CERT")
p.add("--http_key", help="HTTP Server Key", env_var="HTTP_KEY")
options = p.parse_args()
print(options)
if options.auth_user and options.auth_hash:
app.config["USERS"] = {options.auth_user: options.auth_hash.encode()}
@ -198,13 +209,12 @@ def main():
if options.broker_user and options.broker_password:
client.username_pw_set(options.broker_user, password=options.broker_password)
client.connect(options.broker_host, port=options.broker_port)
client.on_connect = on_connect
client.on_message = on_message
client.connect(options.broker_host, port=options.broker_port)
client.on_disconnect = on_disconnect
client.loop_start()
client.subscribe(options.broker_topic)
if options.http_cert and options.http_key:
ssl_context = (options.http_cert, options.http_key)
else: