Can you make offices smarter? Designing smart offices @ SIOT

Riaz A
SCTD, GovTech
Published in
5 min readJan 6, 2022

Overview

During the summer of 2021, I interned at GovTech’s Sensors and IOT (SIOT) division as a software engineer for about 7 months. I was mostly working on a project called ‘SmartFM’ in which I developed various services within the mobile app.

What is SmartFM?

SmartFM stands for smart facilities management and it’s a web and mobile app that allows users to access various services pertaining to building facilities. Such services include bookings, asset tracking, visitor management etc. The web is developed using React and the mobile app is developed using Flutter. The backend is developed using MongoDB and REST API. I worked on developing the mobile app, adding various services and features to it.

Projects

I worked on 3 notable projects. Namely:

  1. Meeting Room Controller
  2. Neo4j, GraphQL, and BrickSchema Research and Implementation
  3. SmartFM services

Meeting Room Controller

For my first project, I worked on a proof-of-concept project. The idea behind this project is to create an app for meeting rooms where users can authenticate into meeting rooms via QR code, gain access to the custom configuration of the meeting room, and control the meeting room equipment.

The user experience flow in the entire process

After designing the UX flow, the next part was to configure the software architecture.

The software architecture of the project

The app was to be developed for both mobile and tablet. Mobile refers to the personal mobile phones of the users and the tablet refers to a dedicated tablet assigned to each meeting room. I established the various communication channels as shown in the diagram above. The API and MQTT connections were integrated to mobile and tablet respectively using Flutter. The serial communication between the AV controller and the meeting room equipment was established using an RS232 cable and C# programming. After the communication was established, the UI was developed on both mobile and tablet.

The UI for the meeting room controller app

The UI allowed the users to drag inputs from the top and place it in their preferred outputs. They could also control the power and volume of the outputs. The configuration for the inputs and outputs available in the meeting room was configured in MongoDB and fetched via API. Below is a short demo of the outcome.

Demo of the meeting room controller app

Neo4j, GraphQL and BrickSchema Research and Implementation

The idea behind this project is to create a device management app where users can navigate to different locations within an organisation to view device information. There were 3 parts to this project.

  1. Develop a standardised data model for building assets
  2. Develop a tree navigation structure that is easy to maintain and modify from the backend
  3. Integrate the data model to the backend

For the first part, the solution was to make use of the BrickSchema ontology to create the data model. For the second part, we initially explored using MongoDB which made the time and space complexity highly inefficient since the data was stored linearly. Hence, I turned to Neo4j which is a graph database together with GraphQL, an API query language. I then linked my mobile app to the GraphQL API. For the third part, to integrate the BrickSchema RDF data model, I used neo4j’s neosemantics plugin. With the new data model, the app was significantly better in time and space complexity, making it much more responsive. Below is a simplified visualisation of how the data model evolved.

MongoDB (on the left) and Neo4j (on the right)

SmartFM services

For the remaining part of my internship, I developed apps that placed emphasis on the UI. I designed these UI using Adobe XD, developed it on Flutter with the help of relevant dependencies, linked it to the backend to fetch and manipulate data, and deployed it. Below are some screenshots and brief descriptions of the services.

Emeter Data Visualization App

Above is an emeter data visualisation app in which the user can monitor timeseries data from emeters. The user can also interact with some of the charts. The challenge behind this app was to manage the huge timeseries data efficiently such that the app remains responsive. I used ‘fl_charts’ to develop the charts.

Screens of various apps

The first screen above is part of the device management app where I developed the device info page that fetched device data from the DECADA cloud and neo4j. The second screen is a user alerts/events’ page. The third and fourth screens are part of a lights control app in which the users can control the power and brightness of the lights by simply clicking on their positions on the map and toggling their controls.

Takeaways

Before joining SIOT, I did not have much experience with many technologies mentioned above. My team was helpful in guiding me and teaching me the internal tools such as using the DECADA cloud server and edge devices. They also guided me in various other external tools that I used for developing the above projects. I also picked up these tools from online readings and courses. I had many opportunities for personal growth and my team allowed me to explore different areas and take up projects I was interested in as well.

As for non-technical aspects, due to the work from home arrangement, I only had a few weeks of physical interaction. Nonetheless, I learned to communicate well with my team and get things done.

Conclusion

Overall, I had a good learning experience during my internship. If you’re looking for an internship to grow your technical skills as well as learn more about life as a software engineer, I would highly recommend interning at GovTech.

--

--

Riaz A
SCTD, GovTech

Systems Engineer @ GovTech | NUS Computer Engineering