Biometric Attendance Sync Tool

We have made the first release of our tool that syncs data from your Biometric Attendance System to your ERPNext instance.

This system needs to be set up separately from your ERPNext instance; Hopefully, you find the README and the Wiki adequate.

Contributions welcome :slight_smile:

The release has two attached assets which consist of Windows binaries for 32 and 64 bit respectively. For *nix systems we recommend running directly from source*.

* Follow the README for more information

22 Likes

Good Job @gavindsouza

In your Wiki it says this only works over LAN

If my ERPNext is on AWS how will this work ?

Once again good job

1 Like

Hi @olamide_shodunke

Trust you’re cool. I believe the LAN part refers to the local connection between your biometric device and your machine (computer). I would expect that once the tool is installed on the relevant machine, it should sync the logs to your remote ERPNext instance - regardless of where it’s hosted

In any case, I’ll also be looking forward to a confirmation from @gavindsouza on this

Cheers!

2 Likes

@olamide_shodunke, what @wale says is accurate. The tool needs to be able to communicate with your biometric device via TCP/IP. So, it is usually the case that it needs to run on the same LAN Network as the biometric device.

To sync these fetched logs to your ERPNext instance it uses API access, so if you are able to access your ERPNext instance on your browser, the tool too can access the APIs from a similar location/network.

1 Like

Thanks guys, will let you know what is up after I test it

SSH tunnel would easily help you get job done, no matter where your device and server is hosted.

2 Likes

@gavindsouza nice one here

However, i am trying to set this up on my Windows environment, i have launched and loaded the GUI and Config file but nothing is happening

How can i tell the Clock is actually communicating with the GUI and also how do i tell the App is communicating with my ERPnext site

Will appreciate a little guide on this

Warm regards

HAI All.,

I am also strucked here. That windows service is started and existing record are synced from device to my ERPNEXT instance(Previous month record from device for the particular date which is mention in shift type and attendance status absent too) but employee check-in is not getting created . Live punch record also not created.Kindly help to solve this issues.

Thanks in advance.

Hey @Vivek_Champ

How were you able to make it sync in the first place.?

@EnSeal In shift doctype i put value for Process Attendance After and Last Sync of Checkin. So from the device it takes the attendance from date to Last Sync of Checkin date.

Eg: Attendance From Date : 01.05.2020
Last Sync of Checkin : 30.05.2020

For mentioned date for all employees attdendance is marked as absent without creating Employee checkin

@karthikeyan5 @gavindsouza

Please guide for further.

2020-06-29 17:51:12,336	ERROR	Error during ERPNext API Call.	31498	1593430026.0	test_1	None	Traceback (most recent call last):
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/app.py", line 62, in application
    response = frappe.api.handle()
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/api.py", line 55, in handle
    return frappe.handler.handle()
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/handler.py", line 22, in handle
    data = execute_cmd(cmd)
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/handler.py", line 61, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/__init__.py", line 1054, in call
    return fn(*args, **newargs)
  File "/home/yumsum/frappe-bench/apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py", line 70, in add_log_based_on_employee_field
    doc.insert()
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/model/document.py", line 231, in insert
    self._validate()
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/model/document.py", line 461, in _validate
    self._validate_mandatory()
  File "/home/yumsum/frappe-bench/apps/frappe/frappe/model/document.py", line 747, in _validate_mandatory
    name=self.name))
frappe.exceptions.MandatoryError: [Employee Checkin, EMP-CKIN-06-2020-000001]: log_type

2020-06-29 17:51:12,337	ERROR	exception when calling pull_process_and_push_data function for device{"device_id": "test_1", "ip": "192.168.13.101", "punch_direction": null, "clear_from_device_on_fetch": false}
Traceback (most recent call last):
  File "erpnext_sync.py", line 51, in main
    pull_process_and_push_data(device, device_attendance_logs)
  File "erpnext_sync.py", line 129, in pull_process_and_push_data
    raise Exception('API Call to ERPNext Failed.')
Exception: API Call to ERPNext Failed.

Please any one help !
ERPNext: v12.6.0 (version-12)
Frappe Framework: v12.4.1 (version-12)

After almost exactly a year to the day, I have finally been able to setup the biometric attendance using this sync tool! this is really easy to use. However, I noticed that to close the tool (for windows) you need to stop the service and when you do that you lose the configuration already set. How do you persist the existing configuration on the tool so all that is needed is to restart the service once the tool is launched?

I am also having an issue where the checkin records created have wrong dates:


Even when the logs have the correct date:
2021-03-10 15:29:06,969 INFO Processing Device: 192.168.105.44

2021-03-10 15:29:07,095 INFO 192.168.105.44 Device Disable Attempted. Result: True

2021-03-10 15:29:07,095 INFO 192.168.105.44 Attendances Fetched: 13
2021-03-10 15:29:07,331 INFO 192.168.105.44 Device Enable Attempted. Result: True
2021-03-10 15:29:07,378 INFO Successfully processed Device: 192.168.105.44
2021-03-10 15:29:08,290 INFO Shift Type last_sync_of_checkin Updated Shift1 1615386547.110526
2021-03-10 15:29:08,305 INFO Mission Accomplished!

How can I resolve this?

1 Like

@gavindsouza Hi. One quick question about this tool. How do you handle an employee who works in multiple locations on same shift at different days and must checkin and checkout in all locations. However, employee is registered with different IDs in each location’s biometric device?

Currently each employee is only allowed to register one biometric ID so how does one capture checkin/checkout data for such employee?

I think you can redo your configuration and just have One ID for your users and they can signin on any of the supported devices.

I don’t think that with the current configuration you can support multiple Biometric IDs for the same underlying employee.

@karthikeyan5 maybe able to help you make those modifications if absolutely required and you have a budget for it.

Hops this helps.

Thanks

Jay

1 Like

@flexy2ky @JayRam Yeah, you can also handle multiple biometric devices. But The tool needs to be able to communicate with your biometric device via TCP/IP. we also have a roadmap task to refactor the code. will look for enhancements and will fix the bugs regarding this. There is file local_config.py which stores the data entered through UI. the local config file looks like…


@flexy2ky Hope your Wrong dates issue is fixed now.

1 Like

Thanks for the tip. I think this just might work. I’ll have so sync the registration ID for each employee to maintain the same data. Both locations use the same biometric device so this shouldn’t be much of a problem (I hope).

No it wasn’t fixed. I got a different model (K40) instead of the MA300 and it worked without any of the errors faced. Even though the MA300 outputs the right date in the software I just could not get it to export same to ERPNext via the biometric tool so that device has been abandoned.

Thanks for your work. It is much appreciated.

Update: I am able to handle multiple biometric devices checkin using the same ID for employees as suggested by @JayRam and it’s working seamlessly. However, I am having issues pulling data from Zkteco WL10. It connects and pings device successfully but always returns zero records and there’s no error in the log to show why zero records are returned. I tried both the windows gui sync tool and installed the tool via command line and getting the same result.

Also, I am having this error when I run the windows service:


Any tip on how I can fix this?

Thanks.

I am Having essl X990 Model and i am trying to use the biometric sync tool
but there are list of challenges I am facing can somebody pls guide with stepwise method of how to use this tool , its quiet on urgent basis.
Stuff I ahve already done:
1: Created employee added biometric id as same as provided in biometric
2: Created Auto attendance marking Shift
3:Connected Biometric Machine in Local network to script running PC
4: Added information in the GUI
5: logs are also getting created but getting following errors as well

File "C:\Users\Amit K Mehta\Downloads\biometric-attendance-sync-tool-master\erpnext_sync.py", line 51, in main
    pull_process_and_push_data(device, device_attendance_logs)
  File "C:\Users\Amit K Mehta\Downloads\biometric-attendance-sync-tool-master\erpnext_sync.py", line 117, in pull_process_and_push_data
    erpnext_status_code, erpnext_message = send_to_erpnext(device_attendance_log['user_id'], device_attendance_log['timestamp'], device['device_id'], punch_direction)
  File "C:\Users\Amit K Mehta\Downloads\biometric-attendance-sync-tool-master\erpnext_sync.py", line 181, in send_to_erpnext
    response = requests.request("POST", url, headers=headers, data=data)
  File "C:\Users\Amit K Mehta\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\Amit K Mehta\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\sessions.py", line 528, in request
    prep = self.prepare_request(req)
  File "C:\Users\Amit K Mehta\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\sessions.py", line 456, in prepare_request
    p.prepare(
  File "C:\Users\Amit K Mehta\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\models.py", line 316, in prepare
    self.prepare_url(url, params)
  File "C:\Users\Amit K Mehta\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\models.py", line 390, in prepare_url
    raise MissingSchema(error)

Pls guide where i am getting this wrong

The Biometric Device IP you are using in the local_config.py file, is it right? Double-check that as it may be the reason. Also, if you can, please share content from your local_config.py file here.