Mqtt discovery for ha (#323)
* MQTT discovery factoring * add DHT discovery * BME topic macro change * add sensors to ha discovery * correct a comment typo #327 * let the possibility at buildtime to don't publish service data * reduce string usage * change MQTT ONOFF actuator to ON OFF commands instead of true false * add ZactuatorONOFF discovery * add simple publishing for GPIO input * Add RF switch and gateway discovery
This commit is contained in:
1 parent
ed44418a7f
commit
133e9cd33a
21 files changed
+442
-201
No files matched your search
+1
-1
@@ -29,7 +29,7 @@ install:
|
||||
- python get.py
|
||||
- cd /usr/local/share/arduino/OpenMQTTGateway
|
||||
- arduino --pref "boardsmanager.additional.urls=http://arduino.esp8266.com/stable/package_esp8266com_index.json" --save-prefs
|
||||
- arduino --install-boards esp8266:esp8266
|
||||
- arduino --install-boards esp8266:esp8266:2.4.2
|
||||
- arduino --board $BD --save-prefs
|
||||
script:
|
||||
- arduino --verify --board $BD $PWD/OpenMQTTGateway.ino
|
||||
|
||||
+36
-36
@@ -69,11 +69,9 @@
|
||||
|
||||
// array to store previous received RFs, IRs codes and their timestamps
|
||||
#if defined(ESP8266) || defined(ESP32) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
|
||||
#define MQTT_MAX_PACKET_SIZE 1024
|
||||
#define array_size 12
|
||||
unsigned long ReceivedSignal[array_size][2] ={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}};
|
||||
#else // boards with smaller memory
|
||||
#define MQTT_MAX_PACKET_SIZE 256
|
||||
#define array_size 4
|
||||
unsigned long ReceivedSignal[array_size][2] ={{0,0},{0,0},{0,0},{0,0}};
|
||||
#endif
|
||||
@@ -207,10 +205,6 @@ boolean reconnect() {
|
||||
pub(will_Topic,Gateway_AnnouncementMsg,will_Retain);
|
||||
// publish version
|
||||
pub(version_Topic,OMG_VERSION,will_Retain);
|
||||
//home assistant discovery
|
||||
#ifdef ZmqttDiscovery
|
||||
pubMqttDiscovery();
|
||||
#endif
|
||||
|
||||
//Subscribing to topic
|
||||
if (client.subscribe(subjectMQTTtoX)) {
|
||||
@@ -419,6 +413,8 @@ void setup()
|
||||
|
||||
trc(F("MQTT_MAX_PACKET_SIZE"));
|
||||
trc(MQTT_MAX_PACKET_SIZE);
|
||||
trc(F("JSON_MSG_BUFFER"));
|
||||
trc(JSON_MSG_BUFFER);
|
||||
trc(F("Setup OpenMQTTGateway end"));
|
||||
}
|
||||
|
||||
@@ -793,6 +789,7 @@ void stateMeasures(){
|
||||
#endif
|
||||
#ifdef ZmqttDiscovery
|
||||
modules = modules + ZmqttDiscovery;
|
||||
pubMqttDiscovery();
|
||||
#endif
|
||||
SYSdata["modules"] = modules;
|
||||
trc(modules);
|
||||
@@ -873,7 +870,6 @@ void receivingMQTT(char * topicOri, char * datacallback) {
|
||||
//YELLOW ON
|
||||
digitalWrite(led_send, LOW);
|
||||
|
||||
trc(F("Creating Json buffer"));
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject& jsondata = jsonBuffer.parseObject(datacallback);
|
||||
|
||||
@@ -903,37 +899,37 @@ void receivingMQTT(char * topicOri, char * datacallback) {
|
||||
#ifdef ZgatewayRFM69
|
||||
MQTTtoRFM69(topicOri, jsondata);
|
||||
#endif
|
||||
#ifdef ZactuatorONOFF
|
||||
#endif
|
||||
#ifdef ZactuatorONOFF // outside the jsonpublishing macro due to the fact that we need to use simplepublishing with HA discovery
|
||||
MQTTtoONOFF(topicOri, jsondata);
|
||||
#endif
|
||||
#endif
|
||||
} else { // not a json object --> simple decoding
|
||||
#ifdef simplePublishing
|
||||
#ifdef ZgatewayRF
|
||||
MQTTtoRF(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayRF315
|
||||
MQTTtoRF315(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayRF2
|
||||
MQTTtoRF2(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef Zgateway2G
|
||||
MQTTto2G(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewaySRFB
|
||||
MQTTtoSRFB(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayIR
|
||||
MQTTtoIR(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayRFM69
|
||||
MQTTtoRFM69(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZactuatorONOFF
|
||||
MQTTtoONOFF(topicOri, datacallback);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef simplepublishing
|
||||
#ifdef ZgatewayRF
|
||||
MQTTtoRF(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayRF315
|
||||
MQTTtoRF315(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayRF2
|
||||
MQTTtoRF2(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef Zgateway2G
|
||||
MQTTto2G(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewaySRFB
|
||||
MQTTtoSRFB(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayIR
|
||||
MQTTtoIR(topicOri, datacallback);
|
||||
#endif
|
||||
#ifdef ZgatewayRFM69
|
||||
MQTTtoRFM69(topicOri, datacallback);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ZactuatorONOFF
|
||||
MQTTtoONOFF(topicOri, datacallback);
|
||||
#endif
|
||||
}
|
||||
//YELLOW OFF
|
||||
digitalWrite(led_send, HIGH);
|
||||
@@ -1054,7 +1050,7 @@ void pub(char * topicori, JsonObject& data){
|
||||
#if defined(ESP8266)
|
||||
yield();
|
||||
#endif
|
||||
if (p.value.is<unsigned long>() || p.value.is<int>()) {
|
||||
if (p.value.is<unsigned long>() && strcmp(p.key, "rssi") != 0) { //test rssi , bypass solution due to the fact that a int is considered as an unsigned long
|
||||
trc(p.key);
|
||||
trc(p.value.as<unsigned long>());
|
||||
if (strcmp(p.key, "value") == 0){ // if data is a value we don't integrate the name into the topic
|
||||
@@ -1062,6 +1058,10 @@ void pub(char * topicori, JsonObject& data){
|
||||
}else{ // if data is not a value we integrate the name into the topic
|
||||
pub(topic + "/" + String(p.key),p.value.as<unsigned long>());
|
||||
}
|
||||
}else if (p.value.is<int>()) {
|
||||
trc(p.key);
|
||||
trc(p.value.as<int>());
|
||||
pub(topic + "/" + String(p.key),p.value.as<int>());
|
||||
} else if (p.value.is<float>()) {
|
||||
trc(p.key);
|
||||
trc(p.value.as<float>());
|
||||
|
||||
+6
-13
@@ -38,14 +38,13 @@ void setupONOFF(){
|
||||
trc(F("ZactuatorONOFF setup done "));
|
||||
}
|
||||
|
||||
#ifdef simplePublishing
|
||||
void MQTTtoONOFF(char * topicOri, char * datacallback){
|
||||
|
||||
bool boolSWITCHTYPE;
|
||||
boolSWITCHTYPE = to_bool(datacallback);
|
||||
String topic = topicOri;
|
||||
|
||||
if (topic == subjectMQTTtoONOFF){
|
||||
int boolSWITCHTYPE;
|
||||
if (strcmp(datacallback, "ON") == 0) boolSWITCHTYPE = 1;
|
||||
if (strcmp(datacallback, "OFF") == 0) boolSWITCHTYPE = 0;
|
||||
|
||||
if (strcmp(topicOri,subjectMQTTtoONOFF) == 0){
|
||||
trc(F("MQTTtoONOFF data analysis"));
|
||||
trc(boolSWITCHTYPE);
|
||||
digitalWrite(ACTUATOR_ONOFF_PIN, boolSWITCHTYPE);
|
||||
@@ -53,14 +52,9 @@ void setupONOFF(){
|
||||
pub(subjectGTWONOFFtoMQTT, datacallback);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef jsonPublishing
|
||||
void MQTTtoONOFF(char * topicOri, JsonObject& ONOFFdata){
|
||||
|
||||
String topic = topicOri;
|
||||
|
||||
if (topic == subjectMQTTtoONOFF){
|
||||
if (strcmp(topicOri,subjectMQTTtoONOFF) == 0){
|
||||
trc(F("MQTTtoONOFF json data analysis"));
|
||||
int boolSWITCHTYPE = ONOFFdata["switchType"] | 99;
|
||||
if (boolSWITCHTYPE != 99) {
|
||||
@@ -75,4 +69,3 @@ void setupONOFF(){
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
+1
-2
@@ -135,8 +135,7 @@ boolean _2GtoMQTT(){
|
||||
#ifdef jsonPublishing
|
||||
void MQTTto2G(char * topicOri, JsonObject& SMSdata) {
|
||||
|
||||
String topic = topicOri;
|
||||
if (topic == subjectMQTTto2G) {
|
||||
if (strcmp(topicOri,subjectMQTTto2G) == 0){
|
||||
const char * sms = SMSdata["message"];
|
||||
const char * phone = SMSdata["phone"];
|
||||
trc(F("MQTTto2G json data analysis"));
|
||||
|
||||
+7
-5
@@ -89,10 +89,10 @@ Thanks to wolass https://github.com/wolass for suggesting me HM 10 and dinosd ht
|
||||
char service_data[returnedString.length()+1];
|
||||
returnedString.toCharArray(service_data,returnedString.length()+1);
|
||||
service_data[returnedString.length()] = '\0';
|
||||
BLEdata.set("servicedata", service_data);
|
||||
|
||||
BLEdata.set("servicedatauuid", (char *)advertisedDevice.getServiceDataUUID().toString().c_str());
|
||||
|
||||
#ifdef pubBLEServiceData
|
||||
BLEdata.set("servicedata", service_data);
|
||||
BLEdata.set("servicedatauuid", (char *)advertisedDevice.getServiceDataUUID().toString().c_str());
|
||||
#endif
|
||||
pub((char *)mactopic.c_str(),BLEdata);
|
||||
|
||||
if (strstr(BLEdata["servicedatauuid"].as<char*>(),"fe95") != NULL){
|
||||
@@ -259,7 +259,9 @@ boolean BTtoMQTT() {
|
||||
#endif
|
||||
String Service_data(d[5].extract);
|
||||
Service_data = Service_data.substring(14);
|
||||
BLEdata.set("servicedata", (char *)Service_data.c_str());
|
||||
#ifdef pubBLEServiceData
|
||||
BLEdata.set("servicedata", (char *)Service_data.c_str());
|
||||
#endif
|
||||
pub((char *)topic.c_str(),BLEdata);
|
||||
if (strcmp(d[4].extract, "fe95") == 0) {
|
||||
int pos = -1;
|
||||
|
||||
+3
-3
@@ -62,10 +62,10 @@ void pilightCallback(const String &protocol, const String &message, int status,
|
||||
}
|
||||
|
||||
void MQTTtoPilight(char * topicOri, JsonObject& Pilightdata) {
|
||||
String topic = topicOri;
|
||||
|
||||
int result = 0;
|
||||
|
||||
if (topic == subjectMQTTtoPilight) {
|
||||
|
||||
if (strcmp(topicOri,subjectMQTTtoPilight) == 0){
|
||||
trc(F("MQTTtoPilight json data analysis"));
|
||||
const char * message = Pilightdata["message"];
|
||||
const char * protocol = Pilightdata["protocol"];
|
||||
|
||||
+23
-4
@@ -68,7 +68,10 @@ void RFtoMQTT(){
|
||||
|
||||
unsigned long MQTTvalue = RFdata.get<unsigned long>("value");
|
||||
if (!isAduplicate(MQTTvalue) && MQTTvalue!=0) {// conditions to avoid duplications of RF -->MQTT
|
||||
trc(F("Adv data RFtoMQTT"));
|
||||
trc(F("Adv data RFtoMQTT"));
|
||||
#ifdef ZmqttDiscovery //component creation for HA
|
||||
RFtoMQTTdiscovery(MQTTvalue);
|
||||
#endif
|
||||
pub(subjectRFtoMQTT,RFdata);
|
||||
if (repeatRFwMQTT){
|
||||
trc(F("Publish RF for repeat"));
|
||||
@@ -78,6 +81,24 @@ void RFtoMQTT(){
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ZmqttDiscovery
|
||||
void RFtoMQTTdiscovery(unsigned long MQTTvalue){//on the fly switch creation from received RF values
|
||||
char val[11];
|
||||
sprintf(val, "%lu", MQTTvalue);
|
||||
trc(F("switchRFDiscovery"));
|
||||
char * switchRF[8] = {"switch", val, "", "","",val, "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySwitch"));
|
||||
trc(switchRF[1]);
|
||||
createDiscovery(switchRF[0],
|
||||
subjectRFtoMQTT, switchRF[1], (char *)getUniqueId(switchRF[1], switchRF[2]).c_str(),
|
||||
will_Topic, switchRF[3], switchRF[4],
|
||||
switchRF[5], switchRF[6], switchRF[7],
|
||||
true, false, 0,"","",true,subjectMQTTtoRF);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef simplePublishing
|
||||
void MQTTtoRF(char * topicOri, char * datacallback) {
|
||||
|
||||
@@ -137,9 +158,7 @@ void MQTTtoRF(char * topicOri, char * datacallback) {
|
||||
#ifdef jsonPublishing
|
||||
void MQTTtoRF(char * topicOri, JsonObject& RFdata) { // json object decoding
|
||||
|
||||
String topic = topicOri;
|
||||
|
||||
if (topic == subjectMQTTtoRF) {
|
||||
if (strcmp(topicOri,subjectMQTTtoRF) == 0){
|
||||
trc(F("MQTTtoRF json data analysis"));
|
||||
unsigned long data = RFdata["value"];
|
||||
if (data != 0) {
|
||||
|
||||
+1
-3
@@ -217,9 +217,7 @@ void rf2Callback(unsigned int period, unsigned long address, unsigned long group
|
||||
#ifdef jsonPublishing
|
||||
void MQTTtoRF2(char * topicOri, JsonObject& RF2data) { // json object decoding
|
||||
|
||||
String topic = topicOri;
|
||||
|
||||
if (topic == subjectMQTTtoRF2) {
|
||||
if (strcmp(topicOri,subjectMQTTtoRF2) == 0){
|
||||
trc(F("MQTTtoRF2 json data analysis"));
|
||||
int boolSWITCHTYPE = RF2data["switchType"] | 99;
|
||||
if (boolSWITCHTYPE != 99) {
|
||||
|
||||
+1
-3
@@ -136,9 +136,7 @@ boolean RF315toMQTT(){
|
||||
#ifdef jsonPublishing
|
||||
void MQTTtoRF315(char * topicOri, JsonObject& RF315data) { // json object decoding
|
||||
|
||||
String topic = topicOri;
|
||||
|
||||
if (topic == subjectMQTTtoRF315) {
|
||||
if (strcmp(topicOri,subjectMQTTtoRF315) == 0){
|
||||
trc(F("MQTTtoRF315 json data analysis"));
|
||||
unsigned long data = RF315data["value"];
|
||||
if (data != 0) {
|
||||
|
||||
+1
-3
@@ -231,9 +231,7 @@ boolean RFM69toMQTT(void) {
|
||||
#ifdef jsonPublishing
|
||||
void MQTTtoRFM69(char * topicOri, JsonObject& RFM69data) {
|
||||
|
||||
String topic = topicOri;
|
||||
|
||||
if (topic == subjectMQTTtoRFM69) {
|
||||
if (strcmp(topicOri,subjectMQTTtoRFM69) == 0){
|
||||
const char * data = RFM69data["data"];
|
||||
trc(F("MQTTtoRFM69 json data analysis"));
|
||||
if(data){
|
||||
|
||||
+1
-2
@@ -272,10 +272,9 @@ bool _rfbToChar(byte * in, char * out) {
|
||||
void MQTTtoSRFB(char * topicOri, JsonObject& SRFBdata) {
|
||||
|
||||
// RF DATA ANALYSIS
|
||||
String topic = topicOri;
|
||||
const char * raw = SRFBdata["raw"];
|
||||
int valueRPT = SRFBdata["repeat"]|1;
|
||||
if (topic == subjectMQTTtoSRFB){
|
||||
if (strcmp(topicOri,subjectMQTTtoSRFB) == 0){
|
||||
trc(F("MQTTtoSRFB json data analysis"));
|
||||
if (raw){ // send raw in priority when defined in the json
|
||||
trc(F("MQTTtoSRFB raw ok"));
|
||||
|
||||
+341
-102
@@ -28,120 +28,359 @@
|
||||
|
||||
void pubMqttDiscovery()
|
||||
{
|
||||
#ifdef omgStatus
|
||||
trc(F("omgStatusDiscovery"));
|
||||
createDiscovery("binary_sensor", //set sensorType
|
||||
will_Topic, DEVICENAME, getUniqueId("omg", "status"), //set state_topic,name,uniqueId
|
||||
"", "connectivity", "", //set availability_topic,device_class,value_template,
|
||||
Gateway_AnnouncementMsg, will_Message, "", //set,payload_on,payload_off,unit_of_meas,
|
||||
true, false, 0); //set optimistic,retain, off_delay
|
||||
#endif
|
||||
#ifdef discBme280
|
||||
will_Topic, Gateway_Name, (char *)getUniqueId("", "").c_str(), //set state_topic,name,uniqueId
|
||||
will_Topic, "connectivity", "", //set availability_topic,device_class,value_template,
|
||||
Gateway_AnnouncementMsg, will_Message, "", //set,payload_on,payload_off,unit_of_meas,
|
||||
false, true, 0, //set optimistic,retain, off_delay
|
||||
Gateway_AnnouncementMsg, will_Message,false,"" //set,payload_avalaible,payload_not avalaible ,is a child device, command topic, state on, state off
|
||||
);
|
||||
|
||||
#ifdef ZsensorBME280
|
||||
#define BMEparametersCount 6
|
||||
trc(F("bme280Discovery"));
|
||||
createDiscovery("sensor",
|
||||
BME, "tempc", getUniqueId("bme", "tempc"),
|
||||
will_Topic, "temperature", "{{ value_json.tempc }}",
|
||||
"", "", "°C",
|
||||
true, false, 0);
|
||||
createDiscovery("sensor",
|
||||
BME, "tempf", getUniqueId("bme", "tempf"),
|
||||
will_Topic, "temperature", "{{ value_json.tempf }}",
|
||||
"", "", "°F",
|
||||
true, false, 0);
|
||||
createDiscovery("sensor",
|
||||
BME, "pa", getUniqueId("bme", "pa"),
|
||||
will_Topic, "pressure", "{{ float(value_json.pa) * 0.01 }}",
|
||||
"", "", "hPa",
|
||||
true, false, 0);
|
||||
createDiscovery("sensor",
|
||||
BME, "hum", getUniqueId("bme", "hum"),
|
||||
will_Topic, "humidity", "{{ value_json.hum }}",
|
||||
"", "", "%",
|
||||
true, false, 0);
|
||||
createDiscovery("sensor",
|
||||
BME, "altim", getUniqueId("bme", "altim"),
|
||||
will_Topic, "", "{{ value_json.altim }}",
|
||||
"", "", "m",
|
||||
true, false, 0);
|
||||
createDiscovery("sensor",
|
||||
BME, "altift", getUniqueId("bme", "altift"),
|
||||
will_Topic, "", "{{ value_json.altift }}",
|
||||
"", "", "ft",
|
||||
true, false, 0);
|
||||
char * BMEsensor[BMEparametersCount][8] = {
|
||||
{"sensor", "tempc", "bme","temperature","{{ value_json.tempc }}","", "", "°C"} ,
|
||||
{"sensor", "tempf", "bme","temperature","{{ value_json.tempf }}","", "", "°F"} ,
|
||||
{"sensor", "pa", "bme","","{{ float(value_json.pa) * 0.01 }}","", "", "hPa"} ,
|
||||
{"sensor", "hum", "bme","humidity","{{ value_json.hum }}","", "", "%"} ,
|
||||
{"sensor", "altim", "bme","","{{ value_json.altim }}","", "", "m"} ,
|
||||
{"sensor", "altift", "bme","","{{ value_json.altift }}","", "", "ft"}
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
};
|
||||
|
||||
for (int i=0;i<BMEparametersCount;i++){
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(BMEsensor[i][1]);
|
||||
createDiscovery(BMEsensor[i][0],
|
||||
BMETOPIC, BMEsensor[i][1], (char *)getUniqueId(BMEsensor[i][1], BMEsensor[i][2]).c_str(),
|
||||
will_Topic, BMEsensor[i][3], BMEsensor[i][4],
|
||||
BMEsensor[i][5], BMEsensor[i][6], BMEsensor[i][7],
|
||||
true, false, 0,"","",true,"");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorDHT
|
||||
#define DHTparametersCount 2
|
||||
trc(F("DHTDiscovery"));
|
||||
char * DHTsensor[DHTparametersCount][8] = {
|
||||
{"sensor", "tempc", "dht", "temperature","{{ value_json.temp }}","", "", "°C"} ,
|
||||
{"sensor", "hum", "dht", "humidity","{{ value_json.hum }}","", "", "%"}
|
||||
};
|
||||
|
||||
for (int i=0;i<DHTparametersCount;i++){
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(DHTsensor[i][1]);
|
||||
createDiscovery(DHTsensor[i][0],
|
||||
DHTTOPIC, DHTsensor[i][1], (char *)getUniqueId(DHTsensor[i][1], DHTsensor[i][2]).c_str(),
|
||||
will_Topic, DHTsensor[i][3], DHTsensor[i][4],
|
||||
DHTsensor[i][5], DHTsensor[i][6], DHTsensor[i][7],
|
||||
true, false, 0,"","",true,"");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorADC
|
||||
trc(F("ADCDiscovery"));
|
||||
char * ADCsensor[8] = {"sensor", "adc", "adc", "","{{ value_json.adc }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(ADCsensor[1]);
|
||||
createDiscovery(ADCsensor[0],
|
||||
ADCTOPIC, ADCsensor[1], (char *)getUniqueId(ADCsensor[1], ADCsensor[2]).c_str(),
|
||||
will_Topic, ADCsensor[3], ADCsensor[4],
|
||||
ADCsensor[5], ADCsensor[6], ADCsensor[7],
|
||||
true, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorBH1750
|
||||
#define BH1750parametersCount 3
|
||||
trc(F("BH1750Discovery"));
|
||||
char * BH1750sensor[BH1750parametersCount][8] = {
|
||||
{"sensor", "lux", "BH1750", "illuminance","{{ value_json.lux }}","", "", "lu"} ,
|
||||
{"sensor", "ftCd", "BH1750","","{{ value_json.ftCd }}","", "", ""} ,
|
||||
{"sensor", "wattsm2", "BH1750","","{{ value_json.wattsm2 }}","", "", "wm²"}
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
};
|
||||
|
||||
for (int i=0;i<BH1750parametersCount;i++){
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(BH1750sensor[i][1]);
|
||||
createDiscovery(BH1750sensor[i][0],
|
||||
subjectBH1750toMQTT, BH1750sensor[i][1], (char *)getUniqueId(BH1750sensor[i][1], BH1750sensor[i][2]).c_str(),
|
||||
will_Topic, BH1750sensor[i][3], BH1750sensor[i][4],
|
||||
BH1750sensor[i][5], BH1750sensor[i][6], BH1750sensor[i][7],
|
||||
true, false, 0,"","",true,"");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorTSL2561
|
||||
#define TSL2561parametersCount 3
|
||||
trc(F("TSL2561Discovery"));
|
||||
char * TSL2561sensor[TSL2561parametersCount][8] = {
|
||||
{"sensor", "lux", "TSL2561", "illuminance","{{ value_json.lux }}","", "", "lu"} ,
|
||||
{"sensor", "ftcd", "TSL2561","","{{ value_json.ftcd }}","", "", ""} ,
|
||||
{"sensor", "wattsm2", "TSL2561","","{{ value_json.wattsm2 }}","", "", "wm²"}
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
};
|
||||
|
||||
for (int i=0;i<TSL2561parametersCount;i++){
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(TSL2561sensor[i][1]);
|
||||
createDiscovery(TSL2561sensor[i][0],
|
||||
subjectTSL12561toMQTT, TSL2561sensor[i][1], (char *)getUniqueId(TSL2561sensor[i][1], TSL2561sensor[i][2]).c_str(),
|
||||
will_Topic, TSL2561sensor[i][3], TSL2561sensor[i][4],
|
||||
TSL2561sensor[i][5], TSL2561sensor[i][6], TSL2561sensor[i][7],
|
||||
true, false, 0,"","",true,"");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorHCSR501
|
||||
trc(F("HCSR501Discovery"));
|
||||
char * HCSR501sensor[8] = {"binary_sensor", "hcsr501", "hcsr501", "","","true", "false", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(HCSR501sensor[1]);
|
||||
createDiscovery(HCSR501sensor[0],
|
||||
subjectHCSR501toMQTT, HCSR501sensor[1], (char *)getUniqueId(HCSR501sensor[1], HCSR501sensor[2]).c_str(),
|
||||
will_Topic, HCSR501sensor[3], HCSR501sensor[4],
|
||||
HCSR501sensor[5], HCSR501sensor[6], HCSR501sensor[7],
|
||||
true, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorGPIOInput
|
||||
trc(F("GPIOInputDiscovery"));
|
||||
char * GPIOInputsensor[8] = {"binary_sensor", "GPIOInput", "GPIOInput", "","","true", "false", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(GPIOInputsensor[1]);
|
||||
createDiscovery(GPIOInputsensor[0],
|
||||
subjectGPIOInputtoMQTT, GPIOInputsensor[1], (char *)getUniqueId(GPIOInputsensor[1], GPIOInputsensor[2]).c_str(),
|
||||
will_Topic, GPIOInputsensor[3], GPIOInputsensor[4],
|
||||
GPIOInputsensor[5], GPIOInputsensor[6], GPIOInputsensor[7],
|
||||
true, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZsensorINA226
|
||||
#define INA226parametersCount 3
|
||||
trc(F("INA226Discovery"));
|
||||
char * INA226sensor[INA226parametersCount][8] = {
|
||||
{"sensor", "volt", "INA226", "","{{ value_json.volt }}","", "", "V"} ,
|
||||
{"sensor", "current", "INA226","","{{ value_json.current }}","", "", "A"} ,
|
||||
{"sensor", "power", "INA226","","{{ value_json.power }}","", "", "W"}
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
};
|
||||
|
||||
for (int i=0;i<INA226parametersCount;i++){
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(INA226sensor[i][1]);
|
||||
createDiscovery(INA226sensor[i][0],
|
||||
subjectINA226toMQTT, INA226sensor[i][1], (char *)getUniqueId(INA226sensor[i][1], INA226sensor[i][2]).c_str(),
|
||||
will_Topic, INA226sensor[i][3], INA226sensor[i][4],
|
||||
INA226sensor[i][5], INA226sensor[i][6], INA226sensor[i][7],
|
||||
true, false, 0,"","",true,"");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ZactuatorONOFF
|
||||
trc(F("actuatorONOFFDiscovery"));
|
||||
char * actuatorONOFF[8] = {"switch", "actuatorONOFF", "", "","","ON", "OFF", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(actuatorONOFF[1]);
|
||||
createDiscovery(actuatorONOFF[0],
|
||||
subjectGTWONOFFtoMQTT, actuatorONOFF[1], (char *)getUniqueId(actuatorONOFF[1], actuatorONOFF[2]).c_str(),
|
||||
will_Topic, actuatorONOFF[3], actuatorONOFF[4],
|
||||
actuatorONOFF[5], actuatorONOFF[6], actuatorONOFF[7],
|
||||
false, true, 0,"","",true,subjectMQTTtoONOFF);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ZgatewayRF
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayRFDiscovery"));
|
||||
char * gatewayRF[8] = {"sensor", "gatewayRF", "", "","{{ value_json.value }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayRF[1]);
|
||||
createDiscovery(gatewayRF[0],
|
||||
subjectRFtoMQTT, gatewayRF[1], (char *)getUniqueId(gatewayRF[1], gatewayRF[2]).c_str(),
|
||||
will_Topic, gatewayRF[3], gatewayRF[4],
|
||||
gatewayRF[5], gatewayRF[6], gatewayRF[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewayRF2
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayRF2Discovery"));
|
||||
char * gatewayRF2[8] = {"sensor", "gatewayRF2", "", "","{{ value_json.value }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayRF2[1]);
|
||||
createDiscovery(gatewayRF2[0],
|
||||
subjectRF2toMQTT, gatewayRF2[1], (char *)getUniqueId(gatewayRF2[1], gatewayRF2[2]).c_str(),
|
||||
will_Topic, gatewayRF2[3], gatewayRF2[4],
|
||||
gatewayRF2[5], gatewayRF2[6], gatewayRF2[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewayRF315
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayRF315Discovery"));
|
||||
char * gatewayRF315[8] = {"sensor", "gatewayRF315", "", "","{{ value_json.value }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayRF315[1]);
|
||||
createDiscovery(gatewayRF315[0],
|
||||
subjectRF315toMQTT, gatewayRF315[1], (char *)getUniqueId(gatewayRF315[1], gatewayRF315[2]).c_str(),
|
||||
will_Topic, gatewayRF315[3], gatewayRF315[4],
|
||||
gatewayRF315[5], gatewayRF315[6], gatewayRF315[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewayRFM69
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayRFM69Discovery"));
|
||||
char * gatewayRFM69[8] = {"sensor", "gatewayRFM69", "", "","{{ value_json.value }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayRFM69[1]);
|
||||
createDiscovery(gatewayRFM69[0],
|
||||
subjectRFM69toMQTT, gatewayRFM69[1], (char *)getUniqueId(gatewayRFM69[1], gatewayRFM69[2]).c_str(),
|
||||
will_Topic, gatewayRFM69[3], gatewayRFM69[4],
|
||||
gatewayRFM69[5], gatewayRFM69[6], gatewayRFM69[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewaySRFB
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewaySRFBDiscovery"));
|
||||
char * gatewaySRFB[8] = {"sensor", "gatewaySRFB", "", "","{{ value_json.value }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewaySRFB[1]);
|
||||
createDiscovery(gatewaySRFB[0],
|
||||
subjectSRFBtoMQTT, gatewaySRFB[1], (char *)getUniqueId(gatewaySRFB[1], gatewaySRFB[2]).c_str(),
|
||||
will_Topic, gatewaySRFB[3], gatewaySRFB[4],
|
||||
gatewaySRFB[5], gatewaySRFB[6], gatewaySRFB[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewayPilight
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayPilightDiscovery"));
|
||||
char * gatewayPilight[8] = {"sensor", "gatewayPilight", "", "","{{ value_json.message }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayPilight[1]);
|
||||
createDiscovery(gatewayPilight[0],
|
||||
subjectPilighttoMQTT, gatewayPilight[1], (char *)getUniqueId(gatewayPilight[1], gatewayPilight[2]).c_str(),
|
||||
will_Topic, gatewayPilight[3], gatewayPilight[4],
|
||||
gatewayPilight[5], gatewayPilight[6], gatewayPilight[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewayIR
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayIRDiscovery"));
|
||||
char * gatewayIR[8] = {"sensor", "gatewayIR", "", "","{{ value_json.value }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayIR[1]);
|
||||
createDiscovery(gatewayIR[0],
|
||||
subjectIRtoMQTT, gatewayIR[1], (char *)getUniqueId(gatewayIR[1], gatewayIR[2]).c_str(),
|
||||
will_Topic, gatewayIR[3], gatewayIR[4],
|
||||
gatewayIR[5], gatewayIR[6], gatewayIR[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef Zgateway2G
|
||||
// Sensor to display RF received value
|
||||
trc(F("gateway2GDiscovery"));
|
||||
char * gateway2G[8] = {"sensor", "gateway2G", "", "","{{ value_json.message }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gateway2G[1]);
|
||||
createDiscovery(gateway2G[0],
|
||||
subject2GtoMQTT, gateway2G[1], (char *)getUniqueId(gateway2G[1], gateway2G[2]).c_str(),
|
||||
will_Topic, gateway2G[3], gateway2G[4],
|
||||
gateway2G[5], gateway2G[6], gateway2G[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
|
||||
#ifdef ZgatewayBT
|
||||
// Sensor to display RF received value
|
||||
trc(F("gatewayBTDiscovery"));
|
||||
char * gatewayBT[8] = {"sensor", "gatewayBT", "", "","{{ value_json.message }}","", "", ""};
|
||||
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement
|
||||
|
||||
trc(F("CreateDiscoverySensor"));
|
||||
trc(gatewayBT[1]);
|
||||
createDiscovery(gatewayBT[0],
|
||||
subjectBTtoMQTT, gatewayBT[1], (char *)getUniqueId(gatewayBT[1], gatewayBT[2]).c_str(),
|
||||
will_Topic, gatewayBT[3], gatewayBT[4],
|
||||
gatewayBT[5], gatewayBT[6], gatewayBT[7],
|
||||
false, false, 0,"","",true,"");
|
||||
#endif
|
||||
}
|
||||
|
||||
void createDiscovery(String sensor_type,
|
||||
String state_topic, String name, String unique_id,
|
||||
String availability_topic, String device_class, String value_template,
|
||||
String payload_on, String payload_off, String unit_of_meas,
|
||||
bool optimistic, bool retain, int off_delay)
|
||||
void createDiscovery(char * sensor_type,
|
||||
char * state_topic, char * s_name, char * unique_id,
|
||||
char * availability_topic, char * device_class, char * value_template,
|
||||
char * payload_on, char * payload_off, char * unit_of_meas,
|
||||
bool optimistic, bool retain, int off_delay,
|
||||
char * payload_available, char * payload_not_avalaible, boolean child_device , char * command_topic)
|
||||
{
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonBuffer3;
|
||||
JsonObject &sensor = jsonBuffer3.createObject();
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject &sensor = jsonBuffer.createObject();
|
||||
sensor.set("stat_t", state_topic); //state_topic
|
||||
sensor.set("name", name); //name
|
||||
sensor.set("name", s_name); //name
|
||||
sensor.set("uniq_id", unique_id); //unique_id
|
||||
if (availability_topic != "")
|
||||
{
|
||||
sensor.set("avty_t", availability_topic); //availability_topic
|
||||
}
|
||||
if (device_class != "")
|
||||
{
|
||||
sensor.set("dev_cla", device_class); //device_class
|
||||
}
|
||||
if (value_template != "")
|
||||
{
|
||||
sensor.set("val_tpl", value_template); //value_template
|
||||
}
|
||||
if (payload_on != "")
|
||||
{
|
||||
sensor.set("pl_on", payload_on); // payload_on
|
||||
}
|
||||
if (payload_off != "")
|
||||
{
|
||||
sensor.set("pl_off", payload_off); //payload_off
|
||||
}
|
||||
if (unit_of_meas != "")
|
||||
{
|
||||
sensor.set("unit_of_meas", unit_of_meas); //unit_of_measurement
|
||||
}
|
||||
if (optimistic != true)
|
||||
{
|
||||
sensor.set("opt", optimistic); //optimistic
|
||||
}
|
||||
if (retain != false)
|
||||
{
|
||||
sensor.set("ret", retain); //retain
|
||||
}
|
||||
if (off_delay > 0)
|
||||
{
|
||||
sensor.set("off_delay", off_delay); //off_delay
|
||||
}
|
||||
if (device_class[0]) sensor.set("dev_cla", device_class); //device_class
|
||||
if (value_template[0]) sensor.set("val_tpl", value_template); //value_template
|
||||
if (payload_on[0]) sensor.set("pl_on", payload_on); // payload_on
|
||||
if (payload_off[0]) sensor.set("pl_off", payload_off); //payload_off
|
||||
if (unit_of_meas[0]) sensor.set("unit_of_meas", unit_of_meas); //unit_of_measurement*/
|
||||
sensor.set("opt", optimistic)|false; //optimistic
|
||||
sensor.set("ret", retain)|false; //retain
|
||||
if (off_delay != 0) sensor.set("off_delay", off_delay); //off_delay
|
||||
if (payload_available[0]) sensor.set("pl_avail", payload_available); // payload_on
|
||||
if (payload_not_avalaible[0]) sensor.set("pl_not_avail", payload_not_avalaible); //payload_off
|
||||
if (command_topic[0]) sensor.set("cmd_t", command_topic); //command_topic
|
||||
|
||||
char JSONmessageBuffer[JSON_MSG_BUFFER];
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonDeviceBuffer;
|
||||
JsonObject &device = jsonDeviceBuffer.createObject();
|
||||
device.set("name", DEVICENAME);
|
||||
device.set("manufacturer", DEVICEMANUFACTURER);
|
||||
device.set("sw_version", OMG_VERSION);
|
||||
JsonArray &identifiers = device.createNestedArray("identifiers");
|
||||
identifiers.add(getMacAddress());
|
||||
/*if (strcmp(s_name, Gateway_Name) == 0){
|
||||
JsonArray &json_attributes = sensor.createNestedArray("json_attributes");
|
||||
json_attributes.add("uptime");
|
||||
json_attributes.add("freemem");
|
||||
json_attributes.add("rssi");
|
||||
json_attributes.add("SSID");
|
||||
}*/
|
||||
|
||||
sensor.set("device", device); //device sensor is connected to
|
||||
|
||||
String topic = (String)discovery_Topic + "/" + sensor_type + "/" + unique_id + "/config";
|
||||
pubDiscovery(topic, sensor);
|
||||
}
|
||||
|
||||
void pubDiscovery(String topicori, JsonObject &data)
|
||||
{
|
||||
char JSONmessageBuffer[JSON_MSG_BUFFER];
|
||||
trc(F("Pub json into:"));
|
||||
trc(topicori);
|
||||
data.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
|
||||
trc(JSONmessageBuffer);
|
||||
client.publish((char *)topicori.c_str(), JSONmessageBuffer, true);
|
||||
if (child_device){
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonDeviceBuffer;
|
||||
JsonObject &device = jsonDeviceBuffer.createObject();
|
||||
device.set("name", Gateway_Name);
|
||||
device.set("manufacturer", DEVICEMANUFACTURER);
|
||||
device.set("sw_version", OMG_VERSION);
|
||||
JsonArray &identifiers = device.createNestedArray("identifiers");
|
||||
identifiers.add(getMacAddress());
|
||||
sensor.set("device", device); //device sensor is connected to
|
||||
}
|
||||
String topic = String(discovery_Topic) + "/" + String(sensor_type) + "/" + String(unique_id) + "/config";
|
||||
pub((char *)topic.c_str(), sensor);
|
||||
}
|
||||
|
||||
String getMacAddress()
|
||||
|
||||
+4
-4
@@ -37,12 +37,12 @@ unsigned long timeadc = 0;
|
||||
|
||||
void MeasureADC(){
|
||||
if (millis() > (timeadc + TimeBetweenReadingADC)) {//retriving value of temperature and humidity of the box from DHT every xUL
|
||||
#if defined(ESP8266)
|
||||
yield();
|
||||
#endif
|
||||
timeadc = millis();
|
||||
static int persistedadc;
|
||||
int val = analogRead(ADC_PIN);
|
||||
#if defined(ESP8266) || defined(ESP32)
|
||||
yield();
|
||||
#endif
|
||||
if (isnan(val)) {
|
||||
trc(F("Failed to read from ADC !"));
|
||||
}else{
|
||||
@@ -51,7 +51,7 @@ void MeasureADC(){
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject& ADCdata = jsonBuffer.createObject();
|
||||
ADCdata.set("adc", (int)val);
|
||||
pub(ADC,ADCdata);
|
||||
pub(ADCTOPIC,ADCdata);
|
||||
persistedadc = val;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -64,7 +64,7 @@ void MeasureLightIntensity()
|
||||
static float persistedlf;
|
||||
static float persistedlw;
|
||||
unsigned int Lux;
|
||||
float FtCd;
|
||||
float ftcd;
|
||||
float Wattsm2;
|
||||
|
||||
// Check if reads failed and exit early (to try again).
|
||||
@@ -78,7 +78,7 @@ void MeasureLightIntensity()
|
||||
|
||||
// Calculate the Values
|
||||
Lux = i/1.2; // Convert to Lux
|
||||
FtCd = Lux/10.764;
|
||||
ftcd = Lux/10.764;
|
||||
Wattsm2 = Lux/683.0;
|
||||
|
||||
/*
|
||||
@@ -104,8 +104,8 @@ void MeasureLightIntensity()
|
||||
}
|
||||
|
||||
// Generate FtCd
|
||||
if(FtCd != persistedlf || bh1750_always){
|
||||
BH1750data.set("ftCd", (unsigned int)FtCd);
|
||||
if(ftcd != persistedlf || bh1750_always){
|
||||
BH1750data.set("ftcd", (unsigned int)ftcd);
|
||||
}else{
|
||||
trc(F("Same ftcd don't send it"));
|
||||
}
|
||||
@@ -119,7 +119,7 @@ void MeasureLightIntensity()
|
||||
if(BH1750data.size()>0) pub(subjectBH1750toMQTT,BH1750data);
|
||||
}
|
||||
persistedll = Lux;
|
||||
persistedlf = FtCd;
|
||||
persistedlf = ftcd;
|
||||
persistedlw = Wattsm2;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -173,7 +173,7 @@ void MeasureTempHumAndPressure()
|
||||
}else{
|
||||
trc(F("Same Altitude Feet don't send it"));
|
||||
}
|
||||
if(BME280data.size()>0) pub(BME,BME280data);
|
||||
if(BME280data.size()>0) pub(BMETOPIC,BME280data);
|
||||
}
|
||||
persisted_bme_tempc = BmeTempC;
|
||||
persisted_bme_tempf = BmeTempF;
|
||||
|
||||
@@ -71,6 +71,7 @@ void MeasureGPIOInput(){
|
||||
if (InputState == LOW) {
|
||||
trc(F("GPIO LOW"));
|
||||
GPIOdata.set("gpio","LOW");
|
||||
pub(subjectGPIOInputtoMQTT,"LOW");
|
||||
}
|
||||
if(GPIOdata.size()>0) pub(subjectGPIOInputtoMQTT,GPIOdata);
|
||||
}
|
||||
|
||||
+3
-3
@@ -81,9 +81,9 @@ void MeasureINA226(){
|
||||
dtostrf(volt,6,3,volt_c);
|
||||
dtostrf(current,6,3,current_c);
|
||||
dtostrf(power,6,3,power_c);
|
||||
INA226data.set("Volt", (char *)volt_c);
|
||||
INA226data.set("Current", (char *)current_c);
|
||||
INA226data.set("Power", (char *)power_c);
|
||||
INA226data.set("volt", (char *)volt_c);
|
||||
INA226data.set("current", (char *)current_c);
|
||||
INA226data.set("power", (char *)power_c);
|
||||
pub(subjectINA226toMQTT,INA226data);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-5
@@ -26,12 +26,9 @@
|
||||
|
||||
/*----------------------------USER PARAMETERS-----------------------------*/
|
||||
/*-------------DEFINE YOUR MQTT PARAMETERS BELOW----------------*/
|
||||
#define ADC Base_Topic Gateway_Name "/ADCtoMQTT"
|
||||
#define TimeBetweenReadingADC 200 // time between 2 ADC readings, minimum 200 to let the time of the ESP to keep the connection
|
||||
#define ADCTOPIC Base_Topic Gateway_Name "/ADCtoMQTT"
|
||||
#define TimeBetweenReadingADC 500 // time between 2 ADC readings, minimum 200 to let the time of the ESP to keep the connection
|
||||
#define ThresholdReadingADC 50 // following the comparison between the previous value and the current one +- the threshold the value will be published or not
|
||||
|
||||
/*-------------------PIN DEFINITIONS----------------------*/
|
||||
#define ADC_PIN A0 //on nodeMCU this is D3 GPIO0
|
||||
|
||||
|
||||
|
||||
+2
-3
@@ -35,13 +35,12 @@
|
||||
ADD ---------> N/C (Not Connected) --> N/C (Not Connected)
|
||||
|
||||
*/
|
||||
|
||||
#define bme280_always true // if false when the current value for light Level (Lux) is the same as previous one don't send it by MQTT
|
||||
#define bme280_always true // if false when the current value of the parameter is the same as previous one don't send it by MQTT
|
||||
#define TimeBetweenReadingbme280 30000
|
||||
|
||||
/*----------------------------USER PARAMETERS-----------------------------*/
|
||||
/*-------------DEFINE YOUR MQTT PARAMETERS BELOW----------------*/
|
||||
#define BME Base_Topic Gateway_Name "/CLIMAtoMQTT/bme"
|
||||
#define BMETOPIC Base_Topic Gateway_Name "/CLIMAtoMQTT/bme"
|
||||
|
||||
//Time used to wait for an interval before resending measured values
|
||||
unsigned long timebme280 = 0;
|
||||
@@ -32,6 +32,7 @@
|
||||
#define ZgatewayBT_v6xx // comment if you don't have a firmware version of HM10/11 >= v601
|
||||
#define delimiter "4f4b2b444953413a"
|
||||
#define delimiter_length 16
|
||||
#define pubBLEServiceData true // comment if you don't want to publish service data (in case you are having too heavy service data) https://github.com/1technophile/OpenMQTTGateway/issues/318#issuecomment-446064707
|
||||
|
||||
/*-------------------HOME ASSISTANT ROOM PRESENCE ----------------------*/
|
||||
// if not commented Home presence integration with HOME ASSISTANT is activated
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
|
||||
*/
|
||||
#define discovery_Topic "homeassistant"
|
||||
#define omgStatus //uncomment to create OMG status sensor
|
||||
#define discBme280 //uncomment to enable bme280 sensors
|
||||
|
||||
#define DEVICENAME "OpenMQTTGateway " Gateway_Name
|
||||
#define DEVICEMANUFACTURER "AnimaVitis"
|
||||
#define DEVICEMANUFACTURER "OMG_community"
|
||||
Reference in new issue
Block a user