diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7ac04481..711ea14f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -41,11 +41,14 @@ jobs: - run: | pip install mkdocs-material pip install mkdocs-minify-plugin - pip install mkdocs-redirects pip install mkdocs-monorepo-plugin pip install mkdocs-rss-plugin pip install mkdocs-git-revision-date-localized-plugin pip install "mkdocs-material[imaging]" pip install mkdocs-glightbox + pip install mkdocs-callouts + + - name: Pre-build documentation + run: python3 build_docs.py - run: mkdocs gh-deploy --force diff --git a/.gitignore b/.gitignore index 66479553..16bab422 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,20 @@ node_modules/ *swp .cache +.DS_Store -# jekyll -_site/ +# Jekyll vendor/ .jekyll-cache/ + +# MkDocs +_site/ +_build/ + +# Auto-generated category index pages +docs/plugins/connectivity/ +docs/plugins/devices/ +docs/plugins/monitoring/ +docs/plugins/development/ +docs/plugins/infrastructure/ +docs/plugins/templates/ diff --git a/Dockerfile b/Dockerfile index 384cd19a..aa62202e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,4 +5,6 @@ RUN pip install \ mkdocs-monorepo-plugin \ mkdocs-rss-plugin \ mkdocs-glightbox \ + mkdocs-minify-plugin \ + mkdocs-callouts \ "mkdocs-material[imaging]" diff --git a/sigfox/LICENSE b/LICENSE similarity index 97% rename from sigfox/LICENSE rename to LICENSE index 3ac71b5d..2144e7a3 100644 --- a/sigfox/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Thinger.io +Copyright (c) Thinger.io Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile index fd00eab6..918e5406 100644 --- a/Makefile +++ b/Makefile @@ -2,4 +2,4 @@ build: docker build -t thinger/plugins . serve: - docker run --rm -it -p 8000:8000 -v ${PWD}:/docs --name thinger_plugins thinger/plugins + docker run --rm -p 9000:9000 -v ${PWD}:/docs --entrypoint sh thinger/plugins -c "python3 build_docs.py && mkdocs serve -a 0.0.0.0:9000" diff --git a/README.md b/README.md new file mode 100644 index 00000000..3da21531 --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# Thinger.io Marketplace + +Official plugin repository for [Thinger.io](https://thinger.io) IoT platform. Plugins extend the platform with integrations for third-party services, device protocols, and data visualization tools. + +Browse the marketplace at [marketplace.thinger.io](https://marketplace.thinger.io). + +## Repository Structure + +``` +plugin-name/ +├── plugin.json # Plugin metadata and configuration +├── README.md # Documentation (rendered in marketplace) +├── CHANGELOG.md # Version history +├── assets/ # Images and resources +└── task/ # Container definition (if applicable) + └── Dockerfile +``` + +## Development + +Requires Docker installed. + +```bash +make build # Build Docker image (first time only) +make serve # Start dev server at http://localhost:9000 +``` + +Changes to `docs/` are hot-reloaded. For plugin changes, restart the server. + +## Contributing + +See the [contributing guide](https://marketplace.thinger.io/contributing/) for detailed documentation on: + +- Plugin structure and required files +- Writing integration plugins +- Developing custom plugins +- Documentation guidelines + +## License + +MIT License - see [LICENSE](LICENSE) for details. diff --git a/alertmanager/README.md b/alertmanager/README.md index af4f475d..4d39fcc8 100644 --- a/alertmanager/README.md +++ b/alertmanager/README.md @@ -2,7 +2,7 @@ # Alertmanager
-
+
-
-
-
-
-
+
-
-
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
No events yet
+Events will appear here in real-time
+{{ event.details | json }}
+ {{ event.metadata | json }}
+
-
-
-
-
+
This node allows to automatically start a flow when an event is triggered, at regular intervals defined in the properties form or manually over the web editor. The message sent by these nodes has the payload and topic properties set.
**Function, Change, Switch Nodes**
-
+
Node-RED counts with some nodes that allows working with the flow's payload using pre-configured tools or coding their behavior in JavaScript functions that can be created within the editor using a rich text editor. With this proposal, these nodes are provided with both input and output connectors.
**Output and Debug Nodes**
-
+
These nodes only have an input connector that allows extracting data from the flow to third parties, files, or debugs console in the web editor.
@@ -70,9 +68,7 @@ A flow is represented as a tab within the editor workspace and is the main way t
The flow editor makes it easy to wire together flows using the wide range of nodes in the palette. Flows can be then deployed to the runtime just clicking into "debloy" button:
-
-
-
-
-
-
-
+
It is a **Function** Node that iterates over all the desired assets avaible on Thinger.io Platform given a filter. It is able to receive a JSON from Node-RED flow and automatically query the backend. This node is useful to execute operations over multiple assets at the same time.
@@ -122,7 +112,7 @@ There will be as many output messages as assets retrieved, each containing the i
### Bucket Create
-
+
It is a **Function** Node that creates a Data Bucket into a Thinger.io Platform. It is able to receive a JSON from Node-RED flow and automatically create the Bucket, so results quite useful to implement scalable and on demand data storage to any project.
@@ -132,7 +122,7 @@ The output message will contain the result and details of the operation.
### Bucket Export
-
+
It is a **Function** Node that executes a Thinger.io Data Bucket export operation and waits until the data is ready to be downloaded, returning the download file URL or the contents as desired. It is useful to extract data from Thinger.io for further analysis, storage or forwarding to other services.
@@ -140,7 +130,7 @@ The configuration of this Node requires introducing of at least the `Bucket ID`,
### Bucket Read
-
+
It is a **Function** Node that retrieves data from a specific Thinger.io Data Bucket when an injection Node requires it. It is useful to get data from buckets with a Node-RED programmed sampling interval.
@@ -148,7 +138,7 @@ To configure this node just include the `Bucket ID`, `Filter` and `Sorting` into
### Bucket Write
-
+
It is an **Output** Node that allows to store data into the Thinger.io Data Bucket. It is able to receive a JSON from Node-RED flow and automatically create an entry into the Bucket, so results quite useful to implement scalable data storage to any project.
@@ -156,7 +146,7 @@ The configuration of this Node just requires introducing the `Bucket ID`, howeve
### Device Callback
-
+
It is a **Function** Node that calls an HTTP device callback in order to send a message or retrieve what the device has configured in its callback. If the device does not exist it will manage the auto provisioning of a new device and data bucket. It is useful to get auto provision new devices based of different events save its data from the beginning.
@@ -164,7 +154,7 @@ To configure this node just include the `Device ID` into the node parameters for
### Device Create
-
+
It is a **Function** Node that creates a Device into the Thinger.io Platform. It is able to receive a JSON from Node-RED flow and automatically create the Device, so results quite useful to implement scalable and on demand device creation to any project.
@@ -174,7 +164,7 @@ The output message will contain the result and details of the operation.
### Device Read
-
+
It is a **Function** Node that retrieves data from a specific Thinger.io device resource when an injection Node requires it. It is useful to get data from devices with a Node-RED programmed sampling interval.
@@ -182,7 +172,7 @@ To configure this node just include the `Device ID`and the `Resource Name` into
### Device Stream
-
+
It is an **Injection** Node that retrieves data from a specific Thinger.io Device Resource on regular defined interval expressed in seconds into the properties form.
@@ -190,7 +180,7 @@ To configure this node just include the `Device ID`and the `Resource Name` into
### Device Write
-
+
It is a **Function** Node that allows sending data to a Thinger.io connected Device. It is able to receive a JSON from Node-RED flow and automatically send it to other devices in real-time. So results quite useful to implement scalable device communication for any project.
@@ -198,7 +188,7 @@ The configuration of this Node just requires introducing the `Device ID` and the
### Endpoint Call
-
+
It is a **Function** Node that allows calling the execution of a Thinger.io endpoint profile. It is able to receive a JSON that can be introduced in the endpoint in order to use that data in an e-mail or send it to third parties, so it is quite useful to create notifications or to integrating an IoT project with other systems.
@@ -206,7 +196,7 @@ The configuration of this Node just requires introducing the `Endpoint ID`, howe
### Property Read
-
+
It is a **Function** Node that retrieves data from a specific Thinger.io device, type or group property when an injection Node requires it. It is useful to get data from assets with a Node-RED programmed sampling interval.
@@ -214,7 +204,7 @@ To configure this node just include the `Asset Type`, `Asset ID`and `Property Na
### Property Write
-
+
It is a **Function** Node that writes data into a specific Thinger.io device, type or group property when an injection Node requires it. It is useful to save data into assets in order to manage different configurations and act accordingly.
@@ -222,7 +212,7 @@ To configure this node just include the `Asset Type`, `Asset ID`and `Property Na
### Storage Read
-
+
It is a **Function** Node that reads any file saved in a Thinger.io storage and returns it to Node-RED. It is able to read any file, returning the string representation for text files (plain, csv, json, ...) or a Buffer otherwise. Useful for retrieving and treating information or being able to pass the info to third party nodes.
@@ -230,7 +220,7 @@ The configuration of the node requires only the `Storage ID`, as it is able to r
### Storage Write
-
+
It is an **Output** Node that allows to store data into the Thinger.io File Storage. It is able to receive a payload from Node-RED flow and automatically save or append into a file in the Storage, so results quite useful to implement scalable file storage to any project.
@@ -238,7 +228,7 @@ The configuration of this Node just requires introducing the `Storage ID`, howev
### Server Events
-
+
It is an **Inject** Node that allows triggering in real-time any event that takes places in Thinger.io IoT Server over all existing assets, like device, types, groups or buckets. Some events contain also additional filter fields to filter from.
@@ -246,9 +236,8 @@ The configuration of each type requires to include the ID of the element that wa
When any of these events is triggered, this Node is able to inject a JSON in the flow with the identifier of the Bucket, Device, or Endpoint that has produced the event along with the relevant data.
-!!! tip
-
- If you need further technical information, you can find all the details for each node in Node-RED help dialog.
+> [!TIP]
+> If you need further technical information, you can find all the details for each node in Node-RED help dialog.
## Useful Example Flows
@@ -258,15 +247,12 @@ In this section, you can find our own cookbook with some useful flows that you c
Using the "Device Status Change" property of the Server Event Node, it is possible to detect the disconnection of any device of your IoT network and execute a flow in Node-RED to notify the incidence using an endpoint sending an email for example.
- !!! warning
-
- [Learn how to create an email endpoint here. ](https://docs.thinger.io/features/endpoints-1#email-endpoint)
+ > [!WARNING]
+ > [Learn how to create an email endpoint here. ](https://docs.thinger.io/features/endpoints-1#email-endpoint)
The next flow uses two Thinger.io Nodes, the first one is triggering the Device Disconnection Server Event that will throw a JSON formatted message with the device ID, the status and the timestamp of the change. The second Node allows calling the Endpoint profile to send the alert with the device information JSON attached so it is possible to custom the message to easily identify the problem.
-
-
-
-
-
-
-
-
-
-
-
-
+
+
For each application there are some settings that can be configured:
@@ -51,7 +51,7 @@ For each application there are some settings that can be configured:
- **Asynchronous Queries**: Enable or disable the Asynchronous queries for the metrics.
- **Enable**: Enable or disable the metrics endpoint for the application.
-
+
## Additional Resources
@@ -60,20 +60,3 @@ Given that the plugin is based and developed with Prometheus in mind, you may re
Metrics are configured using the unofficial Prometheus client for Node.js, coded through the gui of the plugin.
Also, the [Prometheus Server Plugin](https://marketplace.thinger.io/plugins/prometheus) is available within Thinger.io.
-
-## License
-
-
-
-
+
-
-
-
-
-
+
-
-
-
+
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
No events yet
-Events will appear here in real-time
-{{ event.details | json }}
- {{ event.metadata | json }}
- No events yet
+Events will appear here in real-time
+{{ event.details | json }}
+ {{ event.metadata | json }}
+
-
-
-
-
-
-
-
+