Skip to content
  • 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. Domoticz
  4. Pls Help: Sensor value shows in Domoticz Hardware TAB, but wont show on Switches
  • Getting Started
  • Controller
  • Build
  • Hardware
  • Download/API
  • Forum
  • Store

Pls Help: Sensor value shows in Domoticz Hardware TAB, but wont show on Switches

Scheduled Pinned Locked Moved Domoticz
5 Posts 4 Posters 526 Views 4 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.
  • EmeE Offline
    EmeE Offline
    Eme
    wrote on last edited by
    #1

    Please Help needed I have a Node with Sonar sensor and an digitalRead(A0) value from Node to Gateway. The value shows on Domoticz Hardware TAB, but wont show on Switches. I have stayed up all night looking for solutions without much luck. I sketch is as follows.

    // Example sketch showing how to control physical relays. 
    // This example will remember relay state even after power failure.
    
    // Enable debug prints
    #define MY_DEBUG ON
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    #define MY_RF24_PA_LEVEL RF24_PA_HIGH // Options MAX to reach the furthest 
    #define MY_NODE_ID 4  // Set this to fix your Radio ID or use AUTO or 1
    #define MY_REGISTRATION_FEATURE // Force registration
    #define MY_REGISTRATION_RETRIES 5
    
    #include <Wire.h>
    #include <TimeLib.h>
    #include <SPI.h>
    #include <MySensors.h>
    #include <NewPing.h>
    
    // For Debug
    #ifdef DEBUG_ON
    #define DEBUG_PRINT(x)   Serial.print(x)
    #define DEBUG_PRINTLN(x) Serial.println(x)
    #else
    #define DEBUG_PRINT(x)
    #define DEBUG_PRINTLN(x)
    #define SERIAL_START(x)
    #endif
    
    #define RELAY_PIN 2  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 5 // Total number of attached relays
    #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 SKETCH_NAME "Generator Node"
    #define SKETCH_VERSION "1.3.1"
    #define CHILD_ID 0
    
    MyMessage msgNEPA(0, V_STATUS);
    MyMessage msg(CHILD_ID, V_STATUS);
    MyMessage msgTank1(1, V_VOLUME);
    MyMessage msgTank2(8, V_VOLUME);
    
    boolean sensorState, lastSensorState;
    
    //constant for the sonar HC-SR04 sensor
    #define TRIGGER_PIN  8
    #define ECHO_PIN     7
    #define MAX_DISTANCE 300 //distance max measured
    
    //constant to calculate the volume of the tank
    #define high_water_level 30 //tank depth from the lowest point to the max water level
    #define distance_sensor 10 //was 30 = distance in cm between the max water level and the sensor
    #define tank_volume 1000 //tank volume (10000 default) when it is fitted to the max water level
    unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds)
    
    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
    
    int lastDist;
    bool metric = true;
    
    void setup()
    {
      for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
        // Then set relay pins to output mode
        pinMode(pin, OUTPUT);
        // Set relay to last known state (using eeprom storage)
        digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        DEBUG_PRINT(F("Initialised Relay: "));
        DEBUG_PRINT(F(sensor));
        DEBUG_PRINT(F(" at pin "));
        DEBUG_PRINT(F(pin));
        DEBUG_PRINT(F(" ("));
        DEBUG_PRINT(F(loadState(sensor)));
        DEBUG_PRINTLN(F(")"));
      }
        pinMode(A0, INPUT); // Then set etra sensor pins to input mode
        pinMode(A1, INPUT);   // Float Sensor for Gen fuel Tank
        pinMode(A2, INPUT);   // Spare Sensor Readout
        DEBUG_PRINTLN(F("Initialize additional Sensor: "));
    }
    
    void presentation() { 
    sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
    
    //  Manually present the additional 3 sensors
        present(0, S_BINARY);
        pinMode(A0, INPUT); // Then set relay pins in output mode  
        boolean savedState = loadState(A0); // Set relay to last known state (using eeprom storage)
        digitalWrite(A0, savedState?RELAY_ON:RELAY_OFF);
        DEBUG_PRINT(F("Presented Relay at : "));
        DEBUG_PRINTLN(F(A0));
        send(msg.set(savedState? 0 : 1));
    
    // Fetch relay status   
    for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
        present(sensor, S_BINARY);
        pinMode(pin, OUTPUT); // Then set relay pins in output mode  
        savedState = loadState(pin); // Set relay to last known state (using eeprom storage)
        digitalWrite(pin, savedState?RELAY_ON:RELAY_OFF);
        DEBUG_PRINT(F("Presented Relay st : "));
        DEBUG_PRINTLN(F(pin));
        send(msg.set(savedState? 0 : 1));
      }
        
    //    DEBUG_PRINTLN(F("Sensor Presentation Complete"));
    
    //  Manually present the additional 2 sensors
        present(6, S_WATER);
        pinMode(A1, INPUT); // Then set relay pins in output mode  
        savedState = loadState(A1); // Set relay to last known state (using eeprom storage)
        digitalWrite(A1, savedState?RELAY_ON:RELAY_OFF);
        DEBUG_PRINT(F("Presented Relay at : "));
        DEBUG_PRINTLN(F(A1));
        send(msg.set(savedState? 0 : 1));
    }
    void loop() 
    {
    // Alway process incoming messages whenever possible
    // Sleep until interrupt comes in on motion sensor. Send update every two minute.
    //  sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
    
      Serial.print("Fuel Level: ");
      Serial.print(tank_level("liters"));
      Serial.print("L");
      Serial.print("(");
      Serial.print(tank_level("percent"));
      Serial.println("%)");
      send(msgTank1.set(tank_level("liters")));
    
    if(digitalRead(A0) == LOW){
      DEBUG_PRINTLN(F("There is no Light"));
       Serial.println(sensorState? "Light On" : "Light Off");
       send(msgNEPA.set(sensorState?"0":"0"));  // Update gateway on change of state
      }
    else
      {
      DEBUG_PRINTLN(F("Up NEPA!"));
      Serial.println(sensorState? "Light Off" : "Light On");
      send(msgNEPA.set(sensorState?"1":"1"));  // Update gateway on change of state
      }
      wait(2000); // use for debuging
    }
    void receive(const MyMessage &message){
    // Change relay state if message is received
    if (digitalRead(A0) == HIGH){
    // Sensor says tank is full do something
    //  DEBUG_PRINTLN(F("Float Sensor High, 'Tank is Full'"));
    //  digitalWrite(3, LOW);  // Switch off tank pump
      saveState(message.sensor, message.getBool());
      bool send(MyMessage &msgNEPA, bool ack);
    
      }
      if (message.type == V_STATUS){
    //   digitalWrite(message.sensor, !digitalRead(message.sensor));
         if (message.getBool() == 0) {
         digitalWrite(message.sensor, LOW);
         // Store state in eeprom
         saveState(message.sensor, message.getBool());
          }
         else //getBool() == 1
         digitalWrite(message.sensor, HIGH);   
         // Store state in eeprom
         saveState(message.sensor, message.getBool());
         
    // digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
    
    // Write some debug info
       Serial.print("Incoming change for sensor ID: ");
       Serial.print(message.sensor);
       Serial.print(", New status: ");
       Serial.println(message.getBool());
        } 
      }
    
    int tank_level(String unit)   //function to measure and convert the tank volume
    {
    
      int level_liters = 0,level_percent = 0, echo_us = 0, echo_cm = 0, water_level_cm = 0;
    //  int level_liters,level_percent, echo_us, echo_cm, water_level_cm;
      echo_us = sonar.ping_median(); //return the median time of 5measures between the ping and the echo in microseconds
      echo_cm = echo_us / US_ROUNDTRIP_CM; //convert the echo time to distance in cm.
      water_level_cm = high_water_level - (echo_cm - distance_sensor);
      level_liters = water_level_cm * (tank_volume / high_water_level);
      level_percent = (water_level_cm * 100) / high_water_level;
      
      if (unit == "liters")
      {
        return level_liters;
      }
      else if (unit == "percent")
      {
        return level_percent;
      }
      else
      {
        return 0;
      }
    }
    

    0_1559969259570_Hardware Values.png
    0_1559969279829_Switches.png

    mfalkviddM K 2 Replies Last reply
    0
    • EmeE Eme

      Please Help needed I have a Node with Sonar sensor and an digitalRead(A0) value from Node to Gateway. The value shows on Domoticz Hardware TAB, but wont show on Switches. I have stayed up all night looking for solutions without much luck. I sketch is as follows.

      // Example sketch showing how to control physical relays. 
      // This example will remember relay state even after power failure.
      
      // Enable debug prints
      #define MY_DEBUG ON
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      #define MY_RF24_PA_LEVEL RF24_PA_HIGH // Options MAX to reach the furthest 
      #define MY_NODE_ID 4  // Set this to fix your Radio ID or use AUTO or 1
      #define MY_REGISTRATION_FEATURE // Force registration
      #define MY_REGISTRATION_RETRIES 5
      
      #include <Wire.h>
      #include <TimeLib.h>
      #include <SPI.h>
      #include <MySensors.h>
      #include <NewPing.h>
      
      // For Debug
      #ifdef DEBUG_ON
      #define DEBUG_PRINT(x)   Serial.print(x)
      #define DEBUG_PRINTLN(x) Serial.println(x)
      #else
      #define DEBUG_PRINT(x)
      #define DEBUG_PRINTLN(x)
      #define SERIAL_START(x)
      #endif
      
      #define RELAY_PIN 2  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define NUMBER_OF_RELAYS 5 // Total number of attached relays
      #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 SKETCH_NAME "Generator Node"
      #define SKETCH_VERSION "1.3.1"
      #define CHILD_ID 0
      
      MyMessage msgNEPA(0, V_STATUS);
      MyMessage msg(CHILD_ID, V_STATUS);
      MyMessage msgTank1(1, V_VOLUME);
      MyMessage msgTank2(8, V_VOLUME);
      
      boolean sensorState, lastSensorState;
      
      //constant for the sonar HC-SR04 sensor
      #define TRIGGER_PIN  8
      #define ECHO_PIN     7
      #define MAX_DISTANCE 300 //distance max measured
      
      //constant to calculate the volume of the tank
      #define high_water_level 30 //tank depth from the lowest point to the max water level
      #define distance_sensor 10 //was 30 = distance in cm between the max water level and the sensor
      #define tank_volume 1000 //tank volume (10000 default) when it is fitted to the max water level
      unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds)
      
      NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
      
      int lastDist;
      bool metric = true;
      
      void setup()
      {
        for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
          // Then set relay pins to output mode
          pinMode(pin, OUTPUT);
          // Set relay to last known state (using eeprom storage)
          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
          DEBUG_PRINT(F("Initialised Relay: "));
          DEBUG_PRINT(F(sensor));
          DEBUG_PRINT(F(" at pin "));
          DEBUG_PRINT(F(pin));
          DEBUG_PRINT(F(" ("));
          DEBUG_PRINT(F(loadState(sensor)));
          DEBUG_PRINTLN(F(")"));
        }
          pinMode(A0, INPUT); // Then set etra sensor pins to input mode
          pinMode(A1, INPUT);   // Float Sensor for Gen fuel Tank
          pinMode(A2, INPUT);   // Spare Sensor Readout
          DEBUG_PRINTLN(F("Initialize additional Sensor: "));
      }
      
      void presentation() { 
      sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
      
      //  Manually present the additional 3 sensors
          present(0, S_BINARY);
          pinMode(A0, INPUT); // Then set relay pins in output mode  
          boolean savedState = loadState(A0); // Set relay to last known state (using eeprom storage)
          digitalWrite(A0, savedState?RELAY_ON:RELAY_OFF);
          DEBUG_PRINT(F("Presented Relay at : "));
          DEBUG_PRINTLN(F(A0));
          send(msg.set(savedState? 0 : 1));
      
      // Fetch relay status   
      for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
      // Register all sensors to gw (they will be created as child devices)
          present(sensor, S_BINARY);
          pinMode(pin, OUTPUT); // Then set relay pins in output mode  
          savedState = loadState(pin); // Set relay to last known state (using eeprom storage)
          digitalWrite(pin, savedState?RELAY_ON:RELAY_OFF);
          DEBUG_PRINT(F("Presented Relay st : "));
          DEBUG_PRINTLN(F(pin));
          send(msg.set(savedState? 0 : 1));
        }
          
      //    DEBUG_PRINTLN(F("Sensor Presentation Complete"));
      
      //  Manually present the additional 2 sensors
          present(6, S_WATER);
          pinMode(A1, INPUT); // Then set relay pins in output mode  
          savedState = loadState(A1); // Set relay to last known state (using eeprom storage)
          digitalWrite(A1, savedState?RELAY_ON:RELAY_OFF);
          DEBUG_PRINT(F("Presented Relay at : "));
          DEBUG_PRINTLN(F(A1));
          send(msg.set(savedState? 0 : 1));
      }
      void loop() 
      {
      // Alway process incoming messages whenever possible
      // Sleep until interrupt comes in on motion sensor. Send update every two minute.
      //  sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
      
        Serial.print("Fuel Level: ");
        Serial.print(tank_level("liters"));
        Serial.print("L");
        Serial.print("(");
        Serial.print(tank_level("percent"));
        Serial.println("%)");
        send(msgTank1.set(tank_level("liters")));
      
      if(digitalRead(A0) == LOW){
        DEBUG_PRINTLN(F("There is no Light"));
         Serial.println(sensorState? "Light On" : "Light Off");
         send(msgNEPA.set(sensorState?"0":"0"));  // Update gateway on change of state
        }
      else
        {
        DEBUG_PRINTLN(F("Up NEPA!"));
        Serial.println(sensorState? "Light Off" : "Light On");
        send(msgNEPA.set(sensorState?"1":"1"));  // Update gateway on change of state
        }
        wait(2000); // use for debuging
      }
      void receive(const MyMessage &message){
      // Change relay state if message is received
      if (digitalRead(A0) == HIGH){
      // Sensor says tank is full do something
      //  DEBUG_PRINTLN(F("Float Sensor High, 'Tank is Full'"));
      //  digitalWrite(3, LOW);  // Switch off tank pump
        saveState(message.sensor, message.getBool());
        bool send(MyMessage &msgNEPA, bool ack);
      
        }
        if (message.type == V_STATUS){
      //   digitalWrite(message.sensor, !digitalRead(message.sensor));
           if (message.getBool() == 0) {
           digitalWrite(message.sensor, LOW);
           // Store state in eeprom
           saveState(message.sensor, message.getBool());
            }
           else //getBool() == 1
           digitalWrite(message.sensor, HIGH);   
           // Store state in eeprom
           saveState(message.sensor, message.getBool());
           
      // digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
      
      // Write some debug info
         Serial.print("Incoming change for sensor ID: ");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
          } 
        }
      
      int tank_level(String unit)   //function to measure and convert the tank volume
      {
      
        int level_liters = 0,level_percent = 0, echo_us = 0, echo_cm = 0, water_level_cm = 0;
      //  int level_liters,level_percent, echo_us, echo_cm, water_level_cm;
        echo_us = sonar.ping_median(); //return the median time of 5measures between the ping and the echo in microseconds
        echo_cm = echo_us / US_ROUNDTRIP_CM; //convert the echo time to distance in cm.
        water_level_cm = high_water_level - (echo_cm - distance_sensor);
        level_liters = water_level_cm * (tank_volume / high_water_level);
        level_percent = (water_level_cm * 100) / high_water_level;
        
        if (unit == "liters")
        {
          return level_liters;
        }
        else if (unit == "percent")
        {
          return level_percent;
        }
        else
        {
          return 0;
        }
      }
      

      0_1559969259570_Hardware Values.png
      0_1559969279829_Switches.png

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

      @eme look at the debug log from the node and the gateway.

      My guess is that they will show messages with st=fail, showing that the message didn't get through.

      If you haven't already, see https://forum.mysensors.org/topic/666/debug-faq-and-how-ask-for-help/ for a list of the most common problems and a troubleshooting flowchart.

      1 Reply Last reply
      0
      • EmeE Eme

        Please Help needed I have a Node with Sonar sensor and an digitalRead(A0) value from Node to Gateway. The value shows on Domoticz Hardware TAB, but wont show on Switches. I have stayed up all night looking for solutions without much luck. I sketch is as follows.

        // Example sketch showing how to control physical relays. 
        // This example will remember relay state even after power failure.
        
        // Enable debug prints
        #define MY_DEBUG ON
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        #define MY_RF24_PA_LEVEL RF24_PA_HIGH // Options MAX to reach the furthest 
        #define MY_NODE_ID 4  // Set this to fix your Radio ID or use AUTO or 1
        #define MY_REGISTRATION_FEATURE // Force registration
        #define MY_REGISTRATION_RETRIES 5
        
        #include <Wire.h>
        #include <TimeLib.h>
        #include <SPI.h>
        #include <MySensors.h>
        #include <NewPing.h>
        
        // For Debug
        #ifdef DEBUG_ON
        #define DEBUG_PRINT(x)   Serial.print(x)
        #define DEBUG_PRINTLN(x) Serial.println(x)
        #else
        #define DEBUG_PRINT(x)
        #define DEBUG_PRINTLN(x)
        #define SERIAL_START(x)
        #endif
        
        #define RELAY_PIN 2  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
        #define NUMBER_OF_RELAYS 5 // Total number of attached relays
        #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 SKETCH_NAME "Generator Node"
        #define SKETCH_VERSION "1.3.1"
        #define CHILD_ID 0
        
        MyMessage msgNEPA(0, V_STATUS);
        MyMessage msg(CHILD_ID, V_STATUS);
        MyMessage msgTank1(1, V_VOLUME);
        MyMessage msgTank2(8, V_VOLUME);
        
        boolean sensorState, lastSensorState;
        
        //constant for the sonar HC-SR04 sensor
        #define TRIGGER_PIN  8
        #define ECHO_PIN     7
        #define MAX_DISTANCE 300 //distance max measured
        
        //constant to calculate the volume of the tank
        #define high_water_level 30 //tank depth from the lowest point to the max water level
        #define distance_sensor 10 //was 30 = distance in cm between the max water level and the sensor
        #define tank_volume 1000 //tank volume (10000 default) when it is fitted to the max water level
        unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds)
        
        NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
        
        int lastDist;
        bool metric = true;
        
        void setup()
        {
          for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
            // Then set relay pins to output mode
            pinMode(pin, OUTPUT);
            // Set relay to last known state (using eeprom storage)
            digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
            DEBUG_PRINT(F("Initialised Relay: "));
            DEBUG_PRINT(F(sensor));
            DEBUG_PRINT(F(" at pin "));
            DEBUG_PRINT(F(pin));
            DEBUG_PRINT(F(" ("));
            DEBUG_PRINT(F(loadState(sensor)));
            DEBUG_PRINTLN(F(")"));
          }
            pinMode(A0, INPUT); // Then set etra sensor pins to input mode
            pinMode(A1, INPUT);   // Float Sensor for Gen fuel Tank
            pinMode(A2, INPUT);   // Spare Sensor Readout
            DEBUG_PRINTLN(F("Initialize additional Sensor: "));
        }
        
        void presentation() { 
        sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
        
        //  Manually present the additional 3 sensors
            present(0, S_BINARY);
            pinMode(A0, INPUT); // Then set relay pins in output mode  
            boolean savedState = loadState(A0); // Set relay to last known state (using eeprom storage)
            digitalWrite(A0, savedState?RELAY_ON:RELAY_OFF);
            DEBUG_PRINT(F("Presented Relay at : "));
            DEBUG_PRINTLN(F(A0));
            send(msg.set(savedState? 0 : 1));
        
        // Fetch relay status   
        for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
        // Register all sensors to gw (they will be created as child devices)
            present(sensor, S_BINARY);
            pinMode(pin, OUTPUT); // Then set relay pins in output mode  
            savedState = loadState(pin); // Set relay to last known state (using eeprom storage)
            digitalWrite(pin, savedState?RELAY_ON:RELAY_OFF);
            DEBUG_PRINT(F("Presented Relay st : "));
            DEBUG_PRINTLN(F(pin));
            send(msg.set(savedState? 0 : 1));
          }
            
        //    DEBUG_PRINTLN(F("Sensor Presentation Complete"));
        
        //  Manually present the additional 2 sensors
            present(6, S_WATER);
            pinMode(A1, INPUT); // Then set relay pins in output mode  
            savedState = loadState(A1); // Set relay to last known state (using eeprom storage)
            digitalWrite(A1, savedState?RELAY_ON:RELAY_OFF);
            DEBUG_PRINT(F("Presented Relay at : "));
            DEBUG_PRINTLN(F(A1));
            send(msg.set(savedState? 0 : 1));
        }
        void loop() 
        {
        // Alway process incoming messages whenever possible
        // Sleep until interrupt comes in on motion sensor. Send update every two minute.
        //  sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
        
          Serial.print("Fuel Level: ");
          Serial.print(tank_level("liters"));
          Serial.print("L");
          Serial.print("(");
          Serial.print(tank_level("percent"));
          Serial.println("%)");
          send(msgTank1.set(tank_level("liters")));
        
        if(digitalRead(A0) == LOW){
          DEBUG_PRINTLN(F("There is no Light"));
           Serial.println(sensorState? "Light On" : "Light Off");
           send(msgNEPA.set(sensorState?"0":"0"));  // Update gateway on change of state
          }
        else
          {
          DEBUG_PRINTLN(F("Up NEPA!"));
          Serial.println(sensorState? "Light Off" : "Light On");
          send(msgNEPA.set(sensorState?"1":"1"));  // Update gateway on change of state
          }
          wait(2000); // use for debuging
        }
        void receive(const MyMessage &message){
        // Change relay state if message is received
        if (digitalRead(A0) == HIGH){
        // Sensor says tank is full do something
        //  DEBUG_PRINTLN(F("Float Sensor High, 'Tank is Full'"));
        //  digitalWrite(3, LOW);  // Switch off tank pump
          saveState(message.sensor, message.getBool());
          bool send(MyMessage &msgNEPA, bool ack);
        
          }
          if (message.type == V_STATUS){
        //   digitalWrite(message.sensor, !digitalRead(message.sensor));
             if (message.getBool() == 0) {
             digitalWrite(message.sensor, LOW);
             // Store state in eeprom
             saveState(message.sensor, message.getBool());
              }
             else //getBool() == 1
             digitalWrite(message.sensor, HIGH);   
             // Store state in eeprom
             saveState(message.sensor, message.getBool());
             
        // digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
        
        // Write some debug info
           Serial.print("Incoming change for sensor ID: ");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
            } 
          }
        
        int tank_level(String unit)   //function to measure and convert the tank volume
        {
        
          int level_liters = 0,level_percent = 0, echo_us = 0, echo_cm = 0, water_level_cm = 0;
        //  int level_liters,level_percent, echo_us, echo_cm, water_level_cm;
          echo_us = sonar.ping_median(); //return the median time of 5measures between the ping and the echo in microseconds
          echo_cm = echo_us / US_ROUNDTRIP_CM; //convert the echo time to distance in cm.
          water_level_cm = high_water_level - (echo_cm - distance_sensor);
          level_liters = water_level_cm * (tank_volume / high_water_level);
          level_percent = (water_level_cm * 100) / high_water_level;
          
          if (unit == "liters")
          {
            return level_liters;
          }
          else if (unit == "percent")
          {
            return level_percent;
          }
          else
          {
            return 0;
          }
        }
        

        0_1559969259570_Hardware Values.png
        0_1559969279829_Switches.png

        K Offline
        K Offline
        kimot
        wrote on last edited by kimot
        #3

        @eme
        I am not sure if Domoticz can know, what you want.
        I am not MySensors expert, but there are some weird things in your code:

        #define CHILD_ID 0
        
        MyMessage msgNEPA(0, V_STATUS);
        MyMessage msg(CHILD_ID, V_STATUS);
        

        msg and msgNEPA are identical, but you use it in different ways ....

        MyMessage msgTank1(1, V_VOLUME);
        

        For CHILD ID 1 type of message V_VOLUME, but in loop:

        for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
        // Register all sensors to gw (they will be created as child devices)
            present(sensor, S_BINARY);
            pinMode(pin, OUTPUT); // Then set relay pins in output mode  
            savedState = loadState(pin); // Set relay to last known state (using eeprom storage)
            digitalWrite(pin, savedState?RELAY_ON:RELAY_OFF);
            DEBUG_PRINT(F("Presented Relay st : "));
            DEBUG_PRINTLN(F(pin));
            send(msg.set(savedState? 0 : 1));
          }
        

        You present CHILID ID 1 like S_BINARY

        And then you set to this binary sensor volume value:

        send(msgTank1.set(tank_level("liters")));
        

        And in the same presentation loop you send value only to child id 0, because msg.set send to ID 0

        1 Reply Last reply
        0
        • F Offline
          F Offline
          FlyingDomotic
          wrote on last edited by
          #4

          Did you activate the child(ren) through the "Setup" > "Devices" list? If yes, the arrow on the child(ren) should be oriented to the left side. If not, activate them, giving a name. You'll then see them on the associated tabs. Note that device type depends on the type sent during presentation (so don't expect being able to declare device as a switch if you don't use the right child type)

          1 Reply Last reply
          0
          • F Offline
            F Offline
            FlyingDomotic
            wrote on last edited by
            #5

            In addition to the remark on declaring sensor to Domoticz, the sketch itself seems to me a bit confusing.

            Normally, you should do setup into setup function (stuff like pin mode, even eventually reading saved config and setting relay in correct state), presentation should contain only sendsketchinfo() & present(), loop should do the repetitive job.

            You should avoid blocking the loop, especially if you want to receive messages (as you did).

            You're using relay from pin 2 to 6 but sensor 1 to 5, but when receiving an order to set sensor x, you set pin x (instead of x+1). Result may not exactly be what you want/imagine.

            You're turning pump off only when receiving a message (as the test is done here), instead in the loop.

            You're using digitalWrite() on some analog pin (A1) ;-)

            You're sending udpdates every 2 seconds, while sending either changes or data at larger interval may fit better.

            In addition, you may also want to simplify:
            send(msgNEPA.set(sensorState?"0":"0")) by send(msgNEPA.set(0)) (in addition, this will send numeric value instead of string, don't think that sending a string is what you want)

            and

            send(msgNEPA.set(sensorState?"1":"1")) by send(msgNEPA.set(1))

            May I suggest you explain what you have, and what you want to do, for us to guide you setting the sensors properly?

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


            3

            Online

            11.7k

            Users

            11.2k

            Topics

            113.0k

            Posts


            Copyright 2019 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
            • OpenHardware.io
            • Categories
            • Recent
            • Tags
            • Popular