Is it possible to add a Sensor to a Gateway directly?



  • Hello all,
    just a question.
    Is it possible to add a Sensor (Analog In) directly to a Gateway (arduino) and comunicate this value over USB?

    What I want to do is the following:
    I've one Sensor which communicate over the Gateway to my Pimatic (over serial USB)
    Now I want to add a second Sensor, which is physicaly very close to the Gateway.
    So i want to add it there, and it should communicate to Pimatic as well.
    Kind of an internal "Sensor" device.

    So is this possible? If yes how?

    Thanks
    Free


  • Mod

    @free118 Welcome to the MySensors community!

    Yes it is possible. Just add it to the gateway sketch, just as if you were adding it to a normal sensor node sketch.



  • Ok great,
    that's what I've done.
    But which Node and Child ID is needed for this. So that the Input will communicate as a "Sensor" to the gateway.

    Because the Pimatic plugin need to know where to look.

    
    // 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 115200
    #endif
    
    // 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
    
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Inverses the behavior of leds
    //#define MY_WITH_LEDS_BLINKING_INVERSE
    
    // Flash leds on rx/tx/err
    // 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 <MySensors.h>
    #define ArrayLenth 10
    #define PH_SENSOR_ANALOG_PIN A0
    unsigned long lastSend = 0;
    static const unsigned long SEND_FREQUENCY = 5000;
    
    float lastPhValue;
    static const float deltaPhValue = 0.5;
    
    #define MY_NODE_ID 10
    #define CHILD_ID_PH_LOCAL 1
    
    MyMessage msg(0, V_PH);
    void setup()
    {
    	// Setup locally attached sensors
    }
    
    double analogReadAverage(uint8_t pin, unsigned long ms)
    {
        ...
    	
        return average;
    }
    
    float getPH()
    {
    		...
            
        if (sendTime || abs(PhValue - lastPhValue) > deltaPhValue)
        {
            Serial.print("pH:");
            Serial.print(PhValue, 2);
           // Serial.println(" ");
                   
            lastPhValue = PhValue;
            
            //send(msg.set(PhValue, 1));
            send(msg.set(PhValue, 51));
           
        }
      return lastPhValue;
    }
    
    
    void presentation()
    {
    	sendSketchInfo("PH Local","1.1");
      present(CHILD_ID_PH_LOCAL,S_WATER_QUALITY); 
    }
    
    void loop()
    {
    
      float ph = getPH();
      
    	// Send locally attached sensor data here
    }
    

    Here the working Pimatic config for a Sensor through a gateway.

          "plugin": "mysensors",
          "driver": "serialport",
          "protocols": "1.5.1",
          "startingNodeId": 1,
          "driverOptions": {
            "//": "'/dev/ttyUSB0' if using serial Gateway",
            "serialDevice": "/dev/ttyUSB1",
            "baudrate": 115200
          }```
    
    ```{
          "id": "phmeter",
          "name": "pHmeter",
          "class": "MySensorsPH",
          "nodeid": 9,
          "sensorid": 0,
          "xAttributeOptions": []
        }```
    
    
     Thanks

  • Mod

    I have no experience with Pimatic, but the child ID will be CHILD_ID_PH_LOCAL and the node ID will be 0 (gateways always have node ID=0).



  • Thanks for the answer. I tried this and it didn't work. I've started a thread in pimatic forum as well. Maybe they know how to do this.
    Thanks


 

371
Online

7.7k
Users

8.6k
Topics

92.4k
Posts