diff --git a/apps/meters_to_ha/meters_to_ha.py b/apps/meters_to_ha/meters_to_ha.py index cc48996..58f6be9 100755 --- a/apps/meters_to_ha/meters_to_ha.py +++ b/apps/meters_to_ha/meters_to_ha.py @@ -1899,8 +1899,7 @@ def get_gazpar_file(self): ) # Next line would log without hiding data - # self.mylog(r"Get Data URL {}".format(data_url), end="~~") - + # self.mylog(r"Get Data URL {}".format(data_url), end="~~") # Go to the URL. dl_starttime = time.time() self.__browser.get(data_url) @@ -2905,7 +2904,68 @@ def update_veolia_device(self, csv_file): ) def update_grdf_device(self, json_file): - pass + # pylint:disable=import-outside-toplevel + data = "" + import paho.mqtt.client as mqtt + from paho.mqtt import publish + + #data = self.veolia_to_dict(json_file) + with open(json_file, encoding="utf_8") as f: + data = json.load(f) + + if len(data) > 0: + pce = list(data.keys())[0] + data = data[pce]["releves"][-1] + self.mylog(f"MQTT GRDF data: {data}") + else: + self.mylog(f"MQTT GRDF data: file empty") + pass + + if data is not None: + state_topic = f"grdf/{pce}/last_data" + mqtt_server = self.configuration[PARAM_MQTT_SERVER] + mqtt_port = int(self.configuration[PARAM_MQTT_PORT]) + mqtt_login = self.configuration[PARAM_MQTT_LOGIN] + mqtt_password = self.configuration[PARAM_MQTT_PASSWORD] + auth = {"username": mqtt_login, "password": mqtt_password} + # tls_dict= {'ca_certs':"", 'certfile':"", + # 'keyfile':"", 'tls_version':"", + # 'ciphers':"} + tls_dict = None + # will = {'topic': "", 'payload':", + # 'qos':, 'retain':} + + self.mylog( + f"MQTT GRDF Publish {mqtt_server}:{mqtt_port} {auth} {data!r}" + ) + data_out: dict[str, Any] = {} + data_out = { + "datetime_period_start": data.get("dateDebutReleve",None), + "datetime_period_end": data.get("dateFinReleve", None), + "date_period_start": data.get("journeeGaziere", None), + "index_period_start_m3": data.get("indexDebut", None), + "index_period_end_m3": data.get("indexFin", None), + "volume_period_m3": data.get("volumeBrutConsomme", None), + "energy_period_kWh": data.get("energieConsomme", None), + "conversion_coefficient": data.get("coeffConversion", None), + "status": data.get("status", None) + } + + publish.single( + state_topic, + payload=json.dumps(data_out), + qos=0, + retain=True, # Retain this data as a state + hostname=mqtt_server, + port=mqtt_port, + # will=will, + auth=auth, + keepalive=60, + client_id="", + tls=tls_dict, + protocol=mqtt.MQTTv311, + transport="tcp", + ) def cleanup(self, keep_output=False): pass