Saya memiliki Pi Model B Rev 2.0 (saya pikir) dan saya bermaksud menggunakannya untuk sistem Home Automation. Karena saya memiliki meteran prabayar pada pasokan listrik saya, saya kadang-kadang kehabisan elektron untuk berkeliling Pasokan Listrik rumah saya!
Untuk menghindari masalah, saya telah memperoleh UPS dalam bentuk UPis Basic yang dibuat oleh PiModules . Saya telah mengonfigurasinya sehingga saya dapat mensurvei tegangan suplai melalui port serial Pi sendiri (bukan konfigurasi default tetapi set-up yang didukung didokumentasikan dalam manual ).
Saat ini menggunakan pin GPIO khusus (pin 13 di header, GPIO27 saya percaya) dan micro-controller built-in menggunakan itu dan skrip python berjalan dari rc.local untuk memberitahu Pi shutdown -h now
ketika pin diambil rendah - yang terjadi ketika tombol "Shutdown" UPS ditekan atau jika pasokan baterai hampir habis jika terjadi kegagalan pasokan utama. Sebagai catatan, skripnya adalah:
#!/usr/bin/python
# import the libraries to use time delays, send os commands and access GPIO pins
import PRi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM) # Set pin numbering to board numbering
GPIO.setup(27, GPIO.IN, pull_up_don=GPIO.PUD_UP) # Setup pin 27 as an input
while True: # Setup a whille loopto wait for a button press
if(GPIO.input(27)==0): # Setup an if loop to run a shutdown command when button press sensed
os.system("sudo shutdown -h now") # Send shutdown command to os
break
time.sleep(1) # Allow a sleep time of 1 second to reduce CPU usage
Hal ini mengejutkan saya karena saya sedikit canggung karena init
memiliki kemampuan bawaan untuk menangani peristiwa daya. Saya harus menegaskan kembali bahwa saya menggunakan sysVinit pada Raspbian Jessie BUKAN systemd default untuk rilis itu (untuk preferensi pribadi dan alasan keakraban).
Saya ingin, pada awalnya, mengganti skrip di atas dengan sesuatu yang memberitahu init untuk melakukannya powerfailnow
ketika pin menjadi rendah - dan untuk melakukan powerokwait
jika kemudian kembali tinggi. Akhirnya saya juga ingin polling port serial dan mengawasi tanggapan terhadap @rpi
, @bat
dan @ups
yang mengembalikan tegangan arus pada rel 5V Pi, baterai LiPo dan input microUsb UP UP masing-masing - sehingga Pi dapat memberi peringatan pada Saya menangani kegagalan daya (seharusnya menghasilkan powerfail
tindakan init dan membiarkan Pi melaporkan status kehilangan daya kepada saya, pengguna - dengan asumsi saya belum siap memperhatikan!)
Namun saya mengalami kesulitan mencari tahu bagaimana perangkat UPS Linux memberi sinyal init
bahwa powerfail
\ powerwait
\ powerfailnow
\ powerokwait
perintah yang didefinisikan \etc\inittab
harus dilakukan.
Adakah yang bisa memberi tahu saya, misalnya, bagaimana UPS "dewasa" memberi tahu kernel Linux pada PC normal bahwa peristiwa "kekuatan" terjadi dan bagaimana saya dapat mereproduksi hal yang sama dalam sistem ini pada Pi?