mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
добавление возможности управления виджетами из модулей
This commit is contained in:
@@ -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(){};
|
||||
|
||||
@@ -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
|
||||
@@ -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": []
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user