Add support for weather stations (#532)
* Add support for weather stations * Add configuration for ESP8266
This commit is contained in:
1 parent
aeb00c4a7a
commit
4115f2a723
5 files changed
+251
No files matched your search
@@ -115,6 +115,7 @@ char gateway_name[parameters_size * 2] = Gateway_Name;
|
||||
//#define ZgatewayIR "IR" //ESP8266, Arduino, Sonoff RF Bridge
|
||||
//#define ZgatewayLORA "LORA" //ESP8266, Arduino, ESP32
|
||||
//#define ZgatewayPilight "Pilight" //ESP8266, Arduino, ESP32
|
||||
//#define ZgatewayWeatherStation "WeatherStation" //ESP8266, Arduino, ESP32
|
||||
//#define ZgatewayBT "BT" //ESP8266, ESP32
|
||||
//#define ZgatewayRF2 "RF2" //ESP8266, Arduino, ESP32
|
||||
//#define ZgatewaySRFB "SRFB" // Sonoff RF Bridge
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
OpenMQTTGateway - ESP8266 or Arduino program for home automation
|
||||
|
||||
Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
|
||||
Send and receiving command by MQTT
|
||||
|
||||
This gateway enables to:
|
||||
- publish MQTT data, which are received from RF433Mhz signal (based on WeatherStationDataRx)
|
||||
|
||||
Library for read weather data from Venus W174/W132, Auriol H13726, Hama EWS 1500, Meteoscan W155/W160
|
||||
|
||||
This file is part of OpenMQTTGateway.
|
||||
|
||||
OpenMQTTGateway is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenMQTTGateway is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "User_config.h"
|
||||
|
||||
#ifdef ZgatewayWeatherStation
|
||||
#include <WeatherStationDataRx.h>
|
||||
WeatherStationDataRx wsdr(RF_WS_RECEIVER_PIN, true);
|
||||
|
||||
void PairedDeviceAdded(byte newID)
|
||||
{
|
||||
#if defined(ESP8266) || defined(ESP32)
|
||||
Serial.printf("ZgatewayWeatherStation: New device paired %d\r\n", newID);
|
||||
#else
|
||||
Serial.print("ZgatewayWeatherStation: New device paired ");
|
||||
Serial.println(newID, DEC);
|
||||
#endif
|
||||
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(2);
|
||||
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject &RFdata = jsonBuffer.createObject();
|
||||
RFdata.set("sensor", newID);
|
||||
RFdata.set("action", "paried");
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
wsdr.pair(NULL, PairedDeviceAdded);
|
||||
}
|
||||
|
||||
void setupWeatherStation()
|
||||
{
|
||||
trc(F("RF_WS_RECEIVER_PIN "));
|
||||
trc(String(RF_WS_RECEIVER_PIN));
|
||||
wsdr.begin();
|
||||
wsdr.pair(NULL, PairedDeviceAdded);
|
||||
trc(F("ZgatewayWeatherStation setup done "));
|
||||
}
|
||||
|
||||
void sendWindSpeedData(byte id, float wind_speed, byte battery_status)
|
||||
{
|
||||
unsigned long MQTTvalue = 10000 + round(wind_speed);
|
||||
if (!isAduplicate(MQTTvalue))
|
||||
{ // conditions to avoid duplications of RF -->MQTT
|
||||
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(3);
|
||||
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject &RFdata = jsonBuffer.createObject();
|
||||
RFdata.set("sensor", id);
|
||||
RFdata.set("wind_speed", wind_speed);
|
||||
RFdata.set("battery", bitRead(battery_status, 0) == 0 ? "OK" : "Low");
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
trc(F("Store wind speed val"));
|
||||
storeValue(MQTTvalue);
|
||||
}
|
||||
}
|
||||
|
||||
void sendRainData(byte id, float rain_volume, byte battery_status)
|
||||
{
|
||||
unsigned long MQTTvalue = 11000 + round(rain_volume * 10.0);
|
||||
if (!isAduplicate(MQTTvalue))
|
||||
{ // conditions to avoid duplications of RF -->MQTT
|
||||
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(3);
|
||||
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject &RFdata = jsonBuffer.createObject();
|
||||
RFdata.set("sensor", id);
|
||||
RFdata.set("rain_volume", rain_volume);
|
||||
RFdata.set("battery", bitRead(battery_status, 1) == 0 ? "OK" : "Low");
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
trc(F("Store rain_volume"));
|
||||
storeValue(MQTTvalue);
|
||||
}
|
||||
}
|
||||
|
||||
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 (!isAduplicate(MQTTvalue))
|
||||
{ // conditions to avoid duplications of RF -->MQTT
|
||||
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(4);
|
||||
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject &RFdata = jsonBuffer.createObject();
|
||||
RFdata.set("sensor", id);
|
||||
RFdata.set("wind_direction", wind_direction);
|
||||
RFdata.set("wind_gust", wind_gust);
|
||||
RFdata.set("battery", bitRead(battery_status, 0) == 0 ? "OK" : "Low");
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
trc(F("Store wind data val"));
|
||||
storeValue(MQTTvalue);
|
||||
}
|
||||
}
|
||||
|
||||
void sendTemperatureData(byte id, float temperature, int humidity, byte battery_status)
|
||||
{
|
||||
unsigned long MQTTvalue = 40000 + abs(round(temperature * 100.0)) + humidity;
|
||||
if (!isAduplicate(MQTTvalue))
|
||||
{ // conditions to avoid duplications of RF -->MQTT
|
||||
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(4);
|
||||
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject &RFdata = jsonBuffer.createObject();
|
||||
RFdata.set("sensor", id);
|
||||
RFdata.set("temperature", temperature);
|
||||
RFdata.set("humidity", humidity);
|
||||
RFdata.set("battery", bitRead(battery_status, 0) == 0 ? "OK" : "Low");
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
trc(F("Store temperature val"));
|
||||
storeValue(MQTTvalue);
|
||||
}
|
||||
}
|
||||
|
||||
void ZgatewayWeatherStationtoMQTT()
|
||||
{
|
||||
char newData = wsdr.readData();
|
||||
switch (newData)
|
||||
{
|
||||
case 'T':
|
||||
trc(F("Temperature"));
|
||||
sendTemperatureData(wsdr.sensorID(), wsdr.readTemperature(), wsdr.readHumidity(), wsdr.batteryStatus());
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
trc(F("Wind speed"));
|
||||
sendWindSpeedData(wsdr.sensorID(), wsdr.readWindSpeed(), wsdr.batteryStatus());
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
trc(F("Wind direction"));
|
||||
sendWindData(wsdr.sensorID(), wsdr.readWindDirection(), wsdr.readWindGust(), wsdr.batteryStatus());
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
trc(F("Rain volume"));
|
||||
sendRainData(wsdr.sensorID(), wsdr.readRainVolume(), wsdr.batteryStatus());
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
OpenMQTTGateway - ESP8266 or Arduino program for home automation
|
||||
|
||||
Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
|
||||
Send and receiving command by MQTT
|
||||
|
||||
This files enables to set your parameter for the DHT11/22 sensor
|
||||
|
||||
Copyright: (c)Florian ROBERT
|
||||
|
||||
This file is part of OpenMQTTGateway.
|
||||
|
||||
OpenMQTTGateway is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenMQTTGateway is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef config_WeatherStation_h
|
||||
#define config_WeatherStation_h
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
extern void setupWeatherStation();
|
||||
extern void ZgatewayWeatherStationtoMQTT();
|
||||
/*----------------------------USER PARAMETERS-----------------------------*/
|
||||
/*-------------DEFINE YOUR MQTT PARAMETERS BELOW----------------*/
|
||||
#define subjectRFtoMQTT "/433toMQTT"
|
||||
|
||||
|
||||
/*-------------------PIN DEFINITIONS----------------------*/
|
||||
#ifndef RF_WS_RECEIVER_PIN
|
||||
#ifdef ESP8266
|
||||
#define RF_WS_RECEIVER_PIN 0 // D3 on nodemcu // put 4 with rf bridge direct mod
|
||||
#elif ESP32
|
||||
#define RF_WS_RECEIVER_PIN 27 // D27 on DOIT ESP32
|
||||
#elif __AVR_ATmega2560__
|
||||
#define RF_WS_RECEIVER_PIN 1 //1 = D3 on mega
|
||||
#else
|
||||
#define RF_WS_RECEIVER_PIN 1 //1 = D3 on arduino
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -45,6 +45,9 @@ unsigned long ReceivedSignal[array_size][2] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
|
||||
#if defined(ZgatewayRF) || defined(ZgatewayRF2) || defined(ZgatewayPilight)
|
||||
#include "config_RF.h"
|
||||
#endif
|
||||
#ifdef ZgatewayWeatherStation
|
||||
#include "config_WeatherStation.h"
|
||||
#endif
|
||||
#ifdef ZgatewayLORA
|
||||
#include "config_LORA.h"
|
||||
#endif
|
||||
@@ -734,6 +737,9 @@ void setup()
|
||||
#ifdef ZgatewayPilight
|
||||
setupPilight();
|
||||
#endif
|
||||
#ifdef ZgatewayWeatherStation
|
||||
setupWeatherStation();
|
||||
#endif
|
||||
#ifdef ZgatewaySRFB
|
||||
setupSRFB();
|
||||
#endif
|
||||
@@ -1156,6 +1162,9 @@ void loop()
|
||||
#ifdef ZgatewayRF2
|
||||
RF2toMQTT();
|
||||
#endif
|
||||
#ifdef ZgatewayWeatherStation
|
||||
ZgatewayWeatherStationtoMQTT();
|
||||
#endif
|
||||
#ifdef ZgatewayPilight
|
||||
PilighttoMQTT();
|
||||
#endif
|
||||
@@ -1286,6 +1295,9 @@ void stateMeasures()
|
||||
#ifdef ZgatewayRF2
|
||||
modules = modules + ZgatewayRF2;
|
||||
#endif
|
||||
#ifdef ZgatewayWeatherStation
|
||||
modules = modules + ZgatewayWeatherStation;
|
||||
#endif
|
||||
#ifdef ZgatewayPilight
|
||||
modules = modules + ZgatewayPilight;
|
||||
#endif
|
||||
|
||||
@@ -33,6 +33,7 @@ extra_configs =
|
||||
;default_envs = esp32dev-all
|
||||
;default_envs = esp32dev-rf
|
||||
;default_envs = esp32dev-pilight
|
||||
;default_envs = esp32dev-weatherstation
|
||||
;default_envs = esp32dev-ir
|
||||
;default_envs = esp32dev-ble
|
||||
;default_envs = esp32-m5stick-ble
|
||||
@@ -43,6 +44,7 @@ extra_configs =
|
||||
;default_envs = rf-wifi-gateway
|
||||
;default_envs = nodemcuv2-rf2
|
||||
;default_envs = nodemcuv2-pilight
|
||||
;default_envs = nodemcuv2-weatherstation
|
||||
;default_envs = nodemcuv2-ir
|
||||
;default_envs = nodemcuv2-ble
|
||||
;default_envs = nodemcuv2-all
|
||||
@@ -67,6 +69,7 @@ irremoteesp = IRremoteESP8266@2.7.0
|
||||
irremote = IRremote
|
||||
lora = sandeepmistry/arduino-LoRa#f4a1d27
|
||||
esppilight = ESPiLight@0.16.2
|
||||
rfWeatherStation = WeatherStationDataRx@0.3.0
|
||||
rfm69 = RFM69@4a6f77ad47
|
||||
dht = DHT sensor library@1.3.0
|
||||
unifiedsensor = Adafruit Unified Sensor@1.0.2
|
||||
@@ -209,6 +212,17 @@ build_flags =
|
||||
'-DZgatewayPilight="Pilight"'
|
||||
'-DGateway_Name="OpenMQTTGateway_ESP32_RF"'
|
||||
|
||||
[env:esp32dev-weatherstation]
|
||||
platform = ${com.esp32_platform}
|
||||
board = esp32dev
|
||||
lib_deps =
|
||||
${com-esp.lib_deps}
|
||||
${libraries.rfWeatherStation}
|
||||
build_flags =
|
||||
${com-esp.build_flags}
|
||||
'-DZgatewayWeatherStation="WeatherStation"'
|
||||
'-DGateway_Name="OpenMQTTGateway_ESP32_WeatherStation"'
|
||||
|
||||
[env:esp32dev-ir]
|
||||
platform = ${com.esp32_platform}
|
||||
board = esp32dev
|
||||
@@ -433,6 +447,19 @@ build_flags =
|
||||
'-DGateway_Name="OpenMQTTGateway_ESP8266_Pilight"'
|
||||
board_build.flash_mode = dout
|
||||
|
||||
[env:nodemcuv2-weatherstation]
|
||||
platform = ${com.esp8266_platform}
|
||||
board = nodemcuv2
|
||||
lib_deps =
|
||||
${com-esp.lib_deps}
|
||||
${libraries.rfWeatherStation}
|
||||
${libraries.esp8266_mdns}
|
||||
build_flags =
|
||||
${com-esp.build_flags}
|
||||
'-DZgatewayWeatherStation="WeatherStationDataRx"'
|
||||
'-DGateway_Name="OpenMQTTGateway_ESP8266_RF3"'
|
||||
board_build.flash_mode = dout
|
||||
|
||||
[env:sonoff-basic]
|
||||
platform = ${com.esp8266_platform}
|
||||
board = esp8285
|
||||
|
||||
Reference in new issue
Block a user