monitorowanie napięcia ładowania - wykres
: 04 lutego 2024, 01:22
co chcemy osiągnąć
Celem opisanych tu czynności jest stworzenie skryptów i serwerów, których współdziałanie ma na celu rysować nam wykresy stopnia naładowania naszych stacji. Takie wykresy możemy sobie oglądać w sieci lokalnej lub (jeśli mamy zewnętrzny/publiczny oraz statyczny adres IP) to możemy również dać zewnętrzny dostęp do naszych wykresów. Wykres możesz obejrzeć pod adresem "http://195.93.250.233/" ale nie obiecuję, że będzie on jeszcze tam dostępny.


co potrzebujemy
- Jeden z naszych urządzeń z modułem radiowym LoRa musi być podłączony do naszego serwera przewodem USB.
- System operacyjny linux
- Maszynę na której wykonamy wszystkie operacje. Maszyna nie musi być mocna, wystarczy np. zwykłe Raspberry PI ZERO.
Podłączamy do naszej maszyny LoRę, czyli np. naszą płytkę LILYGO z modułem radiowym LoRa. Wszystko mamy oczywiście zaprogramowane projektem meshtastic i ustawione tak jak ma być. Nasza LoRa widzi pozostałe urządzenia w sieci.
Gdzieś na naszej maszynie tworzymy skrypt bash dajmy na to o nazwie skrypt.sh np.:
skrypt.sh
zakładam, że wykonanie programu "meshtastic --nodes" daje prawidłowe wyniki i jest pobierana lista urządzeń z naszej LoRy, jeśli tak nie jest to wykonujemy listę poleceń celem instalacji kilku narzędzi:
Ale wracając do naszego jakże skomplikowanego skryptu skrypt.sh. Pobiera on listę urządzeń z LoRy i wysyła tą listę do pliku "/home/user/nodes". Po utworzeniu tego skryptu zwróć uwagę abyś był właścicielem pliku Ty, a nie root, czyli wykonaj:
oraz nadaj prawo wykonywalności dla Twojego skryptu:
Teraz przechodzimy do edycji pliku crontab:
w którym na końcu dopisujemy:
Czyli co godzinę będziemy wykonywać nasz skrypt. Oczywiście zamiast user wpisujemy swoją nazwę użytkownika, to chyba jasne?
Kolejne czynności będą wymagały od nas instalacji serwera WWW apache + PHP. Gdy dokonasz instalacji, możemy przejść dalej. Przejdź z powrotem do edycji naszego skryptu skrypt.sh i dopisz do niego takie oto polecenia:
Powyżej wykonujemy czynności związane z wyciąganiem 4 danych z pliku /home/user/nodes. Wyszukiwania "grep" dokonuje poprzez identyfikatory urządzeń LoRa da9e4154, 6d003784 , da9e5348 oraz da9e34e4 . Później musze dokonać pewnego manewru poprzez polecenie "tr -s". Operacja polega na zamianie znaku "|" na znak "+". Następnie poprzez "tr -d" kasuje białe znaki. Operacja "cut -d" powoduje, że wyświetlam tylko dane pomiędzy znakami "+", ale musimy określić dokładnie za którym znakiem "+". W tym przypadku mamy wpisaną liczbę 15, ale możliwe, że będzie potrzeba pobawić się tą liczbą. W moim przypadku pomiędzy tymi znakami "+" jest informacja o stanie naładowania akumulatora, ale możliwe, że u Ciebie będzie to na pozycji 14stej lub 16stej. Może to zależeć od okoliczności, których nigdy nie poznam ale tak już jest i tyle
Ostatni zabieg "cut -d %" to skasowanie znaku procenta, gdyż nam rozchodzi się o wyciągnięcie samej liczby. Gdy w pliku dane.csv będą dodatkowe znaki prócz liczb to wykres się nie zbuduje.
Wyciągnięte przez nas dane wysyłamy do pliku "/var/www/html/dane.csv". Możemy uruchomić X razy nasz skrypt skrypt.sh aby przekonać się, czy dane w ogóle są wyciągane. W skrypcie mamy podgląd wyciągniętych danych "echo $a" więc od razu zobaczymy, czy coś udało się wyciągnąć.
Zobaczmy jak powinien wyglądać nasz cały skrypt:
Nie trudno się domyślić, że to właśnie z tego pliku dane.csv jest rysowany wykres. Dane w tym wykresie wyglądają np. tak:
do którego wklejamy takie treści:
Mamy tutaj podpisane 4 lokalizacje, jako:
trzeba by zmodyfikować w ten sposób:
poniżej jeszcze mamy linijkę:
którą również przerabiamy analogicznie:
Oczywiście wcześniejszy skrypt skrypt.sh też musimy odpowiednio zmodyfikować, aby dane w pliku dane.csv zostały tak samo zmienione ale to jest raczej oczywiste?
W powyższym skrypcie w pliku index.php jest skrypt JS o nazwie "loader.js". Należy go pobrać stąd:
https://lora.waw.pl/wspolne/loader.js
i umieścić w tej samej lokalizacji, czyli "/var/www/html".
Celem opisanych tu czynności jest stworzenie skryptów i serwerów, których współdziałanie ma na celu rysować nam wykresy stopnia naładowania naszych stacji. Takie wykresy możemy sobie oglądać w sieci lokalnej lub (jeśli mamy zewnętrzny/publiczny oraz statyczny adres IP) to możemy również dać zewnętrzny dostęp do naszych wykresów. Wykres możesz obejrzeć pod adresem "http://195.93.250.233/" ale nie obiecuję, że będzie on jeszcze tam dostępny.


co potrzebujemy
- Jeden z naszych urządzeń z modułem radiowym LoRa musi być podłączony do naszego serwera przewodem USB.
- System operacyjny linux
- Maszynę na której wykonamy wszystkie operacje. Maszyna nie musi być mocna, wystarczy np. zwykłe Raspberry PI ZERO.
Podłączamy do naszej maszyny LoRę, czyli np. naszą płytkę LILYGO z modułem radiowym LoRa. Wszystko mamy oczywiście zaprogramowane projektem meshtastic i ustawione tak jak ma być. Nasza LoRa widzi pozostałe urządzenia w sieci.
Gdzieś na naszej maszynie tworzymy skrypt bash dajmy na to o nazwie skrypt.sh np.:
skrypt.sh
Kod: Zaznacz cały
#!/bin/bash
meshtastic --nodes > /home/[b]user[/b]/nodes
Kod: Zaznacz cały
sudo apt-get update
sudo apt-get upgrade
sudo apt install python3-pip
pip3 install --upgrade pytap2
sudo usermod -a -G dialout user
sudo pip install esptool
sudo apt-get install esptool
sudo apt -y install python3-pip
sudo apt install python2
pip3 install --upgrade "meshtastic>=1.2.0"
sudo reboot
Kod: Zaznacz cały
chown [b]user.user[/b] skrypt.shKod: Zaznacz cały
chmod a+x skrypt.sh
Kod: Zaznacz cały
sudo nano /etc/crontabKod: Zaznacz cały
0 */1 * * * [b]user [/b]/home/[b]user[/b]/skrypt.shKolejne czynności będą wymagały od nas instalacji serwera WWW apache + PHP. Gdy dokonasz instalacji, możemy przejść dalej. Przejdź z powrotem do edycji naszego skryptu skrypt.sh i dopisz do niego takie oto polecenia:
Kod: Zaznacz cały
sleep 15
czas=$(date '+%d.%m %H:%M')
a=`grep da9e4154 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
b=`grep 6d003784 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
c=`grep da9e5348 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
d=`grep da9e34e4 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
echo ",['$czas','$a','$b','$c','$d']" >> /var/www/html/dane.csv
echo $a
echo $b
echo $c
echo $d
Wyciągnięte przez nas dane wysyłamy do pliku "/var/www/html/dane.csv". Możemy uruchomić X razy nasz skrypt skrypt.sh aby przekonać się, czy dane w ogóle są wyciągane. W skrypcie mamy podgląd wyciągniętych danych "echo $a" więc od razu zobaczymy, czy coś udało się wyciągnąć.
Zobaczmy jak powinien wyglądać nasz cały skrypt:
Kod: Zaznacz cały
#!/bin/bash
meshtastic --nodes > /home/[b]user[/b]/nodes
sleep 15
czas=$(date '+%d.%m %H:%M')
a=`grep da9e4154 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
b=`grep 6d003784 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
c=`grep da9e5348 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
d=`grep da9e34e4 /home/user/nodes | tr -s "│" "+" | tr -d " " | cut -d + -f 15 | cut -d % -f 1`
echo ",['$czas','$a','$b','$c','$d']" >> /var/www/html/dane.csv
echo $a
echo $b
echo $c
echo $d
Teraz w lokalizacji /var/www/html/ tworzymy plik:,['04.02 00:05','85','48','93','94']
Kod: Zaznacz cały
sudo nano index.phpKod: Zaznacz cały
<html>
<head><!DOCTYPE HTML>
<html lang="pl-PL">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['data', 'KCE_centrum', 'KCE_Wełnowiec', 'KCE_Piotrowice', 'SIE_Bytków'],
['data i godzina',0,0,0,0]
<?PHP include('dane.csv'); ?>
]);
var options = {
title: 'stacje niezależne / procent naładowania [ Katowice / Siemianowice ]',
curveType: 'function',
legend: { position: 'bottom' }
};
var chart = new google.visualization.AreaChart(document.getElementById('curve_chart'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="curve_chart" style="width: 100%; height: 95%"></div>
</body>
</html>
Według powyższego wycinka z pliku "dane.csv" stacja KCE_centrum ma 85% naładowania, stacja KCE_Wełnowiec ma 48% naładowania itd. według kolejności, ale nic nie stoi na przeszkodzie aby zmniejszyć / zwiększyć ilość wyświetlanych danych. Np. dla 8śmiu stacji powyższą linijkę:['data', 'KCE_centrum', 'KCE_Wełnowiec', 'KCE_Piotrowice', 'SIE_Bytków'],
Kod: Zaznacz cały
['data', 'KCE_centrum', 'KCE_Wełnowiec', 'KCE_Piotrowice', 'SIE_Bytków'],Kod: Zaznacz cały
['data', 'stacja_1', 'stacja_2', 'stacja_3', 'stacja_4', 'stacja_5', 'stacja_6', 'stacja_7', 'stacja_8'],Kod: Zaznacz cały
['data i godzina',0,0,0,0]Kod: Zaznacz cały
['data i godzina',0,0,0,0,0,0,0,0]W powyższym skrypcie w pliku index.php jest skrypt JS o nazwie "loader.js". Należy go pobrać stąd:
https://lora.waw.pl/wspolne/loader.js
i umieścić w tej samej lokalizacji, czyli "/var/www/html".