HuHu
Schon seit längeren habe ich vor, meinen PI als Universalfernbedienung zu benutzten, die ich über das Handy steuern kann. Das ist mir jetzt endlich auch gelungen, am Pi sind IR-Sende-dioden angebracht und mittels LIRC konnte ich die Codes der Fernbedienungen auslesen. Auf dem Handy habe ich die App NetIO installiert, für diese muss ein Server auf dem Pi gestartet sein, dabei handelt es sich um dieses python-script:
#Use a SocketServer in order to keep the program running on a certain port instead of closing the connection when the netIO is closed on the $
import SocketServer
import os
class MyTCPHandler(SocketServer.BaseRequestHandler):
"""
The RequestHandler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
while 1:
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
if not self.data: break
print "{} wrote:".format(self.client_address[0])
print self.data
os.popen('irsend %s' % self.data)
# just send back the same data, but upper-cased
self.request.sendall('100')
if __name__ == "__main__":
HOST, PORT = "", 54321
# Create the server, binding to localhost on port 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
Alles anzeigen
Ich habe selber vom Programmieren keine Ahnung, habe in dem Script nur den Teil beim "os.popen" verändert.
Funktioniert so weit ganz gut, wenn ich aber auf dem Handy z.B. von mobilem Internet auf WLAN wechsel und in der App einen Button drücke, scheint das Script abzustürzen. Der Button bleibt gedrückt und weiter passiert nichts. Auch nach einem neustart der App oder sogar des Handy's ist das so, es lassen sich erst wieder Befehle senden, wenn ich den Pi neu starte (oder das python script, aber kA wie das geht).
Also jetzt zur eigentlichen Frage:
Wie kann ich das Python-script überwachen lassen, damit es, wenn es abstürzt, sofort neu gestartet wird?
Mit monit habe ich es versucht, aber vermutlich falsch gemacht, weil ich davon null verstehe...
Ich habe in die Datei /etc/monit/monitrc folgendes hinzugefügt:
check program netio_server.py with path
"/home/pi/RPi.GPIO-0.1.0/netio_server.py"
if status != 0 then EXEC "/pratap/script-monit
stop" else if succeeded then
EXEC "/home/pi/RPi.GPIO-0.1.0/netio_server.py"
Das Script liegt hier: [font="Monaco, Consolas, Courier, monospace"]/home/pi/RPi.GPIO-0.1.0/netio_server.py[/font]
[font="Monaco, Consolas, Courier, monospace"]Ich würde gerne ein Tutorial schreiben, in dem für Anfänger (wie mich) erklärt wird, wie man seinen Pi als Universalfernbedienung benutzen kann. Dazu möchte ich natürlich auch, dass es richtig und zuverlässig funktioniert.[/font]
[font="Monaco, Consolas, Courier, monospace"]Versteht jemand von euch, warum das Script scheinbar abstürzt? Wie kann ich es in so einem Fall automatisch neu starten lassen?[/font]
[font="Monaco, Consolas, Courier, monospace"]Und bitte keine Antworten wie "lern python Programmieren" oder so, denn dafür fehlt mir die Zeit![/font]
[font="Monaco, Consolas, Courier, monospace"]Für alle anderen Antworten schonmal ein großes DANKE![/font]
[font="Monaco, Consolas, Courier, monospace"]LG simi-chan[/font]