Using an Arduino via LAN

Is there a way to connect an Arduino to Home Assistant via LAN in order to have it at a different location as the Home Assistant host?

You mean something like this?

I got some ethernet modules here. I just need a way to connect it to Home Assistant. Either via a library or HTTP.

aREST could help.

Alright. And how can I get the data into Home Assistant then?

aREST platforms…

Ah. Didn’t notice that xD

Thanks

Or mqtt.

I use mqtt as my link to hass from Arduino etc

Yep, same here MQTT.

Hi, I need to connect arduino one with ethernet shield to home assistant too. Could you kindly post the sketch with the configuration in the home assistant?

Hi, were you able to get a way to check arduino for an ethernet with HA? I’d be interested. Could you explain how to do it? Possibly an example of the sketch?

Hello Evebybody

I have an automation project with two Mega Arduinos and over 70 relays, all wired. I am implementing the Home Assistant and I am having difficulty making the communication between the two. The two arduinos are connected to my network via LAN. Could someone help me how to do this case. I’m having a hard time and that would be very important for my project. If anyone can help me with a simple project on how to change the status of any Arduino pin from 0 to 1 via the Home Assistant it would be of great help
tks

Hello

I need a lot of help. I have a home automation project with two mega Arduinos, practically all the pins are being used. The entire system is wired. I also use Broadlink and Google Home. I’m deploying the Home Assistant that worked on everything, tv, cameras, tv flap, etc. As for the automation of the lampsis my problem. I made the USB communication accessed ok, I created a switch that worked via HA with the FirmataStandard installed on the Arduino, however in this case the Arduino cannot manage the switches in the house, that is, the switches send the pulses to the Arduino and as the port it commands the what you should do (if you light a lamp). With the firmata the Arduino is a mere coadjuvate in the system, in this case it could only light the lamps by the application or by voice command, the house switches do not work. Another way would be to connect the arduinos via LAN both are on the network I can ping but I can’t make the thing work with HA. The Arduino is connected to the network by this Enc28j60 Mini Ethernet Network Card. Could someone help me in this regard how to do or by USB (half is working) or by LAN?

Guys,
I managed to do HA communications with the arduino, both via usb, wifi or LAN, I confess that I am using LAN on my two mega arduino boards. The programming of the arduino I did in matrix due to the conditionals it has and is “talking” very well with the HA via MQTT, the state of the lamps and sensors is working well. I am now fumbling with automation. Could someone help me with this? What I need at the moment would be the following: The lamps outside the house I wish they could only be switched on or off at night. I am unable to do this.

Hi, I’m interested in the project, I can take a look. I would like to understand how to turn on 8 mqtt relays with arduino uno and ethernet. can you help me?

Of course, follow my code. I made it in matrix form because it is simpler and more functional. You can use this same code so replace the numbers of ports of switches and relays.

#include <PubSubClient.h>
#include <UIPEthernet.h>

byte mac[] = {0x80, 0x7D, 0x3A, 0x69, 0x20, 0xC8 }; //physical mac address
byte ip[] = {192, 168, xxx, xxx }; // ip in lan

int botao[] =                    {      11,              12,                10,                 9,              8,                7,            6,                 5,             4,              3,              27,               14,              17,              16,              15,             18,           22,              21,                20,            19,             23,               26,               25,           24        };//PORTAS DOS INTERRUPTORES
int rele[] =                     {      A11,             A10,               A12,               A13,            A14,              A15,           A6,               A5,             A4,             A3,             49,               48,              45,              46,              47,             44,           40,              41,                42,            43,             39,               36,               37,           38        }; //PORTAS DOS RELES
const char* TOPIC_PUBLISH [] =   {"ha/v_principal","ha/v_cabeceira",  "ha/v_acessoria", "ha/c_principal", "ha/c_acessoria", "ha/c_parede", "ha/q_principal", "ha/q_parede", "ha/q_entrada", "ha/q_esquerda", "ha/q_direita", "ha/q_arandela", "ha/m_principal", "ha/m_acessoria", "ha/m_parede", "ha/m_sacada", "ha/lustre", "ha/jantar_indireta", "ha/s_indireta", "ha/mezanino", "ha/v_sacada", "ha/porta_arandela", "ha/calcada", "ha/j_frente"  };
String strTopic []=              {"ha/v_principal","ha/v_cabeceira",  "ha/v_acessoria", "ha/c_principal", "ha/c_acessoria", "ha/c_parede", "ha/q_principal", "ha/q_parede", "ha/q_entrada", "ha/q_esquerda", "ha/q_direita", "ha/q_arandela", "ha/m_principal", "ha/m_acessoria", "ha/m_parede", "ha/m_sacada", "ha/lustre", "ha/jantar_indireta", "ha/s_indireta", "ha/mezanino", "ha/v_sacada", "ha/porta_arandela", "ha/calcada", "ha/j_frente"  };
String Switch[] =                {  "v_principal" ,  "v_cabeceira" ,   "v_acessoria"  ,  "c_principal"  ,   "c_acessoria" ,   "c_parede" ,  "q_principal"  ,  "q_parede"  ,   "q_entrada" ,   "q_esquerda" ,  "q_direita"  ,   "q_arandela" ,   "m_principal" ,   "m_acessoria" ,   "m_parede" ,   "m_sacada" ,   "lustre" ,   "j_indireta"      ,   "s_indireta" ,   "mezanino" ,  "v_sacada"  ,   "porta_arandela" ,  "calcada"  ,   "j_frente"   };
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,       };
static unsigned long debounceInterruptor[]={1,            2,                3,                  4,              5,                 6,            7,                8,             9,              10,             11,                12,              13,              14,             15,              16,          17,              18,                 19,            20,             21,              22,               23,           24,       };
  
int relecont = 24; // NR DE PORTAS USADAS RELES OU INTERRUPETORES PARA O INDICE (i)
int i;

const char* mqtt_server = "192.168.xxx.xxx";
const char* mqttUser = "mqttUser";
const char* mqttPassword = "xxxxx";

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 (  (millis() - debounceInterruptor[i]) > 30 ) {
    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() {

 
 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);
        delay(350);
      }
    else
      {statusrele[i] = false;
        Serial.println("OFF");
        digitalWrite(rele[i], LOW);
        delay(350);
      }
    }
}
}
 
void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("arduinoClientSuperior",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()
{
Serial.begin(115200);
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  
 }



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


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


      
}
1 Like

This automation does the opposite of what you ask (turns the bell off at night and turns it on in the morning). You could try to adapt it change the entities.

# Turns off the doorbell chime after 8pm.
# Turns it on again in the morning @ 7am.
#
automation:
  - alias: "Doorbell off after 8pm"
    trigger:
      platform: time
      at: "20:00:00"
    action:
      service: switch.turn_off
      entity_id: switch.doorbell_chime_active

  - alias: "Doorbell on after 7am"
    trigger:
      platform: time
      at: "07:00:00"
    action:
      service: switch.turn_on
      entity_id: switch.doorbell_chime_active

Hi, it would seem that the sketch you posted is for arduino Mega. Can you adapt it for arduino uno (to drive only output relays)?

for an uno with ehernet shield will be great