-
Notifications
You must be signed in to change notification settings - Fork 8
Updates of Tutorials and adding new ones #160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
pierrekil
wants to merge
42
commits into
main
Choose a base branch
from
pierrekil-patch-1
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
42 commits
Select commit
Hold shift + click to select a range
785b145
Add files via upload
pierrekil 7c88d58
Simplify formatting in white-label IoT platform tutorial
pierrekil 91682cb
Add files via upload
pierrekil f05aeb4
Enhance Celsius to Fahrenheit tutorial with prerequisites
pierrekil 0a95cd8
Improve introduction to Celsius to Fahrenheit tutorial
pierrekil 672184d
Enhance tutorial with tips, notes, and cautions
pierrekil c061737
Revise Open Weather API tutorial steps and headings
pierrekil 47c12fa
Enhance auto-provisioning tutorial with sidebar position
pierrekil 2d79de0
Enhance Modbus connection tutorial clarity and formatting
pierrekil bfcd284
Update sidebar position in device provisioning tutorial
pierrekil 637b919
Add next steps for edge gateway deployment
pierrekil 98beb97
Revise section headers to numbered steps
pierrekil 8944dc5
Update connect-modbus-devices.md
pierrekil a7580e2
Revise tutorial steps for connecting MQTT client
pierrekil 5ca71c3
Revise enterprise identity tutorial structure
pierrekil 8a4a2c2
Update enterprise-identity-sso-rbac.md
pierrekil 3cb4874
Revise OTA firmware updates tutorial with sidebar
pierrekil 88d2aca
Update sidebar position in tutorial documentation
pierrekil 4b6fa57
Update sidebar position in MQTT client tutorial
pierrekil e8c459c
Update sidebar position in device provisioning tutorial
pierrekil 260a9e2
Update sidebar position in Celsius to Fahrenheit tutorial
pierrekil e5c675c
Update sidebar position in mobile app tutorial
pierrekil f0e8d86
Update sidebar position for Modbus tutorial
pierrekil 8a9c60b
Update sidebar position in enterprise identity tutorial
pierrekil 9c109af
Update sidebar position in ChirpStack tutorial
pierrekil adbf063
Typo
pierrekil 8df77fa
Add files via upload
pierrekil a658667
Delete edge-gateway-secure-tunnel.md
pierrekil d0723eb
Add files via upload
pierrekil 1d80034
Revise sidebar position and clean up keywords
pierrekil d764db9
Update tutorial header for edge gateway deployment
pierrekil 0da7457
Update sidebar position for OTA firmware updates tutorial
pierrekil e4e71ea
Update sidebar position in auto-provision tutorial
pierrekil 4ad09f6
Update sidebar position in tutorial documentation
pierrekil d5141bc
Update sidebar position in Celsius to Fahrenheit tutorial
pierrekil 372f385
Update sidebar position in mobile app tutorial
pierrekil ed3e7cc
Fixed links
pierrekil 3a31767
Potential fix for pull request finding
pierrekil 80c1ec6
Potential fix for pull request finding
pierrekil b329f19
Potential fix for pull request finding
pierrekil 650432b
Potential fix for pull request finding
pierrekil 12037e1
Potential fix for pull request finding
pierrekil File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| --- | ||
| sidebar_position: 8 | ||
| --- | ||
|
|
||
| # Auto-provision and onboard OEM devices at scale | ||
|
|
||
| If you build and distribute your own hardware, you do not want to register every unit by hand. This tutorial shows how **auto-provisioning** lets a device **self-register** the first time it connects: OpenRemote authenticates it, creates an **asset** of the type you defined, and links its **attributes** to the right MQTT topics — true **zero-touch device onboarding**. | ||
|
|
||
| :::tip Why this matters for OEMs and integrators | ||
| Provisioning in OpenRemote creates the client credentials **and** the digital asset **and** the attribute links in a single flow, included in the open-source core. That means a freshly flashed device becomes a fully modelled, queryable asset the moment it powers on in the field. | ||
| ::: | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - A running OpenRemote instance — see the [Quick Start](https://docs.openremote.io/docs/quick-start). | ||
| - Superuser access to a realm where your devices will live. | ||
| - A device (or test client) that can do MQTT over TLS with an X.509 client certificate — for example an ESP32/ESP8266. | ||
|
|
||
| ## Step 1 — Define the asset type your device represents | ||
|
|
||
| Decide what each device *is* in your model (e.g. a `Thing`, or a custom `EnvironmentSensor` asset type from a custom project). The provisioning flow will create one asset of this type per device, so model the attributes you want populated (temperature, humidity, battery, etc.). | ||
|
|
||
| ## Step 2 — Create a provisioning configuration | ||
|
|
||
| 1. Go to the **Provisioning** configuration for your realm (Manager UI). | ||
| 2. Create an **X.509 provisioning config** and paste the **CA certificate** that signed your device certificates. | ||
| 3. Select the **asset type** to create per device and set the realm. | ||
| 4. Choose whether to **auto-link attributes** to standard MQTT topics and whether newly provisioned assets are **disabled until approved** (useful for a manufacturing QA gate). | ||
|
|
||
| See [Auto provisioning devices and users](https://docs.openremote.io/docs/user-guide/gateways-and-devices/auto-provisioning) for the message format and the full configuration reference. | ||
|
|
||
| ## Step 3 — Flash devices with a unique certificate | ||
|
|
||
| Each unit ships with a unique client certificate signed by your CA. The device's unique ID (for example a serial number embedded in the certificate's common name) becomes the identity OpenRemote uses to create and name the asset. | ||
|
|
||
| ## Step 4 — Let the device provision itself | ||
|
|
||
| On first connection the device publishes a provisioning request to the provisioning topic. OpenRemote validates the certificate against your CA, then: | ||
|
|
||
| 1. Creates the asset of your chosen type (if it does not already exist). | ||
| 2. Links its attributes to the device's publish/subscribe topics. | ||
| 3. Returns the asset ID so the device can start publishing telemetry immediately. | ||
|
|
||
| For a concrete firmware example, follow [Connect ESP32 or ESP8266 using MQTT](https://docs.openremote.io/docs/user-guide/gateways-and-devices/connect-esp32-or-esp8266-using-mqtt), then point it at your provisioning config instead of a manually created service user. | ||
|
|
||
| ## Step 5 — Verify and scale | ||
|
|
||
| 1. Power on one device and confirm a new asset appears in the asset tree with live values. | ||
| 2. Power on a second unit with a different certificate and confirm a second, separate asset is created. | ||
| 3. Roll out the remaining fleet — no manual asset creation required. | ||
|
|
||
| :::note | ||
| Combine this with [multi-tenant realms](./white-label-multi-tenant-iot-platform) so each customer's devices provision straight into that customer's realm. | ||
| ::: | ||
|
|
||
| ## Next steps | ||
|
|
||
| - Keep field devices current with [OTA firmware updates using hawkBit](./ota-firmware-updates-with-hawkbit). | ||
| - Deploy a local [edge gateway with a secure tunnel](./edge-gateway-secure-tunnel) for sites with intermittent connectivity. | ||
|
wborn marked this conversation as resolved.
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| --- | ||
| sidebar_position: 5 | ||
| --- | ||
|
|
||
| # Connect Modbus TCP/RTU devices (PLCs, meters, inverters) | ||
|
|
||
| **Modbus** is everywhere in industrial and energy hardware — PLCs, energy meters, solar inverters, HVAC controllers. This tutorial shows how to connect Modbus devices to OpenRemote running as a gateway, using the **native Modbus agent**, mapping registers straight onto **asset attributes** over Ethernet (**Modbus TCP**) or serial (**Modbus RTU**). | ||
|
|
||
| :::tip Why this matters for OEMs and integrators | ||
| The Modbus agent runs **inside the OpenRemote Manager** — there is no separate gateway application to deploy and operate just to speak an industrial protocol. The same is true for KNX, and SNMP and more, which keeps your **industrial IoT** architecture simple. | ||
| ::: | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - A running OpenRemote instance — see the [Quick Start](https://docs.openremote.io/docs/quick-start). | ||
| - A reachable Modbus device: a Modbus TCP slave on your network, or a Modbus RTU device on a serial line accessible to the Manager host. | ||
| - The device's register map (function code, address, data type, scaling). | ||
|
|
||
| ## Step 1 — Create a Modbus agent | ||
|
|
||
| 1. On the **Assets** page, click **+** and add a **Modbus TCP Agent** (or **Modbus RTU Agent**). | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There are the "Modbus serial agent" and "Modbus tcp agent". The "Modbus RTU Agent" does not exist. |
||
| 2. For TCP, set the host/IP and port (default `502`) and the unit/slave ID. | ||
| 3. For RTU, set the serial port, baud rate, parity and stop bits, and the unit ID. | ||
|
|
||
| See the [Modbus agent reference](https://docs.openremote.io/docs/user-guide/agents-protocols/modbus) for all parameters. | ||
|
|
||
| ## Step 2 — Create the asset that represents the device | ||
|
|
||
| Create an asset (e.g. an `ElectricityMeter` or a generic `Thing`) and add attributes for each value you want to read or write — for example `power` (number), `voltage` (number), `relayState` (boolean). | ||
|
|
||
| ## Step 3 — Link attributes to Modbus registers | ||
|
|
||
| For each attribute, add the **Agent Link** configuration item and select your Modbus agent, then specify: | ||
|
|
||
| - the **register type** (coil, discrete input, input register, holding register), | ||
| - the **address**, | ||
| - the **data type** (e.g. `INT16`, `UINT32`, `FLOAT32`), | ||
| - the **read/write** behaviour and a **polling interval**, | ||
| - optional **scaling** to convert raw registers into engineering units. | ||
|
|
||
| :::note | ||
| Writing to a holding register or coil lets you actuate the device (e.g. toggle a relay) straight from an attribute write, the Manager UI, the REST API, or a rule. | ||
| ::: | ||
|
|
||
| ## Step 4 — Verify live data | ||
|
|
||
| 1. Open the asset and confirm attribute values update on each poll. | ||
| 2. Check the History panel to confirm values are being stored as time series. | ||
| 3. Test a write by changing a writable attribute and confirming the device responds. | ||
|
|
||
| ## Step 5 — Turn raw values into insight | ||
|
|
||
| Use [Flow rules](https://docs.openremote.io/docs/user-guide/rules-and-forecasting/flow-rules) to derive virtual attributes (e.g. compute energy from power), and [When-Then rules](https://docs.openremote.io/docs/user-guide/rules-and-forecasting/when-then-rules) to alarm on thresholds. | ||
|
|
||
| ## Next steps | ||
|
|
||
| - Deploy a local [edge gateway with a secure tunnel](./edge-gateway-secure-tunnel) for sites with intermittent connectivity. | ||
|
wborn marked this conversation as resolved.
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| --- | ||
| sidebar_position: 7 | ||
| --- | ||
|
|
||
| # Deploy OpenRemote as an edge gateway with a secure tunnel | ||
|
|
||
| For sites with intermittent connectivity, local control loops or data-residency requirements, you want compute at the edge. This tutorial shows how to run OpenRemote as an **edge gateway**, link it to a **central** instance, and **remotely access** the on-site gateway through a **secure tunnel** — a hybrid **on-premise** plus cloud architecture. | ||
|
|
||
| :::tip Why this matters for integrators | ||
| The edge gateway is the **same OpenRemote codebase** running on-site, so an instance can act as both server and gateway — the asset model, agents and rules you already know run locally too. Gateway UIs can be reached from the central instance over a secure tunnel for remote maintenance. | ||
| ::: | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - Two OpenRemote instances: a **central** instance and an on-site **edge** instance (both from the [Quick Start](https://docs.openremote.io/docs/quick-start) / Docker images; `amd64` and `arm64` are supported, so the edge can run on small hardware). | ||
| - Network access from the edge instance out to the central instance. | ||
| - Read [OpenRemote as Edge Gateway](https://docs.openremote.io/docs/user-guide/gateways-and-devices/edge-gateway). | ||
|
|
||
| ## Step 1 — Run OpenRemote on the edge | ||
|
|
||
| Deploy a standard OpenRemote instance on the on-site hardware. Connect your local devices to it using whichever agents fit — [Modbus](./connect-modbus-devices), [KNX](../user-guide/agents-protocols/knx), MQTT, Z-Wave, etc. The edge instance keeps working and storing data even if the uplink drops. | ||
|
|
||
| ## Step 2 — Register the gateway on the central instance | ||
|
|
||
| 1. On the **central** Manager, create a **Gateway** asset/connection for the site. | ||
| 2. This issues credentials the edge instance uses to authenticate its outbound connection. | ||
|
|
||
| ## Step 3 — Connect the edge to the central instance | ||
|
|
||
| Configure the edge instance with the central instance's address and the gateway credentials. Once connected, the site's assets become visible and manageable from the central instance, while continuing to run locally. | ||
|
|
||
| ## Step 4 — Remotely access the gateway UI via the secure tunnel | ||
|
|
||
| Open the gateway's local UI from the central instance through the **secure tunnel**, so field engineers can configure and troubleshoot a site without a site visit or a public inbound port. Follow the tunnel setup in [OpenRemote as Edge Gateway](https://docs.openremote.io/docs/user-guide/gateways-and-devices/edge-gateway). | ||
|
|
||
| :::caution | ||
| Restrict who can open tunnels and access gateway UIs using [roles and restricted users](./enterprise-identity-sso-rbac); remote access to field equipment should be tightly scoped. | ||
| ::: | ||
|
|
||
| ## Step 5 — Decide what runs where | ||
|
|
||
| Keep latency-sensitive control and local automation in [edge rules](https://docs.openremote.io/docs/user-guide/rules-and-forecasting/create-rules), and use the central instance for cross-site dashboards, fleet-wide rules and long-term analytics. | ||
|
|
||
| ## Next steps | ||
|
|
||
| - Push [OTA firmware updates](./ota-firmware-updates-with-hawkbit) to devices behind the gateway. | ||
| - Onboard edge devices automatically with [auto-provisioning](./auto-provision-devices-at-scale). |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use relative URLs instead of
docs.openremote.ioso links keep working if you run the docs locally or browse them on GitHub. This will also make sure links point to the page within the same version instead of the latest version (where the page may no longer exist).This is also an issue with all the other links added in this PR.