From ded1ca7efa6887118e430cb867f8cfba69556fec Mon Sep 17 00:00:00 2001 From: iarenaza Date: Tue, 26 Nov 2024 16:17:05 +0000 Subject: [PATCH] deploy: d224eeba1716bb442ed7c6bdf966e3b8ce53d13f --- 404.html | 2 +- about.html | 2 +- ...935f2afb.bdfc3058.js => 935f2afb.18285eb2.js} | 2 +- assets/js/9fb72dca.8d34d322.js | 1 + assets/js/9fb72dca.9aa0193b.js | 1 - assets/js/runtime~main.93f5bd7c.js | 1 + assets/js/runtime~main.e2db40a5.js | 1 - docs/Examples/MQTTX/Intro.html | 2 +- docs/Examples/MQTTX/MQTTX configuration.html | 2 +- docs/Examples/MQTTX/MQttx instalation.html | 2 +- docs/Examples/MQTTX/Message.html | 2 +- docs/Examples/POSTMAN/Getting the token.html | 2 +- docs/Examples/POSTMAN/Intro.html | 2 +- docs/Examples/POSTMAN/Postman instalation.html | 2 +- docs/Examples/POSTMAN/Sending the request.html | 2 +- ...e and trigger a remote action in devices.html | 2 +- .../How-to guides/How to create a dashboard.html | 2 +- docs/How-to guides/How to create a schema.html | 2 +- .../How to create and use webhooks.html | 2 +- .../How to create developer API credentials.html | 2 +- ... coming from a device into the platform..html | 2 +- .../How to define alarm and triggers.html | 2 +- docs/How-to guides/How to invite users.html | 2 +- .../How to publish device data.html | 2 +- docs/How-to guides/How to register devices.html | 2 +- .../How to update device firmware.html | 2 +- .../How to use dashboard variables.html | 2 +- .../How to use organization management.html | 2 +- docs/How-to guides/How to use user settings.html | 2 +- docs/Reference guides/Glossary.html | 2 +- docs/Reference guides/MQTT broker.html | 2 +- .../Message-type Schema specification.html | 16 +++++++++------- docs/Reference guides/developer-api.html | 2 +- docs/Tutorials/Creating a biotz account.html | 2 +- docs/Tutorials/Getting started.html | 2 +- .../Step 1 - Creating a Device Type.html | 2 +- .../Step 2 - Creating a Message Type.html | 2 +- .../Step 3 - Creating a Schema.html | 2 +- .../Step 4 - Creating a device.html | 2 +- .../Step 5 - Authenticating a device.html | 2 +- ...tep 6 - Sending a data ingestion request.html | 2 +- .../Step 7 - Displaying the data.html | 2 +- docs/category/examples.html | 2 +- docs/category/how-to-guides.html | 2 +- docs/category/mqttx.html | 2 +- docs/category/reference-guides.html | 4 ++-- docs/category/tutorials.html | 2 +- index.html | 2 +- 48 files changed, 55 insertions(+), 53 deletions(-) rename assets/js/{935f2afb.bdfc3058.js => 935f2afb.18285eb2.js} (71%) create mode 100644 assets/js/9fb72dca.8d34d322.js delete mode 100644 assets/js/9fb72dca.9aa0193b.js create mode 100644 assets/js/runtime~main.93f5bd7c.js delete mode 100644 assets/js/runtime~main.e2db40a5.js diff --git a/404.html b/404.html index c554220..185d322 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ Page Not Found | Biotz Academy - + diff --git a/about.html b/about.html index eaaa5e6..e2c28f3 100644 --- a/about.html +++ b/about.html @@ -4,7 +4,7 @@ Markdown page example 1 | Biotz Academy - + diff --git a/assets/js/935f2afb.bdfc3058.js b/assets/js/935f2afb.18285eb2.js similarity index 71% rename from assets/js/935f2afb.bdfc3058.js rename to assets/js/935f2afb.18285eb2.js index 560e842..4e326c2 100644 --- a/assets/js/935f2afb.bdfc3058.js +++ b/assets/js/935f2afb.18285eb2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkacademy=self.webpackChunkacademy||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating a biotz account","href":"/docs/Tutorials/Creating a biotz account","docId":"Tutorials/Creating a biotz account","unlisted":false},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Step 1 - Creating a Device Type","href":"/docs/Tutorials/Getting started/Step 1 - Creating a Device Type","docId":"Tutorials/Getting started/Step 1 - Creating a Device Type","unlisted":false},{"type":"link","label":"Step 2 - Creating a Message Type","href":"/docs/Tutorials/Getting started/Step 2 - Creating a Message Type","docId":"Tutorials/Getting started/Step 2 - Creating a Message Type","unlisted":false},{"type":"link","label":"Step 3 - Creating a Schema","href":"/docs/Tutorials/Getting started/Step 3 - Creating a Schema","docId":"Tutorials/Getting started/Step 3 - Creating a Schema","unlisted":false},{"type":"link","label":"Step 4 - Creating a device","href":"/docs/Tutorials/Getting started/Step 4 - Creating a device","docId":"Tutorials/Getting started/Step 4 - Creating a device","unlisted":false},{"type":"link","label":"Step 5 - Authenticating a device","href":"/docs/Tutorials/Getting started/Step 5 - Authenticating a device","docId":"Tutorials/Getting started/Step 5 - Authenticating a device","unlisted":false},{"type":"link","label":"Step 6 - Sending a data ingestion request","href":"/docs/Tutorials/Getting started/Step 6 - Sending a data ingestion request","docId":"Tutorials/Getting started/Step 6 - Sending a data ingestion request","unlisted":false},{"type":"link","label":"Step 7 - Displaying the data","href":"/docs/Tutorials/Getting started/Step 7 - Displaying the data","docId":"Tutorials/Getting started/Step 7 - Displaying the data","unlisted":false}],"href":"/docs/Tutorials/Getting started/"}],"href":"/docs/category/tutorials"},{"type":"category","label":"How-to guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"How to invite users","href":"/docs/How-to guides/How to invite users","docId":"How-to guides/How to invite users","unlisted":false},{"type":"link","label":"How to register devices","href":"/docs/How-to guides/How to register devices","docId":"How-to guides/How to register devices","unlisted":false},{"type":"link","label":"How to create a schema - setup apllication to ingest certain data","href":"/docs/How-to guides/How to create a schema","docId":"How-to guides/How to create a schema","unlisted":false},{"type":"link","label":"How to publish device data using MQTT - setup devices to send data","href":"/docs/How-to guides/How to publish device data","docId":"How-to guides/How to publish device data","unlisted":false},{"type":"link","label":"How to configure and trigger a remote action in devices","href":"/docs/How-to guides/How to configure and trigger a remote action in devices","docId":"How-to guides/How to configure and trigger a remote action in devices","unlisted":false},{"type":"link","label":"How to create a dashboard","href":"/docs/How-to guides/How to create a dashboard","docId":"How-to guides/How to create a dashboard","unlisted":false},{"type":"link","label":"How to Create and Use a Webhook","href":"/docs/How-to guides/How to create and use webhooks","docId":"How-to guides/How to create and use webhooks","unlisted":false},{"type":"link","label":"How to use dashboard variables","href":"/docs/How-to guides/How to use dashboard variables","docId":"How-to guides/How to use dashboard variables","unlisted":false},{"type":"link","label":"How to define alarm triggers","href":"/docs/How-to guides/How to define alarm and triggers","docId":"How-to guides/How to define alarm and triggers","unlisted":false},{"type":"link","label":"How to update device firmware","href":"/docs/How-to guides/How to update device firmware","docId":"How-to guides/How to update device firmware","unlisted":false},{"type":"link","label":"How to create Developer API credentials","href":"/docs/How-to guides/How to create developer API credentials","docId":"How-to guides/How to create developer API credentials","unlisted":false},{"type":"link","label":"How to debug communication coming from devices into the application","href":"/docs/How-to guides/How to debug communications coming from a device into the platform.","docId":"How-to guides/How to debug communications coming from a device into the platform.","unlisted":false},{"type":"link","label":"How to use user settings","href":"/docs/How-to guides/How to use user settings","docId":"How-to guides/How to use user settings","unlisted":false},{"type":"link","label":"How to use organization management/general","href":"/docs/How-to guides/How to use organization management","docId":"How-to guides/How to use organization management","unlisted":false}],"href":"/docs/category/how-to-guides"},{"type":"category","label":"Reference guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"MQTT Broker","href":"/docs/Reference guides/MQTT broker","docId":"Reference guides/MQTT broker","unlisted":false},{"type":"link","label":"Glossary","href":"/docs/Reference guides/Glossary","docId":"Reference guides/Glossary","unlisted":false},{"type":"link","label":"Message-type Schema specification","href":"/docs/Reference guides/Message-type Schema specification","docId":"Reference guides/Message-type Schema specification","unlisted":false},{"type":"link","label":"Developer API","href":"/docs/Reference guides/developer-api","docId":"Reference guides/developer-api","unlisted":false}],"href":"/docs/category/reference-guides"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"MQTTX","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/docs/Examples/MQTTX/Intro","docId":"Examples/MQTTX/Intro","unlisted":false},{"type":"link","label":"MQTTX instalation","href":"/docs/Examples/MQTTX/MQttx instalation","docId":"Examples/MQTTX/MQttx instalation","unlisted":false},{"type":"link","label":"MQTTX configuration","href":"/docs/Examples/MQTTX/MQTTX configuration","docId":"Examples/MQTTX/MQTTX configuration","unlisted":false},{"type":"link","label":"Publish data to Biotz","href":"/docs/Examples/MQTTX/Message","docId":"Examples/MQTTX/Message","unlisted":false}],"href":"/docs/category/mqttx"},{"type":"category","label":"POSTMAN","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/docs/Examples/POSTMAN/Intro","docId":"Examples/POSTMAN/Intro","unlisted":false},{"type":"link","label":"Postman instalation","href":"/docs/Examples/POSTMAN/Postman instalation","docId":"Examples/POSTMAN/Postman instalation","unlisted":false},{"type":"link","label":"Getting the token","href":"/docs/Examples/POSTMAN/Getting the token","docId":"Examples/POSTMAN/Getting the token","unlisted":false},{"type":"link","label":"Sending HTTP","href":"/docs/Examples/POSTMAN/Sending the request","docId":"Examples/POSTMAN/Sending the request","unlisted":false}]}],"href":"/docs/category/examples"}]},"docs":{"Examples/MQTTX/Intro":{"id":"Examples/MQTTX/Intro","title":"Intro","description":"MQTTX is a tool designed to assist in the development, testing and debugging of applications using the Message Queuing Telemetry Transport (MQTT) protocol.","sidebar":"tutorialSidebar"},"Examples/MQTTX/Message":{"id":"Examples/MQTTX/Message","title":"Publish data to Biotz","description":"This is the mqttx app:","sidebar":"tutorialSidebar"},"Examples/MQTTX/MQTTX configuration":{"id":"Examples/MQTTX/MQTTX configuration","title":"MQTTX configuration","description":"After installing the corresponding version you have to login into the app.biotz.io, if you don\'t have an account, you have to create one first.","sidebar":"tutorialSidebar"},"Examples/MQTTX/MQttx instalation":{"id":"Examples/MQTTX/MQttx instalation","title":"MQttx instalation","description":"To install MQTTX, first, Visit the official MQTTX website and select the download button and you will be sent to a page.","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Getting the token":{"id":"Examples/POSTMAN/Getting the token","title":"Getting the token","description":"To get the token needed for authorization when sending our request, you must first follow these steps.","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Intro":{"id":"Examples/POSTMAN/Intro","title":"Intro","description":"Postman is a popular tool used by developers to test, develop, and document APIs (Application Programming Interfaces). It provides a user-friendly interface that allows you to send HTTP requests to servers and receive responses. With Postman, you can perform various operations such as sending GET, POST, PUT, DELETE requests, among others, and view the corresponding responses.","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Postman instalation":{"id":"Examples/POSTMAN/Postman instalation","title":"Postman instalation","description":"Install Postman in Ubuntu","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Sending the request":{"id":"Examples/POSTMAN/Sending the request","title":"Sending the request","description":"You have already got the token, now it is time to send the request.","sidebar":"tutorialSidebar"},"How-to guides/How to configure and trigger a remote action in devices":{"id":"How-to guides/How to configure and trigger a remote action in devices","title":"Configure and trigger a \'remote actioning\'","description":"Biotz offers the feature to action devices remotely, this is offered just through MQTT. The configuration of this features include 3 steps:","sidebar":"tutorialSidebar"},"How-to guides/How to create a dashboard":{"id":"How-to guides/How to create a dashboard","title":"How to create a dashboard","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to create a schema":{"id":"How-to guides/How to create a schema","title":"How to create a schema","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to create and use webhooks":{"id":"How-to guides/How to create and use webhooks","title":"How to Create and Use Webhooks","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to create developer API credentials":{"id":"How-to guides/How to create developer API credentials","title":"Developer API","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to debug communications coming from a device into the platform.":{"id":"How-to guides/How to debug communications coming from a device into the platform.","title":"How to debug communications coming from a device into the platform.","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to define alarm and triggers":{"id":"How-to guides/How to define alarm and triggers","title":"How to define alarm triggers","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to invite users":{"id":"How-to guides/How to invite users","title":"How to invite users","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to publish device data":{"id":"How-to guides/How to publish device data","title":"Publishing Device data","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to register devices":{"id":"How-to guides/How to register devices","title":"How to register devices","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to update device firmware":{"id":"How-to guides/How to update device firmware","title":"Update device firmware","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to use dashboard variables":{"id":"How-to guides/How to use dashboard variables","title":"How to use dashboard variables","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to use organization management":{"id":"How-to guides/How to use organization management","title":"How to use organization management/general","description":"This interface allows you to manage and customize various aspects of your organization\'s presence and settings for the platform.","sidebar":"tutorialSidebar"},"How-to guides/How to use user settings":{"id":"How-to guides/How to use user settings","title":"How to use user settings","description":"To access your user settings in the Biotz platform, follow these steps:","sidebar":"tutorialSidebar"},"Reference guides/developer-api":{"id":"Reference guides/developer-api","title":"Developer API","description":"Developer API reference","sidebar":"tutorialSidebar"},"Reference guides/Glossary":{"id":"Reference guides/Glossary","title":"Glossary","description":"Device type: Biotz allows managing multiple different devices from the same account. \u201cTypes\u201d are a way of grouping those devices.","sidebar":"tutorialSidebar"},"Reference guides/Message-type Schema specification":{"id":"Reference guides/Message-type Schema specification","title":"Message-type Schema specification","description":"This is the specification for the schema of a message-type. The users will have to specify a device-type, with one to many message-type. Each message-type will have one to many schemas.","sidebar":"tutorialSidebar"},"Reference guides/MQTT broker":{"id":"Reference guides/MQTT broker","title":"MQTT Broker Reference","description":"Connection details","sidebar":"tutorialSidebar"},"Tutorials/Creating a biotz account":{"id":"Tutorials/Creating a biotz account","title":"Creating a biotz account","description":"User registration is not currently available for the public. Please contact us if you want to create an account.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Getting started":{"id":"Tutorials/Getting started/Getting started","title":"Getting started","description":"This tutorial offers a comprehensive guide on establishing a seamless data ingestion flow within the Biotz platform. The process involves a systematic sequence of 7 steps that entail configuring Biotz\'s core components. Through these steps, you\'ll initiate the transmission and ingestion of data. Notably, this tutorial eliminates the necessity for a physical device to complete the procedures; all tasks associated with data transmission and ingestion will be simulated, fostering an accessible and hands-on learning experience.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 1 - Creating a Device Type":{"id":"Tutorials/Getting started/Step 1 - Creating a Device Type","title":"Creating a Device Type","description":"Before we start sending and ingesting data you have to configure your Biotz account to be able to know who is sending data and how to process it. The first step is to create a Device Type, which will allow you to categorise your devices. Assuming you have signed in into the application, from the sidebar, in the Setup section, click on Device Type.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 2 - Creating a Message Type":{"id":"Tutorials/Getting started/Step 2 - Creating a Message Type","title":"Creating a Message Type","description":"As the name implies this is a type of message your device can send. If your device outputs different information structures, each of them would be a different Message Type. In this tutorial, you will create a single Message Type for the sake of simplicity. To do so, from the sidebar, in the Setup section, click on Data Ingestion Flow. You will be presented with the following page:","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 3 - Creating a Schema":{"id":"Tutorials/Getting started/Step 3 - Creating a Schema","title":"Creating a Schema","description":"Now that you have created a Message Type, you have to define the shape of the data for that Message Type. This is what is called Schemas in Biotz. Schemas are just the definition of the structure of what your device will send to the platform. This helps Biotz ingest and process your data effectively.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 4 - Creating a device":{"id":"Tutorials/Getting started/Step 4 - Creating a device","title":"Creating a device","description":"Before sending any data you need to register a device. To do so, from the sidebar, in the Device Management section, click on Devices. This will show up a list of devices. In the top right corner you click on New device. You will see the following form:","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 5 - Authenticating a device":{"id":"Tutorials/Getting started/Step 5 - Authenticating a device","title":"Authenticating a device","description":"In this tutorial, as said in the beginning, the data sending will be simulated. To do so, you will make an HTTP request to the http-forwarder service of Biotz which will, as the name implies, forward your data ingestion request to the competent services. That is the reason why you chose the HTTP communication protocol before when creating a message type.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 6 - Sending a data ingestion request":{"id":"Tutorials/Getting started/Step 6 - Sending a data ingestion request","title":"Sending a data ingestion request","description":"Now that you have a token from Biotz Identity Provider, it is time to send actual data to Biotz. In this tutorial, as said before, you will simulate a device sending data using the terminal. The approach is basically the same as to retrieve a token, just an HTTP request to the http-forwarder service. It will take your request and re-route it into a queue to be processed when the system is available.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 7 - Displaying the data":{"id":"Tutorials/Getting started/Step 7 - Displaying the data","title":"Displaying the data","description":"In order to display the data you will need to create a dashboard and a panel. A dashboard is a collection of panels. Each panel contains a specific query to display your data. You can also apply different customizations to the panel\'s appearance. However, the focus of this tutorial is to just display your newly ingested data. Bear in mind that the data you will display is a single point, if you have followed this tutorial. Displaying a single point is not very useful but the end goal is to learn how it works. So, later on when you create your real dashboard panels you have a good foundation to do so.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkacademy=self.webpackChunkacademy||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Creating a biotz account","href":"/docs/Tutorials/Creating a biotz account","docId":"Tutorials/Creating a biotz account","unlisted":false},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Step 1 - Creating a Device Type","href":"/docs/Tutorials/Getting started/Step 1 - Creating a Device Type","docId":"Tutorials/Getting started/Step 1 - Creating a Device Type","unlisted":false},{"type":"link","label":"Step 2 - Creating a Message Type","href":"/docs/Tutorials/Getting started/Step 2 - Creating a Message Type","docId":"Tutorials/Getting started/Step 2 - Creating a Message Type","unlisted":false},{"type":"link","label":"Step 3 - Creating a Schema","href":"/docs/Tutorials/Getting started/Step 3 - Creating a Schema","docId":"Tutorials/Getting started/Step 3 - Creating a Schema","unlisted":false},{"type":"link","label":"Step 4 - Creating a device","href":"/docs/Tutorials/Getting started/Step 4 - Creating a device","docId":"Tutorials/Getting started/Step 4 - Creating a device","unlisted":false},{"type":"link","label":"Step 5 - Authenticating a device","href":"/docs/Tutorials/Getting started/Step 5 - Authenticating a device","docId":"Tutorials/Getting started/Step 5 - Authenticating a device","unlisted":false},{"type":"link","label":"Step 6 - Sending a data ingestion request","href":"/docs/Tutorials/Getting started/Step 6 - Sending a data ingestion request","docId":"Tutorials/Getting started/Step 6 - Sending a data ingestion request","unlisted":false},{"type":"link","label":"Step 7 - Displaying the data","href":"/docs/Tutorials/Getting started/Step 7 - Displaying the data","docId":"Tutorials/Getting started/Step 7 - Displaying the data","unlisted":false}],"href":"/docs/Tutorials/Getting started/"}],"href":"/docs/category/tutorials"},{"type":"category","label":"How-to guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"How to invite users","href":"/docs/How-to guides/How to invite users","docId":"How-to guides/How to invite users","unlisted":false},{"type":"link","label":"How to register devices","href":"/docs/How-to guides/How to register devices","docId":"How-to guides/How to register devices","unlisted":false},{"type":"link","label":"How to create a schema - setup apllication to ingest certain data","href":"/docs/How-to guides/How to create a schema","docId":"How-to guides/How to create a schema","unlisted":false},{"type":"link","label":"How to publish device data using MQTT - setup devices to send data","href":"/docs/How-to guides/How to publish device data","docId":"How-to guides/How to publish device data","unlisted":false},{"type":"link","label":"How to configure and trigger a remote action in devices","href":"/docs/How-to guides/How to configure and trigger a remote action in devices","docId":"How-to guides/How to configure and trigger a remote action in devices","unlisted":false},{"type":"link","label":"How to create a dashboard","href":"/docs/How-to guides/How to create a dashboard","docId":"How-to guides/How to create a dashboard","unlisted":false},{"type":"link","label":"How to Create and Use a Webhook","href":"/docs/How-to guides/How to create and use webhooks","docId":"How-to guides/How to create and use webhooks","unlisted":false},{"type":"link","label":"How to use dashboard variables","href":"/docs/How-to guides/How to use dashboard variables","docId":"How-to guides/How to use dashboard variables","unlisted":false},{"type":"link","label":"How to define alarm triggers","href":"/docs/How-to guides/How to define alarm and triggers","docId":"How-to guides/How to define alarm and triggers","unlisted":false},{"type":"link","label":"How to update device firmware","href":"/docs/How-to guides/How to update device firmware","docId":"How-to guides/How to update device firmware","unlisted":false},{"type":"link","label":"How to create Developer API credentials","href":"/docs/How-to guides/How to create developer API credentials","docId":"How-to guides/How to create developer API credentials","unlisted":false},{"type":"link","label":"How to debug communication coming from devices into the application","href":"/docs/How-to guides/How to debug communications coming from a device into the platform.","docId":"How-to guides/How to debug communications coming from a device into the platform.","unlisted":false},{"type":"link","label":"How to use user settings","href":"/docs/How-to guides/How to use user settings","docId":"How-to guides/How to use user settings","unlisted":false},{"type":"link","label":"How to use organization management/general","href":"/docs/How-to guides/How to use organization management","docId":"How-to guides/How to use organization management","unlisted":false}],"href":"/docs/category/how-to-guides"},{"type":"category","label":"Reference guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"MQTT Broker","href":"/docs/Reference guides/MQTT broker","docId":"Reference guides/MQTT broker","unlisted":false},{"type":"link","label":"Glossary","href":"/docs/Reference guides/Glossary","docId":"Reference guides/Glossary","unlisted":false},{"type":"link","label":"Message-type Schema specification","href":"/docs/Reference guides/Message-type Schema specification","docId":"Reference guides/Message-type Schema specification","unlisted":false},{"type":"link","label":"Developer API","href":"/docs/Reference guides/developer-api","docId":"Reference guides/developer-api","unlisted":false}],"href":"/docs/category/reference-guides"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"MQTTX","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/docs/Examples/MQTTX/Intro","docId":"Examples/MQTTX/Intro","unlisted":false},{"type":"link","label":"MQTTX instalation","href":"/docs/Examples/MQTTX/MQttx instalation","docId":"Examples/MQTTX/MQttx instalation","unlisted":false},{"type":"link","label":"MQTTX configuration","href":"/docs/Examples/MQTTX/MQTTX configuration","docId":"Examples/MQTTX/MQTTX configuration","unlisted":false},{"type":"link","label":"Publish data to Biotz","href":"/docs/Examples/MQTTX/Message","docId":"Examples/MQTTX/Message","unlisted":false}],"href":"/docs/category/mqttx"},{"type":"category","label":"POSTMAN","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/docs/Examples/POSTMAN/Intro","docId":"Examples/POSTMAN/Intro","unlisted":false},{"type":"link","label":"Postman instalation","href":"/docs/Examples/POSTMAN/Postman instalation","docId":"Examples/POSTMAN/Postman instalation","unlisted":false},{"type":"link","label":"Getting the token","href":"/docs/Examples/POSTMAN/Getting the token","docId":"Examples/POSTMAN/Getting the token","unlisted":false},{"type":"link","label":"Sending HTTP","href":"/docs/Examples/POSTMAN/Sending the request","docId":"Examples/POSTMAN/Sending the request","unlisted":false}]}],"href":"/docs/category/examples"}]},"docs":{"Examples/MQTTX/Intro":{"id":"Examples/MQTTX/Intro","title":"Intro","description":"MQTTX is a tool designed to assist in the development, testing and debugging of applications using the Message Queuing Telemetry Transport (MQTT) protocol.","sidebar":"tutorialSidebar"},"Examples/MQTTX/Message":{"id":"Examples/MQTTX/Message","title":"Publish data to Biotz","description":"This is the mqttx app:","sidebar":"tutorialSidebar"},"Examples/MQTTX/MQTTX configuration":{"id":"Examples/MQTTX/MQTTX configuration","title":"MQTTX configuration","description":"After installing the corresponding version you have to login into the app.biotz.io, if you don\'t have an account, you have to create one first.","sidebar":"tutorialSidebar"},"Examples/MQTTX/MQttx instalation":{"id":"Examples/MQTTX/MQttx instalation","title":"MQttx instalation","description":"To install MQTTX, first, Visit the official MQTTX website and select the download button and you will be sent to a page.","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Getting the token":{"id":"Examples/POSTMAN/Getting the token","title":"Getting the token","description":"To get the token needed for authorization when sending our request, you must first follow these steps.","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Intro":{"id":"Examples/POSTMAN/Intro","title":"Intro","description":"Postman is a popular tool used by developers to test, develop, and document APIs (Application Programming Interfaces). It provides a user-friendly interface that allows you to send HTTP requests to servers and receive responses. With Postman, you can perform various operations such as sending GET, POST, PUT, DELETE requests, among others, and view the corresponding responses.","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Postman instalation":{"id":"Examples/POSTMAN/Postman instalation","title":"Postman instalation","description":"Install Postman in Ubuntu","sidebar":"tutorialSidebar"},"Examples/POSTMAN/Sending the request":{"id":"Examples/POSTMAN/Sending the request","title":"Sending the request","description":"You have already got the token, now it is time to send the request.","sidebar":"tutorialSidebar"},"How-to guides/How to configure and trigger a remote action in devices":{"id":"How-to guides/How to configure and trigger a remote action in devices","title":"Configure and trigger a \'remote actioning\'","description":"Biotz offers the feature to action devices remotely, this is offered just through MQTT. The configuration of this features include 3 steps:","sidebar":"tutorialSidebar"},"How-to guides/How to create a dashboard":{"id":"How-to guides/How to create a dashboard","title":"How to create a dashboard","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to create a schema":{"id":"How-to guides/How to create a schema","title":"How to create a schema","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to create and use webhooks":{"id":"How-to guides/How to create and use webhooks","title":"How to Create and Use Webhooks","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to create developer API credentials":{"id":"How-to guides/How to create developer API credentials","title":"Developer API","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to debug communications coming from a device into the platform.":{"id":"How-to guides/How to debug communications coming from a device into the platform.","title":"How to debug communications coming from a device into the platform.","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to define alarm and triggers":{"id":"How-to guides/How to define alarm and triggers","title":"How to define alarm triggers","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to invite users":{"id":"How-to guides/How to invite users","title":"How to invite users","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to publish device data":{"id":"How-to guides/How to publish device data","title":"Publishing Device data","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to register devices":{"id":"How-to guides/How to register devices","title":"How to register devices","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to update device firmware":{"id":"How-to guides/How to update device firmware","title":"Update device firmware","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to use dashboard variables":{"id":"How-to guides/How to use dashboard variables","title":"How to use dashboard variables","description":"Introduction","sidebar":"tutorialSidebar"},"How-to guides/How to use organization management":{"id":"How-to guides/How to use organization management","title":"How to use organization management/general","description":"This interface allows you to manage and customize various aspects of your organization\'s presence and settings for the platform.","sidebar":"tutorialSidebar"},"How-to guides/How to use user settings":{"id":"How-to guides/How to use user settings","title":"How to use user settings","description":"To access your user settings in the Biotz platform, follow these steps:","sidebar":"tutorialSidebar"},"Reference guides/developer-api":{"id":"Reference guides/developer-api","title":"Developer API","description":"Developer API reference","sidebar":"tutorialSidebar"},"Reference guides/Glossary":{"id":"Reference guides/Glossary","title":"Glossary","description":"Device type: Biotz allows managing multiple different devices from the same account. \u201cTypes\u201d are a way of grouping those devices.","sidebar":"tutorialSidebar"},"Reference guides/Message-type Schema specification":{"id":"Reference guides/Message-type Schema specification","title":"Message-type Schema specification","description":"This is the specification for the schema of a message-type. The users will have to specify a device-type, with one or several message-types. Each message-type will have one or more schemas.","sidebar":"tutorialSidebar"},"Reference guides/MQTT broker":{"id":"Reference guides/MQTT broker","title":"MQTT Broker Reference","description":"Connection details","sidebar":"tutorialSidebar"},"Tutorials/Creating a biotz account":{"id":"Tutorials/Creating a biotz account","title":"Creating a biotz account","description":"User registration is not currently available for the public. Please contact us if you want to create an account.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Getting started":{"id":"Tutorials/Getting started/Getting started","title":"Getting started","description":"This tutorial offers a comprehensive guide on establishing a seamless data ingestion flow within the Biotz platform. The process involves a systematic sequence of 7 steps that entail configuring Biotz\'s core components. Through these steps, you\'ll initiate the transmission and ingestion of data. Notably, this tutorial eliminates the necessity for a physical device to complete the procedures; all tasks associated with data transmission and ingestion will be simulated, fostering an accessible and hands-on learning experience.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 1 - Creating a Device Type":{"id":"Tutorials/Getting started/Step 1 - Creating a Device Type","title":"Creating a Device Type","description":"Before we start sending and ingesting data you have to configure your Biotz account to be able to know who is sending data and how to process it. The first step is to create a Device Type, which will allow you to categorise your devices. Assuming you have signed in into the application, from the sidebar, in the Setup section, click on Device Type.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 2 - Creating a Message Type":{"id":"Tutorials/Getting started/Step 2 - Creating a Message Type","title":"Creating a Message Type","description":"As the name implies this is a type of message your device can send. If your device outputs different information structures, each of them would be a different Message Type. In this tutorial, you will create a single Message Type for the sake of simplicity. To do so, from the sidebar, in the Setup section, click on Data Ingestion Flow. You will be presented with the following page:","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 3 - Creating a Schema":{"id":"Tutorials/Getting started/Step 3 - Creating a Schema","title":"Creating a Schema","description":"Now that you have created a Message Type, you have to define the shape of the data for that Message Type. This is what is called Schemas in Biotz. Schemas are just the definition of the structure of what your device will send to the platform. This helps Biotz ingest and process your data effectively.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 4 - Creating a device":{"id":"Tutorials/Getting started/Step 4 - Creating a device","title":"Creating a device","description":"Before sending any data you need to register a device. To do so, from the sidebar, in the Device Management section, click on Devices. This will show up a list of devices. In the top right corner you click on New device. You will see the following form:","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 5 - Authenticating a device":{"id":"Tutorials/Getting started/Step 5 - Authenticating a device","title":"Authenticating a device","description":"In this tutorial, as said in the beginning, the data sending will be simulated. To do so, you will make an HTTP request to the http-forwarder service of Biotz which will, as the name implies, forward your data ingestion request to the competent services. That is the reason why you chose the HTTP communication protocol before when creating a message type.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 6 - Sending a data ingestion request":{"id":"Tutorials/Getting started/Step 6 - Sending a data ingestion request","title":"Sending a data ingestion request","description":"Now that you have a token from Biotz Identity Provider, it is time to send actual data to Biotz. In this tutorial, as said before, you will simulate a device sending data using the terminal. The approach is basically the same as to retrieve a token, just an HTTP request to the http-forwarder service. It will take your request and re-route it into a queue to be processed when the system is available.","sidebar":"tutorialSidebar"},"Tutorials/Getting started/Step 7 - Displaying the data":{"id":"Tutorials/Getting started/Step 7 - Displaying the data","title":"Displaying the data","description":"In order to display the data you will need to create a dashboard and a panel. A dashboard is a collection of panels. Each panel contains a specific query to display your data. You can also apply different customizations to the panel\'s appearance. However, the focus of this tutorial is to just display your newly ingested data. Bear in mind that the data you will display is a single point, if you have followed this tutorial. Displaying a single point is not very useful but the end goal is to learn how it works. So, later on when you create your real dashboard panels you have a good foundation to do so.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9fb72dca.8d34d322.js b/assets/js/9fb72dca.8d34d322.js new file mode 100644 index 0000000..157ed21 --- /dev/null +++ b/assets/js/9fb72dca.8d34d322.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkacademy=self.webpackChunkacademy||[]).push([[8837],{8813:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>r,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var n=s(4848),t=s(8453);const l={sidebar_position:3,sidebar_label:"Message-type Schema specification"},d="Message-type Schema specification",a={id:"Reference guides/Message-type Schema specification",title:"Message-type Schema specification",description:"This is the specification for the schema of a message-type. The users will have to specify a device-type, with one or several message-types. Each message-type will have one or more schemas.",source:"@site/docs/Reference guides/Message-type Schema specification.md",sourceDirName:"Reference guides",slug:"/Reference guides/Message-type Schema specification",permalink:"/docs/Reference guides/Message-type Schema specification",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Message-type Schema specification"},sidebar:"tutorialSidebar",previous:{title:"Glossary",permalink:"/docs/Reference guides/Glossary"},next:{title:"Developer API",permalink:"/docs/Reference guides/developer-api"}},r={},c=[{value:"Supported data types in Message-Types",id:"supported-data-types",level:2},{value:"Data types detailed specification",id:"data-types-detailed-specification",level:2},{value:"Unix timestamp, as integer",id:"unix-timestamp-as-integer",level:3},{value:"Examples",id:"examples",level:4},{value:"Unix timestamp, as text",id:"unix-timestamp-as-text",level:3},{value:"Examples",id:"examples-1",level:4},{value:"Unix timestamp RFC-3339",id:"unix-timestamp-rfc-3339",level:3},{value:"Examples",id:"examples-2",level:4},{value:"Integer",id:"integer",level:3},{value:"Examples",id:"examples-3",level:4},{value:"Integer, as text",id:"integer-as-text",level:3},{value:"Examples",id:"examples-4",level:4},{value:"Integer, as hexadecimal text",id:"integer-as-hexadecimal-text",level:3},{value:"Examples",id:"examples-5",level:4},{value:"Decimal",id:"decimal",level:3},{value:"Examples",id:"examples-6",level:4},{value:"Decimal, as text",id:"decimal-as-text",level:3},{value:"Examples",id:"examples-7",level:4},{value:"Text",id:"text",level:3},{value:"Examples",id:"examples-8",level:4},{value:"Boolean",id:"boolean",level:3},{value:"Examples",id:"examples-9",level:4},{value:"Boolean, as text",id:"boolean-as-text",level:3},{value:"Examples",id:"examples-10",level:4},{value:"Boolean, as integer",id:"boolean-as-integer",level:3},{value:"Examples",id:"examples-11",level:4},{value:"Object",id:"object",level:3},{value:"Examples",id:"examples-12",level:4},{value:"Collection of identical items",id:"collection-of-identical-items",level:3},{value:"Examples",id:"examples-13",level:4},{value:"Collection of unrelated items",id:"collection-of-unrelated-items",level:3},{value:"Examples",id:"examples-14",level:4},{value:"To discard",id:"to-discard",level:3}];function h(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"message-type-schema-specification",children:"Message-type Schema specification"}),"\n",(0,n.jsx)(i.p,{children:"This is the specification for the schema of a message-type. The users will have to specify a device-type, with one or several message-types. Each message-type will have one or more schemas."}),"\n",(0,n.jsx)(i.p,{children:"These schemas define the structure of the data that the device will be sending in each communication with Biotz. The definition provided during the schema creation in the web application is the one that will be used to validate the incoming data. Also, this will be used to structure the specific database schema for the data to be stored in a structured way."}),"\n",(0,n.jsx)(i.h2,{id:"supported-data-types",children:"Supported data types in Message-Types"}),"\n",(0,n.jsxs)(i.p,{children:["At the moment Biotz offers support for a subset of MessagePack data types that are compatible with the JSON format. See ",(0,n.jsx)(i.a,{href:"#data-types-detailed-specification",children:"Data types detailed specification"}),' below for additional details on each data type, or click on the individual data type names in the "Displayed in the UI" column.']}),"\n",(0,n.jsx)(i.p,{children:'The "DB Column Type" specifies the data type of the value stored in the database, once it has received and validated.'}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Displayed in UI"}),(0,n.jsxs)(i.th,{children:[(0,n.jsx)(i.a,{href:"https://json-schema.org/draft/2020-12/json-schema-core#name-instance-data-model",children:"JSON Schema"})," equivalent"]}),(0,n.jsxs)(i.th,{children:[(0,n.jsx)(i.a,{href:"https://msgpack.org/",children:"MessagePack"})," equivalent"]}),(0,n.jsx)(i.th,{children:"DB Column Type"}),(0,n.jsx)(i.th,{children:"Examples (in JSON syntax)"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#unix-timestamp-as-integer",children:"Unix timestamp, as integer"})}),(0,n.jsx)(i.td,{children:"number"}),(0,n.jsx)(i.td,{children:"int 64"}),(0,n.jsx)(i.td,{children:"timestamp"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"1712828630000"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#unix-timestamp-as-text",children:"Unix timestamp, as text"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"timestamp"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'"1712828630000"'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#unix-timestamp-rfc-3339",children:"Unix timestamp RFC-3339"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"timestamp"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'"2024-04-11T11:44:36.123Z"'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#integer",children:"Integer"})}),(0,n.jsx)(i.td,{children:"number"}),(0,n.jsx)(i.td,{children:"int 32"}),(0,n.jsx)(i.td,{children:"integer"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"12345678"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#integer-as-text",children:"Integer, as text"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"integer"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'"12345678"'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#integer-as-hexadecimal-text",children:"Integer, as hexadecimal text"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"integer"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'"3a2fbb589d"'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#decimal",children:"Decimal"})}),(0,n.jsx)(i.td,{children:"number"}),(0,n.jsx)(i.td,{children:"float 64"}),(0,n.jsx)(i.td,{children:"double"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:"12345.678"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#decimal-as-text",children:"Decimal, as text"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"double"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'"12345.678"'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#text",children:"Text"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"text"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'"Some value"'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#boolean",children:"Boolean"})}),(0,n.jsx)(i.td,{children:"boolean"}),(0,n.jsx)(i.td,{children:"bool"}),(0,n.jsx)(i.td,{children:"boolean"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:"true"}),", ",(0,n.jsx)(i.code,{children:"false"})]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#boolean-as-text",children:"Boolean, as text"})}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"string"}),(0,n.jsx)(i.td,{children:"boolean"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:'"true"'}),", ",(0,n.jsx)(i.code,{children:'"false"'})]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#boolean-as-integer",children:"Boolean, as integer"})}),(0,n.jsx)(i.td,{children:"number"}),(0,n.jsx)(i.td,{children:"int"}),(0,n.jsx)(i.td,{children:"boolean"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:"0"}),", ",(0,n.jsx)(i.code,{children:"1"})]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#object",children:"Object"})}),(0,n.jsx)(i.td,{children:"object"}),(0,n.jsx)(i.td,{children:"map"}),(0,n.jsx)(i.td,{children:"N/A"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'{"key1": 1, "key2": "val"}'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#collection-of-identical-items",children:"Collection of identical items"})}),(0,n.jsx)(i.td,{children:"array (all elements are of the same type)"}),(0,n.jsx)(i.td,{children:"array (all elements are of the same type)"}),(0,n.jsx)(i.td,{children:"N/A"}),(0,n.jsxs)(i.td,{children:[(0,n.jsx)(i.code,{children:"[1, 2, 3]"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(i.code,{children:'["a", "b", "c"]'})]})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#collection-of-unrelated-items",children:"Collection of unrelated items"})}),(0,n.jsx)(i.td,{children:"array (each elements can be of a different type)"}),(0,n.jsx)(i.td,{children:"array (each elements can be of a different type)"}),(0,n.jsx)(i.td,{children:"N/A"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.code,{children:'[1, "a", [2 3]]'})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"#to-discard",children:"To discard"})}),(0,n.jsx)(i.td,{children:"N/A"}),(0,n.jsx)(i.td,{children:"N/A"}),(0,n.jsx)(i.td,{children:"N/A"}),(0,n.jsx)(i.td,{children:"N/A"})]})]})]}),"\n",(0,n.jsx)(i.h2,{id:"data-types-detailed-specification",children:"Data types detailed specification"}),"\n",(0,n.jsxs)(i.p,{children:["The table shown in the ",(0,n.jsx)(i.a,{href:"#supported-data-types",children:"Supported data types in Message-Types"})," section only shows a brief summary of the different data types, including some basic examples to help intuit their main properties. But it lacks a detailed specification of the properties of each data type, and the constraints enforce by Biotz on those data types (if any). This section describes in greater detail, for each of the supported types, what those properties and constraints are."]}),"\n",(0,n.jsx)(i.h3,{id:"unix-timestamp-as-integer",children:"Unix timestamp, as integer"}),"\n",(0,n.jsxs)(i.p,{children:['Biotz "Unix timestamp as integer" data type is a ',(0,n.jsx)(i.strong,{children:"64"})," bits signed integer value (signed long). Be aware that if you are JSON as the data encoding method, the ",(0,n.jsx)(i.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER#description",children:"maximum and minimum integer values that can be safely represented"})," are smaller than what this data type supports."]}),"\n",(0,n.jsxs)(i.p,{children:["It is based on the ",(0,n.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Unix_time",children:"Unix time"})," concept (commonly called Unix timestamp), in that it measures an offset from the Unix epoch. But there are two important differences from the standard Unix timestamp definition:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:['The standard Unix timestamp uses the second as the unit of measure (although many systems allow fractions of seconds, if represented as a floating point number), while Biotz "Unix timestamp, as integer" uses milliseconds as the unit of measure. Thus the value ',(0,n.jsx)(i.code,{children:"12345"})," means 12345 seconds after the Unix epoch if using Standard Unix timestamps, but it means 1.2345 seconds after the epoch if using Biotz Unix timestamps."]}),"\n",(0,n.jsxs)(i.li,{children:["The standard Unix timestamp uses a 32 bits signed integer value, which means that it will roll over after 2038-01-19T03:14:07Z (known as the ",(0,n.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Year_2038_problem",children:"Year 2038 problem"}),'). Biotz "Unix timestamp, as integer", being 64 bits long, does not have such a problem even if the unit of measure is the millisecond.']}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["The value ",(0,n.jsx)(i.code,{children:"1705491207432"})," corresponds to the ",(0,n.jsx)(i.code,{children:"2024-01-17T12:33:27.432Z"})," date and time (expressed in ISO-8601 UTC format)."]}),"\n",(0,n.jsxs)(i.li,{children:["The value ",(0,n.jsx)(i.code,{children:"2456444847987"})," corresponds to the ",(0,n.jsx)(i.code,{children:"2047-11-04T02:47:27.987Z"})," date and time (again in ISO-8601 UTC)."]}),"\n",(0,n.jsxs)(i.li,{children:["The value ",(0,n.jsx)(i.code,{children:"-2119381953432"})," corresponds to the ",(0,n.jsx)(i.code,{children:"1902-11-04T02:47:27.432Z"})," date and time (again in ISO-8601 UTC)."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"unix-timestamp-as-text",children:"Unix timestamp, as text"}),"\n",(0,n.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Unix timestamp, as text" data type has the same properties as the ',(0,n.jsx)(i.a,{href:"#unix-timestamp-as-integer",children:"Unix timestamp, as integer"})," data type."]}),"\n",(0,n.jsxs)(i.p,{children:["The differences with the ",(0,n.jsx)(i.a,{href:"#unix-timestamp-as-integer",children:"Unix timestamp, as integer"})," data type are:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The value is represented as a string of decimal digits, instead of as an actual (64 bits) signed integer number."}),"\n",(0,n.jsx)(i.li,{children:"The value must represent a valid integer number. That is, an optional leading negative sign, followed by decimal digits only. With no leading or trailing white space."}),"\n",(0,n.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The minimum number of digits is 1."}),"\n",(0,n.jsx)(i.li,{children:"The maximum number of digits is 20."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.li,{children:"The represented value must fint in a 64 bits signed integer."}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples-1",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["The value ",(0,n.jsx)(i.code,{children:'"1705491207432"'})," corresponds to the ",(0,n.jsx)(i.code,{children:"2024-01-17T12:33:27.432Z"})," date and time (expressed in ISO-8601 UTC format)."]}),"\n",(0,n.jsxs)(i.li,{children:["The value ",(0,n.jsx)(i.code,{children:'"2456444847987"'})," corresponds to the ",(0,n.jsx)(i.code,{children:"2047-11-04T02:47:27.987Z"})," date and time (again in ISO-8601 UTC)."]}),"\n",(0,n.jsxs)(i.li,{children:["The value ",(0,n.jsx)(i.code,{children:'"-2119381953432"'})," corresponds to the ",(0,n.jsx)(i.code,{children:"1902-11-04T02:47:27.432Z"})," date and time (again in ISO-8601 UTC)."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"unix-timestamp-rfc-3339",children:"Unix timestamp RFC-3339"}),"\n",(0,n.jsxs)(i.p,{children:['Biotz "Unix timestamp RFC-3339" data type is a string value, whose content must conform to ',(0,n.jsx)(i.a,{href:"https://www.rfc-editor.org/rfc/rfc3339",children:"RFC-3339: Date and Time on the Internet: Timestamps"}),". In particular, it must comply with the ABNF grammar specified in ",(0,n.jsx)(i.a,{href:"https://www.rfc-editor.org/rfc/rfc3339#section-5.6",children:"Section 5.6: Internet Date/Time Format"}),". It must also comply with the restrictions stated ",(0,n.jsx)(i.a,{href:"https://www.rfc-editor.org/rfc/rfc3339#section-5.7",children:"Section 5.7: Restrictions"}),", with the additional restriction that ",(0,n.jsx)(i.code,{children:'"Z"'})," is the only ",(0,n.jsx)(i.code,{children:"time-offset"})," value accepted by Biotz. That is, only UTC time are accepted."]}),"\n",(0,n.jsx)(i.h4,{id:"examples-2",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"1985-04-12T23:20:50.52Z"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"2039-01-01T00:00:00Z"'})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"integer",children:"Integer"}),"\n",(0,n.jsx)(i.p,{children:"32 bits signed integers."}),"\n",(0,n.jsxs)(i.p,{children:['Biotz "Integer" data type is a ',(0,n.jsx)(i.strong,{children:"32"})," bits signed integer value (signed int). Thus, the minimum possible value is ",(0,n.jsx)(i.code,{children:"-2147483648"})," and the maximum possible value is ",(0,n.jsx)(i.code,{children:"2147483647"}),")."]}),"\n",(0,n.jsx)(i.h4,{id:"examples-3",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"123"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-34567"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-2147483648"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"2147483647"})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"integer-as-text",children:"Integer, as text"}),"\n",(0,n.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Integer, as text" data type has the same properties as the ',(0,n.jsx)(i.a,{href:"#integer",children:"Integer"})," data type."]}),"\n",(0,n.jsxs)(i.p,{children:["The differences with the ",(0,n.jsx)(i.a,{href:"#integer",children:"Integer"})," data type are:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The value is represented as a string of decimal digits, instead of as an actual (32 bits) signed integer number."}),"\n",(0,n.jsx)(i.li,{children:"The value must represent a valid integer number. That is, an optional leading negative sign, followed by decimal digits only. With no leading or trailing white space."}),"\n",(0,n.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The minimum number of digits is 1."}),"\n",(0,n.jsx)(i.li,{children:"The maximum number of digits is 10."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.li,{children:"The represented value must fit in a 32 bits signed integer value."}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples-4",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"123"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-34567"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-2147483648"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"2147483647"'})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"integer-as-hexadecimal-text",children:"Integer, as hexadecimal text"}),"\n",(0,n.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Integer, as hexadecimal text" data type has the same properties as the ',(0,n.jsx)(i.a,{href:"#integer",children:"Integer"})," data type."]}),"\n",(0,n.jsxs)(i.p,{children:["The differences with the ",(0,n.jsx)(i.a,{href:"#integer",children:"Integer"})," data type are:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The value is represented as a string of hexadecimal digits."}),"\n",(0,n.jsxs)(i.li,{children:["The value must represent a valid hexadecimal number. That is, an optional ",(0,n.jsx)(i.code,{children:"0x"})," prefix (using a lower case ",(0,n.jsx)(i.code,{children:"x"})," is mandatory), followed by hexadecimal digits only. With no leading or trailing white space. The hexadecimal can be upper or lower case."]}),"\n",(0,n.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The minimum number of hexadecimal digits is 1."}),"\n",(0,n.jsx)(i.li,{children:"The maximum number of hexadecimal digits is 8."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples-5",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0xaabbccdd"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"aabbccdd"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0xA"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"A"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"a"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0A"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0a"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0x1234aAbB"'})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"decimal",children:"Decimal"}),"\n",(0,n.jsxs)(i.p,{children:['Biotz "Decimal" data type is a ',(0,n.jsx)(i.code,{children:"binary64"})," (double precision) floating point value, as specified in the ",(0,n.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Double-precision_floating-point_format",children:"IEEE 754 standard"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"examples-6",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"0"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"3.1415936535"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-2.71828182823536"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-13."})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:".123456789"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"0.123456789e23"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:".123456789e23"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-0.123456789e-23"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-.123456789e-23"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"-13.e23"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"1234"})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"decimal-as-text",children:"Decimal, as text"}),"\n",(0,n.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Decimal, as text" data type has the same properties as the ',(0,n.jsx)(i.a,{href:"#decimal",children:"Decimal"})," data type."]}),"\n",(0,n.jsxs)(i.p,{children:["The differences with the ",(0,n.jsx)(i.a,{href:"#decimal",children:"Decimal"})," data type are:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The value is represented as a string of digits, with an optional sign, and optional fractional part"}),"\n",(0,n.jsx)(i.li,{children:"The value can only use decimal digits. Hexadecimal digits are not supported."}),"\n",(0,n.jsx)(i.li,{children:"The value must not contain leading or trailing white space."}),"\n",(0,n.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The maximum number of decimal digits for the fractional part is 18."}),"\n",(0,n.jsx)(i.li,{children:"The maximum number of decimal digits for the integral (non-fractional) part is 309."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples-7",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"3.1415936535"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-2.71828182823536"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-13."'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'".123456789"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"0.123456789e23"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'".123456789e23"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-0.123456789e-23"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-.123456789e-23"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"-13.e23"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"1234"'})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"text",children:"Text"}),"\n",(0,n.jsx)(i.p,{children:'Biotz "Text" data type is a string value, containing valid UTF-8 code points. The maximum length of the value is 256 Kilobytes.'}),"\n",(0,n.jsx)(i.h4,{id:"examples-8",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"This is a text value"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"Este tambi\xe9n es un texto v\xe1lido \xe1\xe9\xed\xf3\xfa\xe4\xeb\xef\xf6\xfc \ud83d\ude07\ud83d\udc69\ud83c\udf82 \xaf\\_(\u30c4)_/\xaf"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'""'})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"boolean",children:"Boolean"}),"\n",(0,n.jsx)(i.p,{children:'Biotz "Boolean" data type is the standard JSON or MessagePack boolean data type.'}),"\n",(0,n.jsx)(i.h4,{id:"examples-9",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"true"})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:"false"})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"boolean-as-text",children:"Boolean, as text"}),"\n",(0,n.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Boolean, as text" data type has the same properties as the ',(0,n.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type."]}),"\n",(0,n.jsxs)(i.p,{children:["The differences with the ",(0,n.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type are:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The value is represented as a string."}),"\n",(0,n.jsx)(i.li,{children:"The value must not contain leading or trailing white space."}),"\n",(0,n.jsxs)(i.li,{children:["The value must be either ",(0,n.jsx)(i.code,{children:'"true"'}),' or `"false". Lower case, upper case or mixed-case values are accepted.']}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples-10",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"true"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"false"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"True"'})}),"\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.code,{children:'"False"'})}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"boolean-as-integer",children:"Boolean, as integer"}),"\n",(0,n.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Boolean, as integer" data type has the same properties as the ',(0,n.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type."]}),"\n",(0,n.jsxs)(i.p,{children:["The differences with the ",(0,n.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type are:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The value is represented as a 32 bits signed integer value."}),"\n",(0,n.jsxs)(i.li,{children:["If the signed integer value is equal to 0, then it is considered ",(0,n.jsx)(i.code,{children:"false"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:["If the signed integer value is not equal to 0, then it is considered ",(0,n.jsx)(i.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,n.jsx)(i.h4,{id:"examples-11",children:"Examples"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"0"})," (considered ",(0,n.jsx)(i.code,{children:"false"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"000"})," (considered ",(0,n.jsx)(i.code,{children:"false"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"255"})," (considered ",(0,n.jsx)(i.code,{children:"true"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"-16384"})," (considered ",(0,n.jsx)(i.code,{children:"true"}),")"]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"object",children:"Object"}),"\n",(0,n.jsx)(i.p,{children:"Object / Map / Dictionary: They are containers of the final properties, as the Collections-related type. In this case, we only expect key-value pairs as children elements that are like following:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Keys can only be of type `String` (in order to give support for JSON serialization format)."}),"\n",(0,n.jsx)(i.li,{children:"Values cannot be of type `Collection of...` or `Object` type, as we do not support nesting properties in that way."}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Null values: we can handle them in any format to be transformed to `nil` Clojure values."}),"\n",(0,n.jsx)(i.h4,{id:"examples-12",children:"Examples"}),"\n",(0,n.jsx)(i.h3,{id:"collection-of-identical-items",children:"Collection of identical items"}),"\n",(0,n.jsxs)(i.p,{children:["This data type is similar to JSON and Message pack arrays. It is an ordered collection of items. But contrary to regular JSON and MessagePack arrays, a ",(0,n.jsx)(i.em,{children:"Collection of identical items"})," has some additional constraints enforced by Biotz:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:'The collection MUST contain a single item (we will call this item "the child item"); therefore it cannot be empty, and it cannot have more than one child item.'}),"\n",(0,n.jsxs)(i.li,{children:["The child item data type can only be either a ",(0,n.jsx)(i.a,{href:"#collection-of-unrelated-items",children:"Collection of unrelated items"}),", or an ",(0,n.jsx)(i.a,{href:"#object",children:"Object"})]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["This constraints may seem a bit strange at first sight. But the use case for this data type is actually quite widespread. If you have a device that measures and stores the same set of values (e.g., temperature and humidity for a given timestamp), and then sends a bunch of such values together as an array of maps, where all of those maps have the same set of key names (e.g, ",(0,n.jsx)(i.code,{children:'"timestamp"'}),", ",(0,n.jsx)(i.code,{children:'"temperature"'})," and ",(0,n.jsx)(i.code,{children:'"humidity"'}),"), then you need this data type."]}),"\n",(0,n.jsx)(i.h4,{id:"examples-13",children:"Examples"}),"\n",(0,n.jsx)(i.h3,{id:"collection-of-unrelated-items",children:"Collection of unrelated items"}),"\n",(0,n.jsx)(i.p,{children:"Collection of unrelated items: collection of any kind of item, present just once."}),"\n",(0,n.jsx)(i.h4,{id:"examples-14",children:"Examples"}),"\n",(0,n.jsx)(i.h3,{id:"to-discard",children:"To discard"}),"\n",(0,n.jsx)(i.p,{children:'Biotz "To discard" data type is a special data type. It does not impose any properties or constraints on the values that have this data assigned. In fact, the values that have this data type assigned are simply discarded (they not stored in the database at all), without even being looked at or checked. It is as if the messages from the devices neved had those values in the first place.'})]})}function o(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},8453:(e,i,s)=>{s.d(i,{R:()=>d,x:()=>a});var n=s(6540);const t={},l=n.createContext(t);function d(e){const i=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9fb72dca.9aa0193b.js b/assets/js/9fb72dca.9aa0193b.js deleted file mode 100644 index 6fac126..0000000 --- a/assets/js/9fb72dca.9aa0193b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkacademy=self.webpackChunkacademy||[]).push([[8837],{8813:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>a,default:()=>o,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var s=n(4848),t=n(8453);const l={sidebar_position:3,sidebar_label:"Message-type Schema specification"},a="Message-type Schema specification",d={id:"Reference guides/Message-type Schema specification",title:"Message-type Schema specification",description:"This is the specification for the schema of a message-type. The users will have to specify a device-type, with one to many message-type. Each message-type will have one to many schemas.",source:"@site/docs/Reference guides/Message-type Schema specification.md",sourceDirName:"Reference guides",slug:"/Reference guides/Message-type Schema specification",permalink:"/docs/Reference guides/Message-type Schema specification",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Message-type Schema specification"},sidebar:"tutorialSidebar",previous:{title:"Glossary",permalink:"/docs/Reference guides/Glossary"},next:{title:"Developer API",permalink:"/docs/Reference guides/developer-api"}},r={},c=[{value:"Supported data types in Message-Types",id:"supported-data-types",level:2},{value:"Data types detailed specification",id:"data-types-detailed-specification",level:2},{value:"Unix timestamp, as integer",id:"unix-timestamp-as-integer",level:3},{value:"Examples",id:"examples",level:4},{value:"Unix timestamp, as text",id:"unix-timestamp-as-text",level:3},{value:"Examples",id:"examples-1",level:4},{value:"Unix timestamp RFC-3339",id:"unix-timestamp-rfc-3339",level:3},{value:"Examples",id:"examples-2",level:4},{value:"Integer",id:"integer",level:3},{value:"Examples",id:"examples-3",level:4},{value:"Integer, as text",id:"integer-as-text",level:3},{value:"Examples",id:"examples-4",level:4},{value:"Integer, as hexadecimal text",id:"integer-as-hexadecimal-text",level:3},{value:"Examples",id:"examples-5",level:4},{value:"Decimal",id:"decimal",level:3},{value:"Examples",id:"examples-6",level:4},{value:"Decimal, as text",id:"decimal-as-text",level:3},{value:"Examples",id:"examples-7",level:4},{value:"Text",id:"text",level:3},{value:"Examples",id:"examples-8",level:4},{value:"Boolean",id:"boolean",level:3},{value:"Examples",id:"examples-9",level:4},{value:"Boolean, as text",id:"boolean-as-text",level:3},{value:"Examples",id:"examples-10",level:4},{value:"Boolean, as integer",id:"boolean-as-integer",level:3},{value:"Examples",id:"examples-11",level:4},{value:"Object",id:"object",level:3},{value:"Examples",id:"examples-12",level:4},{value:"Collection of identical items",id:"collection-of-identical-items",level:3},{value:"Examples",id:"examples-13",level:4},{value:"Collection of unrelated items",id:"collection-of-unrelated-items",level:3},{value:"Examples",id:"examples-14",level:4}];function h(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"message-type-schema-specification",children:"Message-type Schema specification"}),"\n",(0,s.jsx)(i.p,{children:"This is the specification for the schema of a message-type. The users will have to specify a device-type, with one to many message-type. Each message-type will have one to many schemas."}),"\n",(0,s.jsx)(i.p,{children:"This schema is the structure of the data that the device will be sending in each communication with Biotz. The definition provided in the schema creation in the web application is the one used to validate the incoming data. Also, this will be used to structure the specific database schema for the data to be stored in a structured way."}),"\n",(0,s.jsx)(i.h2,{id:"supported-data-types",children:"Supported data types in Message-Types"}),"\n",(0,s.jsxs)(i.p,{children:["At the moment Biotz offers support to a subset of MessagePack data types that are compatible with JSON format. See ",(0,s.jsx)(i.a,{href:"#data-types-detailed-specification",children:"Data types detailed specification"}),' below for additional details on each data type, or click on the individual data type names in the "Displayed in the UI" column.']}),"\n",(0,s.jsx)(i.p,{children:'The "DB Column Type" specifies the data type of the value stored in the database, once it has received and validated.'}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Displayed in UI"}),(0,s.jsxs)(i.th,{children:[(0,s.jsx)(i.a,{href:"https://json-schema.org/draft/2020-12/json-schema-core#name-instance-data-model",children:"JSON Schema"})," equivalent"]}),(0,s.jsxs)(i.th,{children:[(0,s.jsx)(i.a,{href:"https://msgpack.org/",children:"MessagePack"})," equivalent"]}),(0,s.jsx)(i.th,{children:"DB Column Type"}),(0,s.jsx)(i.th,{children:"Examples (in JSON syntax)"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#unix-timestamp-as-integer",children:"Unix timestamp, as integer"})}),(0,s.jsx)(i.td,{children:"number"}),(0,s.jsx)(i.td,{children:"int 64"}),(0,s.jsx)(i.td,{children:"timestamp"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"1712828630000"})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#unix-timestamp-as-text",children:"Unix timestamp, as text"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"timestamp"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"1712828630000"'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#unix-timestamp-rfc-3339",children:"Unix timestamp RFC-3339"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"timestamp"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"2024-04-11T11:44:36.123Z"'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#integer",children:"Integer"})}),(0,s.jsx)(i.td,{children:"number"}),(0,s.jsx)(i.td,{children:"int 32"}),(0,s.jsx)(i.td,{children:"integer"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"12345678"})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#integer-as-text",children:"Integer, as text"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"integer"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"12345678"'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#integer-as-hexadecimal-text",children:"Integer, as hexadecimal text"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"integer"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"3a2fbb589d"'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#decimal",children:"Decimal"})}),(0,s.jsx)(i.td,{children:"number"}),(0,s.jsx)(i.td,{children:"float 64"}),(0,s.jsx)(i.td,{children:"double"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"12345.678"})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#decimal-as-text",children:"Decimal, as text"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"double"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"12345.678"'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#text",children:"Text"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"text"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'"Some value"'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#boolean",children:"Boolean"})}),(0,s.jsx)(i.td,{children:"boolean"}),(0,s.jsx)(i.td,{children:"bool"}),(0,s.jsx)(i.td,{children:"boolean"}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.code,{children:"true"}),", ",(0,s.jsx)(i.code,{children:"false"})]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#boolean-as-text",children:"Boolean, as text"})}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"string"}),(0,s.jsx)(i.td,{children:"boolean"}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.code,{children:'"true"'}),", ",(0,s.jsx)(i.code,{children:'"false"'})]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#boolean-as-integer",children:"Boolean, as integer"})}),(0,s.jsx)(i.td,{children:"number"}),(0,s.jsx)(i.td,{children:"int"}),(0,s.jsx)(i.td,{children:"boolean"}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.code,{children:"0"}),", ",(0,s.jsx)(i.code,{children:"1"})]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#object",children:"Object"})}),(0,s.jsx)(i.td,{children:"object"}),(0,s.jsx)(i.td,{children:"map"}),(0,s.jsx)(i.td,{children:"N/A"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'{"key1": 1, "key2": "val"}'})})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#collection-of-identical-items",children:"Collection of identical items"})}),(0,s.jsx)(i.td,{children:"array (all elements are of the same type)"}),(0,s.jsx)(i.td,{children:"array (all elements are of the same type)"}),(0,s.jsx)(i.td,{children:"N/A"}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.code,{children:"[1, 2, 3]"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(i.code,{children:'["a", "b", "c"]'})]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.a,{href:"#collection-of-unrelated-items",children:"Collection of unrelated items"})}),(0,s.jsx)(i.td,{children:"array (each elements can be of a different type)"}),(0,s.jsx)(i.td,{children:"array (each elements can be of a different type)"}),(0,s.jsx)(i.td,{children:"N/A"}),(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:'[1, "a", [2 3]]'})})]})]})]}),"\n",(0,s.jsx)(i.h2,{id:"data-types-detailed-specification",children:"Data types detailed specification"}),"\n",(0,s.jsxs)(i.p,{children:["The table shown in the ",(0,s.jsx)(i.a,{href:"#supported-data-types",children:"Supported data types in Message-Types"})," section only shows a brief summary of the different data types, including some basic examples to help intuit their main properties. But it lacks a detailed specification of the properties of each data type, and the constraints enforce by Biotz on those data types (if any). This section describes in greater detail, for each of the supported types, what those properties and constraints are."]}),"\n",(0,s.jsx)(i.h3,{id:"unix-timestamp-as-integer",children:"Unix timestamp, as integer"}),"\n",(0,s.jsxs)(i.p,{children:['Biotz "Unix timestamp as integer" data type is a ',(0,s.jsx)(i.strong,{children:"64"})," bits signed integer value (signed long). Be aware that if you are JSON as the data encoding method, the ",(0,s.jsx)(i.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER#description",children:"maximum and minimum integer values that can be safely represented"})," are smaller than what this data type supports."]}),"\n",(0,s.jsxs)(i.p,{children:["It is based on the ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Unix_time",children:"Unix time"})," concept (commonly called Unix timestamp), in that it measures an offset from the Unix epoch. But there are two important differences from the standard Unix timestamp definition:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:['The standard Unix timestamp uses the second as the unit of measure (although many systems allow fractions of seconds, if represented as a floating point number), while Biotz "Unix timestamp, as integer" uses milliseconds as the unit of measure. Thus the value ',(0,s.jsx)(i.code,{children:"12345"})," means 12345 seconds after the Unix epoch if using Standard Unix timestamps, but it means 1.2345 seconds after the epoch if using Biotz Unix timestamps."]}),"\n",(0,s.jsxs)(i.li,{children:["The standard Unix timestamp uses a 32 bits signed integer value, which means that it will roll over after 2038-01-19T03:14:07Z (known as the ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Year_2038_problem",children:"Year 2038 problem"}),'). Biotz "Unix timestamp, as integer", being 64 bits long, does not have such a problem even if the unit of measure is the millisecond.']}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The value ",(0,s.jsx)(i.code,{children:"1705491207432"})," corresponds to the ",(0,s.jsx)(i.code,{children:"2024-01-17T12:33:27.432Z"})," date and time (expressed in ISO-8601 UTC format)."]}),"\n",(0,s.jsxs)(i.li,{children:["The value ",(0,s.jsx)(i.code,{children:"2456444847987"})," corresponds to the ",(0,s.jsx)(i.code,{children:"2047-11-04T02:47:27.987Z"})," date and time (again in ISO-8601 UTC)."]}),"\n",(0,s.jsxs)(i.li,{children:["The value ",(0,s.jsx)(i.code,{children:"-2119381953432"})," corresponds to the ",(0,s.jsx)(i.code,{children:"1902-11-04T02:47:27.432Z"})," date and time (again in ISO-8601 UTC)."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"unix-timestamp-as-text",children:"Unix timestamp, as text"}),"\n",(0,s.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Unix timestamp, as text" data type has the same properties as the ',(0,s.jsx)(i.a,{href:"#unix-timestamp-as-integer",children:"Unix timestamp, as integer"})," data type."]}),"\n",(0,s.jsxs)(i.p,{children:["The differences with the ",(0,s.jsx)(i.a,{href:"#unix-timestamp-as-integer",children:"Unix timestamp, as integer"})," data type are:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The value is represented as a string of decimal digits, instead of as an actual (64 bits) signed integer number."}),"\n",(0,s.jsx)(i.li,{children:"The value must represent a valid integer number. That is, an optional leading negative sign, followed by decimal digits only. With no leading or trailing white space."}),"\n",(0,s.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The minimum number of digits is 1."}),"\n",(0,s.jsx)(i.li,{children:"The maximum number of digits is 20."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.li,{children:"The represented value must fint in a 64 bits signed integer."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples-1",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The value ",(0,s.jsx)(i.code,{children:'"1705491207432"'})," corresponds to the ",(0,s.jsx)(i.code,{children:"2024-01-17T12:33:27.432Z"})," date and time (expressed in ISO-8601 UTC format)."]}),"\n",(0,s.jsxs)(i.li,{children:["The value ",(0,s.jsx)(i.code,{children:'"2456444847987"'})," corresponds to the ",(0,s.jsx)(i.code,{children:"2047-11-04T02:47:27.987Z"})," date and time (again in ISO-8601 UTC)."]}),"\n",(0,s.jsxs)(i.li,{children:["The value ",(0,s.jsx)(i.code,{children:'"-2119381953432"'})," corresponds to the ",(0,s.jsx)(i.code,{children:"1902-11-04T02:47:27.432Z"})," date and time (again in ISO-8601 UTC)."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"unix-timestamp-rfc-3339",children:"Unix timestamp RFC-3339"}),"\n",(0,s.jsxs)(i.p,{children:['Biotz "Unix timestamp RFC-3339" data type is a string value, whose content must conform to ',(0,s.jsx)(i.a,{href:"https://www.rfc-editor.org/rfc/rfc3339",children:"RFC-3339: Date and Time on the Internet: Timestamps"}),". In particular, it must comply with the ABNF grammar specified in ",(0,s.jsx)(i.a,{href:"https://www.rfc-editor.org/rfc/rfc3339#section-5.6",children:"Section 5.6: Internet Date/Time Format"}),". It must also comply with the restrictions stated ",(0,s.jsx)(i.a,{href:"https://www.rfc-editor.org/rfc/rfc3339#section-5.7",children:"Section 5.7: Restrictions"}),", with the additional restriction that ",(0,s.jsx)(i.code,{children:'"Z"'})," is the only ",(0,s.jsx)(i.code,{children:"time-offset"})," value accepted by Biotz. That is, only UTC time are accepted."]}),"\n",(0,s.jsx)(i.h4,{id:"examples-2",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"1985-04-12T23:20:50.52Z"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"2039-01-01T00:00:00Z"'})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"integer",children:"Integer"}),"\n",(0,s.jsx)(i.p,{children:"32 bits signed integers."}),"\n",(0,s.jsxs)(i.p,{children:['Biotz "Integer" data type is a ',(0,s.jsx)(i.strong,{children:"32"})," bits signed integer value (signed int). Thus, the minimum possible value is ",(0,s.jsx)(i.code,{children:"-2147483648"})," and the maximum possible value is ",(0,s.jsx)(i.code,{children:"2147483647"}),")."]}),"\n",(0,s.jsx)(i.h4,{id:"examples-3",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"123"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-34567"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-2147483648"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"2147483647"})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"integer-as-text",children:"Integer, as text"}),"\n",(0,s.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Integer, as text" data type has the same properties as the ',(0,s.jsx)(i.a,{href:"#integer",children:"Integer"})," data type."]}),"\n",(0,s.jsxs)(i.p,{children:["The differences with the ",(0,s.jsx)(i.a,{href:"#integer",children:"Integer"})," data type are:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The value is represented as a string of decimal digits, instead of as an actual (32 bits) signed integer number."}),"\n",(0,s.jsx)(i.li,{children:"The value must represent a valid integer number. That is, an optional leading negative sign, followed by decimal digits only. With no leading or trailing white space."}),"\n",(0,s.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The minimum number of digits is 1."}),"\n",(0,s.jsx)(i.li,{children:"The maximum number of digits is 10."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.li,{children:"The represented value must fit in a 32 bits signed integer value."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples-4",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"123"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-34567"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-2147483648"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"2147483647"'})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"integer-as-hexadecimal-text",children:"Integer, as hexadecimal text"}),"\n",(0,s.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Integer, as hexadecimal text" data type has the same properties as the ',(0,s.jsx)(i.a,{href:"#integer",children:"Integer"})," data type."]}),"\n",(0,s.jsxs)(i.p,{children:["The differences with the ",(0,s.jsx)(i.a,{href:"#integer",children:"Integer"})," data type are:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The value is represented as a string of hexadecimal digits."}),"\n",(0,s.jsxs)(i.li,{children:["The value must represent a valid hexadecimal number. That is, an optional ",(0,s.jsx)(i.code,{children:"0x"})," prefix (using a lower case ",(0,s.jsx)(i.code,{children:"x"})," is mandatory), followed by hexadecimal digits only. With no leading or trailing white space. The hexadecimal can be upper or lower case."]}),"\n",(0,s.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The minimum number of hexadecimal digits is 1."}),"\n",(0,s.jsx)(i.li,{children:"The maximum number of hexadecimal digits is 8."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples-5",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0xaabbccdd"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"aabbccdd"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0xA"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"A"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"a"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0A"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0a"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0x1234aAbB"'})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"decimal",children:"Decimal"}),"\n",(0,s.jsxs)(i.p,{children:['Biotz "Decimal" data type is a ',(0,s.jsx)(i.code,{children:"binary64"})," (double precision) floating point value, as specified in the ",(0,s.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Double-precision_floating-point_format",children:"IEEE 754 standard"}),"."]}),"\n",(0,s.jsx)(i.h4,{id:"examples-6",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"0"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"3.1415936535"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-2.71828182823536"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-13."})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:".123456789"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"0.123456789e23"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:".123456789e23"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-0.123456789e-23"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-.123456789e-23"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"-13.e23"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"1234"})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"decimal-as-text",children:"Decimal, as text"}),"\n",(0,s.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Decimal, as text" data type has the same properties as the ',(0,s.jsx)(i.a,{href:"#decimal",children:"Decimal"})," data type."]}),"\n",(0,s.jsxs)(i.p,{children:["The differences with the ",(0,s.jsx)(i.a,{href:"#decimal",children:"Decimal"})," data type are:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The value is represented as a string of digits, with an optional sign, and optional fractional part"}),"\n",(0,s.jsx)(i.li,{children:"The value can only use decimal digits. Hexadecimal digits are not supported."}),"\n",(0,s.jsx)(i.li,{children:"The value must not contain leading or trailing white space."}),"\n",(0,s.jsxs)(i.li,{children:["There are limits on the minimum and maximum number of digits that the value can use:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The maximum number of decimal digits for the fractional part is 18."}),"\n",(0,s.jsx)(i.li,{children:"The maximum number of decimal digits for the integral (non-fractional) part is 309."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples-7",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"3.1415936535"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-2.71828182823536"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-13."'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'".123456789"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"0.123456789e23"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'".123456789e23"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-0.123456789e-23"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-.123456789e-23"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"-13.e23"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"1234"'})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"text",children:"Text"}),"\n",(0,s.jsx)(i.p,{children:'Biotz "Text" data type is a string value, containing valid UTF-8 code points. The maximum length of the value is 256 Kilobytes.'}),"\n",(0,s.jsx)(i.h4,{id:"examples-8",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"This is a text value"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"Este tambi\xe9n es un texto v\xe1lido \xe1\xe9\xed\xf3\xfa\xe4\xeb\xef\xf6\xfc \ud83d\ude07\ud83d\udc69\ud83c\udf82 \xaf\\_(\u30c4)_/\xaf"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'""'})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"boolean",children:"Boolean"}),"\n",(0,s.jsx)(i.p,{children:'Biotz "Boolean" data type is the standard JSON or MessagePack boolean data type.'}),"\n",(0,s.jsx)(i.h4,{id:"examples-9",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"true"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"false"})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"boolean-as-text",children:"Boolean, as text"}),"\n",(0,s.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Boolean, as text" data type has the same properties as the ',(0,s.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type."]}),"\n",(0,s.jsxs)(i.p,{children:["The differences with the ",(0,s.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type are:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The value is represented as a string."}),"\n",(0,s.jsx)(i.li,{children:"The value must not contain leading or trailing white space."}),"\n",(0,s.jsxs)(i.li,{children:["The value must be either ",(0,s.jsx)(i.code,{children:'"true"'}),' or `"false". Lower case, upper case or mixed-case values are accepted.']}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples-10",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"true"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"false"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"True"'})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:'"False"'})}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"boolean-as-integer",children:"Boolean, as integer"}),"\n",(0,s.jsxs)(i.p,{children:['Except for the differences noted below, Biotz "Boolean, as integer" data type has the same properties as the ',(0,s.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type."]}),"\n",(0,s.jsxs)(i.p,{children:["The differences with the ",(0,s.jsx)(i.a,{href:"#boolean",children:"Boolean"})," data type are:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"The value is represented as a 32 bits signed integer value."}),"\n",(0,s.jsxs)(i.li,{children:["If the signed integer value is equal to 0, then it is considered ",(0,s.jsx)(i.code,{children:"false"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["If the signed integer value is not equal to 0, then it is considered ",(0,s.jsx)(i.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"examples-11",children:"Examples"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"0"})," (considered ",(0,s.jsx)(i.code,{children:"false"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"000"})," (considered ",(0,s.jsx)(i.code,{children:"false"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"255"})," (considered ",(0,s.jsx)(i.code,{children:"true"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"-16384"})," (considered ",(0,s.jsx)(i.code,{children:"true"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"object",children:"Object"}),"\n",(0,s.jsx)(i.p,{children:"Object / Map / Dictionary: They are containers of the final properties, as the Collections-related type. In this case, we only expect key-value pairs as children elements that are like following:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Keys can only be of type `String` (in order to give support for JSON serialization format)."}),"\n",(0,s.jsx)(i.li,{children:"Values cannot be of type `Collection of...` or `Object` type, as we do not support nesting properties in that way."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Null values: we can handle them in any format to be transformed to `nil` Clojure values."}),"\n",(0,s.jsx)(i.h4,{id:"examples-12",children:"Examples"}),"\n",(0,s.jsx)(i.h3,{id:"collection-of-identical-items",children:"Collection of identical items"}),"\n",(0,s.jsxs)(i.p,{children:["This data type is similar to JSON and Message pack arrays. It is an ordered collection of items. But contrary to regular JSON and MessagePack arrays, a ",(0,s.jsx)(i.em,{children:"Collection of identical items"})," has some additional constraints enforced by Biotz:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:'The collection MUST contain a single item (we will call this item "the child item"); therefore it cannot be empty, and it cannot have more than one child item.'}),"\n",(0,s.jsxs)(i.li,{children:["The child item data type can only be either a ",(0,s.jsx)(i.a,{href:"#collection-of-unrelated-items",children:"Collection of unrelated items"}),", or an ",(0,s.jsx)(i.a,{href:"#object",children:"Object"})]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["This constraints may seem a bit strange at first sight. But the use case for this data type is actually quite widespread. If you have a device that measures and stores the same set of values (e.g., temperature and humidity for a given timestamp), and then sends a bunch of such values together as an array of maps, where all of those maps have the same set of key names (e.g, ",(0,s.jsx)(i.code,{children:'"timestamp"'}),", ",(0,s.jsx)(i.code,{children:'"temperature"'})," and ",(0,s.jsx)(i.code,{children:'"humidity"'}),"), then you need this data type."]}),"\n",(0,s.jsx)(i.h4,{id:"examples-13",children:"Examples"}),"\n",(0,s.jsx)(i.h3,{id:"collection-of-unrelated-items",children:"Collection of unrelated items"}),"\n",(0,s.jsx)(i.p,{children:"Collection of unrelated items: collection of any kind of item, present just once."}),"\n",(0,s.jsx)(i.h4,{id:"examples-14",children:"Examples"})]})}function o(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},8453:(e,i,n)=>{n.d(i,{R:()=>a,x:()=>d});var s=n(6540);const t={},l=s.createContext(t);function a(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.93f5bd7c.js b/assets/js/runtime~main.93f5bd7c.js new file mode 100644 index 0000000..53b6302 --- /dev/null +++ b/assets/js/runtime~main.93f5bd7c.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,f,t,c,r={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var f=b[e]={exports:{}};return r[e].call(f.exports,f,f.exports,d),f.exports}d.m=r,e=[],d.O=(a,f,t,c)=>{if(!f){var r=1/0;for(i=0;i=c)&&Object.keys(d.O).every((e=>d.O[e](f[o])))?f.splice(o--,1):(b=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,t,c]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var r={};a=a||[null,f({}),f([]),f(f)];for(var b=2&t&&e;"object"==typeof b&&!~a.indexOf(b);b=f(b))Object.getOwnPropertyNames(b).forEach((a=>r[a]=()=>e[a]));return r.default=()=>e,d.d(c,r),c},d.d=(e,a)=>{for(var f in a)d.o(a,f)&&!d.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,f)=>(d.f[f](e,a),a)),[])),d.u=e=>"assets/js/"+({635:"b9a9e23a",748:"94375d41",1471:"de5aeb7c",1563:"e72b9bb3",1943:"519f47fb",1981:"1be0d2c3",2710:"e829bf52",2741:"8ebf884c",2750:"356a0ac6",3093:"3f776845",3338:"b5796db6",3438:"fbacb533",3473:"3c01fd32",3488:"8cb4ad27",3576:"3987870c",3590:"578ed02f",3832:"8f9e59a2",3925:"35f8ffce",4224:"a5caed1a",4246:"f59d81ac",4300:"4cd738bd",4502:"4a070847",4541:"c4c20b15",4583:"1df93b7f",4712:"842fc954",4972:"bde2094a",5331:"c16f5663",5794:"303209e1",5968:"15c5b2e6",6061:"1f391b9e",6085:"0bffd00d",6246:"498d4d26",6271:"ffd52dfa",6363:"f5546e3f",6583:"a165d0ef",6759:"f9aaae36",6875:"f760b48e",6969:"14eb3368",7098:"a7bd4aaa",8401:"17896441",8581:"935f2afb",8767:"142bacfa",8837:"9fb72dca",8962:"4f6f0beb",9048:"a94703ab",9118:"ca79eafe",9312:"602b5c67",9476:"4ac74e3d",9647:"5e95c892",9789:"0b2296e6",9814:"75a8a8f3"}[e]||e)+"."+{635:"0715ae2a",748:"58b4f9bf",1471:"d8e470f0",1563:"90121d29",1943:"4530d296",1981:"35e761f5",2237:"29ed07f9",2674:"862bdbf7",2710:"58752515",2741:"c2e474fa",2750:"b39a960b",3093:"3ae09d59",3338:"fe390bd2",3438:"e8c76029",3473:"6488b8bc",3488:"5e81d9b8",3576:"c97af649",3590:"bdaf91c1",3832:"c87ee121",3925:"96eeaa2a",4224:"02237783",4246:"1e53bf09",4300:"ac79276c",4502:"b49cf986",4541:"793e55b2",4583:"b93928f5",4712:"342fe709",4972:"e94c9456",5331:"4338ba60",5794:"23241189",5968:"571daa57",6061:"80ff34b9",6085:"094c78b4",6246:"e6624154",6271:"98e8f274",6363:"a908af2c",6583:"8616763f",6759:"f7588003",6875:"6860c039",6969:"9f439c7c",7098:"b2fb0e4e",8401:"817d95ee",8581:"18285eb2",8767:"c1bf57ef",8837:"8d34d322",8962:"9af595e2",9048:"d2a4c9ab",9118:"585b4089",9312:"502d2d43",9476:"a9595a26",9647:"1ae668ac",9789:"3da892e9",9814:"473e0a69"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},c="academy:",d.l=(e,a,f,r)=>{if(t[e])t[e].push(a);else{var b,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var c=t[e];if(delete t[e],b.parentNode&&b.parentNode.removeChild(b),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"8401",b9a9e23a:"635","94375d41":"748",de5aeb7c:"1471",e72b9bb3:"1563","519f47fb":"1943","1be0d2c3":"1981",e829bf52:"2710","8ebf884c":"2741","356a0ac6":"2750","3f776845":"3093",b5796db6:"3338",fbacb533:"3438","3c01fd32":"3473","8cb4ad27":"3488","3987870c":"3576","578ed02f":"3590","8f9e59a2":"3832","35f8ffce":"3925",a5caed1a:"4224",f59d81ac:"4246","4cd738bd":"4300","4a070847":"4502",c4c20b15:"4541","1df93b7f":"4583","842fc954":"4712",bde2094a:"4972",c16f5663:"5331","303209e1":"5794","15c5b2e6":"5968","1f391b9e":"6061","0bffd00d":"6085","498d4d26":"6246",ffd52dfa:"6271",f5546e3f:"6363",a165d0ef:"6583",f9aaae36:"6759",f760b48e:"6875","14eb3368":"6969",a7bd4aaa:"7098","935f2afb":"8581","142bacfa":"8767","9fb72dca":"8837","4f6f0beb":"8962",a94703ab:"9048",ca79eafe:"9118","602b5c67":"9312","4ac74e3d":"9476","5e95c892":"9647","0b2296e6":"9789","75a8a8f3":"9814"}[e]||e,d.p+d.u(e)},(()=>{var e={5354:0,1869:0};d.f.j=(a,f)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)f.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>t=e[a]=[f,c]));f.push(t[2]=c);var r=d.p+d.u(a),b=new Error;d.l(r,(f=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var c=f&&("load"===f.type?"missing":f.type),r=f&&f.target&&f.target.src;b.message="Loading chunk "+a+" failed.\n("+c+": "+r+")",b.name="ChunkLoadError",b.type=c,b.request=r,t[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,f)=>{var t,c,r=f[0],b=f[1],o=f[2],n=0;if(r.some((a=>0!==e[a]))){for(t in b)d.o(b,t)&&(d.m[t]=b[t]);if(o)var i=o(d)}for(a&&a(f);n{"use strict";var e,a,f,t,r,c={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var f=d[e]={exports:{}};return c[e].call(f.exports,f,f.exports,b),f.exports}b.m=c,e=[],b.O=(a,f,t,r)=>{if(!f){var c=1/0;for(i=0;i=r)&&Object.keys(b.O).every((e=>b.O[e](f[o])))?f.splice(o--,1):(d=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[f,t,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var c={};a=a||[null,f({}),f([]),f(f)];for(var d=2&t&&e;"object"==typeof d&&!~a.indexOf(d);d=f(d))Object.getOwnPropertyNames(d).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(r,c),r},b.d=(e,a)=>{for(var f in a)b.o(a,f)&&!b.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,f)=>(b.f[f](e,a),a)),[])),b.u=e=>"assets/js/"+({635:"b9a9e23a",748:"94375d41",1471:"de5aeb7c",1563:"e72b9bb3",1943:"519f47fb",1981:"1be0d2c3",2710:"e829bf52",2741:"8ebf884c",2750:"356a0ac6",3093:"3f776845",3338:"b5796db6",3438:"fbacb533",3473:"3c01fd32",3488:"8cb4ad27",3576:"3987870c",3590:"578ed02f",3832:"8f9e59a2",3925:"35f8ffce",4224:"a5caed1a",4246:"f59d81ac",4300:"4cd738bd",4502:"4a070847",4541:"c4c20b15",4583:"1df93b7f",4712:"842fc954",4972:"bde2094a",5331:"c16f5663",5794:"303209e1",5968:"15c5b2e6",6061:"1f391b9e",6085:"0bffd00d",6246:"498d4d26",6271:"ffd52dfa",6363:"f5546e3f",6583:"a165d0ef",6759:"f9aaae36",6875:"f760b48e",6969:"14eb3368",7098:"a7bd4aaa",8401:"17896441",8581:"935f2afb",8767:"142bacfa",8837:"9fb72dca",8962:"4f6f0beb",9048:"a94703ab",9118:"ca79eafe",9312:"602b5c67",9476:"4ac74e3d",9647:"5e95c892",9789:"0b2296e6",9814:"75a8a8f3"}[e]||e)+"."+{635:"0715ae2a",748:"58b4f9bf",1471:"d8e470f0",1563:"90121d29",1943:"4530d296",1981:"35e761f5",2237:"29ed07f9",2674:"862bdbf7",2710:"58752515",2741:"c2e474fa",2750:"b39a960b",3093:"3ae09d59",3338:"fe390bd2",3438:"e8c76029",3473:"6488b8bc",3488:"5e81d9b8",3576:"c97af649",3590:"bdaf91c1",3832:"c87ee121",3925:"96eeaa2a",4224:"02237783",4246:"1e53bf09",4300:"ac79276c",4502:"b49cf986",4541:"793e55b2",4583:"b93928f5",4712:"342fe709",4972:"e94c9456",5331:"4338ba60",5794:"23241189",5968:"571daa57",6061:"80ff34b9",6085:"094c78b4",6246:"e6624154",6271:"98e8f274",6363:"a908af2c",6583:"8616763f",6759:"f7588003",6875:"6860c039",6969:"9f439c7c",7098:"b2fb0e4e",8401:"817d95ee",8581:"bdfc3058",8767:"c1bf57ef",8837:"9aa0193b",8962:"9af595e2",9048:"d2a4c9ab",9118:"585b4089",9312:"502d2d43",9476:"a9595a26",9647:"1ae668ac",9789:"3da892e9",9814:"473e0a69"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},r="academy:",b.l=(e,a,f,c)=>{if(t[e])t[e].push(a);else{var d,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var r=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"8401",b9a9e23a:"635","94375d41":"748",de5aeb7c:"1471",e72b9bb3:"1563","519f47fb":"1943","1be0d2c3":"1981",e829bf52:"2710","8ebf884c":"2741","356a0ac6":"2750","3f776845":"3093",b5796db6:"3338",fbacb533:"3438","3c01fd32":"3473","8cb4ad27":"3488","3987870c":"3576","578ed02f":"3590","8f9e59a2":"3832","35f8ffce":"3925",a5caed1a:"4224",f59d81ac:"4246","4cd738bd":"4300","4a070847":"4502",c4c20b15:"4541","1df93b7f":"4583","842fc954":"4712",bde2094a:"4972",c16f5663:"5331","303209e1":"5794","15c5b2e6":"5968","1f391b9e":"6061","0bffd00d":"6085","498d4d26":"6246",ffd52dfa:"6271",f5546e3f:"6363",a165d0ef:"6583",f9aaae36:"6759",f760b48e:"6875","14eb3368":"6969",a7bd4aaa:"7098","935f2afb":"8581","142bacfa":"8767","9fb72dca":"8837","4f6f0beb":"8962",a94703ab:"9048",ca79eafe:"9118","602b5c67":"9312","4ac74e3d":"9476","5e95c892":"9647","0b2296e6":"9789","75a8a8f3":"9814"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,f)=>{var t=b.o(e,a)?e[a]:void 0;if(0!==t)if(t)f.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise(((f,r)=>t=e[a]=[f,r]));f.push(t[2]=r);var c=b.p+b.u(a),d=new Error;b.l(c,(f=>{if(b.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var r=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;d.message="Loading chunk "+a+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,t[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,f)=>{var t,r,c=f[0],d=f[1],o=f[2],n=0;if(c.some((a=>0!==e[a]))){for(t in d)b.o(d,t)&&(b.m[t]=d[t]);if(o)var i=o(b)}for(a&&a(f);n Intro | Biotz Academy - + diff --git a/docs/Examples/MQTTX/MQTTX configuration.html b/docs/Examples/MQTTX/MQTTX configuration.html index 86d2628..e6b14fa 100644 --- a/docs/Examples/MQTTX/MQTTX configuration.html +++ b/docs/Examples/MQTTX/MQTTX configuration.html @@ -4,7 +4,7 @@ MQTTX configuration | Biotz Academy - + diff --git a/docs/Examples/MQTTX/MQttx instalation.html b/docs/Examples/MQTTX/MQttx instalation.html index 1dac5b3..4cdc895 100644 --- a/docs/Examples/MQTTX/MQttx instalation.html +++ b/docs/Examples/MQTTX/MQttx instalation.html @@ -4,7 +4,7 @@ MQttx instalation | Biotz Academy - + diff --git a/docs/Examples/MQTTX/Message.html b/docs/Examples/MQTTX/Message.html index c7de72c..b20c6b2 100644 --- a/docs/Examples/MQTTX/Message.html +++ b/docs/Examples/MQTTX/Message.html @@ -4,7 +4,7 @@ Publish data to Biotz | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Getting the token.html b/docs/Examples/POSTMAN/Getting the token.html index a4f7dc4..a5d41f4 100644 --- a/docs/Examples/POSTMAN/Getting the token.html +++ b/docs/Examples/POSTMAN/Getting the token.html @@ -4,7 +4,7 @@ Getting the token | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Intro.html b/docs/Examples/POSTMAN/Intro.html index 596c4cb..da2c7ab 100644 --- a/docs/Examples/POSTMAN/Intro.html +++ b/docs/Examples/POSTMAN/Intro.html @@ -4,7 +4,7 @@ Intro | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Postman instalation.html b/docs/Examples/POSTMAN/Postman instalation.html index fc3b599..c3f9995 100644 --- a/docs/Examples/POSTMAN/Postman instalation.html +++ b/docs/Examples/POSTMAN/Postman instalation.html @@ -4,7 +4,7 @@ Postman instalation | Biotz Academy - + diff --git a/docs/Examples/POSTMAN/Sending the request.html b/docs/Examples/POSTMAN/Sending the request.html index 0ba7205..072a060 100644 --- a/docs/Examples/POSTMAN/Sending the request.html +++ b/docs/Examples/POSTMAN/Sending the request.html @@ -4,7 +4,7 @@ Sending the request | Biotz Academy - + diff --git a/docs/How-to guides/How to configure and trigger a remote action in devices.html b/docs/How-to guides/How to configure and trigger a remote action in devices.html index da6eb37..11af815 100644 --- a/docs/How-to guides/How to configure and trigger a remote action in devices.html +++ b/docs/How-to guides/How to configure and trigger a remote action in devices.html @@ -4,7 +4,7 @@ Configure and trigger a 'remote actioning' | Biotz Academy - + diff --git a/docs/How-to guides/How to create a dashboard.html b/docs/How-to guides/How to create a dashboard.html index cd78690..dc96ab0 100644 --- a/docs/How-to guides/How to create a dashboard.html +++ b/docs/How-to guides/How to create a dashboard.html @@ -4,7 +4,7 @@ How to create a dashboard | Biotz Academy - + diff --git a/docs/How-to guides/How to create a schema.html b/docs/How-to guides/How to create a schema.html index 2b8f3a0..487980c 100644 --- a/docs/How-to guides/How to create a schema.html +++ b/docs/How-to guides/How to create a schema.html @@ -4,7 +4,7 @@ How to create a schema | Biotz Academy - + diff --git a/docs/How-to guides/How to create and use webhooks.html b/docs/How-to guides/How to create and use webhooks.html index dda5b2e..552e00a 100644 --- a/docs/How-to guides/How to create and use webhooks.html +++ b/docs/How-to guides/How to create and use webhooks.html @@ -4,7 +4,7 @@ How to Create and Use Webhooks | Biotz Academy - + diff --git a/docs/How-to guides/How to create developer API credentials.html b/docs/How-to guides/How to create developer API credentials.html index a5810f4..f187a1c 100644 --- a/docs/How-to guides/How to create developer API credentials.html +++ b/docs/How-to guides/How to create developer API credentials.html @@ -4,7 +4,7 @@ Developer API | Biotz Academy - + diff --git a/docs/How-to guides/How to debug communications coming from a device into the platform..html b/docs/How-to guides/How to debug communications coming from a device into the platform..html index bee3691..5fed419 100644 --- a/docs/How-to guides/How to debug communications coming from a device into the platform..html +++ b/docs/How-to guides/How to debug communications coming from a device into the platform..html @@ -4,7 +4,7 @@ How to debug communications coming from a device into the platform. | Biotz Academy - + diff --git a/docs/How-to guides/How to define alarm and triggers.html b/docs/How-to guides/How to define alarm and triggers.html index 800c348..58216bd 100644 --- a/docs/How-to guides/How to define alarm and triggers.html +++ b/docs/How-to guides/How to define alarm and triggers.html @@ -4,7 +4,7 @@ How to define alarm triggers | Biotz Academy - + diff --git a/docs/How-to guides/How to invite users.html b/docs/How-to guides/How to invite users.html index 818a2a3..a8e23cc 100644 --- a/docs/How-to guides/How to invite users.html +++ b/docs/How-to guides/How to invite users.html @@ -4,7 +4,7 @@ How to invite users | Biotz Academy - + diff --git a/docs/How-to guides/How to publish device data.html b/docs/How-to guides/How to publish device data.html index 3d05f84..a3421a7 100644 --- a/docs/How-to guides/How to publish device data.html +++ b/docs/How-to guides/How to publish device data.html @@ -4,7 +4,7 @@ Publishing Device data | Biotz Academy - + diff --git a/docs/How-to guides/How to register devices.html b/docs/How-to guides/How to register devices.html index c683990..cc1cf05 100644 --- a/docs/How-to guides/How to register devices.html +++ b/docs/How-to guides/How to register devices.html @@ -4,7 +4,7 @@ How to register devices | Biotz Academy - + diff --git a/docs/How-to guides/How to update device firmware.html b/docs/How-to guides/How to update device firmware.html index 8db98bf..91897bf 100644 --- a/docs/How-to guides/How to update device firmware.html +++ b/docs/How-to guides/How to update device firmware.html @@ -4,7 +4,7 @@ Update device firmware | Biotz Academy - + diff --git a/docs/How-to guides/How to use dashboard variables.html b/docs/How-to guides/How to use dashboard variables.html index d0cb2b4..0eb649c 100644 --- a/docs/How-to guides/How to use dashboard variables.html +++ b/docs/How-to guides/How to use dashboard variables.html @@ -4,7 +4,7 @@ How to use dashboard variables | Biotz Academy - + diff --git a/docs/How-to guides/How to use organization management.html b/docs/How-to guides/How to use organization management.html index 6ee0f7d..5773643 100644 --- a/docs/How-to guides/How to use organization management.html +++ b/docs/How-to guides/How to use organization management.html @@ -4,7 +4,7 @@ How to use organization management/general | Biotz Academy - + diff --git a/docs/How-to guides/How to use user settings.html b/docs/How-to guides/How to use user settings.html index 2a96750..48cb524 100644 --- a/docs/How-to guides/How to use user settings.html +++ b/docs/How-to guides/How to use user settings.html @@ -4,7 +4,7 @@ How to use user settings | Biotz Academy - + diff --git a/docs/Reference guides/Glossary.html b/docs/Reference guides/Glossary.html index 608af90..1fb8428 100644 --- a/docs/Reference guides/Glossary.html +++ b/docs/Reference guides/Glossary.html @@ -4,7 +4,7 @@ Glossary | Biotz Academy - + diff --git a/docs/Reference guides/MQTT broker.html b/docs/Reference guides/MQTT broker.html index 4a5d7f6..5421412 100644 --- a/docs/Reference guides/MQTT broker.html +++ b/docs/Reference guides/MQTT broker.html @@ -4,7 +4,7 @@ MQTT Broker Reference | Biotz Academy - + diff --git a/docs/Reference guides/Message-type Schema specification.html b/docs/Reference guides/Message-type Schema specification.html index 934dae9..31c3376 100644 --- a/docs/Reference guides/Message-type Schema specification.html +++ b/docs/Reference guides/Message-type Schema specification.html @@ -3,18 +3,18 @@ -Message-type Schema specification | Biotz Academy - +Message-type Schema specification | Biotz Academy +

Message-type Schema specification

-

This is the specification for the schema of a message-type. The users will have to specify a device-type, with one to many message-type. Each message-type will have one to many schemas.

-

This schema is the structure of the data that the device will be sending in each communication with Biotz. The definition provided in the schema creation in the web application is the one used to validate the incoming data. Also, this will be used to structure the specific database schema for the data to be stored in a structured way.

+

This is the specification for the schema of a message-type. The users will have to specify a device-type, with one or several message-types. Each message-type will have one or more schemas.

+

These schemas define the structure of the data that the device will be sending in each communication with Biotz. The definition provided during the schema creation in the web application is the one that will be used to validate the incoming data. Also, this will be used to structure the specific database schema for the data to be stored in a structured way.

Supported data types in Message-Types

-

At the moment Biotz offers support to a subset of MessagePack data types that are compatible with JSON format. See Data types detailed specification below for additional details on each data type, or click on the individual data type names in the "Displayed in the UI" column.

+

At the moment Biotz offers support for a subset of MessagePack data types that are compatible with the JSON format. See Data types detailed specification below for additional details on each data type, or click on the individual data type names in the "Displayed in the UI" column.

The "DB Column Type" specifies the data type of the value stored in the database, once it has received and validated.

-
Displayed in UIJSON Schema equivalentMessagePack equivalentDB Column TypeExamples (in JSON syntax)
Unix timestamp, as integernumberint 64timestamp1712828630000
Unix timestamp, as textstringstringtimestamp"1712828630000"
Unix timestamp RFC-3339stringstringtimestamp"2024-04-11T11:44:36.123Z"
Integernumberint 32integer12345678
Integer, as textstringstringinteger"12345678"
Integer, as hexadecimal textstringstringinteger"3a2fbb589d"
Decimalnumberfloat 64double12345.678
Decimal, as textstringstringdouble"12345.678"
Textstringstringtext"Some value"
Booleanbooleanboolbooleantrue, false
Boolean, as textstringstringboolean"true", "false"
Boolean, as integernumberintboolean0, 1
ObjectobjectmapN/A{"key1": 1, "key2": "val"}
Collection of identical itemsarray (all elements are of the same type)array (all elements are of the same type)N/A[1, 2, 3]
["a", "b", "c"]
Collection of unrelated itemsarray (each elements can be of a different type)array (each elements can be of a different type)N/A[1, "a", [2 3]]
+
Displayed in UIJSON Schema equivalentMessagePack equivalentDB Column TypeExamples (in JSON syntax)
Unix timestamp, as integernumberint 64timestamp1712828630000
Unix timestamp, as textstringstringtimestamp"1712828630000"
Unix timestamp RFC-3339stringstringtimestamp"2024-04-11T11:44:36.123Z"
Integernumberint 32integer12345678
Integer, as textstringstringinteger"12345678"
Integer, as hexadecimal textstringstringinteger"3a2fbb589d"
Decimalnumberfloat 64double12345.678
Decimal, as textstringstringdouble"12345.678"
Textstringstringtext"Some value"
Booleanbooleanboolbooleantrue, false
Boolean, as textstringstringboolean"true", "false"
Boolean, as integernumberintboolean0, 1
ObjectobjectmapN/A{"key1": 1, "key2": "val"}
Collection of identical itemsarray (all elements are of the same type)array (all elements are of the same type)N/A[1, 2, 3]
["a", "b", "c"]
Collection of unrelated itemsarray (each elements can be of a different type)array (each elements can be of a different type)N/A[1, "a", [2 3]]
To discardN/AN/AN/AN/A

Data types detailed specification

The table shown in the Supported data types in Message-Types section only shows a brief summary of the different data types, including some basic examples to help intuit their main properties. But it lacks a detailed specification of the properties of each data type, and the constraints enforce by Biotz on those data types (if any). This section describes in greater detail, for each of the supported types, what those properties and constraints are.

Unix timestamp, as integer

@@ -219,7 +219,9 @@

Examples

Collection of unrelated items

Collection of unrelated items: collection of any kind of item, present just once.

-

Examples