Zainspirowany sterownikiem "charts" (wykresy) z wieloma funkcjami i możliwościami pomyślałem o małej alternatywie, pozwalającej wygenerować prosty wykres SVG danych.
Szczególnie spodobała mi się możliwość nie ładowania kodu JS z "zewnątrz" mojej sieci, ale możliwość przechowywania małej wersji we flashu (chociaż teraz może być możliwe umieszczenie charts.js w lfs, może nawet gziped).
Jako przykład pomyślałem o zapisywaniu temperatury chipa w kompaktowy sposób: Mierzyć np. co 30 sekund i zapisywać wartość skompresowaną w 8-bitowym uincie.
Zdecydowałem się na zakres od -15,0°C do +110°C w krokach co 0,5°, więc potrzebujemy 125*2 = 250 wartości (z 255 możliwych dla 8 bitów).
Użyty prosty ringbuffer znajduje się w osobnym pliku, więc może być później użyty w sterowniku graficznym do współdzielenia kodu ringbuffera.
Tak więc do przechowywania potrzebujemy tylko 100 bajtów dla 100 temperatur z rozdzielczością 0,5°
Jeśli mamy tylko punkty danych w równych krokach czasowych, możemy w ogóle pominąć przechowywanie czasu, jeśli możemy żyć z małym błędem:
Wysyłamy punkty danych i przyjmujemy rzeczywisty czas jako czas ostatniej zmierzonej wartości (więc na wykresie występuje niewielki błąd), a każdy punkt wcześniejszy jest <timestep> wcześniejszy.
Kod i artefakty z włączonym sterownikiem można znaleźć w PR #1346 .
Po minimalnej pierwszej wersji jest teraz realizowany jako sterownik, który można uruchomić z opcjonalnym argumentem <timestep>:
.
Oto kilka zrzutów ekranu:
Wzrost rozmiaru wynosi około 2,5 tys:
W800 +2.5k
W600 +2,3k
BK7231N +2,3k
Szczególnie spodobała mi się możliwość nie ładowania kodu JS z "zewnątrz" mojej sieci, ale możliwość przechowywania małej wersji we flashu (chociaż teraz może być możliwe umieszczenie charts.js w lfs, może nawet gziped).
Jako przykład pomyślałem o zapisywaniu temperatury chipa w kompaktowy sposób: Mierzyć np. co 30 sekund i zapisywać wartość skompresowaną w 8-bitowym uincie.
Zdecydowałem się na zakres od -15,0°C do +110°C w krokach co 0,5°, więc potrzebujemy 125*2 = 250 wartości (z 255 możliwych dla 8 bitów).
Użyty prosty ringbuffer znajduje się w osobnym pliku, więc może być później użyty w sterowniku graficznym do współdzielenia kodu ringbuffera.
Tak więc do przechowywania potrzebujemy tylko 100 bajtów dla 100 temperatur z rozdzielczością 0,5°
Jeśli mamy tylko punkty danych w równych krokach czasowych, możemy w ogóle pominąć przechowywanie czasu, jeśli możemy żyć z małym błędem:
Wysyłamy punkty danych i przyjmujemy rzeczywisty czas jako czas ostatniej zmierzonej wartości (więc na wykresie występuje niewielki błąd), a każdy punkt wcześniejszy jest <timestep> wcześniejszy.
Kod i artefakty z włączonym sterownikiem można znaleźć w PR #1346 .
Po minimalnej pierwszej wersji jest teraz realizowany jako sterownik, który można uruchomić z opcjonalnym argumentem <timestep>:
startdriver savetemps <optional time between measures, defaults to 30 seconds>Oto kilka zrzutów ekranu:
Wzrost rozmiaru wynosi około 2,5 tys:
W800 +2.5k
W600 +2,3k
BK7231N +2,3k
Fajne? Ranking DIY