5 Commits

Author SHA1 Message Date
3b079a6a9d fix action + update readme 2023-12-19 23:02:21 +01:00
48ff516af8 fix action 2023-12-19 22:54:48 +01:00
fd963ebb59 fix actions 2023-12-19 22:46:27 +01:00
d246b7f8b7 fix build package/image 2023-12-19 22:35:55 +01:00
838e7aadaa fix lint action 2023-12-19 22:26:20 +01:00
7 changed files with 17 additions and 35 deletions

View File

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

View File

@ -6,7 +6,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v4.1.1 uses: actions/checkout@v3
- name: Set up Python 3.11 - name: Set up Python 3.11
run: | run: |
sudo apt update sudo apt update

View File

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

View File

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

View File

@ -1,12 +1,8 @@
# Teleinfo Exporter # Teleinfo Exporter
![Grafana Dashboard](https://grafana.com/api/dashboards/20182/images/15332/image)
Simple prometheus exporter for Linky teleinfo. Simple prometheus exporter for Linky teleinfo.
Teleinfo Tasmota project : Teleinfo Tasmota project :
https://github.com/NicolasBernaerts/tasmota/tree/master/teleinfo https://github.com/NicolasBernaerts/tasmota/tree/master/teleinfo
Grafana Dashboard:
https://grafana.com/grafana/dashboards/20182-linky-teleinfo/
## Installation ## Installation
### Pip ### Pip

View File

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

View File

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