mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2026-10-31 22:02:17 +01:00
refactor: move socket events into SomfyEvents.cpp
The emitState and emitCommand events for rooms, shades, groups and the controller move out of Somfy.cpp unchanged. Also drop the log tag from SomfyMqtt.cpp, which never logs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
297c4d5dcd
commit
2771b91571
3 changed files with 99 additions and 93 deletions
|
|
@ -817,88 +817,6 @@ float SomfyShade::p_myTiltPos(float pos) {
|
|||
return old;
|
||||
}
|
||||
|
||||
void SomfyShade::emitState(const char *evt) { this->emitState(255, evt); }
|
||||
void SomfyShade::emitState(uint8_t num, const char *evt) {
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("shadeId", this->shadeId);
|
||||
json->addElem("type", static_cast<uint8_t>(this->shadeType));
|
||||
json->addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||
json->addElem("name", this->name);
|
||||
json->addElem("direction", this->direction);
|
||||
json->addElem("position", this->transformPosition(this->currentPos));
|
||||
json->addElem("target", this->transformPosition(this->target));
|
||||
json->addElem("myPos", this->transformPosition(this->myPos));
|
||||
json->addElem("tiltType", static_cast<uint8_t>(this->tiltType));
|
||||
json->addElem("flipCommands", this->flipCommands);
|
||||
json->addElem("flipPosition", this->flipPosition);
|
||||
json->addElem("flags", this->flags);
|
||||
json->addElem("sunSensor", this->hasSunSensor());
|
||||
json->addElem("light", this->hasLight());
|
||||
json->addElem("sortOrder", this->sortOrder);
|
||||
if(this->tiltType != tilt_types::none) {
|
||||
json->addElem("tiltDirection", this->tiltDirection);
|
||||
json->addElem("tiltTarget", this->transformPosition(this->tiltTarget));
|
||||
json->addElem("tiltPosition", this->transformPosition(this->currentTiltPos));
|
||||
json->addElem("myTiltPos", this->transformPosition(this->myTiltPos));
|
||||
}
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
}
|
||||
void SomfyShade::emitCommand(somfy_commands cmd, const char *source, uint32_t sourceAddress, const char *evt) { this->emitCommand(255, cmd, source, sourceAddress, evt); }
|
||||
void SomfyShade::emitCommand(uint8_t num, somfy_commands cmd, const char *source, uint32_t sourceAddress, const char *evt) {
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("shadeId", this->shadeId);
|
||||
json->addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||
json->addElem("cmd", translateSomfyCommand(cmd).c_str());
|
||||
json->addElem("source", source);
|
||||
json->addElem("rcode", (uint32_t)this->lastRollingCode);
|
||||
json->addElem("sourceAddress", (uint32_t)sourceAddress);
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
if(mqtt.connected()) {
|
||||
this->publish("cmdSource", source);
|
||||
this->publish("cmdAddress", sourceAddress);
|
||||
this->publish("cmd", translateSomfyCommand(cmd).c_str());
|
||||
}
|
||||
}
|
||||
void SomfyRoom::emitState(const char *evt) { this->emitState(255, evt); }
|
||||
void SomfyRoom::emitState(uint8_t num, const char *evt) {
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("roomId", this->roomId);
|
||||
json->addElem("name", this->name);
|
||||
json->addElem("sortOrder", this->sortOrder);
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
this->publish();
|
||||
}
|
||||
void SomfyGroup::emitState(const char *evt) { this->emitState(255, evt); }
|
||||
void SomfyGroup::emitState(uint8_t num, const char *evt) {
|
||||
uint8_t flags = 0;
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("groupId", this->groupId);
|
||||
json->addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||
json->addElem("name", this->name);
|
||||
json->addElem("sunSensor", this->hasSunSensor());
|
||||
json->beginArray("shades");
|
||||
for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) {
|
||||
if(this->linkedShades[i] != 255 && this->linkedShades[i] != 0) {
|
||||
SomfyShade *shade = somfy.getShadeById(this->linkedShades[i]);
|
||||
if(shade) {
|
||||
json->addElem(this->linkedShades[i]);
|
||||
flags |= shade->flags;
|
||||
}
|
||||
}
|
||||
}
|
||||
json->endArray();
|
||||
json->addElem("flags", flags);
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
this->publish();
|
||||
}
|
||||
int8_t SomfyShade::transformPosition(float fpos) { return displayPosition(fpos, this->flipPosition); }
|
||||
bool SomfyShade::isIdle() {
|
||||
return this->isAtTarget() && this->direction == 0 && this->tiltDirection == 0;
|
||||
|
|
@ -2261,14 +2179,6 @@ void SomfyShadeController::processWaitingFrame() {
|
|||
for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++)
|
||||
if(this->shades[i].getShadeId() != 255) this->shades[i].processWaitingFrame();
|
||||
}
|
||||
void SomfyShadeController::emitState(uint8_t num) {
|
||||
for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) {
|
||||
SomfyShade *shade = &this->shades[i];
|
||||
if(shade->getShadeId() == 255) continue;
|
||||
esp_task_wdt_reset();
|
||||
shade->emitState(num);
|
||||
}
|
||||
}
|
||||
uint8_t SomfyShadeController::getNextShadeId() {
|
||||
// There is no shortcut for this since the deletion of
|
||||
// a shade in the middle makes all of this very difficult.
|
||||
|
|
|
|||
99
src/SomfyEvents.cpp
Normal file
99
src/SomfyEvents.cpp
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
#include <esp_task_wdt.h>
|
||||
#include "Somfy.h"
|
||||
#include "Sockets.h"
|
||||
#include "MQTT.h"
|
||||
|
||||
extern SomfyShadeController somfy;
|
||||
extern SocketEmitter sockEmit;
|
||||
extern MQTTClass mqtt;
|
||||
|
||||
void SomfyShade::emitState(const char *evt) { this->emitState(255, evt); }
|
||||
void SomfyShade::emitState(uint8_t num, const char *evt) {
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("shadeId", this->shadeId);
|
||||
json->addElem("type", static_cast<uint8_t>(this->shadeType));
|
||||
json->addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||
json->addElem("name", this->name);
|
||||
json->addElem("direction", this->direction);
|
||||
json->addElem("position", this->transformPosition(this->currentPos));
|
||||
json->addElem("target", this->transformPosition(this->target));
|
||||
json->addElem("myPos", this->transformPosition(this->myPos));
|
||||
json->addElem("tiltType", static_cast<uint8_t>(this->tiltType));
|
||||
json->addElem("flipCommands", this->flipCommands);
|
||||
json->addElem("flipPosition", this->flipPosition);
|
||||
json->addElem("flags", this->flags);
|
||||
json->addElem("sunSensor", this->hasSunSensor());
|
||||
json->addElem("light", this->hasLight());
|
||||
json->addElem("sortOrder", this->sortOrder);
|
||||
if(this->tiltType != tilt_types::none) {
|
||||
json->addElem("tiltDirection", this->tiltDirection);
|
||||
json->addElem("tiltTarget", this->transformPosition(this->tiltTarget));
|
||||
json->addElem("tiltPosition", this->transformPosition(this->currentTiltPos));
|
||||
json->addElem("myTiltPos", this->transformPosition(this->myTiltPos));
|
||||
}
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
}
|
||||
void SomfyShade::emitCommand(somfy_commands cmd, const char *source, uint32_t sourceAddress, const char *evt) { this->emitCommand(255, cmd, source, sourceAddress, evt); }
|
||||
void SomfyShade::emitCommand(uint8_t num, somfy_commands cmd, const char *source, uint32_t sourceAddress, const char *evt) {
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("shadeId", this->shadeId);
|
||||
json->addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||
json->addElem("cmd", translateSomfyCommand(cmd).c_str());
|
||||
json->addElem("source", source);
|
||||
json->addElem("rcode", (uint32_t)this->lastRollingCode);
|
||||
json->addElem("sourceAddress", (uint32_t)sourceAddress);
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
if(mqtt.connected()) {
|
||||
this->publish("cmdSource", source);
|
||||
this->publish("cmdAddress", sourceAddress);
|
||||
this->publish("cmd", translateSomfyCommand(cmd).c_str());
|
||||
}
|
||||
}
|
||||
void SomfyRoom::emitState(const char *evt) { this->emitState(255, evt); }
|
||||
void SomfyRoom::emitState(uint8_t num, const char *evt) {
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("roomId", this->roomId);
|
||||
json->addElem("name", this->name);
|
||||
json->addElem("sortOrder", this->sortOrder);
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
this->publish();
|
||||
}
|
||||
void SomfyGroup::emitState(const char *evt) { this->emitState(255, evt); }
|
||||
void SomfyGroup::emitState(uint8_t num, const char *evt) {
|
||||
uint8_t flags = 0;
|
||||
JsonSockEvent *json = sockEmit.beginEmit(evt);
|
||||
json->beginObject();
|
||||
json->addElem("groupId", this->groupId);
|
||||
json->addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||
json->addElem("name", this->name);
|
||||
json->addElem("sunSensor", this->hasSunSensor());
|
||||
json->beginArray("shades");
|
||||
for(uint8_t i = 0; i < SOMFY_MAX_GROUPED_SHADES; i++) {
|
||||
if(this->linkedShades[i] != 255 && this->linkedShades[i] != 0) {
|
||||
SomfyShade *shade = somfy.getShadeById(this->linkedShades[i]);
|
||||
if(shade) {
|
||||
json->addElem(this->linkedShades[i]);
|
||||
flags |= shade->flags;
|
||||
}
|
||||
}
|
||||
}
|
||||
json->endArray();
|
||||
json->addElem("flags", flags);
|
||||
json->endObject();
|
||||
sockEmit.endEmit(num);
|
||||
this->publish();
|
||||
}
|
||||
void SomfyShadeController::emitState(uint8_t num) {
|
||||
for(uint8_t i = 0; i < SOMFY_MAX_SHADES; i++) {
|
||||
SomfyShade *shade = &this->shades[i];
|
||||
if(shade->getShadeId() == 255) continue;
|
||||
esp_task_wdt_reset();
|
||||
shade->emitState(num);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,9 @@
|
|||
#include "esp_log.h"
|
||||
#include "Utils.h"
|
||||
#include "ConfigSettings.h"
|
||||
#include "Somfy.h"
|
||||
#include "Sockets.h"
|
||||
#include "MQTT.h"
|
||||
|
||||
static const char *TAG = "Somfy";
|
||||
|
||||
extern SomfyShadeController somfy;
|
||||
extern SocketEmitter sockEmit;
|
||||
extern ConfigSettings settings;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue