Am un script care este menit să funcționeze cu un UPS Hat pentru un Raspberry Pi 4b. Rulez un server Ubuntu 21.04 pe 64 de biți. Când rulez manual scriptul de pe /home/user/ups.sh, funcționează grozav. Cu toate acestea, după ce am urmat instrucțiunile și am creat un fișier rc.local, nu pot face ca scriptul să pornească automat la pornire. Am plasat scriptul în directorul /user/bin/ și am făcut un chmod +x pe el.
#!/bin/bash
#GPIO17 (intrare) folosit pentru a citi starea curentă a puterii.
#0 - normal (sau alimentarea bateriei este pornită manual).
#1 - defecțiune de alimentare, mutat la baterie.
echo 17 > /sys/class/gpio/export;
ecou în > /sys/class/gpio/gpio17/direcție;
#GPIO27 (intrare) folosit pentru a indica faptul că UPS-ul este online
echo 27 > /sys/class/gpio/export;
ecou în > /sys/class/gpio/gpio27/direcție;
#GPIO18 obișnuia să informeze UPS că Pi încă funcționează. După oprire, acest pin revine la starea Hi-Z.
echo 18 > /sys/class/gpio/export;
echo out > /sys/class/gpio/gpio18/direction;
echo 0 > /sys/class/gpio/gpio18/value;
power_timer=0;
inval_power="0";
ups_online1="0";
ups_online2="0";
ups_online_timer="0";
în timp ce adevărat
do
#citește valoarea pinului GPIO27
#normal, UPS comută acest pin la fiecare 0,5 secunde
ups_online1=$(cat /sys/class/gpio/gpio27/value);
somn 0,1;
ups_online2=$(cat /sys/class/gpio/gpio27/value);
ups_online_timer=$((ups_online_timer+1));
#toggled?
if (( "$ups_online1" != "$ups_online2" )); atunci
ups_online_timer=0;
fi
#resetați toate temporizatoarele dacă ups-ul este offline mai mult de 3 secunde (nu a fost detectată nicio comutare)
if ("$ups_online_timer" > 30));
atunci
echo „$ups_online_timer”;
ups_online_timer=30;
power_timer=0;
inval_power=0;
#echo „UPS offline. Ieșire”;
#Ieșire;
fi
#citește valoarea pinului GPIO17
inval_power=$(cat /sys/class/gpio/gpio17/value);
# echo $inval_power;
if (( "$inval_power" == 1 )); atunci
power_timer=$((power_timer+1));
altfel
power_timer=0;
fi
#Dacă alimentarea nu a fost restabilită în 60 de secunde
if (( "$power_timer" == 600 )); atunci
#echo $power_timer;
echo „Oprire...”
somn 2;
poweroff systemctl; #opriți
Ieșire;
fi
Terminat
asta am în fișierul rc.local
#!/bin/sh -e
#
# rc.local
#
bash /usr/bin/ups.sh &
iesirea 0
Caut pe google de zile întregi și am încercat fișierele cron și systemd și nimic nu pare să funcționeze. Să sperăm că există un suflet bun care are un răspuns. Mulțumesc.