The 3B+ behaves a little differently. The LEDs are, by default, controlled by the kernel. There are device drivers for them. This is a new script to enable an added momentary action button to control the LEDs and shutdown the Pi 3B+
#!/usr/bin/env python3 from gpiozero import Button from signal import pause import warnings, os, sys # Script to process a button press on the GPIO of a Raspberry Pi 3B+ # and alter the LEDs of the device according to: # # Press and release, toggle the LEDs off, or default, depending. # Press and hold, for 6 seconds, shutdown the Pi. # Note the Pi 3B+ is controlled from kernel devices, not direct from the GPIO # unless you wish to. # # Add to /etc/rc.local # For example # # ~pi/shutdown_pi.py 21 6 1 offGPIO = int(sys.argv[1]) if len(sys.argv) >= 2 else 21 offtime = int(sys.argv[2]) if len(sys.argv) >= 3 else 6 defaultOff = True if len(sys.argv) >= 4 else False mintime=1 powerLedDev = "/sys/class/leds/led1/" activityLedDev = "/sys/class/leds/led0/" powerLedDefAction = "default-on" activityLedDefAction = "mmc0" powerLedNewAction = powerLedDefAction activityLedNewAction = activityLedDefAction def ledSet(led, item, value): f = open(led + item, "w+") f.write(value) f.close() def LEDsOff(): ledSet(powerLedDev, "trigger", "none") ledSet(activityLedDev, "trigger", "none") def when_held(b): p = b.pressed_time #timer_val = "{0:.0f}".format(500/p) timer_val = int(500/p) os.system("echo timer > " + powerLedDev + "trigger") ledSet(powerLedDev, "delay_on", str(timer_val)) ledSet(powerLedDev, "delay_off", str(timer_val)) if p > offtime: ledSet(powerLedDev, "trigger", "none") ledSet(activityLedDev, "trigger", activityLedDefAction) os.system("/sbin/shutdown -h now") def when_pressed(): global powerLedNewAction global activityLedNewAction if powerLedNewAction == powerLedDefAction: powerLedNewAction = "none" activityLedNewAction = "none" else: powerLedNewAction = powerLedDefAction activityLedNewAction = activityLedDefAction LEDsOff() def when_released(): ledSet(powerLedDev, "trigger", powerLedNewAction) ledSet(activityLedDev, "trigger", activityLedNewAction) with warnings.catch_warnings(): warnings.simplefilter("ignore") if defaultOff: LEDsOff() btn = Button(offGPIO, hold_time=mintime, hold_repeat=True) btn.when_held = when_held btn.when_pressed = when_pressed btn.when_released = when_released pause()