Retour d'expérience CurrentCost + protocole Mqtt

Bonjour,

Un peu de contexte tout d’abord, j’utilise un CurrentCost EnviR pour surveiller ma consommation électrique.
J’ai tout d’abord utilisé un plugin jeedom qui malheureusement n’a pas suivi les montés de version. Je suis passé ensuite sur un script (repris un script python sur github pour l’adapter à ma sauce) pour que Jeedom appelle ce script toutes les 5min et que le script en question pousse les valeurs dans un virtuel.

Après avoir testé mqtt (les 2 plugins dispo, tout fonctionne :wink: ) pour tester un autre système, j’ai voulu tenter la bascule pour le currentcost.
Voici ma config :

  • un docker avec un serveur mqtt (mosquitto)
  • 1 script python( ci-dessous) qui est lancé en tant que daemon au démarrage du rpi. Le script écoute les tout ce qui rentre sur le port série et pousse en json vers mqtt les valeurs quand j’ai la conso instantannée ou journaliere ou mensuelle.
  • Derrière le plugin dans jeedom (actuellement je suis sur jmqtt) désérialise le json et me propose toutes les entrées quand elles sont à jour
#!/usr/bin/env python
#
# parse le flux xml d'un compteur de consommation CurrentCost
#

import os
import requests
import serial
import re
import time
import xmltodict
import json
import paho.mqtt.client as mqtt

# constantes a modifier
TTYUSB = "/dev/ttyUSB_CURRENTCOST"

MQTT_HOST = "192.168.1.144"
MQTT_PORT = 11884
MQTT_KEEPALIVE_INTERVAL = 45
MQTT_TOPIC = "maison/conso"


# variables
kwh = "0"
watts = "0"
tmpr = "0"

# connexion au port serie
ser = None
try:
    ser = serial.Serial(port=TTYUSB, baudrate=57600, timeout=30)
except serial.SerialException, msg:
    print("Failed to connect to CurrentCost meter :: " + str(msg))
    exit(1)
print("Connected to " + TTYUSB)

# connection a mqtt 
mqttc = mqtt.Client()
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)

nbIterations = 0

while nbIterations >= 0:
    line = ser.readline()  # lit le flux xml
    print line
    parsedData = xmltodict.parse(line)
    jsonData = json.dumps(parsedData, indent=2)
    
    #print jsonData
    if line.find("hist") == -1:
      	mqttc.publish(MQTT_TOPIC, payload=jsonData)
       
    else:
      	mqttc.publish(MQTT_TOPIC + "/daily", payload=jsonData)

    nbIterations +=1
ser.close()
exit(0)

Côté Jeedom, j’ai gardé ces éléments :

Verdict:
Ca fonctionne depuis plusieurs semaine, rien de spécial à faire côté jeedom et le serveur mqtt pousse les datas

1 « J'aime »

Merci pour le partage jbval :+1: :slight_smile: