Pora na małą aktualizację. Z racji, że HA używa już u mnie 4ech sterboxów trzeba było trochę zoptymalizować cały układ.
Przede wszystkim wyrzuciłem zbieranie danych ze sterboxa do osobnego skryptu - zbieranie co sekundę z 4 źródeł zaśmiecało dość mocno logi. Dodatkowo w przypdku timeoutu mogło niekorzystanie wpływać na HA.
Dodatkowo dane są wypluwane do ram dysku - to zdecydowanie szybsze działanie przy odczycie sensorów z pliku.
Na początek skrypt, który tworzy katalog /mnt/sterbox (ostatnia linia to keep alive dla pm2):
#!/data/data/pl.sviete.dom/files/usr/bin/bash
/data/data/pl.sviete.dom/files/usr/bin/sudo /data/data/pl.sviete.dom/files/usr/bin/chmod 666 /dev/fuse
/data/data/pl.sviete.dom/files/usr/bin/sudo /data/data/pl.sviete.dom/files/usr/bin/chmod 755 /mnt/
/data/data/pl.sviete.dom/files/usr/bin/sudo /data/data/pl.sviete.dom/files/usr/bin/mkdir /mnt/sterbox
touch /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1
touch /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox2
touch /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox3
touch /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox4
/data/data/pl.sviete.dom/files/usr/bin/sudo /data/data/pl.sviete.dom/files/usr/bin/chown -R u0_a57:u0_a57 /mnt/sterbox
while true; do echo working; sleep 60; done
Dodanie do pm2 (user w zależności od wersji bramki):
pm2 start /data/data/pl.sviete.dom/files/home/AIS/sterbox_mkdir_mnt.sh --name sterbox_mnt --output NULL --error NULL --interpreter=sh --restart-delay=10000 -u u0_a57
Teraz drugi skrypt do zdefiniowania co ile odczytywać config. Opóźnienie 30 sekund żeby mieć pewność, że wszystko się zamontowało. Można też połączyć te 2 skrypty w jeden.
#!/data/data/pl.sviete.dom/files/usr/bin/bash
/data/data/pl.sviete.dom/files/usr/bin/sleep 30
while true; do sudo /data/data/pl.sviete.dom/files/home/AIS/sterbox_test.sh;sleep 1; done
Dodanie do PM2:
pm2 start /data/data/pl.sviete.dom/files/home/AIS/sterbox_loop_reading.sh --name sterbox_read --output NULL --error NULL --interpreter=sh --restart-delay=10000 -u u0_a57
A teraz content do zbierania stanów:
########################### STERBOX1 ###########################
if [ `cat /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1 |wc -l` -gt 1 ]
then echo "" > /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1
else echo "Plik ma jedna linie"
fi
curl "http://192.160.40.1/@gca?fspeed&@gcd?dsssli1&@gcd?dssslig1&@gcd?dstvlig1&@gcd?dglig
if [ `cat /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1 |wc -l` -gt 1 ]
then sed -i "1d" /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1
else echo "Plik ma jedna linie po odczycie stanu"
fi
########################### STERBOX1 ###########################
Czemu taka kombinacja? Żeby zminimalizować ilość błędów z pustym plikiem. Podczas przekierowywania plik przez chwile ma rozmiar 0. Próbowałem tee, przekierowanie bezpośrednie. Ale jak HA czyta z niego 30 czy 40 sensorów co 1 sek to zdarzało się, że wywalał błąd. Teraz jest tak, że na wstępie profilaktycznie sprawdzana jest ilość linii - jeśli wieksza niż 1 to plik jest zerowany. Potem odczyt stanów i przekierowanie na koniec pliku. Po przekierowaniu usuwana jest 1 linia - jeśli przekierowanie się udało.
Teraz każdy czujnik czytany jest z pliku w ramdisku:
- platform: file
name: Predkosc wentylatora okapu
unit_of_measurement: B
file_path: /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1
value_template: "{{ value.split('`')[0] | replace(',', '.') }}"
- platform: file
name: Oswietlenie sufitu salon jadalnia
file_path: /data/data/pl.sviete.dom/files/home/AIS/sterbox/sterbox1
value_template: "{{ value.split('`')[1] }}"
scan_interval: 1
A każdy sterbox gwałcony jest raz na sekundę i odczytuje wszystkie stany jednocześnie.
To powoduje, że max opóźnienie zmiany stanu to 2 sekundy, co jest akceptowalne. Szczególnie, że HA jest tylko triggerem automatyzacji, scen itd. Sterbox działa niskopziomowo -zapalanie światła z czujnika ruchu, włącznika itd.