Home assistan arduino

Opa! tudo bem ? Meu nome è Luiz .
eu comecei a usar o home assistant a pouco tenpo , e nao consigo integrar ele ao meu arduino .
alguem pode me ajudar ?

Ola, se o seu arduino está conectado na rede você pode integrar ele via mqtt.
Caso contrário existe a integração para conectar via usb

No futuro eu recomendaria vc usar placas de prototipagem baseadas nos MCU esp8266 ou esp32 ao invés de placas arduino.

Além desses chips já terem Wi-Fi facilitando a programação via mqtt eles podem ser integrados sem programação de firmware usando esphome ou tasmota

https://tasmota.github.io/docs/

ola , eu tenho nodemcu via tasmota ja conectado , so que eu quero usar o arduino mega com o shield que tenho para conectar , e nao consigo , ja usei ate codigo de outras pessoas e mesmo assim nao da

Você consegue compartilhar mais detalhes de como voce esta tentando integrar e qual problema que esta dando?

Quanto ao shield ele é um shield de ethernet/wifi ou é um shield para controlar algo? caso o motivo de querer usar o mega for esse shield para controlar algo a maioria dos shields daria pra fazer uma conexão com jumpers em uma placa com formato diferente.
Agora caso motivo seja por quantidade de pinos, se voce substituir o tasmota por esphome voce pode usar o mega como um expansor de gpio via i2c, alem disso existem vários módulos de expansão gpio via i2c dedicados que poderia usar no lugar do mega (possivelmente o tasmota tambem tem essa funcionalidade mas tenho mais conhecimento de esphome).

Ja programei comunicação mqtt em linguagem arduino mas para esp8266, nunca tentei conectar uma placa arduino mesmo. Um possivel problema que pode ocorrer é falta de memoria ram, mesmo o mega tem muito menos ram que o esp8266. Mas se voce enviar o que voce tentou ate agora e o codigo que esta usando posso tentar ajudar.

ola, sou meio novo nisso e entendo pouco , mas eu quero usar tudo cabeado , e nao consigo usar o meu mega do jeito que eu quero no home assistant

include <PubSubClient.h>
#include <Ethernet.h>

byte mac[] = {0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A }; //physical mac address
byte ip[] = {10, 0, 0, 40 }; // ip in lan

int botao[] = { 13, 12, 11, 9, 8, 10, 6, 5, 7, 4, 3, 29, 15, 14, 16, 17, 18, 19, 20, 23, 21, 22, 28, 27, 26, 25, 24};//PORTAS DOS INTERRUPTORES
int rele[] = { A12, A11, A10, A15, A14, A13, A8, A9, A7, 49, 48, 30, 46, 47, 43, 44, 45, 41, 42, 38, 39, 40, 33, 34, 35, 36, 37}; //PORTAS DOS RELE
const char* TOPIC_PUBLISH [] = {“ha/C_Cozinha”,“ha/B_Cozinha”, “ha/P_Cozinha”, “ha/escritorio”, “ha/portao”, “ha/computador”, “ha/box_suite”, “ha/espelho”, “ha/banheira”, “ha/garagem”, “ha/fit_garagem”, “ha/muro_cozinha”, “ha/mesa_jantar”, “ha/entrada”, “ha/academia”, “ha/academia_111”, “ha/c_academia”, “ha/pia_churras”, “ha/b_churras”, “ha/lavabo”, “ha/mesa_churras”, “ha/porta_churras”, “ha/t_lava”, “ha/lava”, “ha/muro”, “ha/j_lateral”, “ha/pergolado” };
String strTopic []= {“ha/C_Cozinha”,“ha/B_Cozinha”, “ha/P_Cozinha”, “ha/escritorio”, “ha/portao”, “ha/computador”, “ha/box_suite”, “ha/espelho”, “ha/banheira”, “ha/garagem”, “ha/fit_garagem”, “ha/muro_cozinha”, “ha/mesa_jantar”, “ha/entrada”, “ha/academia”, “ha/academia_111”, “ha/c_academia”, “ha/pia_churras”, “ha/b_churras”, “ha/lavabo”, “ha/mesa_churras”, “ha/porta_churras”, “ha/t_lava”, “ha/lava”, “ha/muro”, “ha/j_lateral”, “ha/pergolado” };
String Switch[] = { “C_Cozinha” , “B_Cozinha” , “P_Cozinha” , “escritorio”, “portao” , “computador” , “box_suite” , “espelho” , “banheira” , “garagem” , “fit_garagem” , “muro_cozinha” , “mesa_jantar” , “entrada” , “academia” , “academia_111” , “c_academia” , “pia_churras” , “b_churras” , “lavabo” , “mesa_churras” , “porta_churras” , “t_lava” , “lava” , “muro” , “j_lateral” , “pergolado” };
boolean statusrele[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 };
uint8_t AnalogicaTimer [] = { A5, A5, A5, A3, A6, A3, 0, 0, 0, A4, A4, A5, A5, 0, 0, 0, 0, A3, A3, 0, A3, A3, A2, A2, 0, 0, 0 };

int relecont = 27;
int i;

const char* mqttserver = “10.0.0.109”;
const int mqttport = 1883;
const char* mqttUser = “mqttevill”;
const char* mqttPassword = “23081994”;
const char* TOPIC_GARAGE;

EthernetClient espClient;
PubSubClient client(espClient);

String strTopic1;
String strPayload;

void interruptor(int i) // FUNCAO PARA LIGAR/DESLIGAR LAMPADAS
{
for (int i = 0; i < relecont; i++){
if((digitalRead(botao[i]) == HIGH))
{
while(digitalRead(botao[i]) == HIGH){};
digitalWrite(rele[i],!statusrele[i]);
statusrele[i] = !statusrele[i];
if (statusrele[i]==false){
client.publish(TOPIC_PUBLISH[i], “OFF”);}
if (statusrele[i]==true){
client.publish(TOPIC_PUBLISH[i], “ON”);}
delay(350);
}
}
}

void setup_inicio() {

for (int i = 0; i < relecont; i++)
{
pinMode(rele[i],OUTPUT); //DEFINI PORTAS RELE COMO PORTA DE SAIDA
pinMode(botao[i],INPUT); //DEFINE PORTAS DE INTERRUPTORES COMO PORTA DE ENTRADA
digitalWrite(rele[i],HIGH); // DEFINIE ESTADO HIGH PARA PORTAS DE RELE
statusrele[i] = true; // DEFINE O STATUS RELE COMO TRUE
}

Serial.begin(115200);
delay(100);

Ethernet.begin(mac,ip);
}

void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = ‘\0’;
strTopic1 = String((char*)topic);

for (int i = 0; i < relecont; i++)
{
if(strTopic1 == strTopic[i])
{
Switch[i] = String((char*)payload);
if(Switch[i] == “ON”)
{statusrele[i] = true;
Serial.println(“ON”);
digitalWrite(rele[i], HIGH);
}
else
{statusrele[i] = false;
Serial.println(“OFF”);
digitalWrite(rele[i], LOW);
}
}
}
}

void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(“Attempting MQTT connection…”);
// Attempt to connect
if (client.connect(“arduinoClient”,mqttUser, mqttPassword)) {
Serial.println(“connected”);
// Once connected, publish an announcement…
client.subscribe(“ha/#”);
} else {
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}

void setup()
{

setup_inicio();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);

}

void loop()
{
if (!client.connected()) {
reconnect();
}

interruptor(i);
client.loop();

if ((analogRead(A4)>200)){
client.publish(“TOPIC_GARAGE”,“ON”);}

}

achei esse codigo por aqui mesmo e mudei ele

Só de bater o olho nada me chamou atençao como estando errado no codigo, mas nao tenho um shield ethernet pra realmente testar. Mas vou novamente pedir para você detalhar mais o que esta
acontecendo, qual efetivamente é o problema?

ex: O código não compila, O ha nao esta recebendo informação, O ha recebe informação mas os valores exibidos estao errados…

Se voce explicar melhor posso tentar oferecer uma ajuda mais especifica mas por enquanto recomendo ser metódico e começar simples e ir incrementando.

Vou partir do pressuposto que seu broker mqtt esta funcionando e que o home assistant está conectado a ele com sucesso pois voce disse ter um dispositivo tasmota funcionando. Entao eu começaria escrevendo um programa bem simples pra testar a conexao mqtt do arduino, como por exemplo, um programa que publica o numero 1 em um topico e cada vez que voce aperta um botao ele envia o numero anterior mais 1 ( pode ser outro programa esse é apenas uma sugestão). E no HA voce cria um mqtt sensor pra ler esse numero. Isso dando certo voce começa a alterar o codigo pra fazer o que voce precisa, dando errado voce baixa um cliente mqtt no pc ou no celular pra testar se o problema esta no HA ou no arduino. Com essa informacao fica mais facil planejar os próximos passos.

Mas para ficar mais facil ainda como voce disse nao ter muita experiencia volto a recomendar o esp32, existem placas esp32 ethernet a venda. E boa parte dessas placas podem ser programadas via esphome.

tipo ele conecta no mqtt no home assistant e ate no node red se eu criar um serves por la
mas nao aparece os pinos nem nada

eu tenho uns esp e nodemcu usando o tasmota , mqtt funciona , so nao aparece la nada

Mas os pinos não é para aperecer mesmo, o código esta enviando “ON” ou “OFF” em varios topicos que estão definidos em um array (em sua maioria controlados por interruptor ou por comandos mqtt em topicos prefixados por “ha/”, e um outro (“TOPIC_GARAGE”) que esta enviando status baseado numa leitura de tensão no pino A4. Voce no HA tem acesso a apenas essas informacoes que o codigo esta programado para enviar. Nao tem acesso aos pinos diretamente. E mesmo para acessar essas informações que estao disponíveis voce vai precisar configurar entidades no HA, para luzes voce usaria MQTT LIGHTS e para o status da leitura do A4 um MQTT SENSOR.

Ao usar condigo pronto voce esta tentando configurar muitas coisas ao mesmo tempo , fica difícil isolar aonde esta o erro. O ideal para encontrar o problema seria fazer seu proprio codigo do zero onde voce vai implementando cada funcionalidade aos poucos. Caso contrario eu fortemente recomendo considerar a compra de um ESP32 com conexao ethernet e usar esphome.

ok , obrigado , vou fazer a compra do esp32