Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Controllers
  3. Home Assistant
  4. Arduino USB gateway for relay with buttons

Arduino USB gateway for relay with buttons

Scheduled Pinned Locked Moved Home Assistant
6 Posts 3 Posters 2.1k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mredone
    wrote on last edited by
    #1

    Hello.
    This is my first post.
    I use HA since 0.3 version.
    All automations i have build on sonoffs.

    Now in new flat i want make all wired automation.

    Does anyone make a gateway on arduino Mega with relay and buttons connected to arduino?

    I search for gateway skatch that work with HA via USB.

    Maybe someone can help me?

    Regards

    mfalkviddM 1 Reply Last reply
    0
    • M mredone

      Hello.
      This is my first post.
      I use HA since 0.3 version.
      All automations i have build on sonoffs.

      Now in new flat i want make all wired automation.

      Does anyone make a gateway on arduino Mega with relay and buttons connected to arduino?

      I search for gateway skatch that work with HA via USB.

      Maybe someone can help me?

      Regards

      mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #2

      Welcome to the MySensors community @mredone

      Here is an example sketch for relay with button. Wiring for relay and button is the same for Mega. Wiring for the radio is different, see https://www.mysensors.org/build/connect_radio for details.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mredone
        wrote on last edited by
        #3
        This post is deleted!
        1 Reply Last reply
        0
        • M Offline
          M Offline
          mredone
          wrote on last edited by mredone
          #4

          I have a sketch with 2 relays, with option save to eprom.
          But i have problem in Home Assistant.
          I see relay in dashboard but i can't change it state from dashboard.
          Home Assistant update state only when i change relay with button

          // Enable debug prints to serial monitor
          #define MY_DEBUG 
          
          
          // Enable and select radio type attached
          //#define MY_RADIO_NRF24
          //#define MY_RADIO_RFM69
          
          // Set LOW transmit power level as default, if you have an amplified NRF-module and
          // power your radio separately with a good regulator you can turn up PA level. 
          //#define MY_RF24_PA_LEVEL RF24_PA_LOW
          
          // Enable serial gateway
          #define MY_GATEWAY_SERIAL
          
          // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
          #if F_CPU == 8000000L
          #define MY_BAUD_RATE 38400
          #endif
          
          // Flash leds on rx/tx/err
          // #define MY_LEDS_BLINKING_FEATURE
          // Set blinking period
          // #define MY_DEFAULT_LED_BLINK_PERIOD 300
          
          // Inverses the behavior of leds
          // #define MY_WITH_LEDS_BLINKING_INVERSE
          
          // Enable inclusion mode
          #define MY_INCLUSION_MODE_FEATURE
          // Enable Inclusion mode button on gateway
          #define MY_INCLUSION_BUTTON_FEATURE
          
          // Inverses behavior of inclusion button (if using external pullup)
          //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
          
          // Set inclusion mode duration (in seconds)
          #define MY_INCLUSION_MODE_DURATION 60 
          // Digital pin used for inclusion mode button
          #define MY_INCLUSION_MODE_BUTTON_PIN  3 
          
          // Uncomment to override default HW configurations
          //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
          //#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
          //#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED
          
          #include <SPI.h>
          #include <MySensors.h>  
          #include <Bounce2.h>
          
          // Enable repeater functionality for this node
          #define MY_REPEATER_FEATURE
          
          
          #define RELAY_1  4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
          #define RELAY_2  5
          #define NUMBER_OF_RELAYS 2 // Total number of attached relays
          #define RELAY_ON 0  // GPIO value to write to turn on attached relay
          #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
          
          #define BUTTON_PIN A1
          #define BUTTON2_PIN A2
          
          
          void before() { 
            for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
              // Then set relay pins in output mode
              pinMode(pin, OUTPUT);   
              // Set relay to last known state (using eeprom storage) 
              digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
            }
          }
          Bounce debouncer = Bounce();
          Bounce debouncer2 = Bounce();
          
          void setup() { 
            // Setup locally attached sensors
            delay(10000);
             // Setup the button.
            pinMode(BUTTON_PIN, INPUT_PULLUP);
            pinMode(BUTTON2_PIN, INPUT_PULLUP);
            // After setting up the button, setup debouncer.
            debouncer.attach(BUTTON_PIN);
            debouncer.interval(5);
            debouncer2.attach(BUTTON2_PIN);
            debouncer2.interval(5);
          
            //presentation();
          }
          void presentation()  
          {   
            // Send the sketch version information to the gateway and Controller
            sendSketchInfo("Relay", "1.0");
          
            for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
              // Register all sensors to gw (they will be created as child devices)
              present(sensor, S_BINARY);
            }
          }
          
          MyMessage msg(1, V_STATUS);
          MyMessage msg2(2, V_STATUS);
          
          void loop() { 
            // Send locally attached sensor data here 
            if (debouncer.update()) {
              // Get the update value.
              int value = debouncer.read();
              // Send in the new value.
              if(value == LOW){
                   saveState(1, !loadState(1));
                   digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
                   send(msg.set(loadState(1)));
                   }
            }
            if (debouncer2.update()) {
                int value2 = debouncer2.read();
              if(value2 == LOW){
                   saveState(2, !loadState(2));
                   digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
                   send(msg2.set(loadState(2)));
                   }
            }
          }
          
          
          void receive(const MyMessage &message) {
            // We only expect one type of message from controller. But we better check anyway.
            if (message.type==V_STATUS) {
               // Change relay state
               digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
               // Store state in eeprom
               saveState(message.sensor, message.getBool());
               // Write some debug info
               Serial.print("Incoming change for sensor:");
               Serial.print(message.sensor);
               Serial.print(", New status: ");
               Serial.println(message.getBool());
             } 
          }
          
          
          1 Reply Last reply
          0
          • martinhjelmareM Offline
            martinhjelmareM Offline
            martinhjelmare
            Plugin Developer
            wrote on last edited by
            #5

            You need to feedback the state change to home assistant by sending the new state from the receive function after the calls to digitalWrite and saveState.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mredone
              wrote on last edited by
              #6

              Ehh.
              I need a little help.
              I have a problem with change relay to light in HA.

              And i use in HA optimistic: true. Without it i can't change status of relay.

              My knowledge about programming is to low.

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              14

              Online

              11.7k

              Users

              11.2k

              Topics

              113.1k

              Posts


              Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • MySensors
              • OpenHardware.io
              • Categories
              • Recent
              • Tags
              • Popular