Tento návod je pro ty kteří používají k monitoringu a optimalizaci své domácí fotovoltaické elektrárny SunDayGate a mají chuť si vyrobit svůj originální HW pro zobrazení živých dat ze střídače na jiném místě než kde je umístěn vlastní počítač se SunDayGate.
Nejdříve bude potřeba si zajistit vhodný displej s rozlišením 1920×1080 pixelů (rozlišení SDG) s HDMI výstupem. Na Aliexpressu jich je nepřeberné množství v cenách od $50, já si zvolil Wisecoco 5.5″ OLED ale určitě by se dal najít i vhodnější nebo větší.
Dále budeme potřebovat několik dalších komponent viz seznam níže:
- Raspberry Pi Zero 2 W za 459 Kč
- 16 GB microSD kartu za 139 Kč (minimální velikost je 8 GB, může být i větší)
- Raspberry Pi USB-C 5,1V⎓3A napájecí zdroj za 247 Kč
- 20 cm kabel Mini-HD to HD Male to Male od $4
- 2Pin USB Jack Charging Data Port Type-C female od $0,22
- 2ks Micro USB male JACK 2Pin od $0,30
Pro tento projekt se nabízí i možnost využití plochého kabelu HDMI, ale protože nemá stínění dochází k rušení. Požití USB-C konektoru pro vytvoření vnitřní rozdvojky napájení i když displej a Raspberry Pi Zero mají micro USB konektor je jen z praktického důvodu pro jednoduší připojování napájecího adaptéru.
Pro verzi SDG Live TV (zobrazování SunDayGate na televizi) budeme potřebovat jen tyto komponenty:
- Raspberry Pi Zero 2 W za 459 Kč
- 16 GB microSD kartu za 139 Kč (minimální velikost je 8 GB, může být i větší)
- 20 až 50 cm kabel Mini-HD to HD Male to Male od $4
- USB – micro USB kabel za 49 Kč
Většina moderních televizí má i USB konektor takže Raspberry Pi Zero je možné napájet přímo z něj.
Návod na instalaci je společný pro obě verze, jen u SDG Live TV se vynechá otočení obrazu.
Instalace a nastavení OS
Stáhneme si a nainstalujeme do PC oficiální aplikaci Raspberry Pi Imager.
Dále si stáhneme do PC FullPageOS verzi 0.12.0 – sice je k dispozici i novější verze 0.13.0 ale ta má problémy s otočením obrazu.
K PC s pomocí adaptéru připojíme microSD kartu a spustíme aplikaci Raspberry Pi Imager.
Volbou CHOOSE DEVICE zvolíme Raspberry Pi Zero 2W
Volbou CHOOSE OS zvolíme Use custom a v PC vybereme stažený ZIP soubor s FullPageOS
Nyní volbou CHOOSE STORAGE vybereme naší microSD kartu.
Zvolíme NEXT a pak NO.
Potvrdíme kliknutím na YES přepsání dat na SD kartě.
Vyčkáme instalace micro SD karty – pokud se během instalace otevře nějaké okno s průzkumníkem souboru tak jej uzavřeme.
Po dokončení instalace micro SD kartu odpojíme od PC a znovu ji připojíme a otevřeme průzkumník souborů.
Na micro SD kartě nalezneme soubor s názvem fullpageos.txt a zvolíme upravit v poznámkovém bloku. Uvedenou url adresu http://localhost/FullPageDashboard nahradíme touto url adresou:
http://ip_adresa_vašeho_SDG/cs/prehledote5/panel.htm
a uložíme. Pokud neznáme IP adresu PC s SunDayGate zjistíte ji buď z domácího routeru a nebo ve Windows (v PC s SunDayGate) v příkazovém řádku pomocí příkazu: ipconfig
Nyní na micro SD kartě vyhledáme soubor s názvem fullpageos-wpa-supplicant.txt a opět zvolíme upravit v poznámkovém bloku. Vyhledáme řádek s textem ## WPA/WPA2 secured a následující 4 řádky odkomentujeme (odstraníme znak # na začátku řádku) a doplníme přístupové údaje k WiFi síti (v ukázce to je název WiFi sítě: MaxinohaAP a heslo: 12345678)
Nyní vyhledáme ve stejném souboru řádek s textem country=GB # United Kingdom a text tohoto řádku upravíme takto:
country=CZ # Czechia
a opět soubor uložíme. Nyní již můžeme micro SD kartu odpojit od PC a vložit ji do Raspberry Pi Zero.
Nyní si připravíme napájecí rozdvojku … BUDE DOPLNĚNO POZDĚJI VČETNĚ OBRÁZKŮ …
Připojíme napájení k Raspberry Pi Zero (displej není potřeba zatím připojovat) a chvíli vyčkáme na „doinstalování“ OS na micro SD kartě. Po cca 5 minutách si na WiFi routeru zjistíme jakou má Raspberry Pi Zero IP adresu – v mém případě to je IP 192.168.1.246
Nyní se k Raspberry Pi Zero připojíme, např, pomocí aplikace PuTTY (při prvním připojení potvrdíme Accept) a přihlásíme se pomocí uživatelského jména: pi a hesla: raspberry
Nyní provedeme několik úprav sytému pro jeho zeštíhlení a také nastavíme otočení obrazu pro správné zobrazení na displeji Wisecoco.
Odinstalování vzdáleného přístupu přes VNC pomocí příkazu:
sudo apt-get remove x11vnc -y
Odinstalování nepotřebného webserveru:
sudo apt-get remove lighttpd -y
Odstranění nepotřebných knihoven, které byly dříve potřeba:
sudo apt-get autoremove -y
Nyní je na řadě otočení obrazu. Níže uvedeným příkazem spustíme editaci scriptu start_gui
nano /home/pi/scripts/start_gui
A před poslední řádek vložíme příkaz pro otočení obrazu (např. doprava):
DISPLAY=:0 xrandr --output HDMI-1 --rotate right
A můžeme přidat na další řádek příkaz pro zhasnutí PWR LED na Raspberry Pi Zero 2 W:
echo 0 | sudo tee /sys/class/leds/led0/brightness
změny uložíme klávesovou zkratkou Ctrl+O a pak enter, a editor nano ukončíme klávesovou zkratkou Ctrl+X.
Nyní máme již vše připravené a můžeme Raspberry Pi Zero „vypnout“ odpojením napájení.
Sestavení HW
Nejdříve začneme sestavením střední části (pracovní název kostra)
Na kostru nasadíme 4x šroubem M 2,5 x 6 mm, hlavičky nám musí úplně celé zapadnou, aby jsme později přes ně mohli přilepit displej.
Připevníme plošný spoj od displeje pomocí 2ks distančních sloupků M 2,5 x 8 mm a 2ks matičkami M 2,5.
Na distanční sloupky přišroubujeme Raspberry Zero 2 W pomocí 2ks šroubků M 2,5 x 5 mm.
Nyní přesouváme displej tak, aby jsme přeložily ploché kabely tak jak je znázorněno na obrázcích.
Nyní můžeme celou kostru otočit a připravit k nalepení displeje.
Připravíme si dva proužky oboustranné lepící pásky a nalepíme je na kostru.
Odstraníme ochranou fólii ze zadní strany displeje.
Displej pečlivě vystředíme.
A pečlivě přilepíme. Ochranou fólii na přední straně prozatím ponecháme.
Nyní můžeme připojit HDMI kabel a napájení a vyzkoušíme, že vše funguje.
… POKRAČOVÁNÍ POZDĚJI …
Automatická změna jasu podle východu a západu slunce
Jas můžeme nastavit ručně z příkazové řádky, např. pro nastavení 75 % to je příkaz:
DISPLAY=:0 xrandr --output HDMI-1 --brightness .75
Nastavení jasu můžeme také zautomatizovat, například s využitím východu a západu slunce. Nejdříve ale musíme nastavit v Raspberry Pi správnou časovou zónu, aby jsme měli i správný čas. Připojíme se k Raspberry Pi pomocí aplikace PuTTY a zadáme příkaz:
sudo timedatectl set-timezone Europe/Prague
Následně si v Raspberry Pi zkontrolujeme správný čas příkazem:
date
Dále si nainstalujeme potřebné balíčky:
sudo apt-get install -y hdate
sudo apt-get install -y bc
Nyní si připravíme skript pro změnu nastavení jasu, za vytvoření skriptu děkuji YourSelf:
sudo nano jas.sh
A vložíme následující kód:
#!/bin/bash
# ziska cas vychodu a zapadu slunce pro zadanou souradnici
DATA=$(hdate -s -l N49.9120906 -L E15.6365197E -z0 2>/dev/null)
SUNRISE=$(echo $DATA | grep -P '(?<=sunrise: )\d+\:\d+' -o)
SUNSET=$(echo $DATA | grep -P '(?<=sunset: )\d+\:\d+' -o)
# vypocte aktualni cas, vychod a zapad v minutach od zacatku dne
SUNRISE_MINS_UTC=$((${SUNRISE:0:2}*60+${SUNRISE:3:2}))
SUNSET_MINS_UTC=$((${SUNSET:0:2}*60+${SUNSET:3:2}))
CUR_MINS_UTC=$(($(printf "%0.f" $EPOCHREALTIME) / 60 % 1440))
# definuje pocatecni a koncovy jas displaye v procentech
BRIGHT_BEGIN_PERC=25
BRIGHT_END_PERC=100
# definuje periodu zvysovani jasu pri vychodu slunce. -60 znamena zacni hodinu pred vychodem a +60 znamena skonci hodinu po vychodu
BRIGHT_UP_BEGIN_MINS=$(($SUNRISE_MINS_UTC-60))
BRIGHT_UP_END_MINS=$(($SUNRISE_MINS_UTC+60))
# definuje periodu snizovani jasu pri zapadu slunce. -60 znamena zacni hodinu pred zapadem a +60 znamena skonci hodinu po zapadu
BRIGHT_DOWN_BEGIN_MINS=$(($SUNSET_MINS_UTC-60))
BRIGHT_DOWN_END_MINS=$(($SUNSET_MINS_UTC+60))
# vypocte procentualni hodnotu jasu linearni interpolaci casu
if [ $CUR_MINS_UTC -lt $BRIGHT_UP_BEGIN_MINS ]; then
PERC=$BRIGHT_BEGIN_PERC
elif [ $CUR_MINS_UTC -lt $BRIGHT_UP_END_MINS ]; then
PERC=$((($BRIGHT_UP_END_MINS-$CUR_MINS_UTC)*($BRIGHT_END_PERC-$BRIGHT_BEGIN_PERC)/($BRIGHT_UP_END_MINS-$BRIGHT_UP_BEGIN_MINS)+$BRIGHT_BEGIN_PERC))
elif [ $CUR_MINS_UTC -lt $BRIGHT_DOWN_BEGIN_MINS ]; then
PERC=$BRIGHT_END_PERC
elif [ $CUR_MINS_UTC -lt $BRIGHT_DOWN_END_MINS ]; then
PERC=$((($BRIGHT_DOWN_END_MINS-$CUR_MINS_UTC)*($BRIGHT_BEGIN_PERC-$BRIGHT_END_PERC)/($BRIGHT_DOWN_END_MINS-$BRIGHT_DOWN_BEGIN_MINS)+$BRIGHT_END_PERC))
else
PERC=$BRIGHT_BEGIN_PERC
fi
# nastavi jas (jako desetinne cislo)
DISPLAY=:0 xrandr --output HDMI-1 --brightness $(bc <<< "scale=2; $PERC/100")
A změníme nastavení oprávnění skriptu:
sudo chmod +x jas.sh
Nyní nastavíme spouštění skriptu každých 5 minut, zadáme příkaz:
crontab -e
a přidáme následující řádek:
*/5 * * * * /home/pi/jas.sh