Vielleicht hat hier ja irgendjemand ein bisschen mehr Ahnung von Python als ich – vermutlich nicht sonderlich schwer – und kann mir daher erklären, wieso das erste Skript nicht funktioniert, das Zweite hingegen schon. Biteule und ich sind nur soweit gekommen, dass es wohl irgendwas mit dem Threading der GPIO-Callbacks zu tun haben muss aber was jetzt genau das Problem ist, verstehen wir beide nicht. Es ist nicht so, dass zerorpc im ersten Skript beim Aufruf nicht vorhanden ist, immerhin kann es einen Fehler ausgeben (LostRemote: Lost remote after 10s heartbeat), wieso also macht es trotzdem einen Unterschied, an welcher Stelle ich es importiere?

import RPi.GPIO as GPIO
import time
import zerorpc

nodebridge = zerorpc.Client()
nodebridge.connect("tcp://127.0.0.1:4242")

GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN)

def switchview(switchview_taster):
    nodebridge.switchview()

try:
    GPIO.add_event_detect(27, GPIO.FALLING, callback=switchview, bouncetime=600)
    while 1:
        time.sleep(100)
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN)

def switchview(switchview_taster):
    import zerorpc
    nodebridge = zerorpc.Client()
    nodebridge.connect("tcp://127.0.0.1:4242")
    nodebridge.switchview()

try:
   GPIO.add_event_detect(27, GPIO.FALLING, callback=switchview, bouncetime=600)
   while 1:
      time.sleep(100)
var io = require('socket.io').listen(1234);
var zerorpc = require("zerorpc");

var pythonbridge = new zerorpc.Server({
  switchview: function(reply) {
    io.sockets.emit('switchview');
    reply(null);
  }
});

pythonbridge.on("error", function(error) {
  console.error("RPC server error:", error);
});

pythonbridge.bind("tcp://0.0.0.0:4242");

UPDATE 12.02.15 – 14:51: