domoticz dht22 support

This commit is contained in:
livello
2018-10-16 11:36:59 +03:00
parent 41df3b701e
commit 2bf6050f50
5 changed files with 39 additions and 31 deletions

View File

@@ -20,10 +20,11 @@ e-mail anklimov@gmail.com
#include "inputs.h" #include "inputs.h"
#include "item.h" #include "item.h"
#include "utils.h"
#include <PubSubClient.h> #include <PubSubClient.h>
#ifndef DHT_DISABLE #ifndef DHT_DISABLE
#if defined(ESP8266) || defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
#include <DHTesp.h> #include <DHTesp.h>
#else #else
#include "DHT.h" #include "DHT.h"
@@ -149,7 +150,7 @@ void Input::counterPoll() {
return; return;
} }
long counterValue = counter_value[pin]; long counterValue = counter_value[pin];
Serial.print(F("IN:"));Serial.print(pin);Serial.print(F(" Counter type. val="));Serial.print(counterValue); debugSerial<<F("IN:")<<(pin)<<F(" Counter type. val=")<<counterValue;
aJsonObject *emit = aJson.getObjectItem(inputObj, "emit"); aJsonObject *emit = aJson.getObjectItem(inputObj, "emit");
if (emit) { if (emit) {
@@ -159,10 +160,10 @@ void Input::counterPoll() {
sprintf(valstr, "%d", counterValue); sprintf(valstr, "%d", counterValue);
mqttClient.publish(addrstr, valstr); mqttClient.publish(addrstr, valstr);
setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT); setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT);
Serial.print(F(" NextPollMillis="));Serial.println(nextPollTime()); debugSerial<<F(" NextPollMillis=")<<nextPollTime();
} }
else else
Serial.print(F(" No emit data!")); debugSerial<<F(" No emit data!");
} }
void Input::attachInterruptPinIrq(int realPin, int irq) { void Input::attachInterruptPinIrq(int realPin, int irq) {
@@ -207,24 +208,27 @@ void Input::dht22Poll() {
DHTesp dhtSensor; DHTesp dhtSensor;
dhtSensor.setup(pin, DHTesp::DHT22); dhtSensor.setup(pin, DHTesp::DHT22);
TempAndHumidity dhtSensorData = dhtSensor.getTempAndHumidity(); TempAndHumidity dhtSensorData = dhtSensor.getTempAndHumidity();
float temp = dhtSensorData.temperature; float temp = roundf(dhtSensorData.temperature*10)/10;
float humidity = dhtSensorData.humidity; float humidity = roundf(dhtSensorData.humidity);
#else #else
DHT dht(pin, DHT22); DHT dht(pin, DHT22);
float temp = dht.readTemperature(); float temp = dht.readTemperature();
float humidity = dht.readHumidity(); float humidity = dht.readHumidity();
#endif #endif
aJsonObject *emit = aJson.getObjectItem(inputObj, "emit"); aJsonObject *emit = aJson.getObjectItem(inputObj, "emit");
Serial.print(F("IN:")); aJsonObject *idx = aJson.getObjectItem(inputObj, "idx");
Serial.print(pin); debugSerial<<F("IN:")<<pin<<F(" DHT22 type. T=")<<temp<<F("°C H=")<<humidity<<F("%");
Serial.print(F(" DHT22 type. T="));
Serial.print(temp);
Serial.print(F("°C H="));
Serial.print(humidity);
Serial.print(F("%"));
if (emit && temp && humidity && temp == temp && humidity == humidity) { if (emit && temp && humidity && temp == temp && humidity == humidity) {
char valstr[10];
char addrstr[100] = ""; char addrstr[100] = "";
if(idx&&idx->valuestring){//DOMOTICZ json format support
debugSerial<<endl<<idx->valuestring<<F(" Domoticz valstr:");
char valstr[80];
sprintf( valstr, "{\"command\":\"udevice\",\"idx\":%s,\"svalue\":\"%.1f;%.0f;0\"}",idx->valuestring,temp,humidity);
debugSerial<<valstr;
mqttClient.publish(emit->valuestring, valstr);
}
else {
char valstr[10];
strcat(addrstr, emit->valuestring); strcat(addrstr, emit->valuestring);
strcat(addrstr, "T"); strcat(addrstr, "T");
printFloatValueToStr(temp, valstr); printFloatValueToStr(temp, valstr);
@@ -232,9 +236,10 @@ void Input::dht22Poll() {
addrstr[strlen(addrstr) - 1] = 'H'; addrstr[strlen(addrstr) - 1] = 'H';
printFloatValueToStr(humidity, valstr); printFloatValueToStr(humidity, valstr);
mqttClient.publish(addrstr, valstr); mqttClient.publish(addrstr, valstr);
}
setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT); setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT);
Serial.print(" NextPollMillis="); debugSerial<<" NextPollMillis="<<nextPollTime()<<endl;
Serial.println(nextPollTime());
} else } else
setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT / 3); setNextPollTime(millis() + DHT_POLL_DELAY_DEFAULT / 3);
#endif #endif

View File

@@ -68,12 +68,7 @@ PWM Out
#include "main.h" #include "main.h"
#include "options.h" #include "options.h"
#include "utils.h" #include "utils.h"
#ifdef WITH_STREAMING_LIB
#include "Streaming.h"
#else
#include "PrintEx.h"
using namespace ios;
#endif
#if defined(__SAM3X8E__) #if defined(__SAM3X8E__)

View File

@@ -24,6 +24,12 @@ e-mail anklimov@gmail.com
#define VAR_NAME_VALUE(var) #var "=" VALUE(var) #define VAR_NAME_VALUE(var) #var "=" VALUE(var)
#include <Arduino.h> #include <Arduino.h>
#ifdef WITH_STREAMING_LIB
#include "Streaming.h"
#else
#include "PrintEx.h"
using namespace ios;
#endif
void PrintBytes(uint8_t* addr, uint8_t count, bool newline); void PrintBytes(uint8_t* addr, uint8_t count, bool newline);
void SetBytes(uint8_t* addr, uint8_t count, char * out); void SetBytes(uint8_t* addr, uint8_t count, char * out);

2
mosquitto_examples.sh Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
mosquitto_pub -t 'domoticz/in' -h broker_url -p port -u user -P pass -m '{"command": "udevice", "idx": 20, "svalue": "15"}'

View File

@@ -11,9 +11,9 @@
src_dir = lighthub src_dir = lighthub
env_default = env_default =
; megaatmega2560 ; megaatmega2560
megaatmega2560-net ; megaatmega2560-net
; due ; due
; esp8266 esp8266
; esp32 ; esp32
; megaatmega2560-5500 ; megaatmega2560-5500
; due-5500 ; due-5500