[SYS] Implement a central queue (#1767)
to avoid concurrency issues when modules or/and gateways want to publish data
This commit is contained in:
1 parent
ca9ef664ab
commit
029409c0c3
39 files changed
+491
-407
No files matched your search
@@ -36,11 +36,12 @@ void PairedDeviceAdded(byte newID) {
|
||||
Serial.print("ZgatewayWeatherStation: New device paired ");
|
||||
Serial.println(newID, DEC);
|
||||
# endif
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject RFdata = jsonBuffer.to<JsonObject>();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> RFdataBuffer;
|
||||
JsonObject RFdata = RFdataBuffer.to<JsonObject>();
|
||||
RFdata["sensor"] = newID;
|
||||
RFdata["action"] = "paired";
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
RFdata["origin"] = subjectRFtoMQTT;
|
||||
enqueueJsonObject(RFdata);
|
||||
wsdr.pair(NULL, PairedDeviceAdded);
|
||||
}
|
||||
|
||||
@@ -54,12 +55,13 @@ void setupWeatherStation() {
|
||||
void sendWindSpeedData(byte id, float wind_speed, byte battery_status) {
|
||||
unsigned long MQTTvalue = 10000 + round(wind_speed);
|
||||
if (!isAduplicateSignal(MQTTvalue)) { // conditions to avoid duplications of RF -->MQTT
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject RFdata = jsonBuffer.to<JsonObject>();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> RFdataBuffer;
|
||||
JsonObject RFdata = RFdataBuffer.to<JsonObject>();
|
||||
RFdata["sensor"] = id;
|
||||
RFdata["wind_speed"] = wind_speed;
|
||||
RFdata["battery"] = bitRead(battery_status, 0) == 0 ? "OK" : "Low";
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
RFdata["origin"] = subjectRFtoMQTT;
|
||||
enqueueJsonObject(RFdata);
|
||||
Log.trace(F("Store wind speed val: %lu" CR), MQTTvalue);
|
||||
storeSignalValue(MQTTvalue);
|
||||
}
|
||||
@@ -68,12 +70,13 @@ void sendWindSpeedData(byte id, float wind_speed, byte battery_status) {
|
||||
void sendRainData(byte id, float rain_volume, byte battery_status) {
|
||||
unsigned long MQTTvalue = 11000 + round(rain_volume * 10.0);
|
||||
if (!isAduplicateSignal(MQTTvalue)) { // conditions to avoid duplications of RF -->MQTT
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject RFdata = jsonBuffer.to<JsonObject>();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> RFdataBuffer;
|
||||
JsonObject RFdata = RFdataBuffer.to<JsonObject>();
|
||||
RFdata["sensor"] = id;
|
||||
RFdata["rain_volume"] = rain_volume;
|
||||
RFdata["battery"] = bitRead(battery_status, 1) == 0 ? "OK" : "Low";
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
RFdata["origin"] = subjectRFtoMQTT;
|
||||
enqueueJsonObject(RFdata);
|
||||
Log.trace(F("Store rain_volume: %lu" CR), MQTTvalue);
|
||||
storeSignalValue(MQTTvalue);
|
||||
}
|
||||
@@ -82,13 +85,14 @@ void sendRainData(byte id, float rain_volume, byte battery_status) {
|
||||
void sendWindData(byte id, int wind_direction, float wind_gust, byte battery_status) {
|
||||
unsigned long MQTTvalue = 20000 + round(wind_gust * 10.0) + wind_direction;
|
||||
if (!isAduplicateSignal(MQTTvalue)) { // conditions to avoid duplications of RF -->MQTT
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject RFdata = jsonBuffer.to<JsonObject>();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> RFdataBuffer;
|
||||
JsonObject RFdata = RFdataBuffer.to<JsonObject>();
|
||||
RFdata["sensor"] = id;
|
||||
RFdata["wind_direction"] = wind_direction;
|
||||
RFdata["wind_gust"] = wind_gust;
|
||||
RFdata["battery"] = bitRead(battery_status, 0) == 0 ? "OK" : "Low";
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
RFdata["origin"] = subjectRFtoMQTT;
|
||||
enqueueJsonObject(RFdata);
|
||||
Log.trace(F("Store wind data val: %lu" CR), MQTTvalue);
|
||||
storeSignalValue(MQTTvalue);
|
||||
}
|
||||
@@ -97,14 +101,15 @@ void sendWindData(byte id, int wind_direction, float wind_gust, byte battery_sta
|
||||
void sendTemperatureData(byte id, float temperature, int humidity, byte battery_status) {
|
||||
unsigned long MQTTvalue = 40000 + abs(round(temperature * 100.0)) + humidity;
|
||||
if (!isAduplicateSignal(MQTTvalue)) { // conditions to avoid duplications of RF -->MQTT
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject RFdata = jsonBuffer.to<JsonObject>();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> RFdataBuffer;
|
||||
JsonObject RFdata = RFdataBuffer.to<JsonObject>();
|
||||
RFdata["sensor"] = id;
|
||||
RFdata["tempc"] = temperature;
|
||||
RFdata["tempf"] = wsdr.convertCtoF(temperature);
|
||||
RFdata["humidity"] = humidity;
|
||||
RFdata["battery"] = bitRead(battery_status, 0) == 0 ? "OK" : "Low";
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
RFdata["origin"] = subjectRFtoMQTT;
|
||||
enqueueJsonObject(RFdata);
|
||||
Log.trace(F("Store temp val: %lu" CR), MQTTvalue);
|
||||
storeSignalValue(MQTTvalue);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user