diff --git a/docs/How-to guides/How to configure and trigger a remote action in devices.md b/docs/How-to guides/How to configure and trigger a remote action in devices.md new file mode 100644 index 0000000..7948242 --- /dev/null +++ b/docs/How-to guides/How to configure and trigger a remote action in devices.md @@ -0,0 +1,34 @@ +Biotz offers the feature to action devices remotely, this is offered just through MQTT. The configuration of this features include 3 steps: + +

+ +## Step 1 - Setup the 'Remote actioning' in Biotz platform. + +In the Setup section of the sidebar, there is a subsection called 'Remote action flow', this is where configuration is done. Remote actions are configured per device type, so the first thing to do will be to select a device type (that must already exist). + +Each device type can have 0 to n action message types, each of this message type will be related to an specific MQTT topic (as pushed into). But at the same time, the action message type could have 1 to n schemas. + +The action message types, as said before, are specifically offered through MQTT communication protocol. Regarding Message encoding, json or message pack can be used. Once this configuration is done, the schema of the communication should be registered. + +Biotz shows the same interface for both message types (specific to communication from device to Biotz platform) and action message type (specific to communication from Biotz platform to device) schema registration. So the same way, the schema representing the data to action the device should be registered. This schema will be used when action is triggered, and also the device has to be able to decipher this schema (json or message pack format) once it receives it through MQTT. + +

+ +## Step 2 - Setup device to get the order to perform the action. + +Find specific MQTT broker information following this link. + +The specific device of the selected device type should be already registered under the 'Device Management' section for devices. The device should be configured to SUBSCRIBE to the specific topic that Biotz will use to notify the action to the device. The topic follows this pattern: + +``` +biotz/1/0/CUSTOMER-ID/DEVICE-ID/subscribe/action/ACTION-MESSAGE-TYPE-INTERNAL-NAME +``` +So the device has to be SUBSCRIBED to the topic generated following the pattern that fits the specific details of the device and the action message type registered in step 1. The device will get the message following the schema registered and in the configured message encoding format. The device is expected to know how and what to do with it to perform the action. + +## Step 3 - Trigger the action from the Biotz platform. + +The 'Remote actioning' section in the sidebar, shows the list of device types and the number of action messages registered per each of them. If a device type with at least an action message type registered for it is selected, the action triggering interface is shown. + +Next selections must be done: the specific 'action message type', the specific schema to be used for the selected action message type. Once those are selected, a file in the specified message encoding must be uploaded to the system, this will be the specific message Biotz will publish to the mentioned topic to which the device has been subscribed in step 2. + +Lastly, this action can be triggered in one to n devices (that are already registered in the platform) that are from that device type. All devices will be listed on the right side of the interface. Once the device(s) is selected, the action can be sent by pushing the 'send' button in the bottom. diff --git a/docs/How-to guides/How to create a dashboard.md b/docs/How-to guides/How to create a dashboard.md new file mode 100644 index 0000000..e47d840 --- /dev/null +++ b/docs/How-to guides/How to create a dashboard.md @@ -0,0 +1,64 @@ +## Introduction + +Biotz provides a dashboarding tool that can be used to visualize the data coming from the devices. + +## Prerequisites + +In order to create a dashboard having a device-type with at least one message type and schema is required. Having a device that has already sent some data is also recommended to visualize the created panels straight away and have a faster feedback loop. + +## Creating a dashboard + +Dashboards are created from the “Dashboards” list. Just a name and an optional description are requested. + +![Dashboards](/img/Dashboards.png) + +When clicking on “create” an empty dashboard is created. + +![Empty dashboard](/img/EmptyDashboard.png) + +## Creating panels + +A dashboard is composed of one or more panels. To create a new one use the “New panel” button and select the type of panel to create. +

+ +At the moment the available panel types are the following: time-series, pie chart and gauge. + +### General information + +Name the panel and optionally set a description. +

+ +### Configuration + +(make this type dependent) + +**Time series** + +###### Query builder + +The query builder is used to define which data will the panel display. The x-axis will always be the time, and the y axis will contain one or more time-series lines. Each line is defined by an independent query. +

+Defining a query requires the following configuration: + +- Selecting a device or device variable. Each line in the chart can show the data of a single device. The device to be used can be fixed and defined at panel creation time, or determined by a dashboard variable (see this for more info). +- Message type and attribute. Each line in the chart can show the data of a single message type attribute. +- Aggregation method. The method used to aggregate the devices data to adapt the number of displayed points to the user's screen size and zoom level. + +**Attribute type and Available aggregation methods** + +- Numeric: Count, maximum, minimum, mean, standard deviation, and sum. +- Boolean: Count +- Text: Count + +

+ +The reason for aggregating the data is performance. Lets say a certain device is sending data observations every second, and the user wants to display the data of a whole month. That would result in 2,678,400 data points. Displaying so many data points would be technically impossible for the browser because of the limited amount of pixels that a screen can display. Also, it would be very CPU heavy. To avoid that, the dashboard panel aggregates data to adapt to the screen size and chosen zoom level. + +###### Appearance + +The following appearance related options are available: + +- Enable/disable value with unit marker. +- Conditions for different styles, applies the first that's true +- Color +- Text to display diff --git a/docs/How-to guides/How to create a schema.md b/docs/How-to guides/How to create a schema.md new file mode 100644 index 0000000..f9df463 --- /dev/null +++ b/docs/How-to guides/How to create a schema.md @@ -0,0 +1,80 @@ +## Introduction + +When data arrives into Biotz's ingestion system, the received package of data is checked against schemas defined in Biotz. These schemas are the definition of the content of the data package and the user must take care of defining them in the system. +## Prerequisites + +In order to create a schema having a deceive-type with at least one message type is required. A schema is directly related to device-type, there can be zero to many schemas. + +## Creating a schema + +Schemas are created from the Setup > Data ingestion flow > Device-type > Message-type “New schema” + +![Creating a schema](/img/CreatingSchema.png) + +When clicking on “New schema” an empty schema is created. + +![New schema](/img/NewSchema.png) + +First thing will be giving a name to the schema, the purpose of this is just to identify it, it is not further used in the communication or data sending. + +

+ +After naming the schema the proper and important specification happens under the ‘Schema definition’ section. It is time to let Biotz know how the sending data is structured. Once ‘Add new item’ is selected, a set of different item types are offered to cover almost all the data sending options: + +![item types](/img/itemTypes.png) + + +Detailed specification of the item types is shared in here + +- Collection of identical items: collection of more than one identical item. Being an item anything from an object/map/dictionary to singular element as a text, boolean, integer or decimal. +- Collection of unrelated items: collection of any kind of item, present just once. +- Object / Map / Dictionary: They are containers of the final properties, as the collection type items. 1 to n items can be added to this one, they are grouped in two types based on the data needed to define them: +- Unix timestamp (integer) +- Unix timestamp (text) +- Unix timestamp RFC-3339 +- Text +- Boolean +- Integer +- Integer, as text +- Integer, as hexadecimal text +- Decimal +- Decimal, as text + +These are the descriptions of each of the parameters of an item: + +- Item type: the type of the element in the payload. +- Key name: key name in the object/dictionary. +- Item name: the name of the column where this data will be stored. +- Mandatory? +- Can be null? +- +![parameters](/img/parameters.png) + + +Timestamp ones, the same as the rest with an extra one: + + - Payload timestamp?: to be marked if this is the timestamp Biotz should use for the time series date mark. + +![Payload Timestamp](/img/payloadTimestamp.png) + + +Once the schema is totally represented the ‘save’ button will register the schema. This will create the necessary machinery for the data validation and ingestion, it will also create the needed database structure for the data to be stored. + +## Create a schema using the text editor + +Apart from the interactive user interface to register a schema, there is a editor mode to perform the same task. + +The editor mode provides a more flexible way of registering a schema, but requires advanced knowledge of the structure it must follow. + +It can also be used to get a plain text description of the schema that can be copied and saved to local files. + +The scheme must be a valid schema to be able to 'save' it. + +

+ +Next step should be setting up the other piece of the communication, the device. This other how-to guide talks about it. + + + + + diff --git a/docs/How-to guides/How to define alarm and triggers.md b/docs/How-to guides/How to define alarm and triggers.md new file mode 100644 index 0000000..1854db8 --- /dev/null +++ b/docs/How-to guides/How to define alarm and triggers.md @@ -0,0 +1,76 @@ +## Introduction + +Biotz provides alarm generation and notification capabilities based on the data received in the data ingestion flows. The alarm trigger or rules are evaluated against each received data observation, and when an alarm is triggered the corresponding users are notified. + +This guide explains how to define the rules that decide when an alarm is triggered and how to specify the list of users that must be notified. + +## Prerequisites + +In order to define the alarm triggers you need to have a device-type with at least one message-type and message type schema. + +The alarm trigger will apply to all the devices of a certain device type no matter if they were created before or after defining the trigger. + +## Alarm definition + +The alarm triggers are defined in the “Alarm triggers” subsection under the “Setup” section. +

+ +\ + + +

+ +\ + +Defining an alarm requires three steps: general options, rule definition and notification settings. + +### General options + +The following fields have to be completed: + +- Name: an identifier for the trigger. This name will be displayed in the triggered alarm list and notifications. +- Level: the criticality or severity of the alarm. The possible values are: alert, critical, emergency, info and warning. +- Device type: the device type for which the alarm trigger will be evaluated. The trigger will apply to all the devices of a certain type. +- Message type: the message type that will be used to define the trigger rule. The trigger will only be evaluated when the devices send data for the selected message type. + +\ + +### Rule definition + +Each individual data observation is evaluated against the rule defined in this section. Those rules are composed of condition and group blocks: + +**Conditions** + +For each attribute in the message-type, one or more conditions can be specified. The “attribute “ values are compared with the “value” using the “operator”. + +

+The available operators differ depending on the attribute type: + +- numeric: `>, >=, <, <=, =, <>` +- boolean: `<>, =` +- text: `<>, =` +- others: `None` + +‍**Groups** + +Multiple conditions can be grouped. When doing so, a logical operator has to be chosen to define the relation between the grouped conditions. + +The following are the available logical operators: + + - AND: The group is considered truthy if all the individual conditions are met. + - OR: The group is considered truthy if at least one individual condition is met. + - NOT AND: The group is considered truthy if none or some, but not all individual conditions are met + -NOT OR: The group is considered truthy if none of the individual conditions is met. + +![Groups](/img/groups.png) + + +Conditions and groups can be nested to build complex rules. +### Notifications +By default no users will be notified when an alarm is triggered. The triggered alarm will be persisted and viewable in the alarms list, but none of the users will get a message. To change that, the “Edit users” button can be used. Pressing the button will open a sidebar where the list of users to be notified can be selected. +

+The selected users will get a web notification and an email when an alarm is triggered. +

+\ +

+To avoid overwhelming the user with notifications, a rate limit is applied to the notifications sent to the users. The users will be notified at most once every 15 minutes for each device an alarm trigger definition. Additional notifications will be ignored, but the alarm will be persisted and viewable in the alarms list. \ No newline at end of file diff --git a/docs/How-to guides/How to invite users.md b/docs/How-to guides/How to invite users.md new file mode 100644 index 0000000..61bad4a --- /dev/null +++ b/docs/How-to guides/How to invite users.md @@ -0,0 +1,45 @@ +## Introduction + +Organization administrators can invite new users to their organization. + +## Prerequisites + +Only organization administrators can invite new users. + +## Invite a new user + +New users are created from the user list view. The list can be accessed from 'Users' in the 'Organization management' section in the sidebar menu. + +![Invite New User](/img/InviteNewUser.png) + +There, new users can be created using the “Add new user” button. + +![Add new user](/img/AddUser.png) + +For creating the new user only an email address is required. Upon pressing save, the web application will notify the user if the process was successful or not. + +## Accept invitation + +When a new user is created, a welcome email is sent. + +![Accept Invitation](/img/AcceptInvitation.png) + +The email contains a URL that the new user has to open when it’s ready to set up its login credentials. + +![Login Credentials](/img/LoginCredentials.png) + +Opening the URL will trigger another email to be sent. + +![Actualizar Cuenta](/img/ActualizarCuenta.png) + +Clicking on the second email will redirect the user to the authentication provider. There the user will have to type the password that wants to use to login into Biotz. + +![Update Password](/img/UpdatePassword.png) + +![Update Password2](/img/UpdatePassword2.png) + +And finally the user will be redirected to the login page, where it can start using Biotz. + +![Login Page](/img/LoginPage.png) + + diff --git a/docs/How-to guides/How to publish device data.md b/docs/How-to guides/How to publish device data.md new file mode 100644 index 0000000..6290a14 --- /dev/null +++ b/docs/How-to guides/How to publish device data.md @@ -0,0 +1,25 @@ +There is a standard format of the MQTT topics for sending data from devices to the Biotz IoT Platform. For this to happen there are these pre-steps that must be fulfilled: + +- Organisation must be registered in Biotz. +- Device-Type, message-type and the schema of data schema of data to be sent must be registered in Biotz. +- Specific device must be registered. + +Find specific MQTT broker information following this link. + +This is the generic MQTT topic builds: + +``` +biotz/1/0/CUSTOMER-ID/DEVICE-ID/publish/data/MESSAGE-TYPE-INTERNAL-NAME +``` + +In the topic standard there are three elements that have to be personalized: + +- **CUSTOMER-ID**: is common to the organisation. It is provided when a device is registered in the web application, and it has a UUID format. +- **DEVICE-ID**: specific to each device. It is provided when a device is registered in the web application, and it has a UUID format. +- **MESSAGE-TYPE-INTERNAL-NAME**: is specified by the device owner when registering a message-type for a certain device-type. This message-type will have to have also a schema specified in Biotz. + +Devices should publish messages to these topics. There are specific security measures in place so these topics are exclusively set up to get publish messages. Devices can't subscribe to it. + +## Custom topic name support + +We won’t support custom topic names in the SaaS platform. That feature would only be considered in an ad-hoc project for a specific customer, along with some other possible customization as the device payload schema gathering. \ No newline at end of file diff --git a/docs/How-to guides/How to register devices.md b/docs/How-to guides/How to register devices.md new file mode 100644 index 0000000..5206192 --- /dev/null +++ b/docs/How-to guides/How to register devices.md @@ -0,0 +1,56 @@ +## Introduction + +Biotz offers two ways for registering physical devices of a certain device type. This is used by Biotz to generate internal machinery for specific devices. But also as a way to have data of the collection of devices gathered together. + +## Prerequisites + +Before registering a device, the device type to which it belongs must be created. + +## Register a device + +Biotz offers two ways to register devices: + + - Using the specific UI one by one. + - Uploading a cvs with data of 1 to n devices to register all of them in one go. + +**Using the UI** + +Follow the steps: + +- From the lateral menu navigate to 'Device management - Devices'. +- At the right side top of this new view there will be a button that says 'New device'. +- That will present the form for the device registration. + +![Using the UI](/img/UsingUI.png) + +Parameters description: +- Device type - compulsory -: select the device type already created. +- Name - compulsory -: name of the device. +- Description: description of the device. +- Time Zone: time zone of the location of the device. +- Tags: tags for device classification purpose. + + +**Using the CSV way** + +Follow the steps: + + - From the lateral menu navigate to 'Device management - Devices'. + - At the right side top of this new view there will be a button that says 'Create devices form CSV'. + - That will present the form for the device registration. +![Using the CSV way](/img/UsingCSVway.png) + +Parameters description: + + - Device type - compulsory -: select the device type already created. + - File droping area. + +Expected file is a CSV format file that must contain the following columns: + - name + - description + - timezone + + +And there must be at least a row with data of a device in it. + + diff --git a/docs/How-to guides/How to use dashboard variables.md b/docs/How-to guides/How to use dashboard variables.md new file mode 100644 index 0000000..6fb43ac --- /dev/null +++ b/docs/How-to guides/How to use dashboard variables.md @@ -0,0 +1,36 @@ +## Introduction + +Dashboard variables allow users to make dashboard panels more dynamic. Instead of hardcoding specific devices in the panels, device selectors can be added to the dashboard. Those selectors are displayed in the main dashboard view, and the selected value can be changed by the final users at any time. Changing the value updates the data for all the panels that are using that variable. +

+The dashboard variables are defined at dashboard level. Then they can be used when defining the panel queries. + +## Prerequisites + +The dashboard has to be pre-created, and at least one device is needed. + +## Define dashboard variables + +The variables are created from the dashboard edition view. For that click on the “pencil” icon in the dashboard toolbar. + +![Dashboard Toolbars](/img/dashboardToolbar.png) + +Creating a variable only requires specifying a name and selecting a device-type. +

+ +The dashboard variables are always device-type specific to ensure that all the selectable devices are compatible with the dashboard panel queries in which the variable is used. + +![Documentation Dasboard](/img/documentationDashboard.png) + + +Up to 4 variables can be defined. + +## Use dashboard variables + +Once a dashboard variable is defined it can be used when defining dashboard panel queries. The same variable can be used in multiple queries and panels. +

+ +For that, click on the “Variable, select a variable defined in the dashboard” in the query builder. Then select a specific variable from the list. Continue with the rest of the form as when selecting a specific device. + +![Specific Device](/img/SpecificDevice.png) + +The dashboard variable is now ready to use. Changing the device in the dashboard view will update the corresponding panels. diff --git a/docs/How-to guides/_category_.json b/docs/How-to guides/_category_.json new file mode 100644 index 0000000..d5f0734 --- /dev/null +++ b/docs/How-to guides/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "How-to guides", + "position": 2, + "link": { + "type": "generated-index" + } +} diff --git a/docs/Tutorials/Creating a Biotz account.md b/docs/Tutorials/Creating a Biotz account.md index 000a498..8180f34 100644 --- a/docs/Tutorials/Creating a Biotz account.md +++ b/docs/Tutorials/Creating a Biotz account.md @@ -6,15 +6,16 @@ Please not that In order to complete this tutorial you will need a valid email a First navigate to the [Biotz Cloud](https://auth.biotz.io/realms/biotz-platform/protocol/openid-connect/auth?client_id=biotz-platform-spa&redirect_uri=https%3A%2F%2Fapp.biotz.io%2Foverview&state=9821fae0-b8ea-4b9f-b7f2-ebe9ad3c482c&response_mode=fragment&response_type=code&scope=openid&nonce=2063c301-fb70-4d7e-81f0-5790cefcf23f&ui_locales=en&code_challenge=bj-DokiKe4Pu4Xfta9-fhtiK1qjA8--GqPnUwWXfv1Y&code_challenge_method=S256). Once here you will be presented with the login page: -![Sign In](/img/SignIn.png) + +
Sign In
Since you do not have an account yet, hit the **Register** link at the bottom, below the **Sign In** button. This will lead you to the registration page. -![Register](/img/Register.png) +
Register
As can be seen in the image above, the registration form asks for just your **Email** address and a **Password**. Once you have entered that information, hit **Register** and you will be prompted to accept the **Terms and Conditions** of Biotz. By accepting them, an email will be sent to you to verify your email address and activate your account. -![Verifying](/img/Verifying.png) +
Verifying
In case you didn’t receive an email, you can try sending it again by clicking on the **Click here to resend the email** link. @@ -24,16 +25,17 @@ The email you received will have a verification link that you have to use before By navigating to the verification link you will see the following page: -![Confirm](/img/Confirm.png) +
Confirm
Just click on the link below **Click here to proceed** and you will have verified your email account. -![Click Here](/img/ClickHere.png) +
Click Here
# Creating your organisation After verifying your email address you are ready to login into Biotz. Go back to the login page at Biotz Cloud, introduce your login credentials and hit **Sign In**. Next, you will be presented with the following page: -![Organisation](/img/organisation.png) +
organisation
+ -In order to finish the creation of your account you need to create an **Organisation**. The creation form asks for three things: the **Country**, **Legal name** and the **Tax ID** of your organisation. If you have done everything correctly you will see the **Overview page and your registration process will be finished. \ No newline at end of file +In order to finish the creation of your account you need to create an **Organisation**. The creation form asks for three things: the **Country**, **Legal name** and the **Tax ID** of your organisation. If you have done everything correctly you will see the **Overview page and your registration process will be finished.
Sign In
diff --git a/static/img/64d60b035aec071039edec2d_qOcNynHWMH72PXNXvKeigaIX45XT5v4NxwU02YZ459_SI307xq-2-JZiD7ctLUv--hEzepUHSTs1nUPRyZf0sdisYksSxRoGRlFsNP6Weu2zOpN-vu4pdZCZH3EQedzI94eEJQricSsWVM6dV7iV2ZI.png b/static/img/64d60b035aec071039edec2d_qOcNynHWMH72PXNXvKeigaIX45XT5v4NxwU02YZ459_SI307xq-2-JZiD7ctLUv--hEzepUHSTs1nUPRyZf0sdisYksSxRoGRlFsNP6Weu2zOpN-vu4pdZCZH3EQedzI94eEJQricSsWVM6dV7iV2ZI.png new file mode 100644 index 0000000..3c4c57d Binary files /dev/null and b/static/img/64d60b035aec071039edec2d_qOcNynHWMH72PXNXvKeigaIX45XT5v4NxwU02YZ459_SI307xq-2-JZiD7ctLUv--hEzepUHSTs1nUPRyZf0sdisYksSxRoGRlFsNP6Weu2zOpN-vu4pdZCZH3EQedzI94eEJQricSsWVM6dV7iV2ZI.png differ diff --git a/static/img/AcceptInvitation.png b/static/img/AcceptInvitation.png new file mode 100644 index 0000000..3a7d077 Binary files /dev/null and b/static/img/AcceptInvitation.png differ diff --git a/static/img/ActualizarCuenta.png b/static/img/ActualizarCuenta.png new file mode 100644 index 0000000..3a58466 Binary files /dev/null and b/static/img/ActualizarCuenta.png differ diff --git a/static/img/AddUser.png b/static/img/AddUser.png new file mode 100644 index 0000000..e1bb367 Binary files /dev/null and b/static/img/AddUser.png differ diff --git a/static/img/InviteNewUser.png b/static/img/InviteNewUser.png new file mode 100644 index 0000000..75e0770 Binary files /dev/null and b/static/img/InviteNewUser.png differ diff --git a/static/img/LoginCredentials.png b/static/img/LoginCredentials.png new file mode 100644 index 0000000..c83b140 Binary files /dev/null and b/static/img/LoginCredentials.png differ diff --git a/static/img/LoginPage.png b/static/img/LoginPage.png new file mode 100644 index 0000000..9bc8893 Binary files /dev/null and b/static/img/LoginPage.png differ diff --git a/static/img/MyTestPanel.png b/static/img/MyTestPanel.png new file mode 100644 index 0000000..24b3396 Binary files /dev/null and b/static/img/MyTestPanel.png differ diff --git a/static/img/NewDashboard.png b/static/img/NewDashboard.png new file mode 100644 index 0000000..3c4c57d Binary files /dev/null and b/static/img/NewDashboard.png differ diff --git a/static/img/Query1.png b/static/img/Query1.png new file mode 100644 index 0000000..1de71ec Binary files /dev/null and b/static/img/Query1.png differ diff --git a/static/img/TimeFilter.png b/static/img/TimeFilter.png new file mode 100644 index 0000000..8e0037d Binary files /dev/null and b/static/img/TimeFilter.png differ diff --git a/static/img/UpdatePassword.png b/static/img/UpdatePassword.png new file mode 100644 index 0000000..88a5da2 Binary files /dev/null and b/static/img/UpdatePassword.png differ diff --git a/static/img/UpdatePassword2.png b/static/img/UpdatePassword2.png new file mode 100644 index 0000000..48dcd5e Binary files /dev/null and b/static/img/UpdatePassword2.png differ diff --git a/static/img/UsingCSVway.png b/static/img/UsingCSVway.png new file mode 100644 index 0000000..d45931a Binary files /dev/null and b/static/img/UsingCSVway.png differ diff --git a/static/img/UsingUI.png b/static/img/UsingUI.png new file mode 100644 index 0000000..cce7691 Binary files /dev/null and b/static/img/UsingUI.png differ diff --git a/static/img/biotz-logo-dark.svg b/static/img/biotz-logo-dark.svg new file mode 100644 index 0000000..c2561ca --- /dev/null +++ b/static/img/biotz-logo-dark.svg @@ -0,0 +1,66 @@ + + + + + + + + + + diff --git a/static/img/biotz-logo.svg b/static/img/biotz-logo.svg new file mode 100644 index 0000000..165e5c3 --- /dev/null +++ b/static/img/biotz-logo.svg @@ -0,0 +1,15 @@ + + + + + + + + +