fananimi / pyzk

Unofficial library of zkteco fingerprint attendance machine
GNU General Public License v2.0
493 stars 320 forks source link

Can't get users and attendance on wl20 device #76

Closed rachmataditiya closed 4 years ago

rachmataditiya commented 4 years ago

Describe the bug get users and get attendance return 0 on wl20 device

To Reproduce Steps to reproduce the behavior:

  1. just connect and get users

Packet Capture From Pyzk capture.zip

Packet Captured from ZKTime.Net -Below Packet is working with official apps with returned users and attendance filter.zip

Screenshoot image

Expected behavior should return list of users

System (please complete the following information):

Device Access For Trial I have opened public port for this device for testing purpose you can access it here :

kurenai-ryu commented 4 years ago

ok, on initial check, both your output and the capture.pcap file, the library can't determine the quantity of users and registries. On "older devices" we can call the GET_FREE_SIZEs(CMD:50) to get a struct(28) with all the different sizes, in your case, that command return a single DWORD with value 0. the library can't get the rest of the sizes, so everything seems empty .

on the zktime filter.pcap, it seems to call GET_FREE_SIZES several times, with an unknown argument! and there it seems to respond with a DWORD with actual values!!!

If you didn't add users recently please check with ZKtime, and include the expected sizes (maybe it has a capacity of 1000 users 50000 attendance, 1 user? 4 fingers? 19 attendances? i think it has 4 users and 4 fingers, please add another finger or several users to make the numbers different.

rachmataditiya commented 4 years ago

yes, you're right it has 4 users and 4 fingers, I've add 3 additional users:

  1. Yugo Saptoro From ZKTime
  2. Fady Noor from pyzk
  3. Indrawan Ahmad from pyzk , now it supposed to have 7 users on device the device has 50000 record capacity and 1000 users

anyway for adding users with pyzk is still work, and you can also add users or any data to imac.arkana.app for testing, I recommend to add uid after id 20 to avoid conflict

also when I use set_user method on pyzk, it only save firstname so when I put John Doe on name parameter, after I sync with zktime Joen Doe will place on first name on device and the last name is not set

Live capture also does not work here, but work with pyzatt (another github repo) but unstable, crash after capture 3 data

Zktime screenshoot image image

user added from pyzk image

user added from zktime image

rachmataditiya commented 4 years ago

Sync Added User Yugo Saptoro From ZKTime image

Packet Capture while adding user Yugo Saptoro adduser-Yugo-Saptoro.zip

Packet capture when getting user from ZKAccess I used another zkteco software which is zkaccess and I can use the sdk also this is packet capture when I get list of all 7 users zkaccess.zip

JorgeJuarezCasai commented 4 years ago

Hello, any solution? i have the same problem with the same model of zkteco. Thanks in advance!

kurenai-ryu commented 4 years ago

I'm very sorry, I couldn't check the issue completely, and can't replicate without an actual device, It would be necessary a lot of tests to implement this, did you checked it with the pyzatt library? they are more up-to-date than us...

I'm closing the issue, but we are open to PR if somebody can re-implement the read_sizes with this new behavior..

pierrejoye commented 3 years ago

Hello,

@JorgeJuarezCasai would it be possible to copy here the firmware version string? It seems the WL20 is actually an old one most of the time (from 2017).

jceyca commented 2 years ago

imagen Tengo el mismo problema con el dispositivo WL20.. estoy enviando a consola las variables que se procesan en el método __send_command() y lo que estoy viendo es que el self.__data siempre va vacío, no recupera algo más para poder pasarlo a ese atributo. imagen

Tengo python 2.7 estoy pensando en subir a python 3 para seguir probando y descartar que la versión de python no tengo algo que ver

kurenai-ryu commented 2 years ago

el desarrollo se paró hace 4 años creo, y se trabajó con firmware más antiguo, según recuerdo las últimas versiones reportaban los tamaños (sizes) con un comando diferente (o en diferente formato) lo cual hace que no sea compatible con esta librería, ya probaron con pyzatt? tenian mayor soporte que yo recuerde

jceyca commented 2 years ago

hola kurenai... voy a revisar el pyzatt... estuve probando comandos del 35 al 56 pensando que hubiera cambiado el comando.. pero solo el 50 responde en ese rango.. ya andaba supercontento porque habia logrado comunicarme con el dispositivo y obtener info, reiniciarlo, setear el date/time y otras cosillas pero cuando empece con la captura de usuarios vi que no estaba recuperando usuarios

kurenai-ryu commented 2 years ago

si tienes un equipo, descarga el software official ZKAccess y realiza una lectura de usuarios, capturando la comunicación con wireshark, ahi se puede analizar como hace la lectura y replicar aqui

jceyca commented 2 years ago

Listo la prueba.. imagen El wireshark muestra un mensaje de 1460 bytes como el más grande imagen test wl20.zip acá viene el archivo del wireshark ... la verdad no le entiendo mucho ha esto de los mensajes de sockets jejeje :D pero yo puesto para ayudar a solventar el bug

jceyca commented 2 years ago

Kurenay, para apoyar en la solución del problema puedo brindarte acceso a mi equipo mediante anydesk o zoom en un meet, así puedes interactuar directamente con el código y el dispositivo WL20. Así mismo, puedo apoyar a pyzk con una donación de 500 dlls para solventar el fallo y si me explican un poco el código podría apoyarlos en desarrollo.