Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. eri
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    eri

    @eri

    0
    Reputation
    1
    Posts
    270
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    eri Follow

    Best posts made by eri

    This user hasn't posted anything yet.

    Latest posts made by eri

    • sending messages not working for some reason

      Hi,

      I am trying to build a board connected to a relay and a switch. I have something up and running. the only issue is that for some reason when i send a message to the controller, it seems to never get there. I never get a response from the controller and on its logs i never see that the message arrived.

      I am using a eth W5100 and it is connected directly to my arduino, i.e. there is no relay or wifi involved, when i push the button i do get the print outs in the console, so the button is working.

      here is my code:

      // Enable debug prints to serial monitor
      #define MY_DEBUG
      
      // Enable gateway ethernet module type
      #define MY_GATEWAY_W5100
      
      // W5100 Ethernet module SPI enable (optional if using a shield/module that manages SPI_EN signal)
      #define MY_W5100_SPI_EN 4
      
      // Enable Soft SPI for NRF radio (note different radio wiring is required)
      // The W5100 ethernet module seems to have a hard time co-operate with
      // radio on the same spi bus.
      #if !defined(MY_W5100_SPI_EN) && !defined(ARDUINO_ARCH_SAMD)
        #define MY_SOFTSPI
        #define MY_SOFT_SPI_SCK_PIN 14
        #define MY_SOFT_SPI_MISO_PIN 16
        #define MY_SOFT_SPI_MOSI_PIN 15
      #endif
      
      // When W5100 is connected we have to move CE/CSN pins for NRF radio
      //#ifndef MY_RF24_CE_PIN
      //  #define MY_RF24_CE_PIN 5
      //#endif
      //#ifndef MY_RF24_CS_PIN
      //  #define MY_RF24_CS_PIN 6
      //#endif
      
      // Enable to UDP
      //#define MY_USE_UDP
      
      #define MY_IP_ADDRESS 192,168,1,177   // If this is disabled, DHCP is used to retrieve address
      // Renewal period if using DHCP
      //#define MY_IP_RENEWAL_INTERVAL 60000
      // The port to keep open on node server mode / or port to contact in client mode
      #define MY_PORT 5003
      
      // The MAC address can be anything you want but should be unique on your network.
      // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
      // Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
      #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
      
      // Enable inclusion mode
      #define MY_INCLUSION_MODE_FEATURE
      // Enable Inclusion mode button on gateway
      //#define MY_INCLUSION_BUTTON_FEATURE
      // 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
      
      // Set blinking period
      #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Flash leds on rx/tx/err
      // Uncomment to override default HW configurations
      //#define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
      //#define MY_DEFAULT_RX_LED_PIN  8  // Receive led pin
      //#define MY_DEFAULT_TX_LED_PIN  9  // Transmit led pin
      
      // Enabled repeater feature for this node
      #define MY_REPEATER_FEATURE
      
      #include <SPI.h>
      #include <Ethernet.h>
      #if defined(MY_USE_UDP)
        #include <EthernetUdp.h>
      #endif
      #include <MySensors.h>
      #include <Bounce2.h>
      
      #define RELAY_PIN  5  // Arduino Digital I/O pin number for relay 
      #define BUTTON_PIN  2  // Arduino Digital I/O pin number for button 
      #define CHILD_ID 1   // Id of the sensor child
      #define RELAY_ON 1
      #define RELAY_OFF 0
      
      Bounce debouncer = Bounce(); 
      int oldValue=0;
      bool state;
      
      long max_on_time = 100000;
      long last_on_time = 0;
      
      int ledState = HIGH;         // the current state of the output pin
      int buttonState;             // the current reading from the input pin
      int lastButtonState = LOW;   // the previous reading from the input pin
      long lastDebounceTime = 0;  // the last time the output pin was toggled
      long debounceDelay = 50;    // the debounce time; increase if the output flickers
      
      MyMessage msg(CHILD_ID,V_STATUS);
      
      void setup()  
      {  
        // Setup the button
        pinMode(BUTTON_PIN,INPUT);
        // Activate internal pull-up
        digitalWrite(BUTTON_PIN,HIGH);
      
        // After setting up the button, setup debouncer
        debouncer.attach(BUTTON_PIN);
        debouncer.interval(50);
      
        // Make sure relays are off when starting up
        digitalWrite(RELAY_PIN, RELAY_OFF);
        // Then set relay pins in output mode
        pinMode(RELAY_PIN, OUTPUT);   
      
        // Set relay to last known state (using eeprom storage) 
        state = loadState(CHILD_ID);
        digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
      
        send(msg.set(true));
        send(msg.set(false));
      }
      
      void presentation()  {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Relay & Button", "1.0");
      
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID, S_LIGHT);
      }
      
      /*
      *  Example on how to asynchronously check for new messages from gw
      */
      void loop() 
      {
        debouncer.update();
        // Get the update value
        int value = debouncer.read();
        if (value != oldValue && value==0) {
            send(msg.set(state?false:true), true); // Send new state and request ack back
            //send(msg.set(true)); // Send new state and request ack back
            Serial.println(value);
            Serial.println(state);
        }
        oldValue = value;
      } 
      
      void receive(const MyMessage &message) {
        Serial.println("got message");
        // We only expect one type of message from controller. But we better check anyway.
        if (message.isAck()) {
           Serial.println("This is an ack from gateway");
        }
      
        if (message.type == V_STATUS) {
           // Change relay state
           state = message.getBool();
           digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
           // Store state in eeprom
           saveState(CHILD_ID, state);
      
           // Write some debug info
           Serial.print("Incoming change for sensor:");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
         } 
      }
      
      posted in Domoticz
      eri
      eri