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. My Project
  3. combining button with dht11 issue

combining button with dht11 issue

Scheduled Pinned Locked Moved My Project
2 Posts 1 Posters 1.1k Views 2 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.
  • el tigroE Offline
    el tigroE Offline
    el tigro
    wrote on last edited by el tigro
    #1

    Hi.
    I have put a dht11 sensor on my arduino nano light switch. The hardware switch is incase no UI or ALEXA down. I don't need the humidity component so I removed it.

    
    #define MY_DEBUG
    #define MY_RADIO_NRF24
    #define MY_REPEATER_FEATURE
    #define MY_NODE_ID 5
    #include <SPI.h>
    #include <MySensors.h> 
    #include <elapsedMillis.h> 
    #include <Bounce2.h>
    #include <DHT.h>
    #define DHT_DATA_PIN 7
    #define RELAY_PIN  5
    #define BUTTON_PIN  3
    #define CHILD_ID 1
    #define RELAY_ON 1
    #define RELAY_OFF 0
    #define SENSOR_TEMP_OFFSET 0
    static const uint64_t UPDATE_INTERVAL = 5000;
    static const uint8_t FORCE_UPDATE_N_READS = 1;
    Bounce debouncer = Bounce();
    bool state = false;
    bool initialValueSent = false;
    #define CHILD_ID_TEMP 3
    unsigned long interval=10000; // the time we need to wait
    unsigned long previousMillis=0; // millis() returns an unsigned long.
    float lastTemp;
    
    uint8_t nNoUpdatesTemp;
    bool metric = true;
    MyMessage msg(CHILD_ID, V_STATUS);
    MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
    DHT dht;
    
    
    void presentation()  
    { 
      sendSketchInfo("kitchen switch", "1.1");
      
      present(CHILD_ID, S_BINARY);
     present(CHILD_ID_TEMP, S_TEMP);
      metric = getConfig().isMetric;
    }
    
    void setup()
    {
      pinMode(BUTTON_PIN, INPUT_PULLUP);
      debouncer.attach(BUTTON_PIN);
      debouncer.interval(10);
      digitalWrite(RELAY_PIN, RELAY_OFF);
      pinMode(RELAY_PIN, OUTPUT);
      
      dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
      if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
        Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
      }
    }
    
    void loop()      
    {  
     
    if (!initialValueSent) {
        Serial.println("Sending initial value");
        send(msg.set(state?RELAY_ON:RELAY_OFF));
        Serial.println("Requesting initial value from controller");
        request(CHILD_ID, V_STATUS);
        wait(5000, C_SET, V_STATUS);
        presentation();
      }
      if (debouncer.update()) {
        if (debouncer.read()==LOW) {
          state = !state;
        send(msg.set(state?RELAY_ON:RELAY_OFF), true);   
        }
      }
    
     unsigned long currentMillis = millis();
     if ((unsigned long)(currentMillis - previousMillis) >= interval) {
      
      dht.readSensor(true);
      float temperature = dht.getTemperature();
      if (isnan(temperature)) {
        Serial.println("Failed reading temperature from DHT!");
      } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
    
        lastTemp = temperature;
        if (!metric) {
          temperature = dht.toFahrenheit(temperature);
        }
        nNoUpdatesTemp = 0;
        temperature += SENSOR_TEMP_OFFSET;
        send(msgTemp.set(temperature, 1));
    
        #ifdef MY_DEBUG
        Serial.print("T: ");
        Serial.println(temperature);
        #endif
      } else {
        nNoUpdatesTemp++;
      }
     previousMillis = millis();
     }}
    void receive(const MyMessage &message) {
      if (message.isAck()) {
         Serial.println("This is an ack from gateway");
      }
      if (message.type == V_STATUS) {
        if (!initialValueSent) {
          Serial.println("Receiving initial value from controller");
          initialValueSent = true;
        }
        state = (bool)message.getInt();
        digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
        send(msg.set(state?RELAY_ON:RELAY_OFF));
      }
    }
    

    my problem is that the temp shows ok, the switch sends commands when tripped but is not on the Home Assistant UI or in entities. I need this switch to show up to set triggers.

    Any help appreciated

    Pi3 Home assistant + mosquitto
    esp8266 wireless gateway
    nano nodes Nrf2401 radios

    1 Reply Last reply
    0
    • el tigroE Offline
      el tigroE Offline
      el tigro
      wrote on last edited by el tigro
      #2

      sorted works a treat now. My bad, used a sketch I had tinkered with in the past. sketches melded now. Finished sketch below for them that might need. The sketch is for domestic light swith.

      #define MY_NODE_ID 5
      #define MY_DEBUG
      #define MY_RADIO_NRF24
      #include <SPI.h>
      #include <MySensors.h>
      #include <Bounce2.h>
      #include <DHT.h>
      #define DHT_DATA_PIN 7
      #define CHILD_ID 3
      #define BUTTON_PIN  3
      #define SENSOR_TEMP_OFFSET 0
      #define CHILD_ID_TEMP 1
      Bounce debouncer = Bounce();
      static const uint64_t UPDATE_INTERVAL = 5000;
      static const uint8_t FORCE_UPDATE_N_READS = 2;
      float lastTemp;
      unsigned long interval = 5000;
      unsigned long previousMillis = 0;
      uint8_t nNoUpdatesTemp;
      int oldValue = -1;
      bool metric = true;
      MyMessage msg(CHILD_ID, V_LIGHT);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      DHT dht;
      
      
      void presentation()
      {
        sendSketchInfo("kitchen Lights", "1.1");
        present(CHILD_ID, S_LIGHT);
        present(CHILD_ID_TEMP, S_TEMP);
        metric = getConfig().isMetric;
      }
      
      void setup()
      {
        pinMode(BUTTON_PIN, INPUT);
        digitalWrite(BUTTON_PIN, HIGH);
        debouncer.attach(BUTTON_PIN);
        debouncer.interval(5);
        dht.setup(DHT_DATA_PIN);
        if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
          Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
        }
      }
      
      void loop()
      {
        debouncer.update();
        int value = debouncer.read();
        if (value != oldValue) {
          send(msg.set(value == HIGH ? 1 : 0));
          oldValue = value;
        }
        unsigned long currentMillis = millis();
        if ((unsigned long)(currentMillis - previousMillis) >= interval) {
          dht.readSensor(true);
          float temperature = dht.getTemperature();
          if (isnan(temperature)) {
            Serial.println("Failed reading temperature from DHT!");
          } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
            lastTemp = temperature;
            if (!metric) {
              temperature = dht.toFahrenheit(temperature);
            }
            nNoUpdatesTemp = 0;
            temperature += SENSOR_TEMP_OFFSET;
            send(msgTemp.set(temperature, 1));
      #ifdef MY_DEBUG
            Serial.print("T: ");
            Serial.println(temperature);
      #endif
          } else {
            nNoUpdatesTemp++;
          }
          previousMillis = millis();
        }
      }
      
      1 Reply Last reply
      1
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      22

      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