Updates
This commit is contained in:
26
Gpio.cpp
26
Gpio.cpp
@@ -74,6 +74,14 @@ void Gpio::init()
|
|||||||
pinMode(entry.pin, INPUT_PULLUP);
|
pinMode(entry.pin, INPUT_PULLUP);
|
||||||
attachInterrupt(entry.pin, isrDeactivateRtoCm, FALLING);
|
attachInterrupt(entry.pin, isrDeactivateRtoCm, FALLING);
|
||||||
break;
|
break;
|
||||||
|
case PinRole::InputDeactivateRTO:
|
||||||
|
pinMode(entry.pin, INPUT_PULLUP);
|
||||||
|
attachInterrupt(entry.pin, isrDeactivateRTO, FALLING);
|
||||||
|
break;
|
||||||
|
case PinRole::InputDeactivateCM:
|
||||||
|
pinMode(entry.pin, INPUT_PULLUP);
|
||||||
|
attachInterrupt(entry.pin, isrDeactivateCM, FALLING);
|
||||||
|
break;
|
||||||
case PinRole::OutputHighLocked:
|
case PinRole::OutputHighLocked:
|
||||||
case PinRole::OutputHighUnlocked:
|
case PinRole::OutputHighUnlocked:
|
||||||
case PinRole::OutputHighMotorBlocked:
|
case PinRole::OutputHighMotorBlocked:
|
||||||
@@ -199,6 +207,10 @@ String Gpio::getRoleDescription(PinRole role) const
|
|||||||
return "Input: Activate CM";
|
return "Input: Activate CM";
|
||||||
case PinRole::InputDeactivateRtoCm:
|
case PinRole::InputDeactivateRtoCm:
|
||||||
return "Input: Deactivate RTO/CM";
|
return "Input: Deactivate RTO/CM";
|
||||||
|
case PinRole::InputDeactivateRTO:
|
||||||
|
return "Input: Deactivate RTO";
|
||||||
|
case PinRole::InputDeactivateCM:
|
||||||
|
return "Input: Deactivate CM";
|
||||||
case PinRole::OutputHighLocked:
|
case PinRole::OutputHighLocked:
|
||||||
return "Output: High when locked";
|
return "Output: High when locked";
|
||||||
case PinRole::OutputHighUnlocked:
|
case PinRole::OutputHighUnlocked:
|
||||||
@@ -327,6 +339,20 @@ void Gpio::isrDeactivateRtoCm()
|
|||||||
_debounceTs = millis() + _debounceTime;
|
_debounceTs = millis() + _debounceTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Gpio::isrDeactivateRTO()
|
||||||
|
{
|
||||||
|
if(millis() < _debounceTs) return;
|
||||||
|
_inst->notify(GpioAction::DeactivateRTO, -1);
|
||||||
|
_debounceTs = millis() + _debounceTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Gpio::isrDeactivateCM()
|
||||||
|
{
|
||||||
|
if(millis() < _debounceTs) return;
|
||||||
|
_inst->notify(GpioAction::DeactivateCM, -1);
|
||||||
|
_debounceTs = millis() + _debounceTime;
|
||||||
|
}
|
||||||
|
|
||||||
void Gpio::setPinOutput(const uint8_t& pin, const uint8_t& state)
|
void Gpio::setPinOutput(const uint8_t& pin, const uint8_t& state)
|
||||||
{
|
{
|
||||||
digitalWrite(pin, state);
|
digitalWrite(pin, state);
|
||||||
|
|||||||
8
Gpio.h
8
Gpio.h
@@ -16,6 +16,8 @@ enum class PinRole
|
|||||||
InputActivateRTO,
|
InputActivateRTO,
|
||||||
InputActivateCM,
|
InputActivateCM,
|
||||||
InputDeactivateRtoCm,
|
InputDeactivateRtoCm,
|
||||||
|
InputDeactivateRTO,
|
||||||
|
InputDeactivateCM,
|
||||||
OutputHighLocked,
|
OutputHighLocked,
|
||||||
OutputHighUnlocked,
|
OutputHighUnlocked,
|
||||||
OutputHighMotorBlocked,
|
OutputHighMotorBlocked,
|
||||||
@@ -38,6 +40,8 @@ enum class GpioAction
|
|||||||
ActivateRTO,
|
ActivateRTO,
|
||||||
ActivateCM,
|
ActivateCM,
|
||||||
DeactivateRtoCm,
|
DeactivateRtoCm,
|
||||||
|
DeactivateRTO,
|
||||||
|
DeactivateCM,
|
||||||
GeneralInput
|
GeneralInput
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -88,6 +92,8 @@ private:
|
|||||||
PinRole::InputActivateRTO,
|
PinRole::InputActivateRTO,
|
||||||
PinRole::InputActivateCM,
|
PinRole::InputActivateCM,
|
||||||
PinRole::InputDeactivateRtoCm,
|
PinRole::InputDeactivateRtoCm,
|
||||||
|
PinRole::InputDeactivateRTO,
|
||||||
|
PinRole::InputDeactivateCM,
|
||||||
PinRole::OutputHighLocked,
|
PinRole::OutputHighLocked,
|
||||||
PinRole::OutputHighUnlocked,
|
PinRole::OutputHighUnlocked,
|
||||||
PinRole::OutputHighRtoActive,
|
PinRole::OutputHighRtoActive,
|
||||||
@@ -110,6 +116,8 @@ private:
|
|||||||
static void IRAM_ATTR isrActivateRTO();
|
static void IRAM_ATTR isrActivateRTO();
|
||||||
static void IRAM_ATTR isrActivateCM();
|
static void IRAM_ATTR isrActivateCM();
|
||||||
static void IRAM_ATTR isrDeactivateRtoCm();
|
static void IRAM_ATTR isrDeactivateRtoCm();
|
||||||
|
static void IRAM_ATTR isrDeactivateRTO();
|
||||||
|
static void IRAM_ATTR isrDeactivateCM();
|
||||||
|
|
||||||
std::vector<std::function<void(const GpioAction&, const int&)>> _callbacks;
|
std::vector<std::function<void(const GpioAction&, const int&)>> _callbacks;
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
#define mqtt_topic_query_battery "/lock/query/battery"
|
#define mqtt_topic_query_battery "/lock/query/battery"
|
||||||
#define mqtt_topic_query_lockstate_command_result "/lock/query/lockstateCommandResult"
|
#define mqtt_topic_query_lockstate_command_result "/lock/query/lockstateCommandResult"
|
||||||
#define mqtt_topic_lock_binary_state "/lock/binaryState"
|
#define mqtt_topic_lock_binary_state "/lock/binaryState"
|
||||||
#define mqtt_topic_lock_continous_mode "/lock/continousMode"
|
#define mqtt_topic_lock_continuous_mode "/lock/continuousMode"
|
||||||
#define mqtt_topic_lock_trigger "/lock/trigger"
|
#define mqtt_topic_lock_trigger "/lock/trigger"
|
||||||
#define mqtt_topic_lock_last_lock_action "/lock/lastLockAction"
|
#define mqtt_topic_lock_last_lock_action "/lock/lastLockAction"
|
||||||
#define mqtt_topic_lock_log "/lock/log"
|
#define mqtt_topic_lock_log "/lock/log"
|
||||||
|
|||||||
13
Network.cpp
13
Network.cpp
@@ -1166,21 +1166,24 @@ void Network::publishHASSConfigContinuousMode(char *deviceType, const char *base
|
|||||||
|
|
||||||
if (discoveryTopic != "")
|
if (discoveryTopic != "")
|
||||||
{
|
{
|
||||||
publishHassTopic("binary_sensor",
|
publishHassTopic("switch",
|
||||||
"continuous_mode",
|
"continuous_mode",
|
||||||
uidString,
|
uidString,
|
||||||
"_continuous_mode",
|
"_continuous_mode",
|
||||||
"Continuous mode",
|
"Continuous mode",
|
||||||
name,
|
name,
|
||||||
baseTopic,
|
baseTopic,
|
||||||
String("~") + mqtt_topic_lock_continous_mode,
|
String("~") + mqtt_topic_lock_continuous_mode,
|
||||||
deviceType,
|
deviceType,
|
||||||
"lock",
|
"lock",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
String("~") + mqtt_topic_lock_action,
|
||||||
{{"pl_on", "on"},
|
{{ "enabled_by_default", "false" },
|
||||||
{"pl_off", "off"}});
|
{"state_on", "on"},
|
||||||
|
{"state_on", "off"},
|
||||||
|
{"pl_on", "activateCM"},
|
||||||
|
{"pl_off", "deactivateCM"}});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -209,15 +209,8 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
|
|||||||
lockstateToString(keyTurnerState.lockState, str);
|
lockstateToString(keyTurnerState.lockState, str);
|
||||||
|
|
||||||
if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState || keyTurnerState.nukiState != lastKeyTurnerState.nukiState) && keyTurnerState.lockState != NukiOpener::LockState::Undefined)
|
if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState || keyTurnerState.nukiState != lastKeyTurnerState.nukiState) && keyTurnerState.lockState != NukiOpener::LockState::Undefined)
|
||||||
{
|
|
||||||
if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
|
|
||||||
{
|
|
||||||
publishString(mqtt_topic_lock_state, "ContinuousMode");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
publishString(mqtt_topic_lock_state, str);
|
publishString(mqtt_topic_lock_state, str);
|
||||||
}
|
|
||||||
|
|
||||||
if(_haEnabled)
|
if(_haEnabled)
|
||||||
{
|
{
|
||||||
@@ -229,8 +222,10 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
|
|||||||
|
|
||||||
if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
|
if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
|
||||||
{
|
{
|
||||||
|
publishString(mqtt_topic_lock_continuous_mode, "on");
|
||||||
json["continuous_mode"] = 1;
|
json["continuous_mode"] = 1;
|
||||||
} else {
|
} else {
|
||||||
|
publishString(mqtt_topic_lock_continuous_mode, "off");
|
||||||
json["continuous_mode"] = 0;
|
json["continuous_mode"] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,12 +286,9 @@ void NetworkOpener::publishState(NukiOpener::OpenerState lockState)
|
|||||||
{
|
{
|
||||||
publishString(mqtt_topic_lock_ha_state, "unlocked");
|
publishString(mqtt_topic_lock_ha_state, "unlocked");
|
||||||
publishString(mqtt_topic_lock_binary_state, "unlocked");
|
publishString(mqtt_topic_lock_binary_state, "unlocked");
|
||||||
publishString(mqtt_topic_lock_continous_mode, "on");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
publishString(mqtt_topic_lock_continous_mode, "off");
|
|
||||||
|
|
||||||
switch (lockState.lockState)
|
switch (lockState.lockState)
|
||||||
{
|
{
|
||||||
case NukiOpener::LockState::Locked:
|
case NukiOpener::LockState::Locked:
|
||||||
|
|||||||
@@ -291,6 +291,16 @@ void NukiOpenerWrapper::deactivateRtoCm()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NukiOpenerWrapper::deactivateRTO()
|
||||||
|
{
|
||||||
|
_nextLockAction = NukiOpener::LockAction::DeactivateRTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NukiOpenerWrapper::deactivateCM()
|
||||||
|
{
|
||||||
|
_nextLockAction = NukiOpener::LockAction::DeactivateCM;
|
||||||
|
}
|
||||||
|
|
||||||
bool NukiOpenerWrapper::isPinSet()
|
bool NukiOpenerWrapper::isPinSet()
|
||||||
{
|
{
|
||||||
return _nukiOpener.getSecurityPincode() != 0;
|
return _nukiOpener.getSecurityPincode() != 0;
|
||||||
@@ -347,13 +357,11 @@ void NukiOpenerWrapper::updateKeyTurnerState()
|
|||||||
{
|
{
|
||||||
Log->println(F("Continuous Mode"));
|
Log->println(F("Continuous Mode"));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
char lockStateStr[20];
|
char lockStateStr[20];
|
||||||
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
||||||
Log->println(lockStateStr);
|
Log->println(lockStateStr);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(_publishAuthData)
|
if(_publishAuthData)
|
||||||
{
|
{
|
||||||
@@ -535,6 +543,12 @@ void NukiOpenerWrapper::gpioActionCallback(const GpioAction &action, const int&
|
|||||||
case GpioAction::DeactivateRtoCm:
|
case GpioAction::DeactivateRtoCm:
|
||||||
nukiOpenerInst->deactivateRtoCm();
|
nukiOpenerInst->deactivateRtoCm();
|
||||||
break;
|
break;
|
||||||
|
case GpioAction::DeactivateRTO:
|
||||||
|
nukiOpenerInst->deactivateRTO();
|
||||||
|
break;
|
||||||
|
case GpioAction::DeactivateCM:
|
||||||
|
nukiOpenerInst->deactivateCM();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ public:
|
|||||||
void activateRTO();
|
void activateRTO();
|
||||||
void activateCM();
|
void activateCM();
|
||||||
void deactivateRtoCm();
|
void deactivateRtoCm();
|
||||||
|
void deactivateRTO();
|
||||||
|
void deactivateCM();
|
||||||
|
|
||||||
bool isPinSet();
|
bool isPinSet();
|
||||||
void setPin(const uint16_t pin);
|
void setPin(const uint16_t pin);
|
||||||
|
|||||||
@@ -199,7 +199,9 @@ can be configured for a specific role:
|
|||||||
- Input: Electric strike actuation: When connect to Ground, an electric strike actuation command is sent to the opener (open door for configured amount of time)
|
- Input: Electric strike actuation: When connect to Ground, an electric strike actuation command is sent to the opener (open door for configured amount of time)
|
||||||
- Input: Activate RTO: When connect to Ground, Ring-to-open is activated (opener)
|
- Input: Activate RTO: When connect to Ground, Ring-to-open is activated (opener)
|
||||||
- Input: Activate CM: When connect to Ground, Continuous mode is activated (opener)
|
- Input: Activate CM: When connect to Ground, Continuous mode is activated (opener)
|
||||||
- Input: Deactivate RTO/CM: Disable RTO or CM, depending on which is active
|
- Input: Deactivate RTO/CM: Disable RTO or CM, depending on which is active (opener)
|
||||||
|
- Input: Dectivate RTO: When connect to Ground, Ring-to-open is deactivated (opener)
|
||||||
|
- Input: Dectivate CM: When connect to Ground, Continuous mode is deactivated (opener)
|
||||||
- Output: High when locked: Outputs a high signal when the door is locked
|
- Output: High when locked: Outputs a high signal when the door is locked
|
||||||
- Output: High when unlocked: Outputs a high signal when the door is unlocked
|
- Output: High when unlocked: Outputs a high signal when the door is unlocked
|
||||||
- Output: High when motor blocked: Outputs a high signal when the motor is blocked (lock)
|
- Output: High when motor blocked: Outputs a high signal when the motor is blocked (lock)
|
||||||
|
|||||||
Reference in New Issue
Block a user