combining button with dht11 issue
-
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 -
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(); } }
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