Skip to content
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

añadir cerradura electrónica #234

Open
hlas opened this issue Jun 2, 2024 · 12 comments
Open

añadir cerradura electrónica #234

hlas opened this issue Jun 2, 2024 · 12 comments

Comments

@hlas
Copy link

hlas commented Jun 2, 2024

Hola

¿Sería posible añadir la apertura y cierre de la nueva cerradura eléctronica de SD?
He capturado las llamadas a la API:

{ "operationName": "xSGetSmartlockConfig", "variables": { "numinst": "XXXXXXX", "panel": "SDVECUW", "devices": [ { "deviceType": "DR", "deviceId": "01", "keytype": "0" } ] }, "query": "query xSGetSmartlockConfig($numinst: String!, $panel: String!, $devices: [SmartlockDevicesInfo]!) {\n xSGetSmartlockConfig(numinst: $numinst, panel: $panel, devices: $devices) {\n res\n referenceId\n zoneId\n serialNumber\n location\n family\n type\n label\n features {\n holdBackLatchTime\n calibrationType\n autolock {\n active\n timeout\n }\n }\n }\n}" }

Respuesta:
{ "data": { "xSGetSmartlockConfig": [ { "res": "OK", "referenceId": null, "zoneId": "DR01", "serialNumber": "XXXXXXX", "location": "Pl_1_Recibidor", "family": "User", "type": "163", "label": "Cerradura", "features": { "holdBackLatchTime": 3, "calibrationType": 0, "autolock": { "active": true, "timeout": "1800" } } } ] } }

Apertura:

{ "operationName": "xSChangeSmartlockMode", "variables": { "numinst": "XXXXXXX", "panel": "SDVECUW", "deviceId": "01", "deviceType": "DR", "lock": false }, "query": "mutation xSChangeSmartlockMode($numinst: String!, $panel: String!, $deviceId: String!, $deviceType: String!, $lock: Boolean!) {\n xSChangeSmartlockMode(\n numinst: $numinst\n panel: $panel\n deviceId: $deviceId\n deviceType: $deviceType\n lock: $lock\n ) {\n res\n msg\n referenceId\n }\n}" }

Respuesta:

{ "data": { "xSChangeSmartlockMode": { "res": "OK", "msg": "Your request has been sent", "referenceId": "OWP______________XXXXXX__XXXXXXXX________________" } } }

{ "operationName": "xSChangeSmartlockModeStatus", "variables": { "numinst": "xxxxxxx", "panel": "SDVECUW", "deviceId": "01", "referenceId": "OWP_______________xxxxx_xxxxxxx_______________", "counter": 1 }, "query": "query xSChangeSmartlockModeStatus($numinst: String!, $panel: String!, $referenceId: String!, $deviceId: String, $counter: Int) {\n xSChangeSmartlockModeStatus(\n numinst: $numinst\n panel: $panel\n referenceId: $referenceId\n counter: $counter\n deviceId: $deviceId\n ) {\n res\n msg\n protomResponse\n status\n }\n}" }

{ "data": { "xSChangeSmartlockModeStatus": { "res": "WAIT", "msg": "Request in progress, please wait", "protomResponse": null, "status": null } } }

Y al final:

{ "data": { "xSChangeSmartlockModeStatus": { "res": "OK", "msg": "Request processed correctly", "protomResponse": null, "status": "procesed" } } }

Y para el cierre:

{ "operationName": "xSChangeSmartlockMode", "variables": { "numinst": "xxxxxxx", "panel": "SDVECUW", "deviceId": "01", "deviceType": "DR", "lock": true }, "query": "mutation xSChangeSmartlockMode($numinst: String!, $panel: String!, $deviceId: String!, $deviceType: String!, $lock: Boolean!) {\n xSChangeSmartlockMode(\n numinst: $numinst\n panel: $panel\n deviceId: $deviceId\n deviceType: $deviceType\n lock: $lock\n ) {\n res\n msg\n referenceId\n }\n}" }

@bigramonk
Copy link

Hola,
Reconocí mi cerradura en la publicidad de Securitas. Parece ser una Danalock V3-BTZE (Zigbee y Bluetooth), aunque haya varios modelos y que en España se pueda distribuir otro.
Si fuera el caso, creo que podría ser más sencillo ver qué protocolo usa Veritas e intentar integrar el otro directamente con Home Assistant (con zigbee2mqtt o con un bluetooth proxy).
Así no tendrías ningún tipo de latencia al abrir o cerrar la cerradura.

@kytos22
Copy link

kytos22 commented Dec 15, 2024

Yo tambien tengo la cerradura. Los dispositivos de securitas se comunican con una conexion estilo zigbee a la alarma, pero entiendo que no se podria bypasear de forma sencilla esta comunicacion ya que no usan el estandar normal y ademas va cifrado. Lo suyo seria poder hacer todos las operaciones a traves de la API. Si @guerrerotook necesita mas detalles, dinos como podemos ayudar.

@guerrerotook
Copy link
Owner

Hola @kytos22, si eres capaz de encontrar una operación en la API que permita trabajar con la cerradura, perfecto, comparte la operación, que argumentos necesita y la implemento en la API.

@kytos22
Copy link

kytos22 commented Dec 15, 2024

Ok creo que he sacado lo importante, no se hasta que punto son importantes las otras operaciones o si solo son para log y la interfaz. Gracias por este proyecto.

Cuando le das click al boton para que salgan las opciones de bloquear y desbloquear solicita la configuracion de la cerradura con este JSON:

​{"operationName":"xSGetSmartlockConfig","variables":{"numinst":"xxxxxx","panel":"SDVECU","devices":[{"deviceType":"DR","deviceId":"02","keytype":"0"}]},"query":"query xSGetSmartlockConfig($numinst: String!, $panel: String!, $devices: [SmartlockDevicesInfo]!) {\n xSGetSmartlockConfig(numinst: $numinst, panel: $panel, devices: $devices) {\n res\n referenceId\n zoneId\n serialNumber\n location\n family\n label\n features {\n holdBackLatchTime\n calibrationType\n autolock {\n active\n timeout\n }\n }\n }\n}"}

Y la respuesta es:

{"data":{"xSGetSmartlockConfig":[{"res":"OK","referenceId":null,"zoneId":"DR02","serialNumber":"xxxxxxxx","location":"Pl_0_Hall","family":"User","label":"Cerradura","features":{"holdBackLatchTime":0,"calibrationType":0,"autolock":{"active":true,"timeout":"1800"}}}]}}


JSON Cuando le das a bloquar cerradura:

{"operationName":"xSChangeSmartlockMode","variables":{"numinst":"xxxxxxxx","panel":"SDVECU","deviceId":"02","deviceType":"DR","lock":true},"query":"mutation xSChangeSmartlockMode($numinst: String!, $panel: String!, $deviceId: String!, $deviceType: String!, $lock: Boolean!) {\n xSChangeSmartlockMode(\n numinst: $numinst\n panel: $panel\n deviceId: $deviceId\n deviceType: $deviceType\n lock: $lock\n ) {\n res\n msg\n referenceId\n }\n}"}

Respuesta:

{"data":{"xSChangeSmartlockMode":{"res":"OK","msg":"Your request has been sent","referenceId":"OWP_______________xxxxxxx__20241215180xxxxxx________________"}}}


JSON status mientras se cierra la cerradura:

{"operationName":"xSChangeSmartlockModeStatus","variables":{"numinst":"xxxxxx","panel":"SDVECU","deviceId":"02","referenceId":"OWP_______________xxxxxxxx__202412151801xxxxx________________","counter":1},"query":"query xSChangeSmartlockModeStatus($numinst: String!, $panel: String!, $referenceId: String!, $deviceId: String, $counter: Int) {\n xSChangeSmartlockModeStatus(\n numinst: $numinst\n panel: $panel\n referenceId: $referenceId\n counter: $counter\n deviceId: $deviceId\n ) {\n res\n msg\n protomResponse\n status\n }\n}"}

Respuesta (wait in progress):

{"data":{"xSChangeSmartlockModeStatus":{"res":"WAIT","msg":"Request in progress, please wait","protomResponse":null,"status":null}}}

Respuesta (OK):

{"data":{"xSChangeSmartlockModeStatus":{"res":"OK","msg":"Request processed correctly","protomResponse":null,"status":"procesed"}}}


Resto JSON 1

{"operationName":"xSGetSignals","variables":{"numinst":"xxxxxxx","panel":"SDVECU","deviceId":"02","referenceId":"OWP_______________xxxxxxx__2024121518xxxxxxxx________________","counter":3},"query":"query xSGetSignals($numinst: String!, $panel: String!, $referenceId: String!, $deviceId: String, $counter: Int!) {\n xSGetSignals(\n numinst: $numinst\n panel: $panel\n referenceId: $referenceId\n deviceId: $deviceId\n counter: $counter\n ) {\n res\n status\n signalResponse\n }\n}"}

respuesta (wait):

{"data":{"xSGetSignals":{"res":"WAIT","status":null,"signalResponse":null}}}

respuesta:

{"data":{"xSGetSignals":{"res":"OK","status":"procesed","signalResponse":"2"}}}


Resto JSON 2

{"header":{"callby":"OWP_10","provider":"OWA","appVersionName":"n/a","deviceManufacturer":"Firefox","deviceName":"Web Browser","deviceOsVersion":"133.0"},"events":[{"hash":"xxxx","callby":"OWP_10","application_raw":"KPI","appTimestamp":"2024-12-15 xxxxx","appTimestampEpoch":173428xxxx,"action":"CLICK","category":"SMARTLOCK","functionality":"SMARTLOCK_STATUS_CHANGE","screen":"SMARTLOCK_CARD","severity":"INFO","transactionId":"36a7ee91-6a47-4d28-9970-13xxxxxxx","numinst":"xxxxxxx","panel":"SDVECU","logMessage":"Start status: 1 - CLOSED","user":"xxxxxx"}]}

Respuesta:

{"ok":true,"message":"Dump logging request accepted"}


Resto JSON 3

{"operationName":"xSGetLockCurrentMode","variables":{"numinst":"xxxxxxxx"},"query":"query xSGetLockCurrentMode($numinst: String!) {\n xSGetLockCurrentMode(numinst: $numinst) {\n res\n smartlockInfo {\n lockStatus\n deviceId\n }\n }\n}"}

respuesta:

{"data":{"xSGetLockCurrentMode":{"res":"OK","smartlockInfo":[{"lockStatus":"2","deviceId":"02"}]}}}


Resto JSON 4

{"header":{"callby":"OWP_10","provider":"OWA","appVersionName":"n/a","deviceManufacturer":"Firefox","deviceName":"Web Browser","deviceOsVersion":"133.0"},"events":[{"hash":"xxxxxx","callby":"OWP_10","application_raw":"KPI","appTimestamp":"2024-12-15 18:0xxxxx","appTimestampEpoch":1734xxxxxx,"action":"RENDER_OK","category":"SMARTLOCK","functionality":"SMARTLOCK_STATUS_CHANGE","screen":"SMARTLOCK_CARD","severity":"INFO","transactionId":"36a7ee91-6a47-4d28-9970-xxxxxxxxxxx","numinst":"xxxxxxxx","panel":"SDVECU","logMessage":"2 - CLOSEDKEY - Locked","duration":"8035","user":"xxxxxxxx"}]}

respuesta:

{"ok":true,"message":"Dump logging request accepted"}

@CJHive
Copy link

CJHive commented Dec 24, 2024

Uno más que se une a la petición :)

@pacorola
Copy link

También me uno!

@CJHive CJHive mentioned this issue Dec 30, 2024
@kytos22
Copy link

kytos22 commented Jan 3, 2025

@guerrerotook crees que se podrá integrar?

@guerrerotook
Copy link
Owner

Hola a todos y muchas gracias por compartir las operaciones de la API. Pero hasta el mes de febrero voy a estar liado con cosas del trabajo y con la UNED (que tengo exámenes) y no voy a poder dedicar mucho tiempo a hacer cosas nuevas.

Pero dicho eso si alguien se anima a implementar hay que añadir un fichero nuevo lock.py e implementar esta operaciones. https://developers.home-assistant.io/docs/core/entity/lock

La parte complicada de esto, es que yo no tengo ese cerrojo inteligente en mi casa y no puedo probarlo así que va a ser difícil.

@kytos22
Copy link

kytos22 commented Jan 3, 2025

Hola, gracias por la respuesta. Yo aunque puedo entender gran parte del codigo y puedo hacer scripts no me dedico a programar, pero le echare un vistazo. Por otro lado yo me puedo ofrecer a hacer las pruebas que hagan falta. Si se te ocurre otro consejo que darme para ponerme a ello me dices.

@guerrerotook
Copy link
Owner

Se necesitan nociones de python para programar y necesitas Docker y Visual Studio Code para ejecutar una version de desarrollo de Home Assistant donde tengas la integración de la alarma y puedas depurar y poner puntos de ruptura y todo eso.

@CJHive
Copy link

CJHive commented Jan 3, 2025

No se, si se puede hacer una zona beta como otro github aparte de este para hacer las betas o en la versiones una versión beta para que los que tengan cerraduras, cámaras, perimetrales.... etc puedan probar y ver si falla algo.

Yo 0 de programación. Intenté hacer algo con la ia de bolt pero sin logros, supongo que por las apis.

Por si alguno la quiere ver https://bolt.new/ está chulo

@kytos22
Copy link

kytos22 commented Jan 3, 2025

Intentaré hacer algo estos dias en un fork, pero no espereis nada serio de mis experimentos.

Valores API:

En operacion" xSGetLockCurrentMode" la respuesta equivale a:

"lockStatus": "1" = unlocked
"lockStatus": "2", = locked

En operacion "xSChangeSmartlockMode" la variable equivale a:
lock: false = Unlock
lock: true = Lock

Probando con postman, importando las operaciones desde el navegador, bloquea y desbloquea sin problemas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants