Inserir script Phyton para gravar em MySQL Externo - Dúvidas - Fórum Home Assistant Brasil
Inserir script Phyton para gravar em MySQL Externo
sawagner November 9, 2020, 4:47pm #1
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.
import mysql.connector as monitorenergia
monitorenergia_connection = monitorenergia.connect(host='localhost', user='root', password='', database='bd')
cursor = monitorenergia_connection.cursor()
MQTT_Broker = "xxx"
MQTT_Topic = "xxx"
Prepare Data, separate columns and values
msg_clear = msg.payload.translate(None, '{}""').split(", ")
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
cursor.execute(sql, msg_dict.values())
except monitorenergia.Error as error:
print("Error: {}".format(error))
monitorenergia_connection.commit()
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
monitorenergia_connection.close()
CLyra November 9, 2020, 11:11pm #2
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.
sawagner November 9, 2020, 11:16pm #3
Boa noite Clyra,
Consegue me ajudar em como fazer o HA gravar as entidades no mysql externo conforme falou aí ?Sendo descarto este script.
sawagner November 9, 2020, 11:18pm #4
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.
CLyra November 12, 2020, 12:16am #5
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?
sawagner November 13, 2020, 11:46am #6
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.
CLyra November 14, 2020, 7:41pm #7
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
sawagner November 15, 2020, 12:04pm #8
Bom dia. Clyra.
Eu terei que fazer um backup do banco homeassistant que está no MariaDB e restaurar no meu banco mysql hospedado . Correto?