Skip to content

Commit

Permalink
Add support for UniFi Access events and bugfix for tags not found
Browse files Browse the repository at this point in the history
  • Loading branch information
steffjenl committed Nov 14, 2024
1 parent d73b429 commit 82ed5a3
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 58 deletions.
40 changes: 38 additions & 2 deletions .homeycompose/flow/triggers/ufp_door_access.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,49 @@
"name": "ufp_door_access_person",
"type": "string",
"title": {
"en": "Person",
"nl": "Persoon"
"en": "Username",
"nl": "Gebruikersnaam"
},
"example": {
"en": "John Doe",
"nl": "Jan Jansen"
}
},
{
"name": "ufp_door_access_first_name",
"type": "string",
"title": {
"en": "First name",
"nl": "Voornaam"
},
"example": {
"en": "John",
"nl": "Jan"
}
},
{
"name": "ufp_door_access_last_name",
"type": "string",
"title": {
"en": "Last name",
"nl": "Achternaam"
},
"example": {
"en": "Doe",
"nl": "Jansen"
}
},
{
"name": "ufp_door_access_user_unique_id",
"type": "string",
"title": {
"en": "User Unique ID",
"nl": "Gebruiker Unieke ID"
},
"example": {
"en": "xxx-xxx-xxx",
"nl": "xxx-xxx-xxx"
}
}
]
}
87 changes: 31 additions & 56 deletions drivers/protectdoorbell/device.js
Original file line number Diff line number Diff line change
Expand Up @@ -290,42 +290,25 @@ class Doorbell extends Homey.Device {
this.homey.app.debug('[Object] onFingerprintIdentified ' + JSON.stringify(payload));

if (typeof payload !== 'undefined'
&& typeof payload.metadata !== 'undefined'
&& typeof payload.metadata.fingerprint !== 'undefined'
&& typeof payload.metadata.fingerprint.userId !== 'undefined'
&& payload.metadata.fingerprint.userId !== null) {
this.homey.app.api.getUsernameById(payload.metadata.fingerprint.userId).then((localUsername) => {
// Generic trigger
this.homey.app._fingerPrintIdentifiedTrigger.trigger({
ufp_fingerprint_identified_camera: this.getName(),
ufp_fingerprint_identified_person: localUsername
}).catch(this.error);

// Device trigger
this.driver._deviceFingerprintIdentifiedTrigger.trigger(this, {
ufp_device_fingerprint_identified_person: localUsername,
}).catch(this.error);
}).catch(this.error);
return true;
} else if (typeof payload !== 'undefined'
&& typeof payload.metadata !== 'undefined'
&& typeof payload.metadata.fingerprint !== 'undefined'
&& typeof payload.metadata.fingerprint.ulpId !== 'undefined'
&& payload.metadata.fingerprint.ulpId !== null) {
this.homey.app.api.getCloudUserById(payload.metadata.fingerprint.ulpId).then((user) => {
this.homey.app.debug('Fingerprint identified for user: ' + JSON.stringify(user));
// Generic trigger
this.homey.app._fingerPrintIdentifiedTrigger.trigger({
ufp_fingerprint_identified_camera: this.getName(),
ufp_fingerprint_identified_person: (user.email !== "" ? user.email : user.username),
ufp_fingerprint_identified_name: user.first_name,
ufp_fingerprint_identified_first_name: user.first_name,
ufp_fingerprint_identified_last_name: user.last_name,
ufp_fingerprint_identified_user_unique_id: user.unique_id,
}).catch(this.error);

// Device trigger
this.driver._deviceFingerprintIdentifiedTrigger.trigger(this, {
ufp_device_fingerprint_identified_person: (user.email !== "" ? user.email : user.username),
ufp_device_fingerprint_identified_name: user.first_name,
ufp_device_fingerprint_identified_first_name: user.first_name,
ufp_device_fingerprint_identified_last_name: user.last_name,
ufp_device_fingerprint_identified_user_unique_id: user.unique_id,
}).catch(this.error);
Expand All @@ -341,24 +324,6 @@ class Doorbell extends Homey.Device {
this.homey.app.debug('[Object] onNFCCardScanned ' + JSON.stringify(payload));

if (typeof payload !== 'undefined'
&& typeof payload.metadata !== 'undefined'
&& typeof payload.metadata.nfc !== 'undefined'
&& typeof payload.metadata.nfc.userId !== 'undefined'
&& payload.metadata.nfc.userId !== null) {
this.homey.app.api.getUsernameById(payload.metadata.nfc.userId).then((localUsername) => {
// Generic trigger
this.homey.app._nfcCardScannedTrigger.trigger({
ufp_nfc_card_scanned_camera: this.getName(),
ufp_nfc_card_scanned_person: localUsername
}).catch(this.error);

// Device trigger
this.driver._deviceNFCCardScannedTrigger.trigger(this, {
ufp_device_nfc_card_scanned_person: localUsername,
}).catch(this.error);
}).catch(this.error);
return true;
} else if (typeof payload !== 'undefined'
&& typeof payload.metadata !== 'undefined'
&& typeof payload.metadata.nfc !== 'undefined'
&& typeof payload.metadata.nfc.ulpId !== 'undefined'
Expand Down Expand Up @@ -393,27 +358,37 @@ class Doorbell extends Homey.Device {
onDoorAccess(payload, actionType = null, eventId = null) {
this.homey.app.debug('[Object] onDoorAccess ' + JSON.stringify(payload));

if (typeof payload === 'undefined'
|| typeof payload.metadata === 'undefined'
|| typeof payload.metadata.fingerprint === 'undefined'
|| typeof payload.metadata.fingerprint.userId === 'undefined'
|| payload.user === null) {
this.homey.app.debug('DoorAccess event is not valid!');
return;
}
if (typeof payload !== 'undefined'
&& typeof payload.type !== 'undefined'
&& payload.type === 'doorAccess'
&& typeof payload.metadata !== 'undefined'
&& typeof payload.metadata.unique_id === 'undefined'
&& payload.metadata.unique_id === null) {

this.homey.app.api.getUsernameById(payload.user).then((localUsername) => {
// Generic trigger
this.homey.app._doorAccessTrigger.trigger({
ufp_door_access__camera: this.getName(),
ufp_door_access__person: localUsername
}).catch(this.error);
this.homey.app.api.getCloudUserById(payload.metadata.unique_id).then((user) => {
// Generic trigger
this.homey.app._doorAccessTrigger.trigger({
ufp_door_access_camera: this.getName(),
ufp_door_access_person: (user.email !== "" ? user.email : user.username),
ufp_door_access_first_name: user.first_name,
ufp_door_access_last_name: user.last_name,
ufp_door_access_user_unique_id: user.unique_id
}).catch(this.error);

// Device trigger
this.driver._deviceDoorAccessTrigger.trigger(this, {
ufp_device_door_access__person: localUsername,
// Device trigger
this.driver._deviceDoorAccessTrigger.trigger(this, {
ufp_device_door_access_person: (user.email !== "" ? user.email : user.username),
ufp_device_door_access_first_name: user.first_name,
ufp_device_door_access_last_name: user.last_name,
ufp_device_door_access_user_unique_id: user.unique_id
}).catch(this.error);
}).catch(this.error);
}).catch(this.error);

return true;
}

this.homey.app.debug('DoorAccess event is not valid!');
return false;
}

onSmartDetection(payload, actionType = null, eventId = null) {
Expand Down
36 changes: 36 additions & 0 deletions drivers/protectdoorbell/driver.flow.compose.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,42 @@
"en": "John Doe",
"nl": "Jan Jansen"
}
},
{
"name": "ufp_device_door_access_first_name",
"type": "string",
"title": {
"en": "First name",
"nl": "Voornaam"
},
"example": {
"en": "John",
"nl": "Jan"
}
},
{
"name": "ufp_device_door_access_last_name",
"type": "string",
"title": {
"en": "Last name",
"nl": "Achternaam"
},
"example": {
"en": "Doe",
"nl": "Jansen"
}
},
{
"name": "ufp_device_door_access_user_unique_id",
"type": "string",
"title": {
"en": "User Unique ID",
"nl": "Gebruiker Unieke ID"
},
"example": {
"en": "xxx-xxx-xxx",
"nl": "xxx-xxx-xxx"
}
}
]
},
Expand Down

0 comments on commit 82ed5a3

Please sign in to comment.