Skip to content
rafal-nowak edited this page Feb 8, 2023 · 7 revisions

Introduction

Weather station device owners currently have a hard time managing their devices effectively. They often have difficulty retrieving data, configuring settings, and monitoring device status remotely. This is a problem because it can lead to lost or unreliable data, and it can also make it difficult to schedule maintenance or address issues with the device.

Objective

Our objective is to create a weather station device management API that allows users to easily register, monitor, and control their devices remotely. The API will provide features such as data retrieval, device status monitoring, configuration, and alarm management. Additionally, the API will include security features to protect against unauthorized access.

Scope

The scope of the Device Management API includes the following functionality:

  • Device Management
  • Data Management
  • User management
  • Notifications

User Personas

  • Farmer: A farmer wants to track the weather conditions on his farm for crop growth. He wants to view the data collected by his weather station devices in a visual format, and he wants to be able to set up alarms for specific conditions.
  • Meteorologist: A meteorologist wants to use a network of weather station devices to gather data for her research. She wants to be able to retrieve data from multiple devices at once, and she wants to be able to schedule regular maintenance for the devices.
  • Developers: Developers will use the API to manage and monitor their fleet of IOT weather stations. They will use the API to add, update, and delete devices, as well as retrieve information about device status, measurements, and history.

Functional Requirements

User Management

  • As a developer, I want to be able to add a new user by providing the necessary information such as email, password, and name, so that the user can access the system's features.
  • As a developer, I want to be able to update an existing user's information by providing the user's ID and updated information, so that the user's information is accurate and up-to-date.
  • As a developer, I want to be able to retrieve a list of all users in the system, so that I can view and manage them.
  • As a developer, I want to be able to retrieve a single user's information by providing their ID, so that I can view and manage the user's details.
  • As a developer, I want to be able to login a user by providing their email and password, so that they can access the system's features.
  • As a developer, I want to be able to logout a user, so that they can no longer access the system's features.
  • As a developer, I want to be able to request a password reset for a user by providing their email, so that they can regain access to their account.
  • As a developer, I want to be able to reset a user's password by providing their email, so that they can regain access to their account.

Device Management

  • As a developer, I want to be able to add a new weather station device to the system by providing its unique identification number and location information, so that I can easily manage the device through the API.
  • As a developer, I want to be able to retrieve a single weather station device by its unique identification number, so that I can view its current configuration and status.
  • As a developer, I want to be able to retrieve a list of all weather station devices in the system, so that I can view their current configurations and statuses.
  • As a developer, I want to be able to update the information of an existing weather station device by providing its unique identification number, so that I can easily manage the device's configuration and status.
  • As a developer, I want to be able to disable a weather station device by providing its unique identification number, so that I can stop the device from sending data.
  • As a developer, I want to be able to enable a disabled weather station device by providing its unique identification number, so that I can start the device sending data again.
  • As a developer, I want to be able to delete a device by providing its ID, so that I can remove it from the system.
  • As a developer, I want to be able to configure the settings of an existing weather station device by providing its unique identification number, so that I can easily manage the device's measurement settings.
  • As a developer, I want to be able to update the configuration settings of an existing weather station device by providing its unique identification number, so that I can easily manage the device's measurement settings.

Data Management

  • As a developer, I want to be able to retrieve the status of an existing weather station device by providing its unique identification number, so that I can view the device's status.
  • As a developer, I want to be able to retrieve a list of all weather station devices' current measurements in the system, so that I can view their current weather conditions.
  • As a developer, I want to be able to retrieve a weather station device's current measurement data by providing its unique identification number, so that I can view the device's current weather conditions.
  • As a developer, I want to be able to retrieve a list of all weather station devices' current measurements in the system, so that I can view their current weather conditions.
  • As a developer, I want to be able to retrieve a single weather station device's measurement history data by providing its unique identification number, so that I can view the device's past weather conditions.

Non-Functional Requirements:

  • The API should be secure and protect against common web attacks
  • The API should have a 99.99% uptime
  • The API should be able to handle at least 1000 requests per second
  • The API should have a response time of less than 500ms
  • The API should support JSON requests and responses

Success Criteria:

  • Increase the reliability of weather data collected by the devices by making it easy for users to monitor and manage their devices.
  • Increase the number of weather station devices registered with the API.
  • Improve user satisfaction with the device management experience.
  • Increase user engagement with the API by providing users with useful features such as data visualization and alarm management.

Testing

  • The API will be tested using automated unit tests and integration tests
  • The API will be tested for security vulnerabilities
  • The API will be tested for performance and scalability
  • The API will be tested for usability and user experience

Milestones:

  • Finalize API design and development plan
  • Implement key features (device registration, data retrieval, etc.)
  • Conduct user testing and gather feedback
  • Launch the API and make it publicly available
  • Continuously monitor and improve the API based on user feedback and usage data

Appendix

Architecture Diagram

Device Management Architecture v1

Entity Relationship Diagram

Device Management ERD v1c