добавление возможности управления виджетами из модулей

This commit is contained in:
Dmitry Borisenko
2022-12-04 01:37:27 +01:00
parent 3285a70a88
commit 08ffc74e8d
9 changed files with 147 additions and 68 deletions

View File

@@ -3,6 +3,7 @@
#include "Arduino.h"
#include "MySensorsGate.h"
#ifdef MYSENSORS
// callback библиотеки mysensors
void receive(const MyMessage& message) {
String inMsg = String(message.getSender()) + "," + // node-id
@@ -48,6 +49,7 @@ String parseToString(const MyMessage& message) {
}
}
#endif
class MySensorsGate : public IoTItem {
private:
public:
@@ -344,20 +346,57 @@ class MySensorsGate : public IoTItem {
class MySensorsNode : public IoTItem {
private:
String id;
int _minutesPassed = 0;
String json = "{}";
bool dataFromNode = false;
public:
MySensorsNode(String parameters) : IoTItem(parameters) {
SerialPrint("i", "MySensors", "Node initialized");
jsonRead(parameters, F("id"), id);
dataFromNode = false;
}
void setValue(const IoTValue& Value, bool genEvent = true) {
value = Value;
regEvent(value.valD, "MySensorsNode", false, genEvent);
_minutesPassed = 0;
prevMillis = millis();
dataFromNode = true;
setNewWidgetAttributes();
}
void doByInterval() {
_minutesPassed++;
setNewWidgetAttributes();
}
void loop() {
currentMillis = millis();
difference = currentMillis - prevMillis;
if (difference > 60000) {
prevMillis = millis();
this->doByInterval();
}
}
void handleSendSubWidgetsValues() {
setNewWidgetAttributes();
}
void setNewWidgetAttributes() {
if (dataFromNode) {
jsonWriteStr(json, "info", String(_minutesPassed) + " min");
if (_minutesPassed >= 60) {
jsonWriteStr(json, "color", "orange"); //сделаем виджет оранжевым когда более 60 минут нода не выходила на связь
} else if (_minutesPassed >= 120) {
jsonWriteStr(json, "color", "red"); //сделаем виджет красным когда более 120 минут нода не выходила на связь
}
} else {
jsonWriteStr(json, "info", "awaiting");
}
sendSubWidgetsValues(id, json);
}
~MySensorsNode(){};

View File

@@ -1,4 +1,22 @@
#pragma once
#include "Const.h"
#ifdef MYSENSORS
/*
* DESCRIPTION
* The ESP32 gateway sends data received from sensors to the WiFi link.
* The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
* ----------- PINOUT --------------
* | IO | RF24 | RFM69 | RFM95 |
|------|------|-------|-------|
| MOSI | 23 | 23 | 23 |
| MISO | 19 | 19 | 19 |
| SCK | 18 | 18 | 18 |
| CSN | 5 | 5 | 5 |
| CE | 17 | - | - |
| RST | - | 17 | 17 |
| IRQ | 16* | 16 | 16 |
*/
// Enable debug prints to serial monitor
//#define MY_DEBUG
@@ -7,7 +25,6 @@
//#define MY_RF24_CS_PIN 9
// Use a bit lower baudrate for serial prints on ESP8266 than default in MyConfig.h
#define MY_BAUD_RATE 115200
// Enables and select radio type (if attached)
@@ -22,7 +39,7 @@
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
#define MY_RF24_PA_LEVEL RF24_PA_LOW
#define MY_RF24_PA_LEVEL RF24_PA_MAX
// используем гейт в режиме serial хотя нам этот режим не нужен, поэтому в библиотеки отключаем MY_SERIALDEVICE.print
// в файле MyGatewayTransportSerial.cpp в строчке 35
@@ -32,4 +49,6 @@
#include <MySensors.h>
extern String parseToString(const MyMessage& message);
extern String parseToString(const MyMessage& message);
#endif

View File

@@ -32,17 +32,16 @@
"moduleVersion": "1.0",
"usedRam": {
"esp32_4mb": 15,
"esp8266_4mb": 15
"esp8266_4mb": 0
},
"title": "My Sensors Gate",
"moduleDesc": "",
"title": "Гейт MySensors",
"moduleDesc": "Гейт состоит из esp32 и подключенному к нему радиомодулю NRF24L01. Вместе в связке они образуют гейт, способный принимать данные датчиков. Датчики способны работать до нескольких лет на батарейках",
"retInfo": "",
"propInfo": {
"int": "",
"pin": ""
"id": "Для настройки следует выбрать один раз MySensorsGate и выбрать сколько необходимо раз MySensorsNode. Вместо ID нужно указать ID ноды дефис ID значения данной ноды. Например 100-1 - будет значить нода с ID 100 величина 1."
}
},
"defActive": true,
"defActive": false,
"usedLibs": {
"esp32_4mb": []
}