-
Notifications
You must be signed in to change notification settings - Fork 317
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create _P164_MSswitch.ino #130
base: master
Are you sure you want to change the base?
Conversation
Plugin to control Nexa, Prove, Telldus & Jula Anslutt socket switches
|
||
// Download library from https://github.com/mortensalomon/Socket_Switch | ||
|
||
Socketswitch *Plugin_164_msswitch; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This must be initialized to nullptr
, or else you will get unexpected behavior
if (CONFIG_PIN1>-1) { | ||
addFormSubHeader(F("Try it")); | ||
String options[17] = { F("CH 1"),F("CH 2"),F("CH 3"),F("CH 4"),F("CH 5"),F("CH 6"),F("CH 7"),F("CH 8"),F("CH 9"),F("CH 10"),F("CH 11"),F("CH 12"),F("CH 13"),F("CH 14"),F("CH 15"),F("CH 16"),F("GROUP") }; | ||
int optionValues[17] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not use a for loop for this?
These strings also add to the size of the binary.
#define PLUGIN_VALUENAME1_164 "" | ||
|
||
unsigned long SocketAddress; | ||
String log164; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do not declare this global. Better to declare it inside the function, then you know for sure the string will be destructed when the function has finished.
Try to keep the scope of variables as small as possible, then it is easier to predict their behavior.
A string that will remain allocated can grow and keep the memory allocated even when it is no longer needed, so it will keep its largest allocated size.
noInterrupts(); | ||
if (getFormItemInt(F("state"))) { | ||
if (getFormItemInt(F("channel"))==16) { | ||
Plugin_164_msswitch->groupOn(SocketAddress); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no check to see if Plugin_164_msswitch
is a valid pointer.
This means it will lead to a crash when the plugin is saved while not being enabled.
Please check other uses of this pointer.
{ | ||
if (!Plugin_164_msswitch) | ||
{ | ||
Plugin_164_msswitch = new Socketswitch(CONFIG_PIN1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You have implemented a PLUGIN_INIT
but no PLUGIN_EXIT
in which the pointer must be deleted.
This means this allocation may lead to a memory leak when the plugin is removed.
Also a change of pin settings now need a reboot of the ESP to activate.
if (val_state.equalsIgnoreCase("on")) Plugin_164_msswitch->groupOn(SocketAddress); | ||
if (val_state.equalsIgnoreCase("off")) Plugin_164_msswitch->groupOff(SocketAddress); | ||
} else { | ||
if (val_dev == "1" || val_dev == "2" || val_dev == "3" || val_dev == "4" || val_dev == "5" || val_dev == "6" || val_dev == "7" || val_dev == "8" || val_dev == "9" || val_dev == "10" || val_dev == "11" || val_dev == "12" || val_dev == "13" || val_dev == "14" || val_dev == "15" || val_dev == "16") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have functions to check if a string is a numerical value. Please use that, then convert to an int and check its range.
These strings all add up to the memory consumption and binary file size.
#define PLUGIN_NAME_164 "MS auto-learning Switch" | ||
#define PLUGIN_VALUENAME1_164 "" | ||
|
||
unsigned long SocketAddress; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In every location where this value is used, the event variable is present, so you can also directly call PCONFIG_LONG(0)
or make a define for it for better readability.
For example something like this:
#define p164_SocketAddress PCONFIG_LONG(0)
Plugin to control Nexa, Prove, Telldus & Jula Anslutt socket switches