Отладка скрипта Python, работающего как сервис - PullRequest
0 голосов
/ 18 октября 2019

Я запускаю простой скрипт на Python на Raspberry Pi, подписываюсь на тему MQTT для включения и выключения света.

import RPi.GPIO as GPIO

import context
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import time

time.sleep(30)

host="192.168.1.25"
clientID="RPiZero"
topic="bedroom/lighting"

# Set GPIO pins
# Lights
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)

# Set GPIO states
GPIO.output(17, GPIO.LOW)
GPIO.output(22, GPIO.LOW)
GPIO.output(27, GPIO.LOW)
GPIO.output(23, GPIO.LOW)
GPIO.output(24, GPIO.LOW)
GPIO.output(25, GPIO.LOW)

client=mqtt.Client(clientID)
client.connect(host)
client.subscribe(topic)

message=""

def on_message(client, userdata, message):
    message=str(message.payload.decode("utf-8"))
    #every light
    if message=="aan":
        GPIO.output(17, GPIO.HIGH)
        GPIO.output(22, GPIO.HIGH)
        GPIO.output(27, GPIO.HIGH)
        GPIO.output(23, GPIO.HIGH)
        GPIO.output(24, GPIO.HIGH)
        GPIO.output(25, GPIO.HIGH)
    elif message=="uit":
        GPIO.output(17, GPIO.LOW)
        GPIO.output(22, GPIO.LOW)
        GPIO.output(27, GPIO.LOW)
        GPIO.output(23, GPIO.LOW)
        GPIO.output(24, GPIO.LOW)
        GPIO.output(25, GPIO.LOW)
    #individual lights
    if message=="bedaan":
        GPIO.output(24, GPIO.HIGH)
        GPIO.output(25, GPIO.HIGH)
    elif message=="beduit":
        GPIO.output(24, GPIO.LOW)
        GPIO.output(25, GPIO.LOW)

    if message=="hoekaan":
        GPIO.output(17, GPIO.HIGH)
        GPIO.output(27, GPIO.HIGH)
    elif message=="hoekuit":
        GPIO.output(17, GPIO.LOW)
        GPIO.output(27, GPIO.LOW)

client.on_message=on_message

client.loop_forever()

loop_flag=1
counter=0
while loop_flag==1:
    time.sleep(0.1)
    counter+=1
time.sleep(4)

# Clean up GPIO
GPIO.cleanup()

Скрипт запускается как служба systemd и отлично работает примерно12 часов, после чего служба все еще заявляет, что она загружена:

● receiver.service - Openhab Receiver
   Loaded: loaded (/lib/systemd/system/receiver.service; enabled; vendor preset:
   Active: active (running) since Fri 2019-10-18 01:35:24 CEST; 13h ago
 Main PID: 421 (python)
   Memory: 10.0M
   CGroup: /system.slice/receiver.service
           └─421 /usr/bin/python /home/pi/paho.mqtt.python/examples/receiver.py

Oct 18 01:35:24 raspberrypi systemd[1]: Started Openhab Receiver.

Однако индикаторы больше не отвечают. Я застрял в том, как бы я решил эту проблему, не зная, с чего начать, или что-то еще делать. Насколько я знаю, это может быть проблема с памятью, что-то не так с циклом или что-то совершенно другое. Все советы по способам устранения этой проблемы будут с благодарностью.

...