| 
		
	
	
	
		
	Beiträge: 64 
	Themen: 3 
	Registriert seit: Mar 2016
	
 Bewertung: 
2 Geschlecht: Männlich
	 
	
	
		Hey Ho, 
Die Tage habe ich herausgefunden wie ich die 2-polige Lenkradferbedienung meines Focus MK1 an unser Projekt anschließe.
 
Ist gar nicht so schwierig; ich dachte relativ lange das wäre CANBus ist aber eigentlich ne analoge Geschichte.(beim MK1)
 
Und zwar funktionieren die Knöpfe der Fernbedienung wie ein regelbarer Widerstand, außerdem muss man der Fernbedienung noch 5 V vom Raspberry über einen 200 Ohm Widerstand geben, das Ganze funktioniert dann als Spannungsteiler. 
Ist hier sehr schön und übersichtlich beschrieben: 
http://www.mikrocontroller.net/topic/20792#153226 
inkl. Anschlussplan Ford/Radio und Übersicht der Funktionsweise
 
Um die verschiedenen Spannungen am Raspberry einzulesen, brauchen wir einen AD-Wandler. ich habe den MCP3008 benutzt der mit ein paar Pins an den GPIO angeschlossen wird und habe mir diesen + den 200 Ohm Widerstand auf eine Lochrasterplatine geschmissen. 
Erik Bartmann erklärt das sehr schön auf http://erik-bartmann.de/down/raspberry-pi.html 
Dort im Dokument MCP3008 wird sehr genau und SEHR einfach erklärt, wie der MCP an den Raspberry angeschlossen wird.
 
Softwareseitig stellt Erik Bartmann ebenso in der Datei RaspberryPiSourceCode_0.2.zip 
auf der selben Seite ein Phyton-Script zur Verfügung, womit man die Spannungen einließt. 
Sinn des ganzen also: 
Jede Taste erzeugt einen anderen Wert, diesen kann man per IF abfragen , und dann über die JSON-Schnittstelle von Kodi, Kodi steuern. 
Ergebnis: Funktioniert perfekt, wie werkseitig verbaut. 
Wenn Interesse besteht, stelle ich mein angepasstens Script gerne zur Verfügung(ist vlt. nicht toll programiert aber fuinktioniert)
 
Ich hätte übrigens gerne generell eine Kategorie für Ford Fahrzege, wäre das möglich?
 
Liebe Grüße 
Quoti
 
(PS: In Ermangelung einer Ford Kategorie nochmal hier gepostet, ausserdem denke ich, hier lesen mehr Leute. 
Wenn es stört, bitte löschen
	 
	
	
	
		
	Beiträge: 137 
	Themen: 9 
	Registriert seit: Oct 2016
	
 Bewertung: 
3 Geschlecht: Männlich
	 
	
	
		Na klar besteht Interesse.
 Das von Erik Bartmann und dem MCP3008 hatte ich mir auch angeschaut, aus mangel an Erfahrung, hatte ich es aber gelassen. Ich hab das ganze per Arduino realisiert, die analogen Pins lesen die Spannung über einen Spannungsteiler ein und geben das ganze dann auch wieder über einrn Spannungsteiler raus, ist eigentlich recht simpel.
 
	
	
	
		
	Beiträge: 64 
	Themen: 3 
	Registriert seit: Mar 2016
	
 Bewertung: 
2 Geschlecht: Männlich
	 
	
		
		
		26.01.2017, 13:33 
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2017, 13:34 von Quoti30.)
		
	 
		>Ah cool, dachte vlt. das Thema Ford Focus wäre zu speziell, wobei ich denke, dass es natürlich nicht die einzige Karre ist, die so eine ähnlich funktionierende Lenkradfernebedienung hat. 
Das Script ist im Prinzip ein Zusammenspiel aus Erik Bartmanns und von der Seite:
http://www.forum-raspberrypi.de/Thread-r...io-tastern 
Die Kodi Steuerung habe ich einmal mit dem Package/CMD Befehl "kodi-send" probiert, was allerdings nicht stabil geklappt hat und später mit dem o.g. Script per JSON, was super funktioniert.  
Nur habe ich bis jetzt nicht gecheckt, wie man per JSON "Track weiter/Next usw." realisiert, vieleicht kann mir da einer helfen. 
Deswegen habe ich das weiterhin per "kodi-send" gemacht. 
Es muss also per "sudo apt-get install kodi-eventclients-kodi-send" vor her installiert werden.
 Code: #!/usr/bin/env python# coding: utf8
 
 #Python Raspberry Pi GPIO Klasse importieren
 import RPi.GPIO as GPIO
 import time, os, httplib, json, requests, pdb
 from requests.auth import HTTPBasicAuth
 # Festlegung der Nutzung der vorgegebenen Nummerierung der GPIOs
 GPIO.setmode(GPIO.BCM)
 
 # Namen von True und False zum besseren Verständnis festlegen
 HIGH = True  # 3,3V Pegel (high)
 LOW  = False # 0V Pegel (low)
 
 # SCI Funktion
 def getAnalogData(adCh, CLKPin, DINPin, DOUTPin, CSPin):
 # Pegel definieren
 GPIO.output(CSPin,   HIGH)
 GPIO.output(CSPin,   LOW)
 GPIO.output(CLKPin, LOW)
 
 cmd = adCh
 cmd |= 0b00011000 # Kommando zum Abruf der Analogwerte des Datenkanals adCh
 
 # Bitfolge senden
 for i in range(5):
 if (cmd & 0x10): # 4. Bit pruefen und mit 0 anfangen
 GPIO.output(DINPin, HIGH)
 else:
 GPIO.output(DINPin, LOW)
 # Clocksignal negative Flanke erzeugen
 GPIO.output(CLKPin, HIGH)
 GPIO.output(CLKPin, LOW)
 cmd <<= 1 # Bitfolge eine Position nach links verschieben
 
 # Datenabruf
 adchvalue = 0 # Wert auf 0 zuruecksetzen
 for i in range(11):
 GPIO.output(CLKPin, HIGH)
 GPIO.output(CLKPin, LOW)
 adchvalue <<= 1 # 1 Postition nach links schieben
 if(GPIO.input(DOUTPin)):
 adchvalue |= 0x01
 time.sleep(0.01)
 return adchvalue
 
 # Konfiguration Eingangskanal und GPIOs
 CH = 0  # Analog/Digital-Channel
 CLK     = 18 # Clock
 DIN     = 24 # Digital in
 DOUT    = 23  # Digital out
 CS      = 25  # Chip-Select
 
 # Pin-Programmierung
 GPIO.setup(CLK, GPIO.OUT)
 GPIO.setup(DIN, GPIO.OUT)
 GPIO.setup(DOUT, GPIO.IN)
 GPIO.setup(CS,   GPIO.OUT)
 
 buttons = [2                        , 4                        , 14                     ,15                          , 3                       ]
 methods = ['Application.SetVolume'  , 'Application.SetVolume'  ,  'Application.SetMute' , 'Input.ExecuteAction'              'Input.ExecuteAction'          ]
 params  = [{ "volume": "decrement" }, { "volume": "increment" },  { "mute": "toggle" }   , { "action": "skipnext" }          , { "action": "skipprevious"}]
 user    = 'kodi'
 passwd  = ''
 port    = '80'
 
 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)
 
 
 while True:
 # Volume -  Taster
 if (200 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 210):
 button_pressed(0)
 
 # Volume +  Taster
 if (400 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 425):
 button_pressed(1)
 
 # Seek +  Taster
 if (590 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 610):
 os.system("kodi-send --action='PlayerControl(Next)'")
 
 # Seek -  Taster
 if (730 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 750):
 os.system("kodi-send --action='PlayerControl(Previous)'")
 
 # Mode  Taster
 if (830 <= getAnalogData(CH, CLK, DIN, DOUT, CS) <= 855):
 button_pressed(2)
Falls also jmd. einfällt, wie die JSON NextTrack Methode aussieht, immer her damit. 
Auf http://kodi.wiki/view/JSON-RPC_API/v6  habe ich nichts dazu gefunden. zumindest nicht das es geklappt hätte.
 
Außerdem würde ich gerne eine "ActiveWindow" abhängige Steuerung relaisieren, abe rich gebe zu, dass ich keine Ahnung habe, wie ich JSON Get Functionen in Python einbaue(so schwer kann das eigentlich nicht sein).
 
Sollte wie gesagt jmd. Interesse haben an der Fritzing Verkabelung von Remote Pin11/12   <--> MCP3008  <--> Raspberry so müsste ich die erstmal erstellen und würde die dann hier hochladen. Wie gesagt bei mir eine kleine Platine(nix besonderes und quasi das erste richtige mal für mich)
 
 
@Thedk 
 
Wie hast du das dann weiter realisiert? Wie bist du in den Raspberry rein?
	 
	
	
	
		
	Beiträge: 137 
	Themen: 9 
	Registriert seit: Oct 2016
	
 Bewertung: 
3 Geschlecht: Männlich
	 
	
		
		
		26.01.2017, 15:29 
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2017, 16:45 von Thedk.)
		
	 
		Einfach über die GPIO und das dann über einen Spannungsteiler, da der Arduino 5V an den digitalen Pins ausgibt. Die Pins lassen sich dann ja in Carpc Controller festlegen. Ich warte aber auch noch ganz gespannt auf den neuen Controller    
Sobald ich das mal im Auto direkt getestet habe und nicht nur am Schreibtisch, poste ich auch eine Anleitung dazu, Schaltpläne und Programme sind fertig. Mein komplettes Projekt aber noch nicht. 
Sollte dann auch für alle Lenkradferbedienungen, die auf den selben Prinzip bassieren funktionieren. Dafür muss man dann nur die Lfb mit einem zweiten Programm auslesen und die Werte in das eigentliche Programm eintragen bzw austauschen. Klingt vielleicht kompliziert, ist aber wirklich nur Tasten drücken, gucken was ausgelesen wird und Werte eintragen -> Fertig
	 
	
	
	
		
	Beiträge: 64 
	Themen: 3 
	Registriert seit: Mar 2016
	
 Bewertung: 
2 Geschlecht: Männlich
	 
	
	
		Funktioniert denn deine LRF genauso wie meine?  Weil es sich etwas komplizierter anhört,  oder ich verstehe es falsch. Um welches Auto handelt es sich denn? 
 Hast du denn Plan von dieser JSON Schnittstelle?
 
 Gesendet von meinem D5803 mit Tapatalk
 
	
	
	
		
	Beiträge: 137 
	Themen: 9 
	Registriert seit: Oct 2016
	
 Bewertung: 
3 Geschlecht: Männlich
	 
	
	
		Ich denke doch, fahre einen Astra G. Zwischen Masse und der Lfb Leitung verändert sich beim drücken der Widerstand, über einen Spannungsteiler misst das Radio dann die anliegende Spannung. Genau das selbe mache ich auch mit dem Arduino.
 
 JSON Schnittstelle? Wie? Warum?^^ Hat doch bisher nichts damit zu tun.
 
	
	
	
		
	Beiträge: 273 
	Themen: 9 
	Registriert seit: Dec 2015
	
 Bewertung: 
5 Geschlecht: Männlich
	 
	
	
		@Quoti30 http://forum.kodi.tv/showthread.php?tid=183394 
@Thedk 
Wieviele GPIO brauchst du für deine Lösung?
	 
	
	
	
		
	Beiträge: 64 
	Themen: 3 
	Registriert seit: Mar 2016
	
 Bewertung: 
2 Geschlecht: Männlich
	 
	
	
		@Thedk Ich fange ja das "Drücken" der Tasten mit dem Script ab und steuere Kodi dann per JSON, deswegen fragte ich.
 Wenn ich das richtig verstehe geht deine Lösung dann über den CarPC Controller aber erfordert zusätzlich einen Arduino.
 Das benötigt meine Lösung ja nicht, sondern nur den 2 € MCP3008 und einen Cent 200 Ohm Widerstand.
 Wobei, nichts für ungut, ich war/bin recht froh, diese Lösung gefunden zu haben, bin aber immer offen für andere Lösungen.
 
 @harryberlin
 Ja danke nochmal, die Befehlsübersicht habe ich ja oben auch geposted.
 "Player.GoTo" scheint das richtige zu sein, das wil aber irgendwie nicht. Ich glaube ich gebe diie Parameter iwie falsch an
 
	
	
	
		
	Beiträge: 273 
	Themen: 9 
	Registriert seit: Dec 2015
	
 Bewertung: 
5 Geschlecht: Männlich
	 
	
		
		
		26.01.2017, 22:58 
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2017, 22:58 von harryberlin.)
		
	 
		hmm, kann meinen link bei dir nicht finden. 
auf jeden fall, d musst dir erst die player id holen und dann bei next mitgeben. 
so hab ich es.
 Code: ('{"jsonrpc": "2.0", "method": "Player.GoTo", "params": { "playerid": %s, "to": "next" }, "id": 1}' % self.player_id())
 
	
	
	
		
	Beiträge: 137 
	Themen: 9 
	Registriert seit: Oct 2016
	
 Bewertung: 
3 Geschlecht: Männlich
	 
	
	
		Ja, genau. Bei mir sind es dann halt ~7€ an Material. Aus Mangel an Erfahrung mit dem Pi war es so für mich die einfachste Lösung.
 @Harryberlin
 Ich brauch dann entsprechend pro Taste/Funktion einen GPIO, in meinem Fall wären es sechs.
 OT: Sag mal, warst/bist du bei Powerpi unterwegs? Ich glaub da hatten wir schon ein paar mal Kontakt gehabt.
 |