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. Hardware
  3. Reading INPUTS from arduino in domoticz

Reading INPUTS from arduino in domoticz

Scheduled Pinned Locked Moved Hardware
7 Posts 3 Posters 70 Views 3 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
    Mati_Smart
    wrote on last edited by
    #1

    Hello,

    Can you help me with reading inputs (like door, window open)?

    I try to use mega2560 to read inputs.

    With this code, i see in domoticz input1 and input2 always on...
    Do you know what can be wrong?
    My sketch:

    
    
    // 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 == 12000000L
    #define MY_BAUD_RATE 115200
    #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 RELAY_3  6
    #define RELAY_4  7
    #define RELAY_5  8
    #define RELAY_6  9
    #define RELAY_7  10
    #define RELAY_8  11
    #define RELAY_9  12
    #define RELAY_10  13
    #define RELAY_11  14
    #define RELAY_12  15
    #define NUMBER_OF_RELAYS  12 // Total number of attached relays                             dodać na próbę wejścia
    #define RELAY_ON 1  // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
    
    
    #define CHILD_ID_1 20
    #define CHILD_ID_2 21
    
    #define INPUT_1  20
    #define INPUT_2  21
    
    
    Bounce debouncer1 = Bounce(); 
    Bounce debouncer2 = Bounce(); 
    
    int oldValue1 = -1;
    int oldValue2 = -1;
    
    
    
    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);
      }
    }
    
    
    void setup()  {
    
    
      pinMode(INPUT_1,INPUT);
      debouncer1.attach(INPUT_1);
      debouncer1.interval(5);
      digitalWrite(INPUT_1,HIGH);
      
    
      pinMode(INPUT_2,INPUT);
      debouncer2.attach(INPUT_2);
      debouncer2.interval(5);
      digitalWrite(INPUT_2,HIGH);
    
    }
    
    
    void presentation()  
    {   
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Relay", "1.0");
     present(CHILD_ID_1, S_DOOR);
     present(CHILD_ID_2, S_DOOR);
    
      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_LIGHT);
    
    
    
      }
    }
    
    
    
    MyMessage msg(1, V_LIGHT);
    MyMessage msg2(2, V_LIGHT);
    MyMessage msg3(3, V_LIGHT);
    MyMessage msg4(4, V_LIGHT);
    MyMessage msg5(5, V_LIGHT);
    MyMessage msg6(6, V_LIGHT);
    MyMessage msg7(7, V_LIGHT);
    MyMessage msg8(8, V_LIGHT);
    MyMessage msg9(9, V_LIGHT);
    MyMessage msg10(10, V_LIGHT);
    MyMessage msg11(11, V_LIGHT);
    MyMessage msg12(12, V_LIGHT);
    MyMessage msg13(CHILD_ID_1, V_TRIPPED);
    MyMessage msg14(CHILD_ID_2, V_TRIPPED);
    
    
    
    void loop() {
    
    
    
      debouncer1.update();
      int value1 = debouncer1.read();
     
      if (value1 != oldValue1) {
         send(msg13.set(value1 == HIGH ? 1 : 0));
         oldValue1 = value1;
      }
    
           debouncer2.update();
      int value2 = debouncer2.read();
     
      if (value2 != oldValue2) {
         send(msg14.set(value2 == HIGH ? 1 : 0));
         oldValue2 = value2;
      }
    }
      
    
    
    void receive(const MyMessage &message) {
      // We only expect one type of message from controller. But we better check anyway.
      if (message.type==V_LIGHT) {
         // 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());
       } 
    }
    
    H 1 Reply Last reply
    0
    • E Offline
      E Offline
      evb
      wrote on last edited by
      #2

      Hi @Mati_Smart,
      Why are you using the relay actuator sketch if you want to read inputs?

      First rule in debugging things, is to narrow down the problem.
      Make your sketch to contain only the things you need.
      Verify if your sketch is meant to work with the hardware you are using.
      If the sketch is written originally for a Arduino Uno and you are using it on a Arduino Mega 2560, there is a chance that the used port numbers are not correct.
      For example I see that on a mega, the D20 and D21 pins are also pins used for SDA and SCL. Try to use first the normal digital pins, like D2, D3, ...

      1 Reply Last reply
      1
      • M Offline
        M Offline
        Mati_Smart
        wrote on last edited by
        #3

        Thank you for your answer.

        I wan to use this relay outputs and this outputs works good.
        So, I can't use pins D20 and D21?
        I want to use about 20-25 digital inputs but for testing i use this two.
        I write this sketch on the faith of examples "digital inputs gateway"

        E 1 Reply Last reply
        0
        • M Mati_Smart

          Thank you for your answer.

          I wan to use this relay outputs and this outputs works good.
          So, I can't use pins D20 and D21?
          I want to use about 20-25 digital inputs but for testing i use this two.
          I write this sketch on the faith of examples "digital inputs gateway"

          E Offline
          E Offline
          evb
          wrote on last edited by
          #4

          Hi @Mati_Smart, I didn't say that you can't use the pins D20 and D21.
          But for now they are not working in your current setup, so try first to modify your sketch to include only the code necessary to use digital pins as input. Nothing more, nothing less.

          Do you have experience with arduino hardware and arduino programming?
          There are plenty of arduino sketches out there in the wild, but without knowledge how they work, makes it very difficult to find solutions if they don't work on your hardware setup.

          For example you can try first to understand this very simple mysensors sketch : https://www.mysensors.org/build/binary
          Even simpler, try an arduino sketch without mysensors code https://www.youtube.com/watch?v=YWY_Is0L7fE
          Try to understand the basics of Arduino programming and hardware before getting to more complicated hardware and sketches.

          1 Reply Last reply
          1
          • M Mati_Smart

            Hello,

            Can you help me with reading inputs (like door, window open)?

            I try to use mega2560 to read inputs.

            With this code, i see in domoticz input1 and input2 always on...
            Do you know what can be wrong?
            My sketch:

            
            
            // 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 == 12000000L
            #define MY_BAUD_RATE 115200
            #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 RELAY_3  6
            #define RELAY_4  7
            #define RELAY_5  8
            #define RELAY_6  9
            #define RELAY_7  10
            #define RELAY_8  11
            #define RELAY_9  12
            #define RELAY_10  13
            #define RELAY_11  14
            #define RELAY_12  15
            #define NUMBER_OF_RELAYS  12 // Total number of attached relays                             dodać na próbę wejścia
            #define RELAY_ON 1  // GPIO value to write to turn on attached relay
            #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
            
            
            #define CHILD_ID_1 20
            #define CHILD_ID_2 21
            
            #define INPUT_1  20
            #define INPUT_2  21
            
            
            Bounce debouncer1 = Bounce(); 
            Bounce debouncer2 = Bounce(); 
            
            int oldValue1 = -1;
            int oldValue2 = -1;
            
            
            
            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);
              }
            }
            
            
            void setup()  {
            
            
              pinMode(INPUT_1,INPUT);
              debouncer1.attach(INPUT_1);
              debouncer1.interval(5);
              digitalWrite(INPUT_1,HIGH);
              
            
              pinMode(INPUT_2,INPUT);
              debouncer2.attach(INPUT_2);
              debouncer2.interval(5);
              digitalWrite(INPUT_2,HIGH);
            
            }
            
            
            void presentation()  
            {   
              // Send the sketch version information to the gateway and Controller
              sendSketchInfo("Relay", "1.0");
             present(CHILD_ID_1, S_DOOR);
             present(CHILD_ID_2, S_DOOR);
            
              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_LIGHT);
            
            
            
              }
            }
            
            
            
            MyMessage msg(1, V_LIGHT);
            MyMessage msg2(2, V_LIGHT);
            MyMessage msg3(3, V_LIGHT);
            MyMessage msg4(4, V_LIGHT);
            MyMessage msg5(5, V_LIGHT);
            MyMessage msg6(6, V_LIGHT);
            MyMessage msg7(7, V_LIGHT);
            MyMessage msg8(8, V_LIGHT);
            MyMessage msg9(9, V_LIGHT);
            MyMessage msg10(10, V_LIGHT);
            MyMessage msg11(11, V_LIGHT);
            MyMessage msg12(12, V_LIGHT);
            MyMessage msg13(CHILD_ID_1, V_TRIPPED);
            MyMessage msg14(CHILD_ID_2, V_TRIPPED);
            
            
            
            void loop() {
            
            
            
              debouncer1.update();
              int value1 = debouncer1.read();
             
              if (value1 != oldValue1) {
                 send(msg13.set(value1 == HIGH ? 1 : 0));
                 oldValue1 = value1;
              }
            
                   debouncer2.update();
              int value2 = debouncer2.read();
             
              if (value2 != oldValue2) {
                 send(msg14.set(value2 == HIGH ? 1 : 0));
                 oldValue2 = value2;
              }
            }
              
            
            
            void receive(const MyMessage &message) {
              // We only expect one type of message from controller. But we better check anyway.
              if (message.type==V_LIGHT) {
                 // 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());
               } 
            }
            
            H Offline
            H Offline
            hard-shovel
            wrote on last edited by hard-shovel
            #5

            @Mati_Smart

            What troubleshooting steps have you all ready taken?

            I have loaded your sketch onto a mega2560 and looked at the serial output.
            the binary switch child's 20 and 21 are switching.

            0;20;1;0;16;1
            0;21;1;0;16;1
            0;21;1;0;16;0
            0;20;1;0;16;0
            0;21;1;0;16;1
            0;20;1;0;16;1
            0;21;1;0;16;0
            0;21;1;0;16;1
            0;21;1;0;16;0
            0;21;1;0;16;1
            0;20;1;0;16;0
            0;20;1;0;16;1
            

            have you checked this?

            also why do you have all MY_INCLUSION defines active when there is no radio attached?

            // 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 
            

            and you have the repeater function enabled

            // Enable repeater functionality for this node
            #define MY_REPEATER_FEATURE
            

            this is sloppy programming and can cause problems.

            Have you checked the basic things like the connections to the inputs?
            You have the internal PULLUP enabled so the input signal should switch to ground.

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

              @hard-shovel

              I think, my problem is in MyMessage function.
              It looks fine, but it not working with domoticz.

              In "hardware'' - "MySensorsUSBGateway" - "Setup" - "Nodes" I can see taht my child ID 20 and 21 are switching
              But in "devices" tab both are always on

              @evb
              I tried to do like this simple example: https://www.mysensors.org/build/binary
              I moved "MyMessage" from "void presentation" and put in before "void before"
              It did't help.

              Of course this sketch: https://www.mysensors.org/build/binary without my relays it works fine.

              @hard-shovel thanks for the suggestion about My Inclusion and my repeater - I'm not using this, I have to disable it.

              @evb I understand the basics (only basisc) of Arduino programming and hardware.
              I have 10 years of expirience in PLC programming and a little experience in "C" language.

              1 Reply Last reply
              0
              • E Offline
                E Offline
                evb
                wrote on last edited by
                #7

                @Mati_Smart, if the messages from the sensor are arriving in domoticz, it must be some configuration in domoticz itself.
                Can't help you here, I don't know domoticz.
                Did you search already on the domoticz forum?

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


                20

                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