(fingerprint_grow) Added on_finger_scan_invalid automation. (#5885)

This commit is contained in:
Ruben van Dijk 2023-12-21 05:39:55 +01:00 committed by GitHub
parent a784f1e691
commit 04b3547992
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 0 deletions

View File

@ -15,6 +15,7 @@ from esphome.const import (
CONF_ON_ENROLLMENT_SCAN, CONF_ON_ENROLLMENT_SCAN,
CONF_ON_FINGER_SCAN_MATCHED, CONF_ON_FINGER_SCAN_MATCHED,
CONF_ON_FINGER_SCAN_UNMATCHED, CONF_ON_FINGER_SCAN_UNMATCHED,
CONF_ON_FINGER_SCAN_INVALID,
CONF_PASSWORD, CONF_PASSWORD,
CONF_SENSING_PIN, CONF_SENSING_PIN,
CONF_SPEED, CONF_SPEED,
@ -42,6 +43,10 @@ FingerScanUnmatchedTrigger = fingerprint_grow_ns.class_(
"FingerScanUnmatchedTrigger", automation.Trigger.template() "FingerScanUnmatchedTrigger", automation.Trigger.template()
) )
FingerScanInvalidTrigger = fingerprint_grow_ns.class_(
"FingerScanInvalidTrigger", automation.Trigger.template()
)
EnrollmentScanTrigger = fingerprint_grow_ns.class_( EnrollmentScanTrigger = fingerprint_grow_ns.class_(
"EnrollmentScanTrigger", automation.Trigger.template(cg.uint8, cg.uint16) "EnrollmentScanTrigger", automation.Trigger.template(cg.uint8, cg.uint16)
) )
@ -108,6 +113,13 @@ CONFIG_SCHEMA = (
), ),
} }
), ),
cv.Optional(CONF_ON_FINGER_SCAN_INVALID): automation.validate_automation(
{
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
FingerScanInvalidTrigger
),
}
),
cv.Optional(CONF_ON_ENROLLMENT_SCAN): automation.validate_automation( cv.Optional(CONF_ON_ENROLLMENT_SCAN): automation.validate_automation(
{ {
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
@ -162,6 +174,10 @@ async def to_code(config):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
await automation.build_automation(trigger, [], conf) await automation.build_automation(trigger, [], conf)
for conf in config.get(CONF_ON_FINGER_SCAN_INVALID, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
await automation.build_automation(trigger, [], conf)
for conf in config.get(CONF_ON_ENROLLMENT_SCAN, []): for conf in config.get(CONF_ON_ENROLLMENT_SCAN, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
await automation.build_automation( await automation.build_automation(

View File

@ -134,12 +134,14 @@ uint8_t FingerprintGrowComponent::scan_image_(uint8_t buffer) {
case NO_FINGER: case NO_FINGER:
if (this->sensing_pin_ != nullptr) { if (this->sensing_pin_ != nullptr) {
ESP_LOGD(TAG, "No finger"); ESP_LOGD(TAG, "No finger");
this->finger_scan_invalid_callback_.call();
} else { } else {
ESP_LOGV(TAG, "No finger"); ESP_LOGV(TAG, "No finger");
} }
return this->data_[0]; return this->data_[0];
case IMAGE_FAIL: case IMAGE_FAIL:
ESP_LOGE(TAG, "Imaging error"); ESP_LOGE(TAG, "Imaging error");
this->finger_scan_invalid_callback_.call();
default: default:
return this->data_[0]; return this->data_[0];
} }
@ -152,10 +154,12 @@ uint8_t FingerprintGrowComponent::scan_image_(uint8_t buffer) {
break; break;
case IMAGE_MESS: case IMAGE_MESS:
ESP_LOGE(TAG, "Image too messy"); ESP_LOGE(TAG, "Image too messy");
this->finger_scan_invalid_callback_.call();
break; break;
case FEATURE_FAIL: case FEATURE_FAIL:
case INVALID_IMAGE: case INVALID_IMAGE:
ESP_LOGE(TAG, "Could not find fingerprint features"); ESP_LOGE(TAG, "Could not find fingerprint features");
this->finger_scan_invalid_callback_.call();
break; break;
} }
return this->data_[0]; return this->data_[0];

View File

@ -124,6 +124,9 @@ class FingerprintGrowComponent : public PollingComponent, public uart::UARTDevic
void add_on_finger_scan_unmatched_callback(std::function<void()> callback) { void add_on_finger_scan_unmatched_callback(std::function<void()> callback) {
this->finger_scan_unmatched_callback_.add(std::move(callback)); this->finger_scan_unmatched_callback_.add(std::move(callback));
} }
void add_on_finger_scan_invalid_callback(std::function<void()> callback) {
this->finger_scan_invalid_callback_.add(std::move(callback));
}
void add_on_enrollment_scan_callback(std::function<void(uint8_t, uint16_t)> callback) { void add_on_enrollment_scan_callback(std::function<void(uint8_t, uint16_t)> callback) {
this->enrollment_scan_callback_.add(std::move(callback)); this->enrollment_scan_callback_.add(std::move(callback));
} }
@ -172,6 +175,7 @@ class FingerprintGrowComponent : public PollingComponent, public uart::UARTDevic
sensor::Sensor *last_finger_id_sensor_{nullptr}; sensor::Sensor *last_finger_id_sensor_{nullptr};
sensor::Sensor *last_confidence_sensor_{nullptr}; sensor::Sensor *last_confidence_sensor_{nullptr};
binary_sensor::BinarySensor *enrolling_binary_sensor_{nullptr}; binary_sensor::BinarySensor *enrolling_binary_sensor_{nullptr};
CallbackManager<void()> finger_scan_invalid_callback_;
CallbackManager<void(uint16_t, uint16_t)> finger_scan_matched_callback_; CallbackManager<void(uint16_t, uint16_t)> finger_scan_matched_callback_;
CallbackManager<void()> finger_scan_unmatched_callback_; CallbackManager<void()> finger_scan_unmatched_callback_;
CallbackManager<void(uint8_t, uint16_t)> enrollment_scan_callback_; CallbackManager<void(uint8_t, uint16_t)> enrollment_scan_callback_;
@ -194,6 +198,13 @@ class FingerScanUnmatchedTrigger : public Trigger<> {
} }
}; };
class FingerScanInvalidTrigger : public Trigger<> {
public:
explicit FingerScanInvalidTrigger(FingerprintGrowComponent *parent) {
parent->add_on_finger_scan_invalid_callback([this]() { this->trigger(); });
}
};
class EnrollmentScanTrigger : public Trigger<uint8_t, uint16_t> { class EnrollmentScanTrigger : public Trigger<uint8_t, uint16_t> {
public: public:
explicit EnrollmentScanTrigger(FingerprintGrowComponent *parent) { explicit EnrollmentScanTrigger(FingerprintGrowComponent *parent) {

View File

@ -500,6 +500,7 @@ CONF_ON_DOUBLE_CLICK = "on_double_click"
CONF_ON_ENROLLMENT_DONE = "on_enrollment_done" CONF_ON_ENROLLMENT_DONE = "on_enrollment_done"
CONF_ON_ENROLLMENT_FAILED = "on_enrollment_failed" CONF_ON_ENROLLMENT_FAILED = "on_enrollment_failed"
CONF_ON_ENROLLMENT_SCAN = "on_enrollment_scan" CONF_ON_ENROLLMENT_SCAN = "on_enrollment_scan"
CONF_ON_FINGER_SCAN_INVALID = "on_finger_scan_invalid"
CONF_ON_FINGER_SCAN_MATCHED = "on_finger_scan_matched" CONF_ON_FINGER_SCAN_MATCHED = "on_finger_scan_matched"
CONF_ON_FINGER_SCAN_UNMATCHED = "on_finger_scan_unmatched" CONF_ON_FINGER_SCAN_UNMATCHED = "on_finger_scan_unmatched"
CONF_ON_JSON_MESSAGE = "on_json_message" CONF_ON_JSON_MESSAGE = "on_json_message"

View File

@ -1257,6 +1257,9 @@ fingerprint_grow:
number: 4 number: 4
password: 0x12FE37DC password: 0x12FE37DC
new_password: 0xA65B9840 new_password: 0xA65B9840
on_finger_scan_invalid:
- homeassistant.event:
event: esphome.${device_name}_fingerprint_grow_finger_scan_invalid
on_finger_scan_matched: on_finger_scan_matched:
- homeassistant.event: - homeassistant.event:
event: esphome.${device_name}_fingerprint_grow_finger_scan_matched event: esphome.${device_name}_fingerprint_grow_finger_scan_matched