๐Ÿš€ Simple IoT Releases

v0.4.1

  • docs: add Modbus user documentation.
  • docs: add Notification user documentation
  • data/merge.go: fix bug if text and value are both 0
  • support Debug levels in serial MCU client: 0=no messages, 1=ascii log, 2=dump rx data
  • serial MCU client: fix issue where reset error count was not working
1 Like

v0.4.3

  • serial MCU: display rx/tx stats and any extra points in UI
1 Like

v0.5.0

Latest

NOTE, this is a testing release where we are still in the middle of reworking
the store and various clients. Upstream functionality does not work in this release. If you need upstream support, use a 0.4.x release.

The big news for this release is switching the store to SQLite and moving rule and db functionality out of the store and into clients.

  • switch store to sqlite (#320)
  • rebroadcast messages at each upstream node (#390)
  • extensive work on client manager. It is now much easier to keep your local client config synchronized with ongoing point changes. Client manager also now supports client configurations with two levels of nodes, such as is used in rules where you have a rule node and child condition/action nodes.
  • fix bug with fast changes in UI do not always stick (#414)
  • move rules engine from store to siot client (#409)
  • move influxdb code from store to client package (#410)
  • replace all NatsRequest payloads with array of points (#406)

Switching to sqlite increased the compressed binary increased in size about 1MB from ~7.5 to ~8.5MB. There must be a lot of Go code required to transpile libc to Go. At some point, weโ€™ll need to slim things back down a bit if we are going to deploy app updates over CAT-M modems. There are several options for this:

  • remove the HTTP package โ€“ itโ€™s not needed at the edge.
  • use native sqlite package โ€“ does not required Go libc stuff
  • see if there is any way to slim down NATS (weโ€™re not using Jetstream, etc).

I wonder this should have been a new major release at This point but maybe once upstream support is complete itโ€™s worth calling it 1.0

yeah, that is a good question โ€“ I really hesitate to release 1.0 as then you are promising API compatibility to all 1.x releases. Before 1.0, APIs can change as much as you want.

I think weโ€™re getting much closer to stable API, but at this point, APIs are still changing some โ€“ not in big ways, but still require small tweaks to app code. I probably also need to un-export a bunch of package functions before 1.0 as currently there is way too much stuff exported that should probably be classified as internal. When I started programming in Go, I did not understand that itโ€™s best to start with unexported functions, and then carefully export package functions as needed. Could also make use of the internal/ package directory to solve some of this.

v0.5.1

  • handle config changes in influx db client
  • lifecycle improvements
    • fix race condition in http api shutdown
    • shutdown nats client after the rest of the apps
    • store: close nats subscriptions on shutdown
  • Addeed Signal generator โ€“ can be used to generate arbitrary signals (currently, high rate Sine waves only)
  • add NATS subjects for high rate data (see API)
  • add test app to determine point protobuf sizes
  • fix syncronization problem on shutdown โ€“ need to wait for clients to close before closing store, otherwise we can experience delays on node fetch timeouts.
  • fix issue when updating multiple points in one NATS message (only the first got written) (introduced in v0.5.0)
  • Serial MCU Client:
    • added debug level for logging points and updated what logging levels mean.
    • donโ€™t send rx/tx stats reset points to MCU
    • support high-rate MCU data (set message subject to phr).

v0.5.2

  • Breaking change: the node hash type has changed from a string to an int,
    which requires deleting the database and starting over.
  • switch from Genesis to go-embed for embedding frontend assets
  • add embedded assets FS wrapper to allow embedding compressed assets and we
    decompress them on the fly if requested.
  • add elm.js.gz to repo. This will allow us to run SIOT without building the
    frontend first. Should enable stuff like
    go run github.com/simpleiot/simpleiot/cmd/siot and allow using SIOT server
    as a Go package in other projects.
  • add server API to add clients. This will allow customization of what clients
    are used in the system, as well as easily adding custom ones.
  • fix version in SIOT app to be Git version (was always printing development)

You can now do things like: go run github.com/simpleiot/simpleiot/cmd/siot@latest

1 Like

v0.6.0

  • improve error handling in serial client cobs decoder
  • rename upstream โ†’ sync
    • re-implement node hash using CRC-32 and XOR hash
    • re-implement upstream sync using new hash mechanism
    • write tests for sync
  • implement siot log subcommand โ€“ this dumps SIOT messages
  • implement siot store subcommand โ€“ used to check and fix store
  • simpleiot-js frontend library changes
    • re-worked to use updated NATS API
    • added sendEdgePoints API function
    • added unit tests, linting, etc.
1 Like

Sync support just got better:

v0.6.1

  • fix bug in influx db client due to recent API changes
  • fix bug in client manager where Stop() hangs if Start() has already exited
  • donโ€™t allow deleting of root node
  • allow configuring of root node ID, otherwise, UUID is used
  • sync:
    • add option to configure sync period (defaults to 20s).
    • if upstream node is deleted on the upstream, it is restored
    • donโ€™t include edge points of root node in hash calculation. This allows node
      to be moved around in the upstream instance and other changes.

steadily it keeps getting better.

v0.6.2

  • moved the node type from node point to edge field. This allows us to index
    this and make queries that search the node tree more efficient.
  • support for processing clients in groups. Previously, client nodes had to be a
    child of the root device node.
  • fix issue with siot log due to previous NATS API change

The store and sync code is hopefully nearing production quality. At this point, most of the know issues have been worked through.

1 Like

v0.7.0

v0.7.1

  • upgrade frontend to elm-spa 6 (#197)
  • apply elm-review rules to frontend code and integrate with CI (#222)
  • changes so user does not have to log in if backend or browser is restarted (#474)
    • frontend: store JWT Auth token in browser storage
    • frontend: store JWT key in db
  • use air instead of entr for watching Go files during development. This allows siot_watch to work on MacOS, and should also be userful in a Windows dev setup.

See the Hot reloading the Simple IoT UI for a demo of these changes.

v0.7.2

  • fix race condition with clients that have multi-level nodes (ex Rule client)
    #487
1 Like

v0.8.0

  • update elm-watch to v1.1.2
  • add system, application, and process
    metrics (#256, #255)
1 Like

v0.9.0

  • change default HTTP port from 8080 to 8118. This should reduce conflicts with
    other apps and require us to configure the HTTP port less often. (#495)
  • BREAKING CHANGE: change protobuf point.value encoding from float to double
    (#291) This change introduces a protocol change so all instances in a system
    will need to be updated. If this is a problem, let us know and we can work out
    a migration.
  • sqlite schema: change time storage from two fields (time_s, time_ns) to single
    time that contains NS since Unix epoch.
  • documentation cleanup (#509)
  • move particle code to client and add UI (#503). See Particle client docs.
  • simplify serial MCU encoding (#517)
  • improve serial MCU UI point display
  • use Go crypto/rand API instead of /dev/random. Fixes Windows issues (#517)

Nice to get the Particle code moved to a client. Below, we are reading two 1-wire temperature sensors using the SIOT Particle Cellular Gateway.

v0.10.1

Simple IoT v0.10.1 has support for various Shelly IoT devices. See the documentation for more details.

Shelly IoT devices provide excellent value. They are reasonably priced and have a lot of nice features:

  • an open API
  • support multiple protocols (HTTP, CoAP, MQTT, mDNS, etc)
  • nicely packaged โ€“ very small such that you can embed them directly in existing outlet and switch boxes.
  • well documented

This is just the start โ€“ we plan to add support for more Shelly devices in the coming months โ€“ let us know what youโ€™d like to use. Help testing devices I donโ€™t personally own is greatly appreciated.

shelly support is awesome !! I can deploy it at home now. Perhaps running on a rpi edge gateway

v0.10.2

  • default to control being disabled for shelly devices and add UI to enable control (#544)

v0.10.3

  • use mDNS responses to set shelly IO back online
  • Client Manager: improve filtering of points โ€“ see
    Message echo

(Lifecycle stuff is tricky. In this case, we improved the Client Manager to solve this problem as well as help future clients.)