erniX Dokuwiki

no place like 127.0.0.1

Benutzer-Werkzeuge

Webseiten-Werkzeuge


hamradio:digitalradio:pi_mit_taster_herunterfahren

Wer kennt das nicht … … der Abend im heimischen Shack neigt sich dem Ende und das gesamte Equipment muss ausgeschaltet werden. Dem Betriebsfunkgerät macht das wohl nicht so viel aus, ihm einfach den Saft abzuklemmen. Aber ein Rechner (hier RaspberryPi unter Linux) hat das nicht so gerne …

Daher suchte ich nach einer Lösung, den RaspberryPi mittels eines einfachen Tasters herunterzufahren.

Herausgekommen ist folgendes Python-Skript welches ich in einem Forum (Externer Link) gefunden und auf meine Bedürfnisse anpepasst habe (u.a. verwende ich Pin40 für den Schalter). Original-Author ist meigrafd.

Bei kurzem Tastendruck fährt der RasPi herunter - bei einem Tastendruck > 2s wird ein Reboot ausgeführt.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# v0.1 by meigrafd
# https://github.com/SoCo/SoCo
# 
# Anpassungen von DL5BQ
#
import sys
from time import sleep, time
import RPi.GPIO as GPIO
import signal
import os
#------------------------------------------------------------------------
#GPIO pins
Play = 40
#special function time (in sec) for Play pin to switch playlist
SpecialTime = 2
# only one of following:
#PULL = GPIO.PUD_DOWN    #GPIO -> GND
PULL = GPIO.PUD_UP        #GPIO -> 3V3
# to use RaspberryPi pin numbers
GPIO.setmode(GPIO.BOARD)
#------------------------------------------------------------------------
# set up GPIO input channels
GPIO.setup(Play, GPIO.IN, pull_up_down = PULL)
#------------------------------------------------------------------------
def Interrupt_event(pin):
global timeTrigger
  if pin == Play:
      if GPIO.input(Play) == GPIO.LOW:
          timeTrigger = time()
      elif GPIO.input(Play) == GPIO.HIGH:
          timeTrigger = time() - timeTrigger
          if timeTrigger >= SpecialTime:
              timeTrigger = 0
              os.system("sudo reboot")
          else: #normal play
              timeTrigger = 0
              os.system("sudo shutdown -h now")
  else:
      print "ERROR! Unknown GPIO pin triggered: %s" % pin
#------------------------------------------------------------------------
try:
  GPIO.add_event_detect(Play, GPIO.BOTH, callback=Interrupt_event, bouncetime=100)
  timeTrigger = 0
#keep script running
  signal.pause()
  except (KeyboardInterrupt, SystemExit):
  GPIO.cleanup()
  print "\nQuit\n" 
  

Anpassungen für das Nextion-TFT-Display:

Für beide Möglichkeiten habe ich entsprechende Ausgaben auf dem Nextion-Display vorgesehen. Anstelle der Aufrufe os.system(„sudo reboot“) bzw. os.system(„sudo shutdown -h now“) rufe ich jeweils kurze Shellskripte auf, die zusätzlich noch Ausgaben auf dem Display machen: reboot.sh bzw shutdown.sh

#!/bin/bash
stty ospeed 9600 cs8 -crtscts < /dev/ttyAMA0
echo -en "page MMDVM\xFF\xFF\xFF" > /dev/ttyAMA0
echo -en "t0.txt=\"Button: \"\xFF\xFF\xFF" > /dev/ttyAMA0
echo -en "t1.txt=\"... reboot\"\xFF\xFF\xFF" > /dev/ttyAMA0 
sudo reboot

bzw.

#!/bin/bash
stty ospeed 9600 cs8 -crtscts < /dev/ttyAMA0
echo -en "page MMDVM\xFF\xFF\xFF" > /dev/ttyAMA0
echo -en "t0.txt=\"Button: \"\xFF\xFF\xFF" > /dev/ttyAMA0
echo -en "t1.txt=\"... shutdown\"\xFF\xFF\xFF" > /dev/ttyAMA0
sudo shutdown -h now

Ich bin nicht für Schäden haftbar zu machen, die durch diesen Beitrag entstehen könnten! Sie machen das auf eigenes Risiko.
Evtl. noch vorhandene Garantie könnte verloren gehen - also Vorsicht walten lassen!

hamradio/digitalradio/pi_mit_taster_herunterfahren.txt · Zuletzt geändert: 27.04.2016 21:00 von Gerd Ernstmeier