- CI: Update to Grafana 9.5.7 and 10.0.3
- Grafana: Only permit numeric fields to be established on Graph panels.
Other types will make the panel croak like
InfluxDB Error: unsupported mean iterator type: *query.stringInterruptIterator
orInfluxDB Error: not executed
. - Documentation: Modernize documentation and migrate to Read the Docs https://kotori.readthedocs.io/
- [TTN] Add TTS (The Things Stack) / TTN (The Things Network) decoder. Thanks, @thiasB and @u-l-m-i.
- [TTN] Decode metadata from full TTN payload. Thanks, @thiasB.
- [DA] Add per-device addressing and topic decoding strategies. Thanks,
@thiasB and @ClemensGruber. Examples:
mqttkit-1/device/123e4567-e89b-12d3-a456-426614174000
mqttkit-1/channel/network-gateway-node
- [TTN] Add documentation about multi-tenant data acquisition using only a single TTN Application. Thanks, @thiasB, @einsiedlerkrebs, and @ClemensGruber.
- [core] Fix error when connecting to MQTT broker without authentication credentials
- [docs] Refactor "decoders" section to "integrations", and improve index/overview page
- [export] Improve export capabilities by adding parameters
sort
,direction
,limit
, andscalar
. Thanks, @ClemensGruber.
- Add documentation about running Kotori with RabbitMQ as MQTT broker, see :ref:`mqtt-broker-rabbitmq`
- Allow connecting to individual MQTT broker per application
- Improve MQTT logging when connection to broker fails
- Make MQTT broker credential settings
username
andpassword
optional - Adjust logging format re. milli/microseconds
- Because accessing dashboards by slug has been removed with Grafana 8, Kotori
will now use the slug-name of the data channel for all of Grafana's
uid
,name
andtitle
fields. - Improve decoding fractional epoch timestamps
- Update to
numpy<1.24
on Python >3.10 - Replace
Bunch
withMunch
- Stop converging
latitude
andlongitude
ingress fields to tags. It has been implemented as a convenience case when processing LDI data, but it is not applicable in standard data acquisition scenarios, specifically when recording positions of moving objects. Thanks, @tonkenfo.
- Improve sandbox and CI setup, software tests and documentation
- Update to Twisted <23
- CI: Update to Grafana 7.5.17, 8.5.15, and 9.2.6
- CI: Update to MongoDB 5.0
- Tests: Remove
nosetests
test runner, replace withpytest
- Build: Use
python -m build
for building sdist and wheel packages - Add support for Python 3.10 and 3.11
- Drop support for Python 3.5 and 3.6
- CI: Modernize GHA workflow recipe
- Documentation: Add link checker and fix a few broken links
- Documentation: Update to Sphinx 5
- Add software tests for simulating all advanced actions against Grafana.
- Publish single reading in JSON format to MQTT broker and proof that a corresponding datasource and a dashboard was created in Grafana.
- Publish two subsequent readings in JSON format to MQTT broker and proof that a corresponding datasource and a dashboard was first created and then updated in Grafana.
- Publish two subsequent readings to two different topics and proof that a corresponding datasource and a dashboard with two panels has been created in Grafana.
- Publish two subsequent readings to two different topics and proof that a corresponding datasource and two dashboards have been created in Grafana.
- Add support for Variometer CSV import
- CI: Use Grafana 8.2.1 and 7.5.11
- Add compatibility with Grafana 8
- Add possibility to adjust MongoDB URI in configuration file
- Fix and improve package building
- CI: Stop running tests for Python 3.5 on CI
- QA: Improve tests on HTTP API for data acquisition
- CI: Add testing against Python 3.9
- CI: Run tests against different versions of Mosquitto, InfluxDB and Grafana
- Aftermath from upgrading to Python 3:
- Fix HTTP data acquisition once more
- Aftermath from upgrading to Python 3:
- Fix Luftdaten and Hiveeyes vendor applications
- Fix HTTP data acquisition
- Improve setup documentation
- Adjust
numpy
dependency once more to aid installation onarm32v7
andarm64v8
.
- Further relax constraints on
tables
andnetCDF4
dependencies.
- Further relax constraints on
cryptography
andscipy
dependencies.
- Relax constraint on
bokeh
dependency to aid installation on Python 3.5 / Debian "stretch".
- Relax constraint on
matplotlib
dependency to aid installation on Python 3.5 / Debian "stretch".
- Add support for Python 3.5 / Debian stretch.
- Improve logging for Grafana Api Client
- Fix logging when running under pytest with "--capture=no"
- Address compatibility with Grafana 7.4.0
- Fix error logging after migration to Python 3
- Overhaul package building
- Upgrade to Python 3
The updated :ref:`tasmota-decoder` introduces a breaking change as the database field names emitted by the decoder will change.
For example,
AirQuality
will now beSonoffSC.AirQuality
,Temperature
might be calledDS18B20.Temperature
and so on.We have been too lazy in the past. Sorry.
- Honor "Time" field submitted by devices running Tasmota
- Make Tasmota decoder grok double-nested payloads from Wemos devices
- Add decoder for message payloads from Airrohr devices
- Add
pool_size
option to[influxdb]
configuration section. Thanks, @adrianlzt!
- Fix logger
- Refactor decoder subsystem
- Add "lan" strategy and "basic" application This implements a flat MQTT topic namespace for simplifying addressing and getting started documentation.
- Upgrade to influxdb==5.3.0 module and fix tests
- Update documentation, now using "Material for Sphinx" theme
- Add :ref:`kotori-faq` section
- Add FAQ sections about :ref:`data-acquisition-in-a-nutshell`, :ref:`grafana-vs-export` and :ref:`weewx-mqtt-faq`.
- Add FAQ section about :ref:`processing-tags`
- Update example configuration and documentation
- Improve Tasmota decoder documentation
- Improve Docker image building
- Add packaging for Ubuntu 18 Bionic Beaver
- Add MQTT/InfluxDB integration tests
- Add MQTT/Grafana integration tests
- Add tests covering all timestamp formats/units
- Add tests covering the Tasmota decoder
- Add test for vendor "hiveeyes"
- Add MQTT/HTTP integration tests for HTTP data acquisition
- Add tests for HTTP API export features
- Add tests for InfluxDB tag heuristics
- Add test for publishing discrete values to MQTT
- Add tests for publishing events using MQTT and HTTP
- Add test covering telemetry from Homie
- Add test for WeeWX integration
- Add test for legacy MQTT topic suffix
- Add basic data export example for Arduino/HTTP
- Adjust packaging again
- Adjust packaging again
- Adjust packaging again
- Prepare Docker image building for operating Kotori https://hub.docker.com/orgs/daqzilla
- Adjust packaging. Thanks, @RuiPinto96 and @Dewieinns!
- Adjust packaging for Debian stretch vs. buster
- InfluxDB adapter: Interpret "latitude/longitude" fields as tags
- Fix Terkin telemetry client for PHP5 to PHP7. Thanks, Markus and Christian!
- Fix sandbox installation
- Add basic support for ingesting SENSOR telemetry data from devices running the Sonoff-Tasmota firmware. Thanks, Roh!
- Add support for ingesting STATE telemetry data from Sonoff-Tasmota devices.
- Add documentation for the Sonoff-Tasmota Decoder
- Improve error signalling within "boot_vendors"
- Slightly refactor ingress timestamp processing
- Disable timestamp precision hack for WeeWX
- Fix problem with time precision detection heuristics for ingress timestamps. Thanks, Richard!
- Fix Metastore database connection woes
- Attempt to fix dependency woes with the "idna" package
- Fix HTTP handler after upgrade to Twisted 18.9.0
- Add missing "service_identity" module Twisted complained about and rebalance dependencies
- Fix Debian package dependencies
- Improve documentation
- Fix wrong Trove classifiers in
setup.py
blocking the upload to PyPI
- [io] Add "datetime" field to list of valid timestamp fields on data ingress
- [:ref:`vendor-luftdaten.info`] Move Luftdatenpumpe to https://github.com/hiveeyes/luftdatenpumpe
- Delete NaN values from ingress payload. Thanks, wtf!
- Implement UNIX Epoch time precision detection heuristics for ingress timestamps. Thanks, wtf!
- [package] Use Docker for Debian package building
- [io] Improve unicode support
- [io] Warn if topic could not be classified
- [io] Add "measure" topic suffix to topic classifier to retain backwards compatibility
- [grafana] Properly quote measurement names for annotations in JSON templates
- [:ref:`vendor-hiveeyes`] Add "hiveeyes" tag to all instant Grafana dashboards
- [:ref:`vendor-hiveeyes`] Improve per-node Grafana dashboard re. field name classification
- [core] Improve component loading robustness
- [core] Improve log level selection when (not) running with
--debug-mqtt-driver
- [code] Module namespace refactoring
- [io] Make MQTT client identifier more unique by adding process id
- [io] Improve resiliency when connecting to InfluxDB and Grafana
- [io] Fix MQTT error signalling
- [import] Also accept the CSV field "Date" as field containing timestamp information
- [command] Add
kotori-selftest
program, still in its infancy - [firmware builder] Add "esp_root" configuration variable to example configuration file
- [package] Improve list of suggested packages to ease installing on more modern Debian distributions
- [env] Switch development environment from Docker to native
- [grafana]
- Improve Grafana dashboard builder in the context of Hiveeyes
- Use specific Grafana folder for stuffing instant dashboards into
- Use topology information for deriving unique dashboard id from
- Add basic mechanisms for taming the dashboard refresh interval
- Refactoring. Robustness. Run GrafanaManager as service. Add worker service for taming dashboard refresh intervals.
- Relocate template resources (.json files)
- Subsystem refactoring
- Implement sensible rules for dashboard refresh interval taming
- Properly talk to Grafana 5: Fix compatibility with dashboards having
schemaVersion
6 (old) vs. 16 (new) - Properly compute dashboard identity. Don't use the
uid
field for stable addressing as it is limited to 40 characters. - Allow unicode strings for dashboard names
- Allow multiple graphing subsystems/managers for a single data acquisition channel driver
- [:ref:`vendor-luftdaten.info`] Improve `luftdatenpumpe.py`_
- Add option
--dry-run
- Fix filtering by station id
- Fix access to Nominatim reverse geocoder API
- Use "appdirs" module for computing cache location
- Report about cache location at startup
- Add option
- [:ref:`vendor-hiveeyes`] Add per-node Grafana dashboard for beekeepers. Thanks, weef!
- [doc]
- Add comments to MqttInfluxGrafanaService regarding ingress data enrichment
- Use ptrace.getkotori.org for documentation media assets
- Correct GitHub repository url
- Add documentation about Nginx reverse proxy setup
- Add installation instructions for macOS
- [export] Fix raw data export
- [export] Properly apply charset encoding for data export
- [doc] Update documentation for vendors :ref:`vendor-luftdaten.info` and :ref:`vendor-weewx`
- Re-add export/influx.py lost during refactoring
- Fix InfluxDB UDP data acquisition
- Tap into error signalling over MQTT
- Minor updates to vendor :ref:`vendor-luftdaten.info` docs & co.
- Fix regression re. CSV data acquisition
Vendor :ref:`vendor-luftdaten.info`:
- Update Grafana dashboard "grafana-by-location.json". Thanks, Richard!
- Update documentation
Fix data convergence re.
time
field
- Attempt to improve InfluxDB write performance by using UDP protocol for vendor :ref:`vendor-luftdaten.info`
- Fix variable naming, references, data conversion and exception handling
- Attempt to improve InfluxDB write performance
- luftdatenpumpe: Configure Nominatim cache directory conditionally
Improve InfluxDB database creation behaviour
-
Add geospatial data acquisition capabilities
Improve `luftdatenpumpe.py`_:
- Generic commandline interface
- Caching for Nominatim responses
- Appropriate timestamp mungling
- Documentation
Add
LuftdatenGrafanaManager
for provisioning appropriate Grafana dashboards
:ref:`firmware-builder` improvements:
- Don't pull all build parameters into the artefact filename
as this might raise
OSError: [Errno 63] File name too long
. - Automatically derive "MQTT_TOPIC" from telemetry channel address information
- Update firmware builder configuration for vendor :ref:`vendor-hiveeyes`
- Don't pull all build parameters into the artefact filename
as this might raise
- Add standalone program `luftdatenpumpe.py`_ to request data from live data API of luftdaten.info, enrich geospatial information and publish to MQTT bus. Thanks, Richard!
- Add documentation and configuration for vendor :ref:`vendor-luftdaten.info`. Thanks again, Richard!
- Fix HTTP routing for :ref:`firmware-builder`
- Fix python module dependency woes re. OpenSSL on Darwin vs. Linux
- Make Kotori run even without having
pandas
installed (w/oexport
extras) - Improve error logging in bootstrapping phase
- Add support for architecture "ESP" to :ref:`firmware-builder`
- Make transaction logging interval configurable, default to 60 seconds to reduce log traffic significantly
- Add vendor :ref:`vendor-weewx`: Tune MQTT data acquisition to support the weeWX_ weather station software. Thanks, Jan!
- Add CSV convenience for importing data from http://archive.luftdaten.info/
- Fix CSV import exception handling
- Properly use MQTT authentication also when publishing MQTT messages received via HTTP
- Fix setup.py again
- Fix setup.py
- Connect to the MQTT broker with authentication (default: kotori/kotori) to be able to apply Mosquitto ACLs to distinct MQTT topics. Thanks, Alex!
- Concurrency improvements: Don’t use the main reactor thread for MQTT message processing, use a different thread pool instead.
- Ubuntu 16.04 compatibility: Nail some more Python dependency modules. Thanks, Alex!
- Work on Ubuntu 16.04 compatibility: Nail some more Python dependency modules
- Add Python dependency
python-dateutil
- Tap into data transmission from Homie_-based sensor nodes for ESP8266 (e.g. `node-wifi-mqtt-homie.ino`_). See also :ref:`json-homie`. Thanks, Alex!
Prepare CSV import of http://archive.luftdaten.info/. Thanks, Richard!
- Allow semicolon (
;
) as separator for CSV import - Allow CSV field
timestamp
as alias for datetime
- Allow semicolon (
Publish Grafana v4.2.0-beta1 debian packages to package repository, see :ref:`foundation-packages` and :ref:`setup-debian`.
Fix SSL runtime dependency woes
AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'
with Twisted-17.1.0 vs. python-openssl vs. pyOpenSSL. Thanks, Matthias!
- Don’t always send http responses as text/plain
- Catch MongoDB database errors, log and respond appropriately
- Upgrade some Python modules
- Fix Grafana dashboard builder for vendor :ref:`vendor-hiveeyes`
- Data export: Fix addressing with relative timestamp, e.g. /data.txt?from=now-30d
as well as proper handling of
include
andexclude
url parameters
Get rid of
/bus/mqtt
in URI for HTTP APIDelegate MQTT message processing to separate thread
Run
CREATE DATABASE
only once to improve performanceAccept timestamp field
time
from sensor readingsImprove HTTP ingress channel performance, use appropriate worker threading
Add data acquisition channel using CSV over HTTP for single and bulk readings
Make CSV import format compatible with data from Open Hive and Beelogger. Cheers Clemens and Markus!
Grafana Dashboard builder subsystem
- Improve robustness
- Add new fields to existing panels on demand. Thanks, Smilie!
- Improve panel generator for vendor :ref:`vendor-hiveeyes`
Refactor data transformation machinery subsystems
Add API endpoints and routing for creating timeseries annotations
Start introducing :ref:`MQTT content type signalling <hiveeyes:topology-spec-0.2>`
Drop support for InfluxDB 0.8
Verify compatibility against InfluxDB 1.1.1, see also:
Verify compatibility against Grafana 4.1.1, see also:
- https://grafana.com/blog/2016/12/12/grafana-4.0-stable-release/
- https://web.archive.org/web/20190331043137/http://docs.grafana.org/guides/whats-new-in-v4/
- https://web.archive.org/web/20190331043137/http://docs.grafana.org/guides/whats-new-in-v4-1/
- https://github.com/grafana/grafana/blob/v4.6.5/CHANGELOG.md#411-2017-01-11
Add
mongod
as Debian package dependency, required for CSV acquisition supportImprove documentation
Improve logging
- Fix Debian package re. superfluous
local
folder containing a redundant Python virtualenv. Thanks Smilie! - Fix receiving discrete measurements via MQTT. Thanks Karsten and Clemens!
- Update Git repository url for hacking on Kotori
- Improve documentation
- Documentation updates, add system diagrams to vendor :ref:`vendor-hiveeyes`
- Export csv and json data with ISO format timestamps to satisfy dygraphs rendering in Firefox
- Don't add "pad=true" or "backfill=true" when "interpolate=true" parameter was obtained from URL
- Improve robustness of http api parameter evaluation and passing
- Improve Vega asset loading: Use https resources, better safe than sorry
- Add export format ".tsv" (text/tab-separated-values)
- Update documentation
- Rebuild without having "ggplot" installed on the build host
- Fix timeseries plotting by using
pad
andbackfill
appropriately - Add export parameters "exclude", "include", "interpolate" and "sorted"
- Fix data routing and processing
- Add license to documentation
- Quick hack for making :ref:`firmware-builder` endpoint not convert numeric values to floats
- Packaging fixes
- Attempt to fix huge dependency chain when installing with --install-recommends --install-suggests
- Fix missing runtime dependency "simplejson" (required by cornice)
- Use matplotlib
agg
backend - Improve ggplot rendering context, add font for rendering xkcd theme
- Upgrade to pandas 0.18.1
- Honor https scheme in reverse proxy setups
- Packaging: Remove Python dependency on crossbar, can be installed through
pip install crossbar==0.13.0
- Packaging: Depend on more distribution packages to reduce package size
- Fix Debian runtime dependencies
- Always emit lowercase values from
WanBusStrategy.sanitize_db_identifier()
- When querying InfluxDB, quote table name (series/measurement) if identifier starts with a numeric value
- Add "exclude" parameter to HTTP API for mitigating scaling/outlier problems when plotting
- Fix "Excel worksheet name must be <= 31 chars." by introducing "compact" title
- Flexible InfluxDB data export and plotting machinery through HTTP, see :ref:`data-export` and :ref:`http-api-export`.
- Some words about the background and configuration of the :ref:`firmware-builder`.
- Add :ref:`firmware-builder` for automated builds of Arduino projects for vendor :ref:`vendor-hiveeyes`.
- Add HTTP-to-MQTT protocol forwarder component, see :ref:`forward-http-to-mqtt`
- Add Terkin PHP, a HTTP API library for :ref:`daq-php`, supports PHP5 and PHP4
- Relocate configuration blueprints in etc/examples
- Update default credentials for Grafana 3.x compatibility (admin/admin)
- Start HTTP server service only once, even when having multiple HTTP-to-X forwarders defined
- Improve: Software releasing, package building and publishing. Both amd64 and armhf. See :ref:`kotori-release`, :ref:`kotori-build` and :ref:`setup-debian`.
- Improve: :ref:`getting-started`, :ref:`vendor-hiveeyes` and :ref:`setup-arch-linux`
- Add licenses AGPL 3.0 and EUPL 1.2
- Start :ref:`grafana-handbook` and :ref:`kotori-handbook` with appropriate clients
- Improve :ref:`application-mqttkit`
- Add :ref:`sawtooth-signal`
- Add :ref:`mosquitto-on-osx`
- Various improvements across the board
- Add a whole section about :ref:`data-acquisition` to the handbook providing a tour around the different ways to transmit telemetry data. This is Terkin in the belly of Kotori.
- Update default credentials for Grafana 3.x in Kotori configuration (admin/admin)
Vendor :ref:`vendor-hiveeyes`
- Integrate and absorb communication style and subsystems of :ref:`vendor-hiveeyes`/:ref:`beradio` into core
- Refactor into generic Twisted service MqttInfluxGrafanaService, then implement the :ref:`vendor-hiveeyes` vendor application on top of it
Vendor :ref:`vendor-lst`
- Improve command line tooling per
lst-message <channel> info
: Display common information about a data channel like the configuration object and the names of all structs. - Improve logging and debugging
- Optionally put legend on the right hand side of the graph
- Improve configuration, logging, debugging and documentation
- Improve internal settings handling and application bootstrapping
- Introduce service-in-service infrastructure
- Make default Grafana panel not use
steppedLines: true
, smooth lines are more beautiful when displaying sine curves - Add MqttKitApplication, a generic application modeled after and using the :ref:`vendor-hiveeyes` vendor infrastructure
- Add PahoMqttAdapter: Migrate from `twisted-mqtt`_ to the Eclipse Paho MQTT Python client library `paho-mqtt`_, to enable running more than one MQTT adapter instance
- Introduce concept of "applications", which are native Twisted services and can be bootstrapped by defining them in the configuration file
- Add composite application completely declared by configuration settings
- Adapt :ref:`vendor-hydro2motion` and :ref:`vendor-lst` to infrastructure changes
- Upgrade libraries Twisted, autobahn, crossbar, msgpack and influxdb
- Improve Grafana gracefulness when finding a corrupt panel
- Overhaul configuration subsystem
- Try to reconnect to MQTT broker in interval if initial connection fails
- Add license, improve packaging and package publishing
- Document how to :ref:`run-on-pypy`
- Improve documentation at :ref:`kotori-about` and :ref:`kotori-readme`
- Add CSS3 Hexagon Buttons 1.0.1 and more static assets
- Add Entypo pictograms by Daniel Bruce
Vendor :ref:`vendor-lst`
- resolve collision on parsed C header files when using identical filenames for different channels
- add project "proptest"
Vendor :ref:`vendor-hiveeyes`
- improve configuration file
hiveeyes.ini
and logging - fix Grafana panel creation re. Grafana 2.6.0 compatibility, Grafana 2.1.3 still works though
- fix Grafana panel creation re. InfluxDB select expression
- don’t put global realm
hiveeyes
into Grafana dashboard name - improve Grafana panel automation
- accept single values on mqtt topic
- tune the default Grafana dashboard and panel
- documentation updates
Modularize python dependencies into extra features
Debian packaging using FPM
- Read designated package version from setup.py
- Use virtualenv-tools for relocating virtualenvs
- Add systemd service configuration file
- Documentation refactoring and improvements
- overhaul configuration files, activate
hydro2motion
channel with vendor :ref:`vendor-lst` - fix hydro2motion re. database authentication
- lst: improve documentation
Vendor :ref:`vendor-lst`
- add sattracker application
- fix WAMP serialization error when publishing binary data (e.g. "char 0x9c") by using MsgPack serialization
- augment c source file before compilation re.
#include "mbed.h"
vs.#include "stdint.h"
- parse transformation rules from source code annotation
- apply transformation rules before publishing to software bus
- fix grafana dashboard update when having no panels
- nasty hack to get proper struct initializer data from CParser results
- show
average
column in Grafana - flexible compiler detection re. Linux vs. Mac OSX (MacPorts)
- improve error handling when using interactive commands
- explicitly convert values to float when evaluating SymPy expressions
- influxdb: prevent float<->integer casting errors by converting all numerical values to float
- upgrade to python influxdb-2.10.0
- rename
etc/lst-h2m.ini
toetc/lst.ini
- generalize h2m-message and sattracker-message into lst-message
- specify configuration file via KOTORI_CONFIG environment variable
- add
lst-message list-channels
command - wording: change
application
tochannel
- refactor configuration mechanics
Proof-of-concept for vendor :ref:`vendor-lst`
- add struct definitions of h2m project
- add basic udp message sender in c++ based on h2m struct definitions
- add infrastructure for parsing schema mappings from c/c++ header files based on pyclibrary
- instantiate structs from compiled c/c++ header files/libraries
- introduce struct registry for bookkeeping and runtime dispatching
- decouple lst/h2m specific struct registry behavior based on ID attribute
- add initial docs about lst/h2m spikes
- properly tweak "h2m_structs.h" to be grokked by patched pyclibrary
- make message receiving actually work in dry-dock, improve pretty-printing
- add command line entrypoint
h2m-message
withdecode
andinfo
actions - implement
h2m-message send
- lst main application component: receive, decode and store binary messages
- automatic Grafana dashboard- and panel creation
- add release and documentation infrastructure through Makefile targets
- fix panel generation for vendor hiveeyes
- use nanosecond time precision with InfluxDB
- lst: honour struct field order in Grafana
- add more details to Grafana dashboard panels
- improve error messages
h2m-message send/decode
- generalize c library adapter, multi-project capabilities for vendor lst
Proof-of-concept for vendor :ref:`vendor-hiveeyes`
- upgrade foundation libraries: Twisted, Autobahn, Crossbar
- receive messages via MQTT and store data points into InfluxDB
- storage: add support for InfluxDB 0.9
- storage: minor tweaks to enable influxdb database authentication
- receive telemetry data from BERadio
- grafana datasource- and dashboard automation
- Sort "collect_fields" result before passing to grafana manager
Vendor :ref:`vendor-hydro2motion`
- refactor hydro2motion code
- add frontend foundation based on Pyramid web framework
- add jQuery, Bootstrap, Fontawesome, html5shiv and respond.js
- add material design for bootstrap
- add prototype html based on SB Admin 2 bootstrap template
- add modernizr and underscore
- add foundation for page transitions from codrops
- http: cache really static resources longer than volatile ones
- ui: add pages with page transitions, about content, etc.
- refactor project layout
- use configuration file instead of hardcoded configuration values
- improve logging
- hydro2motion: production improvements from May 2015 in Rotterdam
Vendor :ref:`vendor-hydro2motion`
- ui: set map position to Munich
- ui: add lat long conversion
- backend: use InfluxDB on localhost
- backend: process complete Fuelcell telemetry data package
Proof-of-concept for vendor :ref:`vendor-hydro2motion`
- ui: add d3 and rickshaw
- ui: add timeseries prototype
- ui: add cbuffer.js
- ui: use ringbuffer for telemetry data
- backend: more convenient default setting: listen on all interfaces
- sensors: add temp sensor
- backend: store telemetry data to sqlite database
- middleware: reduce lag because of debug messages
- middleware: disable heartbeat
- backend: add mongodb adapter
- ui: add leaflet map
- ui: fix image baseurl for leaflet.js
- ui: add marker to leaflet widget
- ui: be graceful to old wire format for telemetry data
- backend: store latitude and longitude into databases
- ui: mapview: let the marker follow the position (map.panTo), but disable it
- backend: add database adapter for InfluxDB and some documentation along the lines
- improve documentation
- ui/backend: add persistent configuration store
- ui: add bootstrap-editable css
- namespace refactoring from ilaundry.node to kotori.node
- upgrade javascript libraries to autobahn 0.10.1, add crossbar configuration
- partial upgrade to autobahn 0.10.1
- backend: add udp adapter
- node: reactivate heartbeat
- node: mplayer user-agent hack for correctly spelling umlauts
- ui: indicate motion activity from node
- ui: indicate node online/offline state
- ui: indicate privacy mode
- ui: button for toggling operator presence
- ether: refactored node registration, send hostname along
- ui: layout refactoring, display more details
- ui: introduce Bootstrap, jQuery, underscore, etc.
- ui: reflect multinode capabilities
- modularized into three components: master, node, web
- single-daemon mode
- first feature set on top of Adafruit_BBIO.GPIO
- Multiple nodes for real [NodeRegistry]
Proof-of-concept for vendor :ref:`vendor-ilaundry`
- Two daemons: master service and node service
- Communication infrastructure on top of Autobahn using PubSub
- Text-to-speech on top of Google Translate TTS
- Basic HTML Dashboard GUI for sending text messages