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.3k 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

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      11

      Online

      12.0k

      Users

      11.2k

      Topics

      113.4k

      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