Arduino USB gateway for relay with buttons
-
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
-
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.
-
This post is deleted!
-
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()); } }
-
You need to feedback the state change to home assistant by sending the new state from the
receive
function after the calls todigitalWrite
andsaveState
.
-
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.