Inserir script Phyton para gravar em MySQL Externo

Boa tarde pessoal, tudo bem?

Estou com script em phyton e preciso colocar no Home Assistant. Este script faz uma leitura do tópico do mqtt e grava em um mysql externo.

Alguém pode me orientar onde coloco ele no HA e programá-lo para que execute por exemplo a cada gravação do tópico ou a cada 5 minutos por exemplo.

Segue abaixo o script:

xxxx

#!/usr/bin/python -u

import mysql.connector as monitorenergia
import paho.mqtt.client as mqtt
import ssl

monitorenergia_connection = monitorenergia.connect(host=‘localhost’, user=‘root’, password=’’, database=‘bd’)
cursor = monitorenergia_connection.cursor()

MQTT Settings

MQTT_Broker = “xxx”
MQTT_Port = 1883
Keep_Alive_Interval = 60
MQTT_Topic = “xxx”

Subscribe

def on_connect(client, userdata, flags, rc):
mqttc.subscribe(MQTT_Topic, 0)

def on_message(mosq, obj, msg):

Prepare Data, separate columns and values

msg_clear = msg.payload.translate(None, ‘{}""’).split(", “)
msg_dict = {}
for i in range(0, len(msg_clear)):
msg_dict[msg_clear[i].split(”: “)[0]] = msg_clear[i].split(”: ")[1]

Prepare dynamic sql-statement

placeholders = ‘, ‘.join([’%s’] * len(msg_dict))
columns = ', '.join(msg_dict.keys())
sql = “INSERT INTO pws ( %s ) VALUES ( %s )” % (columns, placeholders)

Save Data into DB Table

try:
cursor.execute(sql, msg_dict.values())
except monitorenergia.Error as error:
print(“Error: {}”.format(error))
monitorenergia_connection.commit()

def on_subscribe(mosq, obj, mid, granted_qos):
pass

mqttc = mqtt.Client()

Assign event callbacks

mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe

Connect

mqttc.tls_set(ca_certs=“ca.crt”, tls_version=ssl.PROTOCOL_TLSv1_2)
mqttc.connect(MQTT_Broker, int(MQTT_Port), int(Keep_Alive_Interval))

Continue the network loop & close db-connection

mqttc.loop_forever()
monitorenergia_connection.close()

xxxx

Se alguém puder me ajudar, agradeceria bastante.

Ola,

Desconfio que vc está fazendo isso da forma mais dificil… O proprio HA consegue falar com o mysql, e vc pode criar filtros para dizer que entidades vc quer registrar. Outra opção legal é usar a integração do influxdb (e depois processar os dados de energia com o grafana). O influxdb é um bd mais apropriado para esse tipo de amostras no tempo.

MAS… se mesmo assim vc quiser usar o script, eu colocaria ele dentro de um docker e rodaria ele separado do HA. Pelo código dá pra ver que ele se conecta em um mqtt e a cada mensagem faz o insert no mysql, então o ideal é que ele fique rodando sempre e não faz muita diferença onde.

Boa noite Clyra,

Consegue me ajudar em como fazer o HA gravar as entidades no mysql externo conforme falou aí ?Sendo descarto este script.

Agradeço

Na verdade eu tenho um sistema que precisa buscar estes dados do banco mysql hospedado em meu provedor.

Minha dificuldade em extrair estes dados dos sensores para fora do HA.

Boa,

Bom, o cara que tem esses dados é o “recorder” (https://www.home-assistant.io/integrations/recorder/). Na documentação vc tem as opções de como usá-lo no mysql/mariadb, postgresql e até no sql server. Por padrão os dados são gravados usando o sqlite. Em instalações com muitos sensores no HA, é (era) comum o pessoal passar pro mysql/postgres porque o desempenho do sqlite era ruim. Nas últimas versões melhoraram bastante isso.

Como é que vc tá rodando o HA?

Bom dia, obrigado pelo retorno.

Estou com o MariaDB no Home assistant rodando em um raspberry pi3.

Gostaria de que ao invés do HA gravar os dados no mariaDB que está no rasp, ele grave em um mysql remoto que tenho no provedor.

tá na documentação que eu passei. O recorder tem a opção db_url, no caso do mysql vai ser algo como: mysql://user:password@SERVER_IP/DB_NAME?charset=utf8

Bom dia. Clyra.

Eu terei que fazer um backup do banco homeassistant que está no MariaDB e restaurar no meu banco mysql hospedado . Correto?

só se vc quiser manter as informações que vc já tem. Mas não precisa…