- ⬆️ cargo update
- ✨ Sentry logging integration #137
- ✅ More Tado unit tests
- ⬆️ Bump
sentry
- ⬆️ cargo update
- ⬆️ cargo update
- 🥅 Add the middleware to catch HTTP errors
- ⚗ Try using SQLite connection pool with the newer SQLx
- ⬆️ Bump
sqlx
- ⬆️ cargo update
- ⬆️ cargo update
- ⬆️ Bump
surf
- ✨ Trying to improve performance, drops all the readings #143
- ⬆️ cargo update
- 💚 Fix publishing to crates.io #141
- 🔧 Simplify cross-build configuration #141
- 💚 Fix cross-builds for Raspberry Pi #141
- 💚 Fix cross-builds for Raspberry Pi #141
- 💚 Fix cross-builds for Raspberry Pi #141
- 💚 Fix Docker login in the publish workflow #141
- 💚 Fix cross-builds for Raspberry Pi #141
- 🔊 Emit warnings when
upsert_messages
takes too much time #143 #146
- 🚑 Emit warning events to Sentry #137
- ✨ Sentry integration, closes #137
- 💥 Move some command-line options to the settings
- 🐛 Fix
select_sensor_reading_count
- 🔇 Remove thread IDs from the logs
- 💥 Telegram
send_video
is temporarily removed until future refactoring - 💥 Replace
reqwest
withsurf
to get rid of thetokio
dependency which caused async runtime errors, implicitly closes #139 - 🥅 Use
anyhow
crate instead of the customError
structure, closes #138
- 🚑 Fix the high CPU usage, closes #143
- 🎨 Remove carets from the dep versions
- ⬆️ Bump
rhai
to0.18.3
- ♻️ Refactor the deps, remove unused features
- ⚡️ Improve compilation times by disabling the default features
- ⚗ Add
--no-web-server
option to debug the high CPU usage bymy-iot
process #143
- 🚑 Fix default SQLx journal mode #143
- ⚗ Try plain old mutex instead of the WAL mode #142
- ⚗ Try WAL mode to avoid "database is locked" #142
- 📝 Update the installation docs
- 🚧 Use
rust-embedded/cross
instead of my custom images (the CI builds got broken by SQLx anyway)
- 👷 First run tests and only then – the rest of the checks
- ⚡️ Replace
rusqlite
withsqlx
, closes #140 (note: produces too much logging, set--silent
) - ♻️ Extract the queries to constants
- 🚑 Fix the nested
block_on
, closes #136 - ➖ Remove
reqwest::blocking
dependency - ⬆️ Upgrade the dependencies
- 🚑 Allow the message bus to continue after the Rhai service panics #136
- ♻️ Refactor
services::rhai::telegram
for better stacktraces
- 🚧 Philips Hue bridge discovery #132
- ✨ Go async!
- 🔥 Remove thread names
- ♻️ Refactor
services::telegram
andservices::rhai::telegram
- ♻️ Move migrations into the separate module
- ♻️ Move the message counter initialization into
Bus
- ⚡️ Remove unnecessary cloning of messages in the database thread
- 🔥 Remove the condition to avoid storing of BLOBs into the database
- 💡 Improve documentation comments
- ⬆️ Upgrade dependencies
- 💥 Change the value serialization and drop all the sensors and readings #133
- 🚧 Support writable sensors #98
- ⬆️ Upgrade dependencies
- ♻️ De-duplicate code in
buienradar
anddb
- 🔥 Remove unnecessary imports
- ⚡️ Remove unnecessary
cloned()
calls - ♻️ Refactor Telegram bindings in Rhai
- ⬆️ Upgrade dependencies
- ♻️ Initialize
Rhai
in the main thread since I use aSync
engine - ♻️ Extract the duplicated code into
crate::services::helpers::expect
- ✨
SimpleAnomalyDetector
, closes #125
- ✨ New
--suppress-log-timestamps
CLI option, closes #111 - 💥 Replace the
http_port
setting with thehttp.port
setting
- ⬆️ Upgrade dependencies
- ✨ New
sensor_pattern
setting forRhai
service to allow the easy filtering - ✨ New
Threshold
service #115
- 💥 YouLess: replace the
url
setting with thehost
setting
- 🚸 Add coloring for
Value::BatteryLife
- 💥
Value::WindDirection
is dropped in favour ofValue::StringEnum
- 🚸 Notify when there is no data points for a chart
- ♻️ Use
TryInto
to convert values for a chart - ♻️ Introduce
TryInto
conversions forValue
and use them inrhai
- ♻️ Refactor
Value
conversions - 🚸 Notify when there is no chart for a sensor
- 🚸 Add navigation link to the book
- ⬆️ Upgrade dependencies
- ✨ Add a short alias for the
--service-id
option - ♻️ Use
matches!
macro where applicable - ✨ New
is_online
sensor for Ring doorbells - 🚸 Make Home and Settings navbar items visible on mobile devices
- ⚡️ Remove unnecessary OpenSSL dependency
- 🗑 Remove unnecessary
engine.register_type
calls - 🔇 Suppress
sending on a disconnected channel
, closes #112 - 🗑 Remove the publish caching because it doesn't work anyway
- ⚡️ Use
slim
image for Raspberry Pi builds #117
- ⚗ Fix the caching #117
- ⚗ Checking the caching of the Docker images #117
- ⚗ Fix the caching #117
- ⚗ Checking the caching of the Docker images #117
- ⚗ Use BuiltKit caching to speed up the publish action #117
- ⚗ Cross-building for
armv7-unknown-linux-gnueabihf
- 🥅 Do not fail the entire recordings loop when failed to download a one Ring recording
- ⚗ Increase the
CLIENT
timeout to mitigate api.ring.com slowness
- ⚡️ Avoid unnecessary cloning of binary large objects
- ✨ Add
options
parameter to Telegram in Rhai #93 #18 - 💥 Removed content type from
Value::Blob
. I'll usetree_magic
later, if needed
Let's try some gitmoji in the changelog!
- ✨ Implement Rhai
telegram.send_video
function #93 #18 - ♻️ Refactor
Telegram
calls
- Ring minimum viable service #61
- Changed
Telegram.send_message
interface
- Remove the service worker cache because it doesn't play well with basic authentication
- Raise an error for any unsuccessful response in the service worker
- Remove
migrations
for a while – I want to redesign it - Add user data database API
- Refactor the service
spawn
functions - Designing the Ring.com service #61
- Fix
credentials: same-origin
for PWA
- Drop
Lua
service #93
- Change
Telegram
Rhai interface and refactor theRhai
code #93
spawn_process
logging #93
- Rhai scripting, closes #93
- Fix
index
hero title - Rhai scripting (in progress) #93
- Enable
Counter
andDataSize
forf64
charts
- Fix
human_format
for the strict zeroes
- Fix rain sensors for OpenWeather, rename sensors
- OpenWeather API service, closes #16 #110
- Sensor auto-refresh period to depend on a selected chart period #105
- Remove the Raw data section
- Room title is now obligatory and defaults to
"Home"
- Cache only 2xx responses, closes #104
- Set caching headers on statics, closes #103
- Drop sensor TTLs, closes #102
- Display sensor reading count
- Delete sensors from the UI, closes #9
- Update
askama
- Fix overflow on mobile #51
- Fix
ETag
comparison #2
- Fix
ETag
for NGINX #2
- Implement
ETag
for the sensor view #2
- Fix PWA display style
- Fix
crossOrigin
on the PWA manifest
- PWA, closes #51
- Refactor
Value
rendering - Fix kWh-to-joules conversion and display energy in Wh
- Improve the chart title
- Remove
make install
andmake uninstall
targets - Decrease tado° refresh period to 3 minutes
- Add
make tag
andmake tag/publish
targets
- Improve
Power
colors and fixTemperature
colors
- Sensor side panel
- Fix
None
icon
- Upsert messages in bulks #97
- Fix
::open_window_activated
message type - Add sensor JSON link to the sensor page, closes #94
- Add side navigation panel, closes #96
- Fix 500 on the Settings page
- Print message count in the footer, closes #52
- Remove extra calls in Tado° service #73
- Fix sensor titles
- Refactor Tado° service #73
- Add
--service-id
CLI option to run only specified services - Replace rustdoc with mdBook
- Emulate Tado° Open Window Detection Skill #73
- Wrap
upsert_into
into a single transaction #97
- Increase YouLess
default_interval_millis
- Added more Tado° sensors
- Added the sensor TTL options
- Removed the
uom
andrmp-serde
dependencies and changed the serialization format, thus dropped sensors, readings and migrations (requires to re-create the database) - Added YouLess service #53
- Added more Tado° sensors
- Bunch of refactorings
- Bundled Font Awesome, closes #95
- Initial charts #88
- Introduced an individual sensor time-to-live, closes #86
- Add the first sensor to Tado° #73
- Renamed Buienradar
wind_speed_bft
towind_force
- Lower
default_max_sensor_age_ms
to 14 days - Added ambient temperature to the dashboard
- Got rid of
supervisor
, thus*::is_running
sensors have disappeared
- Settings view page
my-iot
now accepts multiple settings files. They're concatenated and the result is parsed as if it was a single TOML file.Telegram
andSolar
secrets have been moved into the separatesecrets
section, it means that from now on you can split secrets and non-secrets between different TOML files.
Service intercommunication via "fake" messages doesn't play that nice. However, it was mainly meant to work with the old Automator
, which is now replaced with Lua
. Thus, I remove this functionality and leave Write
messages only to actually change existing sensor value. Fake sensors become discouraged since now.
Telegram
service won't listen to Write
messages anymore. Use service methods from Lua instead.
All sensors and readings will be dropped again. Sensor primary and foreign keys have been changed to SeaHash-ed sensor IDs. This allowed removing the dependency on auto-generated primary keys.
Settings file is now specified as an optional positional argument: my-iot my-iot.toml
.
Nest
service has been removed due to the Google migration.
Switched to Rocket.
Unified sensor IDs by changing my-iot::*
to my_iot::*
.
Lua
service gets the new settings, filter_sensor_ids
and skip_sensor_ids
, to simplify filtering (out) messages that will be passed to onMessage
.
This release removes the old Automator
in favour of the new Lua
service.
Also, I'm removing the automatic *::update
and *::change
events, because they require additional database queries to be executed on each event. If needed, similar functionality can be implemented in Lua. See, for example, the recipe to send new Nest camera animations to Telegram.
Service
trait is re-introduced to simplify service instantiation.
New Solar
service is introduced to emit durations before and after sunset and sunrise.
- Bundle most of the statics, closes #77
- Remove
disabled_services
from settings - Lua automation #59
- New sensors for
Db
- Spawn
Db
service by default - Bunch of refactorings
- Introduce
ConnectionExtensions
instead of standalone functions - Denormalize
sensors
to speed up selecting actual values from a large database on low-performance boards
- Add initial room title support
- Different sizes for dashboard cards
- Bump Bulma, bump Askama, fix navbar active flag
- Performance tricks, closes #72
- Bump Rust version
- New: sensor titles #10
- Fix: latest reading formatting
- Chore: improve database migrations
- Chore: order dashboard by
sensor_id
- Fix: only one migration gets applied on a startup (critical)
- Fix: use
FULL
synchronous on SQLite
- Break: use
rmp-serde
anduom
for readings persistence, the migration will delete all readings #69 - New: database migrations #55
- Opt: upgrade
reqwest
, userustls
#70
- Chore: upgrade Rust #70
- Fix: upgrade to OpenSSL
1.1.1d
- Opt: refactor message bus #58
- Opt: refactor
main
- Opt: split
services
intocore
and service-dependent parts - Chore: improve
Dockerfile
#64 - Break: remove unimplemented danger zone on the sensor page
- Fix: sensors got recreated for each new reading (critical)
- Chore: do not mark release as a prerelease anymore to allow getting the latest release via GitHub API #64
- Fix: GitHub Actions
- Fix: GitHub Actions
- Fix: GitHub Actions
- Fix: GitHub Actions
- New: publish releases on GitHub
This release brings the different database schema, which should work faster and take less disk space. The new schema is backwards-incompatible.
- Break: change sensor value serialization #50
- Break: re-structure modules #50
- Break: change database schema #50
- New: cross-compilation for Raspberry Pi Zero (W) #62
- Chore: Telegram producer thread returns
Result
- Break: switch to structopt #41
- New: logging level option #40
- New: sunrise and sunset fields for Buienradar
- Fix: docs link
- Chore: simplify Buienradar date/time deserialization #36
- Chore: switch to
simple_logger
#42
- Break: update thread closures to return
Result
#34 - Break: run a supervised thread in a loop #34
- New: send
my-iot::start
message on startup - New: thread
is_running
sensor #34 - New: Status page link (no page itself yet)
- Opt: use
crossbeam-channel
instead ofbus
#28 #33
- Break: drastically change service spawn interface #18
- Break: remake actions
- New: initial Telegram service #18
- New: send sensor update and change messages
- New: scenario conditions and actions are optional
- Fix: make
disabled_services
setting optional - Opt: remove useless database cache
- Break: use TOML instead of YAML for configuration
- New: initial Telegram support #18
- New:
Condition::Or
is able to accept any number of child conditions - Opt: speed up database with cache #23
- Chore:
cargo update
- Chore: rename
crate::reading
intocrate::message
- Chore: add
crossorigin="anonymous"
to Font Awesome script - Chore: update docs and add redirect to
my_iot
- Opt: vacuum database on startup #14
- Chore: move docs to Wiki
- Chore:
cargo update
- Fix: bump
eventsource
to0.4.0
- Chore:
cargo update
- Fix: rollback to
eventsource
from crates.io
- Fix: bump
eventsource
to fix build on Raspberry Pi
- Opt: remove
openssl
dependency - Chore:
cargo update
- Chore: bump Bulma to
0.7.5
- Chore:
cargo update
- Fix: danger zone layout
- Opt: use
bus
withstd::sync::mpsc
instead ofmultiqueue
to reduce CPU usage
- Fix: thread names
- Opt: switch back to
multiqueue
- Chore: use module path plus service ID as thread name
- New: add danger zone #9, not functional yet
- Opt: add
loading="lazy"
to theImageUrl
renderer - Break: services will exchange messages instead of readings
- Opt: use
multiqueue2
- New: Nest camera snapshot URL
- Break: change Nest sensors to include device type
- Chore: get rid of
humansize
crate - Fix: render inline and non-inline items differently
- Break: replace
crossbeam-channel
withmultiqueue
for the broadcasting - New: more automator conditions
- New:
human_format
for human-readable value formatting - New:
Automator
service, unusable yet - Chore: basic unit test for
Buienradar
- Break: change
:
sensor separator to::
- Chore: remove some
unwrap()
s - New:
--settings
command-line option - New:
--db
command-line option
- Chore: prepare for publishing
- Chore: learn to not use
unwrap()
- Chore: implement unimplemented value rendering
- Break: key-value store will store different data types in their own tables
- Break: remove status page, it is not yet clear what it should contain
- Break: use
crossbeam_channel
for message passing so that other services could listen to readings too - Break: use service IDs as sensor prefixes
- Chore: make use of
serde
default attribute - New: dark theme via
bulma-prefers-dark
- New: Nest API service and a few initial sensors
- Break: add
expires_ts
to the key-value store - Break: rename
Measurement
intoReading
- Break: services must spawn threads themselves
- New: add
/sensors/{sensor}/json
endpoint - New: add
is_persistent
flag toReading
- New: generic persisted JSON key-value store
- Break: introduce service IDs
- Chore: refactor service initialisation & running
- New: add favicons
- New: set thread names
- New: status page
- New: add individual sensor page