This commit is contained in:
Nigreon 2025-10-28 16:12:52 +01:00
parent 9e702af8c6
commit 2e2687d3f7
8 changed files with 252 additions and 57 deletions

View file

@ -1,6 +1,6 @@
#include <ArduinoJson.h>
#include <rtl_433_ESP.h>
#include <RCSwitch.h>
//#include <RCSwitch.h>
#include <Wire.h>
#include <BME280I2C.h>
#include <EnvironmentCalculations.h>
@ -12,21 +12,23 @@
#define _DICT_PACK_STRUCTURES
#ifndef LED_BUILTIN
#define LED_BUILTIN 12
#endif
#define LED LED_BUILTIN
#define RCSWITCH_PIN 43
//CC1101 radiotx = RADIO_LIB_MODULE;
RCSwitch mySwitch = RCSwitch();
CC1101 radiotx = RADIO_LIB_MODULE;
//RCSwitch mySwitch = RCSwitch();
#ifndef RF_MODULE_FREQUENCY
# define RF_MODULE_FREQUENCY 433.92
#endif
#define JSON_MSG_BUFFER 512
#define MINDELAY 10L
#define ALTITUDE 150.0
#define DELAYLOCALSENSORS 30L
//#define ALTITUDE 150.0
#define ALTITUDE 210.0
#define DELAYLOCALSENSORS 60L
//#define DELAYKAKUSEND 750L
Dictionary<String, unsigned long> d1;
@ -38,6 +40,10 @@ BME280I2C bme;
bool sensors_enabled;
int count = 0;
unsigned long lastrcv = 0;
//unsigned long kakucode = 0;
//bool kakucmd = false;
uint32_t lastts_localsensors = 0;
@ -45,16 +51,22 @@ void rtl_433_Callback(char* message) {
//Serial.println("RTL433 Callback");
JsonDocument jsonDocument;
deserializeJson(jsonDocument,message);
//logJsonAll(jsonDocument);
logJson(jsonDocument);
count++;
lastrcv = millis();
}
JsonDocument analyzeTH_type1(JsonArray payloadrh) {
JsonDocument doc;
doc["moisture"] = payloadrh[5].as<int>();
doc["battery_ok"] = payloadrh[0].as<unsigned char>() & 0b00000001;
int16_t payloadtemp = payloadrh[4].as<unsigned char>();
payloadtemp += payloadrh[3].as<unsigned char>() << 8;
doc["temperature_C"] = payloadtemp / 100.0;
//doc["moisture"] = payloadrh[5].as<int>();
uint16_t payloadmoisture = payloadrh[6].as<unsigned char>();
payloadmoisture += payloadrh[5].as<unsigned char>() << 8;
doc["moisture"] = payloadmoisture;
doc["battery_ok"] = payloadrh[0].as<unsigned char>() & 0b00000001;
uint16_t payloadbat = payloadrh[2].as<unsigned char>();
payloadbat += payloadrh[1].as<unsigned char>() << 8;
@ -63,6 +75,16 @@ JsonDocument analyzeTH_type1(JsonArray payloadrh) {
return doc;
}
JsonDocument analyzeTH_type2(JsonArray payloadrh) {
JsonDocument doc;
int16_t payloadtemp = payloadrh[2].as<unsigned char>();
payloadtemp += payloadrh[1].as<unsigned char>() << 8;
doc["temperature_C"] = payloadtemp / 100.0;
uint8_t payloadhumidity = payloadrh[3].as<unsigned char>();
doc["humidity"] = payloadhumidity;
return doc;
}
void logJson(JsonDocument jsondata) {
if(jsondata["model"].is<String>())
{
@ -76,7 +98,7 @@ void logJson(JsonDocument jsondata) {
if(jsondata["model"].is<String>() && jsondata["model"] == "RadioHead-ASK") {
JsonArray payloadrh = jsondata["payload"];
bool treatrh = 0;
if(jsondata["len"].as<int>() == 6 && ((payloadrh[0].as<unsigned char>() & 0b00010000 ) > 0)) {
if(jsondata["len"].as<int>() == 7 && ((payloadrh[0].as<unsigned char>() & 0b00010000 ) > 0)) {
treatrh = true;
//Serial.println("Analyse RH Payload");
JsonDocument adoc = analyzeTH_type1(payloadrh);
@ -85,6 +107,11 @@ void logJson(JsonDocument jsondata) {
jsondata["battery_V"] = adoc["battery_V"];
jsondata["battery_percent"] = adoc["battery_percent"];
jsondata["temperature_C"] = adoc["temperature_C"];
} else if(jsondata["len"].as<int>() == 4 && ((payloadrh[0].as<unsigned char>() & 0b00100000 ) > 0)) {
treatrh = true;
JsonDocument adoc = analyzeTH_type2(payloadrh);
jsondata["temperature_C"] = adoc["temperature_C"];
jsondata["humidity"] = adoc["humidity"];
}
if(treatrh == true) {
jsondata.remove("from");
@ -149,6 +176,7 @@ void logJsonRH(JsonDocument jsondata) {
//Serial.println();
//ledblink();
}
*/
void logJsonAll(JsonDocument jsondata) {
// Serial.println(count);
@ -162,7 +190,7 @@ void logJsonAll(JsonDocument jsondata) {
Serial.println(JSONmessageBuffer);
//ledblink();
}
*/
void sendBME280() {
JsonDocument jsonDocument;
@ -203,14 +231,29 @@ void ledblink() {
}
void setup() {
Serial.setTxBufferSize(512);
//Serial.setTxBufferSize(512);
//Serial.setTxTimeoutMs(100);
Serial.begin(115200);
delay(1000);
delay(10000);
//for (int i=0 ; i<10; i++) {
// Serial.print("Hello");
// delay(1000);
//}
/*Serial.print("MISO ");
Serial.println(MISO);
Serial.print("MOSI ");
Serial.println(MOSI);
Serial.print("SS ");
Serial.println(SS);
Serial.print("SCK ");
Serial.println(SCK);
*/
/*SPI.begin(SCK, MISO, MOSI, SS);
SPI.setFrequency(4000000);*/
SPI.setFrequency(4000000);
Serial.printf("SPI.begin(SCK=%d, MISO=%d, MOSI=%d, CS=%d)\n", SCK, MISO, MOSI, SS);
Serial.print("RF_MODULE_RECEIVER_GPIO ");
Serial.println(RF_MODULE_RECEIVER_GPIO);
/* if(SS != 21 || MOSI != 20 || MISO != 10 || SCK != 7)
{
for ( ; ; ) {
@ -235,10 +278,17 @@ void setup() {
void loop() {
rf.loop();
if(sensors_enabled == true && (millis() > (lastts_localsensors + (DELAYLOCALSENSORS*1000)) || lastts_localsensors > millis())) {
if(sensors_enabled == true && (millis() > (lastts_localsensors + (DELAYLOCALSENSORS*1000) + random(0, 5000)) || lastts_localsensors > millis())) {
lastts_localsensors = millis();
sendBME280();
}
/*if(kakucode > 0 && (millis() > (lastrcv + DELAYKAKUSEND) || lastrcv > millis())) {
rf.disableReceiver();
radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_TX);
radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_RX);
rf.enableReceiver();
kakucode = 0;
}*/
if (Serial.available())
{
// Read the JSON document from the "link" serial port
@ -257,10 +307,10 @@ void loop() {
//rf.disableReceiver();
//radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_TX);
//mySwitch.enableTransmit(RF_MODULE_GDO0);
mySwitch.enableTransmit(RCSWITCH_PIN);
//mySwitch.enableTransmit(RCSWITCH_PIN);
//mySwitch.setRepeatTransmit(8);
mySwitch.setRepeatTransmit(5);
mySwitch.send(doc["value"].as<uint32_t>(), 24);
//mySwitch.setRepeatTransmit(5);
//mySwitch.send(doc["value"].as<uint32_t>(), 24);
//mySwitch.disableTransmit();
//radiotx.SPIsendCommand(RADIOLIB_CC1101_CMD_RX);
//rf.enableReceiver();