mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-26 04:36:38 +00:00
Add group dispatchers
This commit is contained in:
parent
a1aa4ca0d9
commit
9a0fb577e7
@ -6,6 +6,7 @@
|
|||||||
#include "hasp_dispatch.h"
|
#include "hasp_dispatch.h"
|
||||||
#include "hasp_config.h"
|
#include "hasp_config.h"
|
||||||
#include "hasp_debug.h"
|
#include "hasp_debug.h"
|
||||||
|
#include "hasp_gpio.h"
|
||||||
#include "hasp_gui.h"
|
#include "hasp_gui.h"
|
||||||
#include "hasp_hal.h"
|
#include "hasp_hal.h"
|
||||||
#include "hasp.h"
|
#include "hasp.h"
|
||||||
@ -38,7 +39,7 @@ void dispatchLoop()
|
|||||||
|
|
||||||
void dispatchStatusUpdate()
|
void dispatchStatusUpdate()
|
||||||
{
|
{
|
||||||
#if HASP_USE_MQTT>0
|
#if HASP_USE_MQTT > 0
|
||||||
mqtt_send_statusupdate();
|
mqtt_send_statusupdate();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -48,7 +49,7 @@ void dispatchOutput(int output, bool state)
|
|||||||
int pin = 0;
|
int pin = 0;
|
||||||
|
|
||||||
if(pin >= 0) {
|
if(pin >= 0) {
|
||||||
Log.notice(F("PIN OUTPUT STATE %d"),state);
|
Log.notice(F("PIN OUTPUT STATE %d"), state);
|
||||||
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
ledcWrite(99, state ? 1023 : 0); // ledChannel and value
|
ledcWrite(99, state ? 1023 : 0); // ledChannel and value
|
||||||
@ -189,7 +190,6 @@ void dispatchBacklight(String strPayload)
|
|||||||
#if HASP_USE_TASMOTA_SLAVE > 0
|
#if HASP_USE_TASMOTA_SLAVE > 0
|
||||||
slave_send_state(F("light"), strPayload.c_str());
|
slave_send_state(F("light"), strPayload.c_str());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispatchCommand(String cmnd)
|
void dispatchCommand(String cmnd)
|
||||||
@ -312,12 +312,97 @@ void dispatch_button(uint8_t id, const char * event)
|
|||||||
#if HASP_USE_MQTT > 0
|
#if HASP_USE_MQTT > 0
|
||||||
mqtt_send_input(id, event);
|
mqtt_send_input(id, event);
|
||||||
#endif
|
#endif
|
||||||
#if HASP_USE_TASMOTA_SLAVE>0
|
#if HASP_USE_TASMOTA_SLAVE > 0
|
||||||
slave_send_input(id, event);
|
slave_send_input(id, event);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Map events to either ON or OFF (UP or DOWN)
|
||||||
|
bool dispatch_get_event_state(uint8_t eventid)
|
||||||
|
{
|
||||||
|
switch(eventid) {
|
||||||
|
case HASP_EVENT_ON:
|
||||||
|
case HASP_EVENT_DOWN:
|
||||||
|
case HASP_EVENT_LONG:
|
||||||
|
case HASP_EVENT_HOLD:
|
||||||
|
return true;
|
||||||
|
case HASP_EVENT_OFF:
|
||||||
|
case HASP_EVENT_UP:
|
||||||
|
case HASP_EVENT_SHORT:
|
||||||
|
case HASP_EVENT_DOUBLE:
|
||||||
|
case HASP_EVENT_LOST:
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map events to their description string
|
||||||
|
void dispatch_get_event_name(uint8_t eventid, char * buffer, size_t size)
|
||||||
|
{
|
||||||
|
switch(eventid) {
|
||||||
|
case HASP_EVENT_ON:
|
||||||
|
memcpy_P(buffer, PSTR("ON"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_OFF:
|
||||||
|
memcpy_P(buffer, PSTR("OFF"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_UP:
|
||||||
|
memcpy_P(buffer, PSTR("UP"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_DOWN:
|
||||||
|
memcpy_P(buffer, PSTR("DOWN"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_SHORT:
|
||||||
|
memcpy_P(buffer, PSTR("SHORT"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_LONG:
|
||||||
|
memcpy_P(buffer, PSTR("LONG"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_HOLD:
|
||||||
|
memcpy_P(buffer, PSTR("HOLD"), size);
|
||||||
|
break;
|
||||||
|
case HASP_EVENT_LOST:
|
||||||
|
memcpy_P(buffer, PSTR("LOST"), size);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
memcpy_P(buffer, PSTR("UNKNOWN"), size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatch_send_group_event(uint8_t groupid, uint8_t eventid, bool update_hasp)
|
||||||
|
{
|
||||||
|
// update outputs
|
||||||
|
gpio_set_group_outputs(groupid, eventid);
|
||||||
|
|
||||||
|
// send out value
|
||||||
|
#if !defined(HASP_USE_MQTT) && !defined(HASP_USE_TASMOTA_SLAVE)
|
||||||
|
Log.notice(F("OUT: group%d = %s"), groupid, eventid);
|
||||||
|
#else
|
||||||
|
#if HASP_USE_MQTT > 0
|
||||||
|
// mqtt_send_input(id, event);
|
||||||
|
#endif
|
||||||
|
#if HASP_USE_TASMOTA_SLAVE > 0
|
||||||
|
// slave_send_input(id, event);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// update objects, except src_obj
|
||||||
|
if(update_hasp) hasp_set_group_objects(groupid, eventid, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispatch_send_object_event(uint8_t pageid, uint8_t objid, uint8_t eventid)
|
||||||
|
{
|
||||||
|
if(objid < 100) {
|
||||||
|
char eventname[16];
|
||||||
|
dispatch_get_event_name(eventid, eventname, sizeof(eventname));
|
||||||
|
dispatch_send_obj_attribute_str(pageid, objid, "event", eventname); /* Literal String */
|
||||||
|
} else {
|
||||||
|
uint8_t groupid = (objid - 100) / 10;
|
||||||
|
dispatch_send_group_event(groupid, eventid, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void dispatchWebUpdate(const char * espOtaUrl)
|
void dispatchWebUpdate(const char * espOtaUrl)
|
||||||
{
|
{
|
||||||
#if HASP_USE_OTA > 0
|
#if HASP_USE_OTA > 0
|
||||||
@ -326,7 +411,7 @@ void dispatchWebUpdate(const char * espOtaUrl)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR dispatch_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data)
|
void IRAM_ATTR dispatch_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data)
|
||||||
{
|
{
|
||||||
#if !defined(HASP_USE_MQTT) && !defined(HASP_USE_TASMOTA_SLAVE)
|
#if !defined(HASP_USE_MQTT) && !defined(HASP_USE_TASMOTA_SLAVE)
|
||||||
Log.notice(F("OUT: json = {\"p[%u].b[%u].%s\":\"%s\"}"), pageid, btnid, attribute, data);
|
Log.notice(F("OUT: json = {\"p[%u].b[%u].%s\":\"%s\"}"), pageid, btnid, attribute, data);
|
||||||
@ -425,7 +510,7 @@ void dispatchConfig(const char * topic, const char * payload)
|
|||||||
settings.remove(F("pass")); // hide password in output
|
settings.remove(F("pass")); // hide password in output
|
||||||
size_t size = serializeJson(doc, buffer, sizeof(buffer));
|
size_t size = serializeJson(doc, buffer, sizeof(buffer));
|
||||||
#if !defined(HASP_USE_MQTT) && !defined(HASP_USE_TASMOTA_SLAVE)
|
#if !defined(HASP_USE_MQTT) && !defined(HASP_USE_TASMOTA_SLAVE)
|
||||||
Log.notice(F("OUT: config %s = %s"),topic,buffer);
|
Log.notice(F("OUT: config %s = %s"), topic, buffer);
|
||||||
#else
|
#else
|
||||||
#if HASP_USE_MQTT > 0
|
#if HASP_USE_MQTT > 0
|
||||||
mqtt_send_state(F("config"), buffer);
|
mqtt_send_state(F("config"), buffer);
|
||||||
|
@ -26,6 +26,11 @@ void dispatchStatusUpdate(void);
|
|||||||
|
|
||||||
void dispatch_button(uint8_t id, const char * event);
|
void dispatch_button(uint8_t id, const char * event);
|
||||||
|
|
||||||
void IRAM_ATTR dispatch_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data);
|
void dispatch_send_object_event(uint8_t pageid, uint8_t objid, uint8_t eventid);
|
||||||
|
void dispatch_send_group_event(uint8_t groupid, uint8_t eventid, bool update_hasp);
|
||||||
|
bool dispatch_get_event_state(uint8_t eventid);
|
||||||
|
|
||||||
|
void IRAM_ATTR dispatch_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute,
|
||||||
|
const char * data);
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user