mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
добавляем парсер данных mysensors
This commit is contained in:
@@ -26,57 +26,53 @@
|
|||||||
// global variables
|
// global variables
|
||||||
extern MyMessage _msgTmp;
|
extern MyMessage _msgTmp;
|
||||||
|
|
||||||
char _serialInputString[MY_GATEWAY_MAX_RECEIVE_LENGTH]; // A buffer for incoming commands from serial interface
|
char _serialInputString[MY_GATEWAY_MAX_RECEIVE_LENGTH]; // A buffer for incoming commands from serial interface
|
||||||
uint8_t _serialInputPos;
|
uint8_t _serialInputPos;
|
||||||
MyMessage _serialMsg;
|
MyMessage _serialMsg;
|
||||||
|
|
||||||
bool gatewayTransportSend(MyMessage &message)
|
bool gatewayTransportSend(MyMessage &message) {
|
||||||
{
|
setIndication(INDICATION_GW_TX);
|
||||||
setIndication(INDICATION_GW_TX);
|
// MY_SERIALDEVICE.print(protocolMyMessage2Serial(message));
|
||||||
MY_SERIALDEVICE.print(protocolMyMessage2Serial(message));
|
// Serial print is always successful
|
||||||
// Serial print is always successful
|
return true;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gatewayTransportInit(void)
|
bool gatewayTransportInit(void) {
|
||||||
{
|
(void)gatewayTransportSend(buildGw(_msgTmp, I_GATEWAY_READY).set(MSG_GW_STARTUP_COMPLETE));
|
||||||
(void)gatewayTransportSend(buildGw(_msgTmp, I_GATEWAY_READY).set(MSG_GW_STARTUP_COMPLETE));
|
// Send presentation of locally attached sensors (and node if applicable)
|
||||||
// Send presentation of locally attached sensors (and node if applicable)
|
presentNode();
|
||||||
presentNode();
|
return true;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gatewayTransportAvailable(void)
|
bool gatewayTransportAvailable(void) {
|
||||||
{
|
while (MY_SERIALDEVICE.available()) {
|
||||||
while (MY_SERIALDEVICE.available()) {
|
// get the new byte:
|
||||||
// get the new byte:
|
const char inChar = (char)MY_SERIALDEVICE.read();
|
||||||
const char inChar = (char)MY_SERIALDEVICE.read();
|
// if the incoming character is a newline, set a flag
|
||||||
// if the incoming character is a newline, set a flag
|
// so the main loop can do something about it:
|
||||||
// so the main loop can do something about it:
|
if (_serialInputPos < MY_GATEWAY_MAX_RECEIVE_LENGTH - 1) {
|
||||||
if (_serialInputPos < MY_GATEWAY_MAX_RECEIVE_LENGTH - 1) {
|
if (inChar == '\n') {
|
||||||
if (inChar == '\n') {
|
_serialInputString[_serialInputPos] = 0;
|
||||||
_serialInputString[_serialInputPos] = 0;
|
const bool ok = protocolSerial2MyMessage(_serialMsg, _serialInputString);
|
||||||
const bool ok = protocolSerial2MyMessage(_serialMsg, _serialInputString);
|
if (ok) {
|
||||||
if (ok) {
|
setIndication(INDICATION_GW_RX);
|
||||||
setIndication(INDICATION_GW_RX);
|
}
|
||||||
}
|
_serialInputPos = 0;
|
||||||
_serialInputPos = 0;
|
return ok;
|
||||||
return ok;
|
} else {
|
||||||
} else {
|
// add it to the inputString:
|
||||||
// add it to the inputString:
|
_serialInputString[_serialInputPos] = inChar;
|
||||||
_serialInputString[_serialInputPos] = inChar;
|
_serialInputPos++;
|
||||||
_serialInputPos++;
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
// Incoming message too long. Throw away
|
||||||
// Incoming message too long. Throw away
|
_serialInputPos = 0;
|
||||||
_serialInputPos = 0;
|
}
|
||||||
}
|
}
|
||||||
}
|
return false;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MyMessage & gatewayTransportReceive(void)
|
MyMessage &gatewayTransportReceive(void) {
|
||||||
{
|
// Return the last parsed message
|
||||||
// Return the last parsed message
|
return _serialMsg;
|
||||||
return _serialMsg;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,40 +1,51 @@
|
|||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
#include "classes/IoTItem.h"
|
#include "classes/IoTItem.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
|
#include "MySensorsGate.h"
|
||||||
|
|
||||||
// Enable debug prints to serial monitor
|
// callback библиотеки mysensors
|
||||||
#define MY_DEBUG
|
|
||||||
|
|
||||||
//#define MY_RF24_CE_PIN 26 // Двигать пин CE на D4 чтобы освободить I2C
|
|
||||||
//#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)
|
|
||||||
#define MY_RADIO_RF24
|
|
||||||
//#define MY_RADIO_RFM69
|
|
||||||
//#define MY_RADIO_RFM95
|
|
||||||
|
|
||||||
//#define MY_RF24_DATARATE RF24_1MBPS // Для платы KeyWish скорость 1 мегабит
|
|
||||||
|
|
||||||
// How many clients should be able to connect to this gateway (default 1)
|
|
||||||
#define MY_GATEWAY_MAX_CLIENTS 10
|
|
||||||
|
|
||||||
// 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
|
|
||||||
|
|
||||||
// Enable serial gateway
|
|
||||||
#define MY_GATEWAY_SERIAL
|
|
||||||
|
|
||||||
#define CHILD_ID 1
|
|
||||||
|
|
||||||
#include <MySensors.h>
|
|
||||||
|
|
||||||
void receive(const MyMessage& message) {
|
void receive(const MyMessage& message) {
|
||||||
Serial.println("receive");
|
String inMsg = String(message.getSender()) + "," + // node-id
|
||||||
|
String(message.getSensor()) + "," + // child-sensor-id
|
||||||
|
String(message.getType()) + "," + // type of var
|
||||||
|
String(message.getCommand()) + "," + // command
|
||||||
|
parseToString(message) + ";"; // value
|
||||||
|
|
||||||
|
Serial.println("=>" + inMsg);
|
||||||
|
|
||||||
|
mysensorBuf += inMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
String parseToString(const MyMessage& message) {
|
||||||
|
String value = "error";
|
||||||
|
switch (message.getPayloadType()) {
|
||||||
|
case 0: // Payload type is string
|
||||||
|
value = message.getString();
|
||||||
|
return value;
|
||||||
|
case 1: // Payload type is byte
|
||||||
|
value = String(message.getByte());
|
||||||
|
return value;
|
||||||
|
case 2: // Payload type is INT16
|
||||||
|
value = String(message.getInt());
|
||||||
|
return value;
|
||||||
|
case 3: // Payload type is UINT16
|
||||||
|
value = String(message.getUInt());
|
||||||
|
return value;
|
||||||
|
case 4: // Payload type is INT32
|
||||||
|
value = String(message.getInt());
|
||||||
|
return value;
|
||||||
|
case 5: // Payload type is UINT32
|
||||||
|
value = String(message.getUInt());
|
||||||
|
return value;
|
||||||
|
case 6: // Payload type is binary
|
||||||
|
value = String(message.getBool());
|
||||||
|
return value;
|
||||||
|
case 7: // Payload type is float32
|
||||||
|
value = String(message.getFloat());
|
||||||
|
return value;
|
||||||
|
default:
|
||||||
|
return value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MySensorsGate : public IoTItem {
|
class MySensorsGate : public IoTItem {
|
||||||
|
|||||||
35
src/modules/exec/MySensors/MySensorsGate.h
Normal file
35
src/modules/exec/MySensors/MySensorsGate.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Enable debug prints to serial monitor
|
||||||
|
//#define MY_DEBUG
|
||||||
|
|
||||||
|
//#define MY_RF24_CE_PIN 26 // Двигать пин CE на D4 чтобы освободить I2C
|
||||||
|
//#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)
|
||||||
|
#define MY_RADIO_RF24
|
||||||
|
//#define MY_RADIO_RFM69
|
||||||
|
//#define MY_RADIO_RFM95
|
||||||
|
|
||||||
|
//#define MY_RF24_DATARATE RF24_1MBPS // Для платы KeyWish скорость 1 мегабит
|
||||||
|
|
||||||
|
// How many clients should be able to connect to this gateway (default 1)
|
||||||
|
#define MY_GATEWAY_MAX_CLIENTS 10
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
// используем гейт в режиме serial хотя нам этот режим не нужен, поэтому в библиотеки отключаем MY_SERIALDEVICE.print
|
||||||
|
// в файле MyGatewayTransportSerial.cpp в строчке 35
|
||||||
|
#define MY_GATEWAY_SERIAL
|
||||||
|
|
||||||
|
#define CHILD_ID 1
|
||||||
|
|
||||||
|
#include <MySensors.h>
|
||||||
|
|
||||||
|
extern String parseToString(const MyMessage& message);
|
||||||
Reference in New Issue
Block a user