Die Methode aus dem letzten Beitrag Daten von meinem Pythonskript mit zerorpc in mein Node.js-Skript zu bekommen hat zwar im Endeffekt irgendwie funktioniert, nur gab es das Problem, dass es wenn ich die Skripte eine Weile laufen lies irgendwann aufgehört hat die Daten weiterzuleiten. Da ich sowieso nicht wirklich zufrieden mit der Methode war, habe ich gar nicht mehr nach dem Problem sondern gleich nach einer anderen Lösung gesucht, die ich dank John Hobbs jetzt auch habe. Auf der Suche nach Beispielen für UNIX Sockets habe ich diesen Artikel gefunden, nach einem Kommentar, hat er ihn gleich noch um einen Node.js-Server ergänzt, was jetzt auch ohne Probleme funktioniert.
import RPi.GPIO as GPIO import os, os.path import socket GPIO.setup(27, GPIO.IN) def node_bridge(command): if os.path.exists( "/tmp/python_node_bridge" ): client = socket.socket( socket.AF_UNIX, socket.SOCK_STREAM ) client.connect( "/tmp/python_node_bridge" ) client.send( command ) client.close() else: print "Couldn't Connect!" def switchview(27): node_bridge("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 net = require('net'); var server = net.createServer(function(python_bridge) { python_bridge.on('data', function(data) { if(data.toString() == "switchview") { io.sockets.emit('switchview'); } }); }); server.listen("/tmp/python_node_bridge");
var socket = io.connect('http://localhost:1234'); view = "view1"; function switchview() { if (view == "view1") { $('#view1').fadeOut(700); $('#view2').fadeIn(700); view = "view2" } else if (view == "view2") { $('#view2').fadeOut(700); $('#view1').fadeIn(700); view = "view1" } }; socket.on('switchview', function () { switchview(); });
Diese drei Code-Schnippsel schalten nun nach dem Drücken eines Tasters zwischen zwei verschiedenen Ansichten hin und her, zeigen also unterschiedliche Informationen auf dem Spiegel an.
Das Pythonskript überwacht den GPIO-Pin und wartet darauf, dass die 3.3V Spannung auf 0V abfällt. Passiert das schickt es eine Nachricht an mein Node.js-Skript, welches diese an die Benutzeroberfläche weiterleitet und dort eine Funktion auslöst, die zwischen den Ansicht wechselt.