Optionen

Hier werden alle nutzbaren und sinnvollen Optionen gelistet. Diese werden von mir ausdrücklich empfohlen, sind aber dennoch kein "muss". Das kann und darf jeder Anwender für sich selbst entscheiden.

Folgende Optionen können nach persönlichem Belieben evtl. hilfreich sein:

Umstellung auf USB-Boot

Es ist mehr als nur empfehlenswert, auf die Arbeit mit der SD-Speicherkarte zu verzichten. Im Laufe meiner Experiemnte sind mir mindestens fünf Karten kaputt gegangen. Im Falle des Notfunk-Servers bedeutet dies, dass man das Gerät aufschrauben und die Speicherkarte mittels einer Zange austauschen muss.
Sowohl Raspberry 3 als auch 4 beherrschen aber das Booten über die USB-Schnittstelle. Besonders am RPI4 ist der Einsatz eines USB-Sticks neuer Bauart oder eine SSD am USB3-Port mehr als nur zu empfehlen. Der Server arbeitet dann um einiges schneller. Aber auch der RPI3 arbeitet in einer ordentlichen Geschwindigkeit mit einem USB-Stick.

Der Vorteil des Ganzen liegt auf der Hand: Der Stick kann schnell ausgetauscht werden, wenn es Probleme gibt. Ein Ersatz-USB-Stick liegt dann beispielsweise dem EInsaatzkoffer des Servers bei - natürlich mit einer identischen Kopie bespielt.
  1. Auf einem (z.B.) Windows-PC einen USB-Stick/eine USB-SSD ganz normal, wie eine SD-Karte auch, mit einem RaspberryOS-Image bespielen.
  2. Windows-PC: Speicherkarte öffnen oder am laufenden RPI arbeiten
  3. Die Datei /boot/config.txt mit einem Texteditor öffnen (am RPI mit sudo arbeiten)
  4. Am Ende folgende Zeile einfügen: program_usb_boot_mode=1
  5. Die SD-Karte im RPI einsetzen und den RPI (neu) starten
  6. Einloggen und überprüfen, ob der USB-Boot-Modus aktiv ist: vcgencmd otp_dump | grep 17: Das Ergebnis sollte lauten:
    17:3020000a
  7. Wenn dem so ist, RPI herunterfahren und Spannungsversorgung trennen.
  8. Speicherkarte entfernen und USB-Stick einsetzen.
  9. Spannung anstecken und sich über das Booten von USB-Stick/SSD freuen.
ACHTUNG: Wird an einem Raspberry PI4 gearbeitet, muss unter Umständen noch die Firmware upgedatet werden. Das merkt man, wenn man auf den o.g. Befehl ein anderes Ergebnis erhält bzw. der RPI nicht vom USB-Stick booten will. In diesem Fall bitte dieser Anleitung folgen.

Zurück zum Seitenanfang

Steuerung der Lüftergeschwindigkeit

cd ~;
sudo apt -y update;
sudo apt -y upgrade;
sudo apt -y install python3-pip;
sudo pip3 install gpiozero;
nano USV/fancontrol.py;
In der leeren Datei folgenden Skript-Text eingeben:
from gpiozero import CPUTemperature, PWMLED
from time import sleep

led = PWMLED(2) # PWM-Pin

startTemp = 55 # Temperatur bei der der Luefter an geht

pTemp = 4 # Proportionalanteil
iTemp = 0.2 # Integralanteil

fanSpeed = 0 # Lueftergeschwindigkeit
sum = 0 # Speichervariable fuer iAnteil

while True: # Regelschleife
         cpu = CPUTemperature() # Auslesen der aktuellen Temperaturwerte
         actTemp = cpu.temperature # Aktuelle Temperatur als float-Variable
         diff = actTemp - startTemp
         sum = sum + diff
         pDiff = diff * pTemp
         iDiff = sum * iTemp
         fanSpeed = pDiff + iDiff + 35
         if fanSpeed > 100:
                 fanSpeed = 100
         elif fanSpeed < 35:
                 fanSpeed = 0

         if sum > 100:
                 sum = 100
         elif sum < -100:
                 sum = -100

         #print(str(actTemp) + " Grad Celsius, " + str(fanSpeed))

         led.value = fanSpeed / 100 # PWM Ausgabe
         sleep(1)
Editor beenden und speichern sudo nano /etc/rc.local; Vor exit 0 folgende Zeile einfügen:
### Ansteuerung des Gehaeuseluefters abhaengig von der Prozessor-Temperatur
python3 /home/pi/USV/fancontrol.py &
Zurück zum Seitenanfang

Abgleich der Echtzeituhr des StromPI3mit dem RPI

nano USV/RTCSerial.py; In der leeren Datei folgenden Skript-Text eingeben:
import serial
import threading
from time import sleep
import time
import datetime
import os

serial_port = serial.Serial()

serial_port.baudrate = 38400
serial_port.port = '/dev/serial0'
serial_port.timeout = 1
serial_port.bytesize = 8
serial_port.stopbits = 1
serial_port.parity = serial.PARITY_NONE


if serial_port.isOpen(): serial_port.close()
serial_port.open()


try:
    serial_port.write(str.encode('Q'))
    sleep(1)
    serial_port.write(str.encode('\x0D'))
    sleep(1)
    serial_port.write(str.encode('date-rpi'))
    sleep(0.1)
    serial_port.write(str.encode('\x0D'))
    data = serial_port.read(9999);
    date = int(data)

    strompi_year = date // 10000
    strompi_month = date % 10000 // 100
    strompi_day = date % 100

    sleep(0.1)
    serial_port.write(str.encode('time-rpi'))
    sleep(0.1)
    serial_port.write(str.encode('\x0D'))
    data = serial_port.read(9999);
    timevalue = int(data)

    strompi_hour = timevalue // 10000
    strompi_min = timevalue % 10000 // 100
    strompi_sec = timevalue % 100

    rpi_time = datetime.datetime.now().replace(microsecond=0)
    strompi_time = datetime.datetime(2000 + strompi_year, strompi_month, strompi_day, strompi_hour, strompi_min, strompi_sec, 0)

    command = 'set-time %02d %02d %02d' % (int(rpi_time.strftime('%H')),int(rpi_time.strftime('%M')),int(rpi_time.strftime('%S')))

    if rpi_time > strompi_time:
        serial_port.write(str.encode('set-date %02d %02d %02d %02d' % (int(rpi_time.strftime('%d')),int(rpi_time.strftime('%m')),int(rpi_time.strftime('%Y'))%100,int(rpi_time.isoweekday()))))
        sleep(0.5)
        serial_port.write(str.encode('\x0D'))
        sleep(1)
        serial_port.write(str.encode('set-clock %02d %02d %02d' % (int(rpi_time.strftime('%H')),int(rpi_time.strftime('%M')),int(rpi_time.strftime('%S')))))
        sleep(0.5)
        serial_port.write(str.encode('\x0D'))

        print ('-----------------------------------------')
        print ('The date und time has been synced: Raspberry Pi -> StromPi')
        print ('-----------------------------------------')

    else:
        os.system('sudo date +%%y%%m%%d --set=%02d%02d%02d' % (strompi_year, strompi_month, strompi_day))
        os.system('sudo date +%%T -s "%02d:%02d:%02d"' % (strompi_hour, strompi_min, strompi_sec))
        print ('-----------------------------------------')
        print ('The date und time has been synced: StromPi -> Raspberry Pi')
        print ('-----------------------------------------')

except KeyboardInterrupt:
    print('interrupted!')

serial_port.close()
Editor beenden und speichern sudo nano /etc/rc.local; Vor exit 0 folgende Zeile einfügen:
### Abgleich RTC des StromPI3 mit RPI-Uhr
python3 /home/pi/USV/RTCSerial.py &
Zurück zum Seitenanfang