Leave no one behind
In case of an evacuation, an employer must at all times know who was present in the office. However, registering when arriving at work or when leaving will be an intrusive change in daily routine which we expect will not be followed punctually by all employees. Therefore, Sander, Nele and Maarten come up with a user-friendly, non-intrusive solution.
Project Yoo-Bik-Wi-Tee and Team
The project is baptised Yoo-Bik-Wi-Tee, derived from ubiquity. The team, consisting of Nele Custers, Maarten Knapen en Sander Steinbusch had only one hackathon-weekend to implement a proof-of-concept. Nele is teacher at PXL-Digital (the IT department of PXL University college) and part-time Java consultant. Maarten Knapen is a Solution Engineer with a focus on Java and Angular. Sander Steinbusch is a Solution Engineer focusing on Oracle APEX. A great project/team needs a logo to distinguish itself. Sander designed a logo which refers to the name and requirements of the project.
When Maarten came up with the idea for the name, Sander suggested that Japanese symbols fitted well with it. Changing Yoo-bik-wi-tee to よ – びく – ゐ – て seemed a bit too harsh, because not a lot of people know Japanese. Not giving up on the idea we kept the first letter and used it as our logo.
Technology and Solution
The idea is to use bluetooth low-energy tags. These would be handed out to the employees in the form of a keychain. These BLE-tags have to be small, cheap and powered by a long-life battery. With an office equipped with BLE-scanners, it would be possible to know who is present. Every BLE-tag has a unique code which is stored alongside it owners data in a MongoDB.
The java backend, written in Spring Boot, retrieves from and stores data in this MongoDB. The java backend provides an REST-full API used by the BLE-scanners to register the observed BLE-tags. As long as an tag is observed, the employee wearing the tag is registered present. As soon as the tag isn’t seen for a while, the employee is marked absent.
We recommend several BLE-scanners should be placed in an office, thus our preference was using raspberry pi’s for this purpose. Luckily we found quite some information and scripts to implement the BLE-scanner. However none of the followed tutorials lead to success. Several libraries were outdated (eg. https://www.npmjs.com/package/noble). Installing one library () even messed up the wifi of the raspberry pi. After losing time trying to fix the problem, the fastest solution was to reinstall the raspberry pi from scratch. Then the decision was made to change to python for implementing the BLE-scanner. And with great success! In no time the python program running on the raspberry pi was sending the discovered BLE-tag numbers to the backend.
For implementing the front-end we were riding two horses at the same time. Google’s Flutter on the one hand was a technology we wanted to get to know and this hackathon offered a chance to try it out. However, an angular frontend was a safer bet because we are more experienced in this frontend language. In the end, both the mobile app and the webapp were able to show an attendance list.
On one hand we had a complete PoC on the other hand we needed a fallback in case employees forget their BLE-tag (yes, we do have quite some self-knowledge). For this purpose we thought it would be fun and still be not too intrusive with our daily routine to use voice commands. An employee would say a sentence like “Nele has entered the room.” or “Nele has left the office.” and the attendance or absence is registered in the system.
Alexa was our first choice, but unfortunately she failed on us. Sander had used his Raspberry Pi at home with Alexa installed on it. But Amazon changed the process of creating your own Alexa. The slight difference that this brought was enough for it to just not work, without much feedback on what was actually wrong. Because of the limited time we decided to cast it aside and focus on something else first. After our main goals were achieved, we took another turn at our voice command back-up plan. This time we used a python program that send a recorded .wav to the Google Speech API. The texts received from Google where sufficient to register the attendance of absence of the right person in our backend system.
Lessons learned
This JIDOKA hackathon was a great experience. A hackathon is a must-do for every developer and it’s probably the most fun way to become a better developer just in 48 hours. We tried to keep 2 main goals in mind: trying out a new technology that was on our developer’s bucket list and improve and challenge yourself with new things, in a technology that you already know. Try to determine several possible outcomes for the project, pick clear goals and play safe so you have some nice things to show to the jury. But challenge yourself to add some astonishing extra’s once the basis is up and running.
Afterthoughts and alternatives
Ideally we would have opted for a technology which uses passive tag, to avoid battery issues and further minimize size and intrusiveness. Several solutions exist but are a bit pricier than the low cost technologie we used now. Instead of BLE we could use UFH RFID. Ultra high frequency RFID has a much greater range when paired with a suitable antenna and has the ability to scan multiple tags at once. The tags can also be as small as a sticker or even be sewn into articles of clothing. SparkFun has a great kit we would have loved to experiment with.
Check out their website for more info: https://www.sparkfun.com/products/14066
This video demonstrates the ability to do simultaneous tracking and distance measuring:
https://www.youtube.com/watch?v=OS7qQGUgWSw&t=133s
Possible extension or upgrade
A possible extension to this project is to implement basic tracking. This could be achieved by deploying several scanners throughout hall A and the adjoining hallway(s). This could help to indicate whenever a subject is simply stepping out to go the the bathroom or lunch in stead of leaving for the day. Naturally there are privacy and GDPR issues to consider here but these are out of the scope of this blogpost.
Conclusion
There’s still a lot to do. We didn’t consider difficulties, only implementing the “happy path”. Security was out of scope 🙂 Our work on this project is probably done, however a student fulfilling his bachelor project will take Yoo-Bik-Wi-Tee to the next level. And we’ll be there at the sideline supporting him/her.
Resources
https://pypi.org/project/bleak
https://cloud.google.com/speech-to-text/docs/reference/libraries