#iot #fundamentum #edge #daemon

bin+lib fundamentum-edge-daemon

The supported way to access Fundamentum's ecosystem from linux devices

7 stable releases

1.6.0 Dec 4, 2024
1.5.0 Nov 26, 2024
1.4.0 Oct 28, 2024
1.3.0 Sep 13, 2024
1.0.0 Apr 4, 2024

#248 in Asynchronous

Download history 145/week @ 2024-09-09 48/week @ 2024-09-16 14/week @ 2024-09-23 8/week @ 2024-09-30 1/week @ 2024-10-07 142/week @ 2024-10-28 10/week @ 2024-11-04 1/week @ 2024-11-18 136/week @ 2024-11-25 122/week @ 2024-12-02

260 downloads per month

Apache-2.0

140KB
2.5K SLoC

Fundamentum Edge Daemon

Crates.io License Build Status Docs.rs

Website | Docs

The supported way to access Fundamentum's ecosystem from linux devices.

Usage

Launching the daemon

$ cargo run
# ..
  • The gRPC server will bind to 127.0.0.1:8080.

  • A default version of the configuration file (config.toml) will be created in the current working directory if it does not already exists.

  • The current working directory will be used as the state directory. Here's a list of state files you might encounter:

    • provisioning.json and rsa_(public|private).pem will be created upon first successful provisioning.

You can override these defaults using the available CLI options. Those can be listed as follow:

$ cargo run -- --help
# ..

Further customizations are also possible through the configuration file (config.toml).

Accessing exposed services via the gRPC interface

The various Fundamentum services are made available through a gRPC interface (see fundamentum-edge-proto repository).

In order to be able to use most of the gRPC services (the most notable exception being the Provisioning service), your device will need to be provisioned. In order to do so, a good place to start would be the provisioning procedure.

Through the CLI

It is possible to use the grpcurl CLI tool to interact with the daemon:

  • To provision the device:

    $ grpcurl \
        -plaintext \
        -d '{
            "api_base_url": "https://devices.fundamentum-iot.com",
            "project_id": 1,
            "region_id": 2,
            "registry_id": 3,
            "serial_number": "device1",
            "asset_type_id": 4,
            "access_token": "TOKEN"
        }' \
        127.0.0.1:8080 \
        com.fundamentum.edge.v1.Provisioning.Provision
    # ...
    
  • To publish telemetry data:

    $ grpcurl \
        -plaintext \
        -d '{
            "sub_topic": "test",
            "qos": 0,
            "payload": "SGVsbG8sIFdvcmxkIQ=="
        }' \
        127.0.0.1:8080 \
        com.fundamentum.edge.v1.Telemetry.Publish
    # ...
    
  • To get the device configuration:

    $ grpcurl \
        -plaintext \
        127.0.0.1:8080 \
        com.fundamentum.edge.v1.Configuration.Get
    # ...
    
  • To subscribe to configuration updates:

    $ grpcurl \
        -plaintext \
        127.0.0.1:8080 \
        com.fundamentum.edge.v1.Configuration.UpdateStream
    # ...
    
  • To publish states data:

    $ grpcurl \
        -plaintext \
        -d '{
            "states": {
                "status": "ok",
                "alarms": [
                    "alarm1",
                    "alarm2"
                ]
            },
            "sub_devices": [
                {
                    "serial_number": "device1",
                    "states": {
                        "rssi": 50,
                        "battery_level": 75,
                        "temperature": 25
                    }
                }
            ]
        }' \
        127.0.0.1:8080 \
        com.fundamentum.edge.v1.StatesEvent.PublishJson
    # ...
    
  • To subscribe to incoming actions:

    $ grpcurl \
        -plaintext \
        127.0.0.1:8080 \
        com.fundamentum.edge.v1.Actions.Subscribe
    # ...
    
  • To update the status of an action:

    $ grpcurl \
        -plaintext \
        -d '{
            "id": 123,
            "serial_numbers": ["device1", "device2"],
            "ongoing": {"progress": 50},
            "message": "In progress...",
            "payload": "SGVsbG8sIFdvcmxkIQ=="
        }' \
        127.0.0.1:50051 \
        com.fundamentum.edge.v1.Actions.UpdateStatus
    # ...
    

Through language specific bindings

For more serious use cases, we provide specific support for the following languages:

Please make sure that you use a binding library version compatible with your edge daemon service.

Note that in case your language is not already officially supported, it is still possible to use the protocol buffer compiler on the gRPC *.proto files to generate a bindings library for almost any language.

Development setup

Please see the development setup guide.

Releases

All official versions of this component are published to crates.io/crates/fundamentum-edge-daemon. A list of all published versions is available under the versions tab.

Detailed release notes are available in this repo at CHANGELOG.md.

License

Licensed under Apache License, Version 2.0 LICENSE.

Dependencies

~31–64MB
~1M SLoC