Also, da ich mich bereits dumm und dämlich gesucht habe, wie ich Kodi über die GPIOs steuern kann (v.A. Lautstärke), will ich euch nun meine Lösung vorstellen:
Das ganze läuft als Python-Script, welches über die JSON-RPC Schnittstelle Befehle an Kodi sendet.
Es sollte mit jeder Art von XBMC/Kodi funtkionieren, also RaspBMC, OpenELEC und XBMC unter Raspbian. (Getestet unter RaspBMC)
Anforderungen:
- Werbserver aktiviert (unter Optionen -> Einstellungen -> Dienste -> Webserver -> "Steureung von Kodi über HTTP zulassen")
- Benutzernamen, Passwort und Port des Webservers im Script eintragen (unter user, passwd und port)
- GPIOs aktiviert (nötige Pakete installiert, unter Raspbian bereits vorhanden)
- für Autostart: in "sudo crontab -e" am Ende die Zeile "@reboot python /home/pi/buttons.py" einfügen (Pfad und Dateiname ggf. ersetzen) und bei RaspBMC "Cronjob Scheduler" in den System Settings von RaspBMC aktivieren
- bei Bedarf die vorhandenen Befehle verändern/erweitern (siehe unter dem Script)
Hier nun der Code:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time, os, httplib, json, requests, pdb
from requests.auth import HTTPBasicAuth
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
buttons = [2 , 4 , 14 , 15 , 3 ]
methods = ['Application.SetVolume' , 'Application.SetVolume' , 'Player.PlayPause', 'Input.Back', 'System.Shutdown']
params = [{ "volume": "decrement" }, { "volume": "increment" }, { "playerid": 0 } , {} , {} ]
user = 'kodi'
passwd = 'kodi'
port = '80'
def main():
numbuttons = len(buttons)
index = 0
for index in range(numbuttons):
GPIO.setup(buttons[index], GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(buttons[index], GPIO.FALLING, bouncetime=200)
while True:
index = 0
for index in range(numbuttons):
if GPIO.event_detected(buttons[index]):
button_pressed(index)
time.sleep(0.01)
def button_pressed(index):
url = 'http://localhost:' + port + '/jsonrpc'
postheaders = {'content-type': 'application/json'}
command = {"jsonrpc":"2.0", "id": 1, "method": methods[index], "params": params[index]}
print(methods[index])
resp = requests.post(url, auth=(user,passwd), data=json.dumps(command), headers=postheaders)
if __name__ == '__main__':
main()
Alles anzeigen
Nun noch zur Benutzung: mit den drei Arrays am Anfang werden die Buttons festgelegt. Diese können frei erweitert/verändert werden.
Die Befehle und Parameter, die man eintragen kann findet man unter http://kodi.wiki/view/JSON-RPC_API/v6
Diese dann nach folgendem Schema einfügen:
- buttons = GPIO-Port
- methods = JSON-RPC-Methode
- params = Parameter der JSON-RPC-Methode, wenn nicht vorhanden -> "{}" einsetzen)
PS: ich habe das Script zwar grob getestet, aber falls etwas trotzdem nicht stimmt, einfach einen Kommentar mit Fehlermeldung da lassen (es sollte aber einwandfrei funktionieren ;))