mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 19:56:30 +00:00
Add command LoRaCommand
This commit is contained in:
parent
27ccf0490b
commit
9c4dfd28ef
@ -15,6 +15,7 @@
|
|||||||
//#define USE_LORA_DEBUG
|
//#define USE_LORA_DEBUG
|
||||||
|
|
||||||
#define LORA_MAX_PACKET_LENGTH 252 // Max packet length allowed (keeping room for control bytes)
|
#define LORA_MAX_PACKET_LENGTH 252 // Max packet length allowed (keeping room for control bytes)
|
||||||
|
#define TAS_LORA_REMOTE_COMMAND 0x17 // Header defining remote LoRaCommand
|
||||||
|
|
||||||
#ifndef TAS_LORA_FREQUENCY
|
#ifndef TAS_LORA_FREQUENCY
|
||||||
#define TAS_LORA_FREQUENCY 868.0 // Allowed values range from 150.0 to 960.0 MHz
|
#define TAS_LORA_FREQUENCY 868.0 // Allowed values range from 150.0 to 960.0 MHz
|
||||||
|
@ -23,6 +23,20 @@ void LoraInput(void) {
|
|||||||
int packet_size = Lora.Receive(data);
|
int packet_size = Lora.Receive(data);
|
||||||
if (!packet_size) { return; }
|
if (!packet_size) { return; }
|
||||||
|
|
||||||
|
if (TAS_LORA_REMOTE_COMMAND == data[0]) {
|
||||||
|
char *payload = data +1; // Skip TAS_LORA_REMOTE_COMMAND
|
||||||
|
char *command_part;
|
||||||
|
char *topic_part = strtok_r(payload, " ", &command_part);
|
||||||
|
if (topic_part && command_part) {
|
||||||
|
if (!strcasecmp(topic_part, SettingsText(SET_MQTT_TOPIC))) { // Is it mine
|
||||||
|
ExecuteCommand(command_part, SRC_REMOTE);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
*--command_part = ' '; // Restore strtok_r '/0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool raw = Lora.raw;
|
bool raw = Lora.raw;
|
||||||
// Set raw mode if zeroes within data
|
// Set raw mode if zeroes within data
|
||||||
for (uint32_t i = 0; i < packet_size; i++) {
|
for (uint32_t i = 0; i < packet_size; i++) {
|
||||||
@ -113,14 +127,30 @@ void LoraInit(void) {
|
|||||||
* Commands
|
* Commands
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
#define D_CMND_LORASEND "Send"
|
#define D_CMND_LORASEND "Send"
|
||||||
#define D_CMND_LORACONFIG "Config"
|
#define D_CMND_LORACONFIG "Config"
|
||||||
|
#define D_CMND_LORACOMMAND "Command"
|
||||||
|
|
||||||
const char kLoraCommands[] PROGMEM = "LoRa|" // Prefix
|
const char kLoraCommands[] PROGMEM = "LoRa|" // Prefix
|
||||||
D_CMND_LORASEND "|" D_CMND_LORACONFIG;
|
D_CMND_LORASEND "|" D_CMND_LORACONFIG "|" D_CMND_LORACOMMAND ;
|
||||||
|
|
||||||
void (* const LoraCommand[])(void) PROGMEM = {
|
void (* const LoraCommand[])(void) PROGMEM = {
|
||||||
&CmndLoraSend, &CmndLoraConfig };
|
&CmndLoraSend, &CmndLoraConfig, &CmndLoraCommand };
|
||||||
|
|
||||||
|
void CmndLoraCommand(void) {
|
||||||
|
// LoRaCommand <topic_of_lora_receiver> <command>
|
||||||
|
// LoRaCommand lorareceiver power 2
|
||||||
|
// LoRaCommand lorareceiver publish cmnd/anytopic/power 2
|
||||||
|
if (XdrvMailbox.data_len > 0) {
|
||||||
|
char data[LORA_MAX_PACKET_LENGTH] = { 0 };
|
||||||
|
XdrvMailbox.data_len++; // Add Signal CmndLoraCommand to lora receiver
|
||||||
|
uint32_t len = (XdrvMailbox.data_len < LORA_MAX_PACKET_LENGTH -1) ? XdrvMailbox.data_len : LORA_MAX_PACKET_LENGTH -2;
|
||||||
|
data[0] = TAS_LORA_REMOTE_COMMAND;
|
||||||
|
strlcpy(data +1, XdrvMailbox.data, len);
|
||||||
|
Lora.Send((uint8_t*)data, len);
|
||||||
|
ResponseCmndDone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CmndLoraSend(void) {
|
void CmndLoraSend(void) {
|
||||||
// LoRaSend "Hello Tiger" - Send "Hello Tiger\n"
|
// LoRaSend "Hello Tiger" - Send "Hello Tiger\n"
|
||||||
@ -139,7 +169,7 @@ void CmndLoraSend(void) {
|
|||||||
char data[LORA_MAX_PACKET_LENGTH] = { 0 };
|
char data[LORA_MAX_PACKET_LENGTH] = { 0 };
|
||||||
uint32_t len = (XdrvMailbox.data_len < LORA_MAX_PACKET_LENGTH -1) ? XdrvMailbox.data_len : LORA_MAX_PACKET_LENGTH -2;
|
uint32_t len = (XdrvMailbox.data_len < LORA_MAX_PACKET_LENGTH -1) ? XdrvMailbox.data_len : LORA_MAX_PACKET_LENGTH -2;
|
||||||
#ifdef USE_LORA_DEBUG
|
#ifdef USE_LORA_DEBUG
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Len %d, Send %*_H"), len, len + 2, XdrvMailbox.data);
|
// AddLog(LOG_LEVEL_DEBUG, PSTR("DBG: Len %d, Send %*_H"), len, len + 2, XdrvMailbox.data);
|
||||||
#endif
|
#endif
|
||||||
if (1 == XdrvMailbox.index) { // "Hello Tiger\n"
|
if (1 == XdrvMailbox.index) { // "Hello Tiger\n"
|
||||||
memcpy(data, XdrvMailbox.data, len);
|
memcpy(data, XdrvMailbox.data, len);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user