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.
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).
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.
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)
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
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.
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.
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.