OpenBeken posiada teraz skryptowalny sterownik wykresów, który umożliwia wyświetlanie dowolnej liczby zmiennych z dowolną liczbą osi. Oznacza to, że można na przykład wyświetlić historię temperatury i wilgotności, napięcie lub moc, lub praktycznie każdą dowolną zmienną. Odbywa się to całkowicie bez Home Assistant, wszystko jest obsługiwane przez urządzenie OBK. Tutaj pokażę podstawową konfigurację tego sterownika i kilka przykładowych skryptów go wykorzystujących.
Ten samouczek zakłada, że masz już wgrany OBK:
https://github.com/openshwprojects/OpenBK7231T_App
OBK może działać na wielu platformach, w tym:
- BK7231T ( WB3S , WB2S , WB2L, etc)
- BK7231N ( CB2S , CB2L , WB2L_M1 , itd.)
- BK7231M , jest to nie-Tuya wersja BK7231N z klawiszami 00000000, również czasami w wersji BL2028.
- T34 bazuje na BK7231N , patrz flashing trick .
- BL2028N to wersja BK7231N od Belon
- XR809 ( XR3 itd)
- BL602 ( SM-028_V1.3 etc ), patrz też BL602 flash OBK via OTA tutorial .
- LF686 (flashuj go jako BL602 )
- W800 (W800-C400, WinnerMicro WiFi & Bluetooth), W801
- W600 (układ WinnerMicro), W601 ( WIS600, ESP-01W , TW-02 , TW-03 , etc)
- LN882H by Lightning Semi - datasheet , zobacz flashing how-to , zobacz przykładowy rozbiór urządzenia i flashowanie , zobacz nowe narzędzie do flashowania , zobacz płyta urządzenia
- Windows, poprzez symulator
- ESP32 (platforma WIP)
Zacznijmy od sprawdzenia, czy nasza kompilacja posiada sterownik "charts":
Jeśli go nie ma, ustaw ENABLE_DRIVER_CHARTS na 1 w obk_config.h dla pliku wybraną platformę, postępując zgodnie z paragrafami "Kompilacje na żądanie" i "Dostosowywanie własnej kompilacji" w tym przewodniku, aby uzyskać niestandardową kompilację online (nie jest wymagany toolchain):
https://www.elektroda.com/rtvforum/topic4033833.html#20946719
Ok, teraz zakładam, że masz sterownik "charts" w swojej kompilacji.
Wykresy można więc utworzyć w pliku autoexec.bat. Jeśli nie wiesz, gdzie utworzyć autoexec.bat, zobacz ten samouczek:
Teraz, gdy masz już gotowe podstawy, nadszedł czas, aby sprawdzić kilka przykładowych skryptów wykresów!
Najpierw musisz poznać podstawowe kroki, a następnie przyjrzymy się przykładowym skryptom. Tak więc, kroki są następujące:
1. uruchomienie sterownika wykresu
2. ustawienie liczby próbek (są one przechowywane w pętli), liczby zmiennych i liczby osi
3. ustawienie nazw zmiennych i ich odpowiednich osi
4. ustawić osie
5. dodać dane do wykresu
Na początku może się to wydawać skomplikowane, ale jest to bardzo proste, sprawdźmy próbki.
I zanim zapomnę - we wczesnych wersjach może być również konieczne dodanie jeszcze jednej komendy do autoexec.bat - musisz wyłączyć odświeżanie strony za pomocą:
IndexRefreshInterval 100000
Być może zostanie to wkrótce naprawione. Aktualizacja dynamicznych wykresów nie jest jeszcze gotowa.
Przykładowy wykres 1 - najprostszy wykres temperatury
Jest to przykład podstawowego wykresu wyświetlającego dane temperatury w czasie, jednak do celów demonstracyjnych dane są zakodowane na sztywno. Wykres zawiera 16 próbek danych i koncentruje się na jednej zmiennej, "Temperatura", wykreślonej na jednej osi.
// Sample 1
// single variable chart
startDriver charts
// chart with max 16 samples, 1 variable and single axis
chart_create 16 1 1
// set the temperature variable with axis
chart_setVar 0 "Temperature" "axtemp"
// setup axis
// axis_index, name, flags, label
chart_setAxis 0 "axtemp" 0 "Temperature (C)"
// for demonstration purposes, add some data at fixed times
// First argument is NTP time value
chart_add 1725606094 20
chart_add 1725616094 22
chart_add 1725626094 26
chart_add 1725636094 30
chart_add 1725646094 28
chart_add 1725656094 27
Wynik:
Przykładowy wykres 2 - wiele zmiennych jednego typu
To samo podejście można zastosować do wyświetlania wielu pomiarów tego samego typu. Tutaj, na przykład, wyświetlamy 3 różne wartości temperatury:
// Sample 2
// Three temperature variables chart
startDriver charts
// chart with max 16 samples, 3 variables and single axis
chart_create 16 3 1
// set variables along with their axis
chart_setVar 0 "Kitchen" "axtemp"
chart_setVar 1 "Outside" "axtemp"
chart_setVar 2 "Bedroom" "axtemp"
// setup axis
// axis_index, name, flags, label
chart_setAxis 0 "axtemp" 0 "Temperature (C)"
// for demonstration purposes, add some data at fixed times
// First argument is NTP time value
chart_add 1725606094 20 15 22
chart_add 1725616094 22 16 23
chart_add 1725626094 26 17 24
chart_add 1725636094 30 14 25
chart_add 1725646094 28 13 22
chart_add 1725656094 27 15 21
Wynik:
Przykładowy wykres 3 - dwie osie y
Sterownik wykresów może również oferować wiele osi y. W ten sposób można na przykład wyświetlać zarówno dane dotyczące temperatury, jak i wilgotności:
// Sample 3
// Two temperatures and one humidity with separate Temperature/Humidity axes
startDriver charts
// chart with max 16 samples, 3 variables and two separate vertical axes
chart_create 16 3 2
// set variables along with their axes
chart_setVar 0 "Room T" "axtemp"
chart_setVar 1 "Outside T" "axtemp"
chart_setVar 2 "Humidity" "axhum"
// setup axes
// axis_index, name, flags, label
chart_setAxis 0 "axtemp" 0 "Temperature (C)"
// flags 1 means this axis is on the right
chart_setAxis 1 "axhum" 1 "Humidity (%)"
// for demonstration purposes, add some data at fixed times
// First argument is NTP time value
chart_add 1725606094 20 15 89
chart_add 1725616094 22 16 88
chart_add 1725626094 26 17 91
chart_add 1725636094 30 14 92
chart_add 1725646094 28 13 92
chart_add 1725656094 27 15 91
Wynik:
Przykładowy wykres 4 - bateria i ciśnienie
Oczywiście można wyświetlać dowolny rodzaj danych. Oto na przykład wykres napięcia i ciśnienia:
// Sample 4
// Battery voltage + pressure
startDriver charts
// chart with max 16 samples, 2 variables and 2 axes
chart_create 16 2 2
// set variables along with their axis
chart_setVar 0 "Battery Voltage" "axvolt"
chart_setVar 1 "Pressure" "axpress"
// setup axis
// axis_index, name, flags, label
chart_setAxis 0 "axvolt" 0 "Battery Voltage (V)"
chart_setAxis 1 "axpress" 1 "Pressure (hPa)"
// for demonstration purposes, add some data at fixed times
// First argument is NTP time value
chart_add 1725606094 3.8 1013
chart_add 1725616094 3.7 1011
chart_add 1725626094 3.7 1012
chart_add 1725636094 3.6 1015
chart_add 1725646094 3.5 1013
chart_add 1725656094 3.4 1014
Wynik:
Przykładowy wykres 5 - trzecia oś y
Chociaż nie jest to zalecane, nadal możliwe jest dodanie trzeciej osi jednostkowej. Oto wykres VCP (napięcie/prąd/moc):
// Sample 5 - try 3 axes
startDriver charts
// chart with max 16 samples, 3 variables and 3 separate vertical axes
chart_create 16 3 3
// set variables along with their axes
chart_setVar 0 "Voltage" "axvolt"
chart_setVar 1 "Current" "axcurr"
chart_setVar 2 "Power" "axpower"
// setup axes
// axis_index, name, flags, label
chart_setAxis 0 "axvolt" 0 "Voltage (V)"
chart_setAxis 1 "axcurr" 1 "Current (A)"
chart_setAxis 2 "axpower" 2 "Power (W)"
// for demonstration purposes, add some data at fixed times
// First argument is NTP time value
chart_add 1725606094 12 0.5 6
chart_add 1725616094 11.8 0.52 6.14
chart_add 1725626094 11.5 0.54 6.21
chart_add 1725636094 11.3 0.55 6.22
chart_add 1725646094 11.1 0.56 6.22
chart_add 1725656094 10.9 0.58 6.32
Wynik:
Finalny przykład - jak rysować pomiary DHT11?
Wszystkie dotychczasowe przykłady miały na sztywno zakodowane wartości czasu, ale możliwe jest również pobranie czasu z NTP. W tym celu najpierw musimy uruchomić NTP i poczekać na połączenie NTP:
startDriver NTP
waitFor NTPState 1
Następnie możemy cyklicznie wywoływać komendę chart_addNow, np. z podaną zawartością kanału:
// in a loop
again:
// This assumes that $CH1 is temperature_div10
// chart_addNow will take time from the NTP driver
chart_addNow $CH1*0.1
// every 10 seconds
delay_s 10
goto again
Alternatywnie możemy użyć do tego powtarzającego się zdarzenia - to to samo:
// every 10 seconds, -1 means infinite repeats
addRepeatingEvent 10 -1 chart_addNow $CH1*0.1
A potem możemy na tym bazować. Oto pełny kod dla demo DHT11:
// DHT11 setup
IndexRefreshInterval 100000
startDriver charts
startDriver NTP
waitFor NTPState 1
chart_create 48 2 2
// set variables along with their axes
chart_setVar 0 "Temperature" "axtemp"
chart_setVar 1 "Humidity" "axhum"
// setup axes
// axis_index, name, flags, label
chart_setAxis 0 "axtemp" 0 "Temperature (C)"
// flags 1 means this axis is on the right
chart_setAxis 1 "axhum" 1 "Humidity (%)"
// every 60 seconds, -1 means infinite repeats
// assumes that $CH1 is temperature div10 and $CH2 is humidity
addRepeatingEvent 60 -1 chart_addNow $CH1*0.1 $CH2
A oto przykładowe dane wyjściowe (od @divadiow, dziękuję za przetestowanie):
Jak widać, nasz sterownik wykresów może dobrze współpracować z DHT11.
Pamiętaj, że możesz najechać myszką na punkt danych
Jeśli nie jesteś pewien, jaka jest wartość danego punktu danych, zawsze możesz najechać na niego kursorem myszy, aby uzyskać więcej szczegółów:
Komendy wykresu
Podsumowując, wykresy mają następujące polecenia:
| Komenda | . Argumenty | Opis |
| chart_create | samplesCount variablesCount axesCount | Tworzy wykres z określoną liczbą próbek, zmiennymi i osiami. |
| chart_setVar | index varName axisName | Przywiązuje zmienną do określonej osi. |
| chart_setAxis | axisIndex axisName flags label | Ustawia oś z nazwą, flagami i etykietą. Obecnie flagi mogą wynosić 0 (lewa oś) lub 1 (prawa oś) |
| chart_add | ntpTime var1 [var2 ...] | Dodaje dane do wykresu z określonymi zmiennymi w określonym czasie NTP. |
| chart_addNow | var1 [var2 ...] | Dodaje dane do wykresu używając aktualnego czasu NTP. |
Oczywiście mogą one ulec zmianie w przyszłości, więc warto sprawdzić najnowsze dokumenty tutaj:
https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/commands.md
https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/autoexecExamples.md
Planowane funkcje
To jest bardzo wczesna wersja. Wkrótce zostaną wprowadzone pewne ulepszenia:
- wkrótce będzie można określić kolor RGB dla każdej zmiennej
- obecnie OBK używa biblioteki chart.js z sieci, ale planowane jest umożliwienie użytkownikom określenia alternatywnej ścieżki chart.js, aby mogli ją pobrać z własnego serwera
- planowane jest również trwałe przechowywanie danych (zoptymalizowane pod kątem zmniejszenia zużycia pamięci flash).
Możesz również podać własne sugestie dotyczące funkcji, a my dołożymy wszelkich starań, aby je wdrożyć!
Podsumowując
Myślę, że posiadanie wykresów obsługiwanych bezpośrednio na urządzeniu może być bardzo przydatne, szczególnie dla osób, które nie chcą konfigurować własnej instancji Home Assistant. Dzięki naszemu sterownikowi wykresów możesz mieć tylko jedno urządzenie IoT w domu i nadal cieszyć się danymi wykresów. Bez Home Assistant, bez zewnętrznego serwera, nic więcej nie jest potrzebne! Mam nadzieję, że ta mała funkcja okaże się przydatna dla niektórych z was. Bądź na bieżąco, więcej aktualizacji już wkrótce.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.