Firmware, application and documentation for the hackathon

Overview

eclipsecon-2022-hackathon

WORK IN PROGRESS

This repository contains software, firmware and documentation for the EclipseCon 2022 hackathon.

Bluetooth Mesh Gateway

The gateway folder contains a Bluetooth Mesh gateway that can run on any Linux host with bluez, and forwards mesh model events to a Drogue Cloud instance.

BBC micro:bit firmware

The firmware folder contains the micro:bit firmware that runs a Bluetooth Mesh node.

The Bluetooth Mesh models supported by the firmware are defined in MESHMODEL.

BBC micro:bit simulator

There are two simulators:

  • A mesh node simulator that runs on any Linux host with bluez, and simulates the exact same models as the micro:bit firmware and sends messages via the gateway.

  • A WASM-based simulator that sends messages directly to Drogue IoT, which can run in any browser. This can be used to prototype backend applications without needing to set up a mesh network. Note this this uses HTTP unlike the gateway which uses MQTT.

You can try the WASM-based simulator by entering https://web-simulator-eclipsecon-2022.apps.sandbox.drogue.world in your browser, configure the parameters and press 'Run'.

Model conversion

The model-converter folder contains a HTTP server which is invoked by Drogue Cloud for each sensor event, and will convert data from the Bluetooth Mesh model format to the JSON format described in MESHMODEL.

Digital twin

Should be there soon

Comments
  • Add --device-key to provision command

    Add --device-key to provision command

    This commit updates the provision command to include the --device-key option. It also adds a second execution of this command with the only difference being the value of the flash-address. I noticed that this is done in ../preprovision.sh, but I don't understand why this is required , but I was not able to get the firmware to work without doing this.


    I'm mainly opening this PR as question as I'm curious as to the "double" writing, can anyone help me understand that part?

    Signed-off-by: Daniel Bevenius [email protected]

    opened by danbev 4
  • Add downloading of softdevice to flashsd.sh

    Add downloading of softdevice to flashsd.sh

    This commit adds a curl command to download the softdevice binary to the flashsd script.

    The version of the softdevice has been changed in this commit as well as I was not able to find 7.3.0 in https://github.com/NordicSemiconductor/nRF5-SDK-for-Mesh/tree/master/bin/softdevice.


    I'm probably missing something here as I was not able to find the 7.3.0 version and also that the sd binaries are gitignored, but my initial thought was that it would be nice to have the sd used checked in for the hackaton just in case there are any network issues at the venue.

    opened by danbev 3
  • Update embassy-time and embassy-sync revisions in

    Update embassy-time and embassy-sync revisions in

    This commit updates the revision of embassy-time and embassy-sync in infra/pre-provision to fix the following compilation error:

    error[E0107]: this struct takes 1 generic argument but 2 generic arguments were supplied
      --> /.cargo/git/checkouts/btmesh-e14acedbce757b27/6840160/btmesh-device/src/lib.rs:34:27
       |
    34 |     embassy_sync::signal::Signal<embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex, T>;
       |                           ^^^^^^ expected 1 generic argument                                 - help: remove this generic argument
       |
    note: struct defined here, with 1 generic parameter: `T`
      --> /.cargo/git/checkouts/embassy-9312dcb0ed774b29/3b58ac1/embassy-sync/src/signal.rs:31:12
       |
    31 | pub struct Signal<T> {
       |            ^^^^^^ -
    
    For more information about this error, try `rustc --explain E0107`. error: could not compile `btmesh-device` due to previous error
    

    The commit also adds a rust-toolchain.toml to configure nightly rustc as currently there a number of compilation errors like the following two:

    error[E0658]: generic associated types are unstable
       --> /.cargo/git/checkouts/embassy-9312dcb0ed774b29/b7d0944/embassy-sync/src/pipe.rs:450:9
        |
    450 | /         type FlushFuture<'a> = impl Future<Output = Result<(), Self::Error>>
    451 | |         where
    452 | |             Self: 'a;
        | |_____________________^
        |
        = note: see issue #44265 <https://github.com/rust-lang/rust/issues/44265> for more information
        = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
    
    error[E0658]: where clauses on associated types are unstable
       --> /.cargo/git/checkouts/embassy-9312dcb0ed774b29/b7d0944/embassy-sync/src/pipe.rs:450:9
        |
    450 | /         type FlushFuture<'a> = impl Future<Output = Result<(), Self::Error>>
    451 | |         where
    452 | |             Self: 'a;
        | |_____________________^
        |
        = note: see issue #44265 <https://github.com/rust-lang/rust/issues/44265> for more information
        = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable
    
       Compiling cargo_metadata v0.15.0
    For more information about this error, try `rustc --explain E0658`.
    error: could not compile `embassy-sync` due to 18 previous errors
    warning: build failed, waiting for other jobs to finish...
    
    opened by danbev 1
  • Create and document example firmware extensions

    Create and document example firmware extensions

    • Document hackathon firmware
    • Refactor to allow extending with more models and peripherals

    Examples

    • Enabling microphone and sending noise detection?
    • Enabling accelerometer and detecting motion?
    • Enable speaker and send sound?
    opened by lulf 1
  • Suppress unused variable warning in gateway.rs

    Suppress unused variable warning in gateway.rs

    Currently, the following compiler warnings is generated:

    $ cargo build --release
       Compiling eclipsecon-gateway v0.1.0 (/eclipsecon-2022-hackathon/infra/gateway)
    warning: unused variable: `i`
       --> gateway/src/gateway.rs:170:49
        |
    170 | ...                   for i in 0..3 {
        |                           ^ help: if this is intentional, prefix it with an underscore: `_i`
        |
        = note: `#[warn(unused_variables)]` on by default
    
    warning: `eclipsecon-gateway` (lib) generated 1 warning
    
    opened by danbev 0
  • Add --flash-address to provision command

    Add --flash-address to provision command

    This commit adds the --flash-address command line option for the provision binary it is a mandatory command line option. I've set this to the storage address of the microbit which seemed to be the right thing to do but hopefully someone will correct me if this is incorrect.

    opened by danbev 0
  • Add instructions for using local drogue-iot/btmesh

    Add instructions for using local drogue-iot/btmesh

    This commit adds instructions as comments to Cargo.toml about how to use a local checkout of drogue-iot/btmesh.

    The motivation for this is that it might be helpful for users wanting to investigate the btmesh code by making local updates like adding logging etc.

    opened by danbev 0
  • Add info log statement to firmware example

    Add info log statement to firmware example

    This commit adds a single info level log statement to the firmware example.

    The motivation for this is that I think it might be helpful for users to add their own logging when exploring/developing during the hackaton, and with this change they won't have to think about importing defmt::info.

    opened by danbev 0
  • Use explicit imports for btmesh_nrf_software

    Use explicit imports for btmesh_nrf_software

    This commit add an explicit import/use for btmesh_nrf_software::Driver.

    The motivation for this is that for someone new it might not be obvious which crate the Driver used in main comes from.

    opened by danbev 0
  • Add meshd/lib .bak files to .gitignore

    Add meshd/lib .bak files to .gitignore

    The motivation for this is that these files show up as untracked files:

    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    	infra/meshd/lib/b67cef0dd1b2451fa54f8d34edba371b/node.json.bak
    	infra/meshd/lib/fe8817cb1d0d4250b35de88939277c3a/node.json.bak
    
    opened by danbev 0
  • Create hackathon example quarkus applications

    Create hackathon example quarkus applications

    Applications should be well documented with a few examples/tasks that need completion by participants.

    Key features to show:

    • Handling cloudevents in microprofile and quarkus
    • Accessing kafka directly?
    • Developer experience deploying app to openshift?
    • Running as serverless and using knative?
    opened by lulf 1
Owner
Eclipse IoT Working Group
This organization is managed by the IoT Working Group at the Eclipse Foundation. It host open source repositories that are not tied to any specific project.
Eclipse IoT Working Group
Hackathon project, not production ready (yet)

Ledger Nano PIV Application This is a Ledger Hackathon project targeted on building a PIV compatible Ledger Nano X/S+ application. The focus of this a

Ledger 6 Dec 20, 2022
Implementation of Sunny's Mesh Security talk (Hackathon / Prototype status)

mesh-security (Hackathon / Prototype status) An implementation of Sunny's Mesh Security talk from Cosmoverse 2022. This should run on any CosmWasm ena

CosmWasm 83 Apr 17, 2023
Modern Cryptographic Firmware

Trussed® Modern Cryptographic Firmware Status Very much WIP. Actively developed. Unstable APIs.

Trussed® 300 Dec 16, 2022
The public source and documentation for Xenon iOS tweak.

THE GUIDE HAS BEEN MOVED TO THE WIKI This is the public source for the Xenon iOS tweak. The full version is available for $1.99 on Chariz. Differences

aspen 1 Dec 28, 2022
A holistic, minimal documentation portal for the Polkadot developers.

polkadot-sdk-docs A holistic, minimal documentation portal for the Polkadot developers. Master Tutorial The very, very rough plan that I have so far i

Parity Technologies 9 May 26, 2023
A CLI application which allows you to archive Urbit channels and all linked content in them.

The Urbit Content Archiver is a small CLI application that exports channels from your Urbit ship and auto-downloads any directly linked content locall

Robert Kornacki 33 Sep 25, 2022
Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.

foundry Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. Foundry consists of: Forge: Ethe

Georgios Konstantopoulos 5.1k Jan 9, 2023
A secure development tool box and fintech application made with Rust to be used for developing cryptocurrencies on the blockchain.

Crypto Fintech Tools for Rust (CFT) Dependencies Rust MacOS Homebrew # xcode cli tools xcode-select --install # install dependencies using Homebrew b

Phil Hills 1 Apr 15, 2022
Plutonium is a two-device chat application that utilises WebSockets and a X25519 ECDH Key Exchange

Plutonium is a two-device chat application that utilises WebSockets and a X25519 ECDH Key Exchange, in addition to AES-256 to securely communicate between the two clients.

brxken 0 Jul 29, 2022
An application for creating encrypted vaults for the GNOME desktop.

Vaults An application for creating encrypted vaults for the GNOME desktop. It currently uses gocryptfs and CryFS for encryption. Please always keep a

Martin Pobaschnig 51 Dec 17, 2022
Unified directories for different use cases of an application, providing standard directories for local development, when run as service or when run by a user.

UniDirs Unified directories for different use cases of an application, providing standard directories for local development, when run as service or wh

Dominik Nakamura 3 Sep 30, 2022
A network application framework for Rust

This crate is deprecated! This crate is deprecated without an immediate replacement. Discussion about a successor can be found in tokio-rs/tokio#118.

Tokio 700 Dec 12, 2022
A minimal esp-hal application template for use with cargo-generate

{{ project-name }} A minimalist template for use with cargo-generate to create no_std applications targeting Espressif's line of SoCs and modules. At

esp-rs 35 Dec 29, 2022
Reference application for connecting to the TAPLE DLT network.

⚠️ TAPLE is in early development and should not be used in production ⚠️ TAPLE Client TAPLE (pronounced T+ ?? ['tapəl]) stands for Tracking (Autonomou

Open Canarias 8 Feb 15, 2023
Peer-to-Peer, incentive social feed application on Linera

ResPeer: Peer-to-Peer content publishing application on Linera ResPeer on Linera ResPeer is a Peer-to-Peer content publishing application on Linera. R

null 10 Aug 17, 2023
A CLI application that implements multi-key-turn security via Shamir's Secret Sharing.

agree agree is a CLI tool for easily applying multi-key-turn security via Shamirs Secret Sharing. Project state agree is unstable. Version semantics:

Alexander Weber 19 Aug 29, 2023
A simple command-line application to securely store secrets using encryption

rust-secret-vault A simple yet robust command-line tool designed to safely encrypt and store your sensitive information. Harnessing the power of AES-2

Luis Soares 4 Nov 22, 2023
IBC modules and relayer - Formal specifications and Rust implementation

ibc-rs Rust implementation of the Inter-Blockchain Communication (IBC) protocol. This project comprises primarily four crates: The ibc crate defines t

Informal Systems 296 Dec 31, 2022
Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world.

Note to readers: On December 1, 2020, the Libra Association was renamed to Diem Association. The project repos are in the process of being migrated. A

Diem 16.7k Jan 8, 2023