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".