Benutzeravatar
piBenni
Neuling

Beiträge:14
Registriert:17. Jun 2016

Ambilight per GPIO Schalter Starten/Stoppen

31. Jul 2016, 15:05

Da mein Ambilight, dank etwas hilfe von dem Forum, nun hervorragend läuft, hab ich mir noch einige zusätzlich Gedanken gemacht. Prinzipiell sollte es doch möglich sein über einen an die GPIO angeschlossenen Schalter das Ambilight zu starten oder stoppen? Hat hier schon jemand ne Lösung dafür gebastelt? Bzw. das sollte je prinzipell machbar sein?

Wenn ja geht das so:

Code: Alles auswählen

// WiringPi-Api einbinden
#include <wiringPi.h>

// C-Standardbibliothek einbinden
#include <stdio.h>

int main() {

  // Starte die WiringPi-Api (wichtig)
  if (wiringPiSetup() == -1)
    return 1;

  // Schalte GPIO 24 (=WiringPi Pin 5) auf Eingang
  pinMode(5, INPUT);

  // Dauerschleife
  while(1) {

    // GPIO lesen
    if(digitalRead(5)==1) {
      // LED an
      system(/storage/.config/autostart.sh > /dev/null 2>&1 &);
   }else {
             // LED aus
            system(killall hyperiond 2>/dev/null);
    }
  }
}


Wie ja unschwer zu erkennen ist bin ich kein profi in sachen Programierung ;) deshalb keine Ahnung ob ich das richtig gemacht habe..
Wäre super wenn mir da jemand weiter helfen könnte

piBenni
Neuling

Beiträge:14
Registriert:17. Jun 2016

Ambilight per GPIO Schalter Starten/Stoppen

21. Aug 2016, 11:27

So Freunde der LEDs hinterm TV :D

Da mir ja bei meiner Frage keiner helfen konnte oder wollte, hab ich mich halt selber auf die suche nach ner Lösung gemacht. Und siehe da, es scheint zu funktionieren. Hab das ganze aber noch ein kleines bisschen abgeändert.

Als allererstes bin ich von openELEC auf OSMC umgestiegen, da ich vergeblich versucht hatte pakete mit apt-get bei openELEC zu installieren. Nach etwas weiterer Recherche hab ich dann beschlossen statt C++ lieber auf Python umzusteigen.

Code: Alles auswählen

import time
import RPi.GPIO as GPIO

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)

# Pin 18 (GPIO 24) auf Input setzen
GPIO.setup(18, GPIO.IN)


# Dauersschleife
while 1:

   # GPIO lesen
     if GPIO.input(18) == GPIO.LOW:
          # LED an
          os.system("sudo systemctl start hyperion.service 2>/dev/null ; sudo /etc/init.d/hyperion start 2>/dev/null ; sudo /sbin/initctl start hyperion 2>/dev/null")

       elif GPIO.input(18) == GPIO.HIGH:

          # LED aus
          os.system("sudo systemctl stop hyperion.service 2>/dev/null; sudo /etc/init.d/hyperion stop 2>/dev/null ; sudo /sbin/initctl stop hyperion 2>/dev/null")


Das ist der Code mit dem das ganze läuft. Ob es da noch Optimierungsbedarf gibt weiß ich natürlich ned..

Das ganze muss dann natürlich bei start automatisch ausgeführt werden, wäre sonst ja doch sehr unpraktisch. Dazu hab ich mich an der Anleitung orientiert-. http://www.forum-raspberrypi.de/Thread-tutorial-autostart-eines-python-script
Das einzige was zusätzlich beachtet werden muss, man muss in der rc.local sein skript so eintragen:

Code: Alles auswählen

python /home/pi/test.py &
exit 0

Wenn wie in der Anleitung das python fehlt tuts ned.

Da ich aber auf dauer auch nicht immer aufn Schalter drücken will, ist ja irgendwie auf dauer auch nicht praktisch, hab ich mir noch ne kleine Schaltung gebastelt. Mit der schalte ich dann das Ambilight an sobald am USB Port des TV 5V anliegen und aus wenn diese nicht mehr anliegen. Praktischerweiße tun sie das genau dann wenn man den TV an und aus schaltet.

Bild
Bild

Das ist der Schaltplan und der aufbau auf einer Lochrasterplatine. Ob das mit dem Optokoppler so nötig ist weiß ich ned. Verwendet hab ich den eigentlich nur weil der mir zufällig gerade in die Finger kam und ich den mal testen wollte. Verwendet hab ich folgenden: http://www.sharpsma.com/webfm_send/1092

Donald
Moderator

Beiträge:1255
Registriert:15. Nov 2015

Ambilight per GPIO Schalter Starten/Stoppen

21. Aug 2016, 14:09

Mir erschliesst sich bisher nicht, warum man das Ambilight überhaupt starten und stoppen sollte ?? Das geht doch bisher auch: Film läuft -> Ambilight an. Film Stoppt -> Ambilight aus.

piBenni
Neuling

Beiträge:14
Registriert:17. Jun 2016

Ambilight per GPIO Schalter Starten/Stoppen

21. Aug 2016, 15:57

Naja deine Beschreibung trifft vielleicht zu wenn man die Filme über den Pi anguckt. Bei verwendung von nem externen Grabber aber funktioniert das ned..
Da geht es ja an sobald der Pi startet

Avalox2k
Mitglied

Beiträge:357
Registriert:9. Feb 2016
Wohnort:Gera

Ambilight per GPIO Schalter Starten/Stoppen

21. Aug 2016, 20:25

Hmmm... Du machst dir ja richtig Mühe. Aber was spricht gegen einen Druck auf die Fernbedienung um es an und aus zu schalten ?

Gesendet von meinem Galaxy S6 Edge+ mit Tapatalk
*** Raspberry PI 3 * Ambilight * IR Remote * WD MyCloud NAS ***

piBenni
Neuling

Beiträge:14
Registriert:17. Jun 2016

Ambilight per GPIO Schalter Starten/Stoppen

22. Aug 2016, 14:08

Jop das wäre die Alternative gewesen, aber da wäre wieder ne zusätzliche Aktion nötig gewesen ;)

Ich mag es eigentlich eher wenn alles automatisch ohne mein zutun sich an und aus schaltet (Wenn ich es will natürlich). Und ich hätte mir für die Zeit ne andere Beschäftigung suchen müssen :D

piBenni
Neuling

Beiträge:14
Registriert:17. Jun 2016

Ambilight per GPIO Schalter Starten/Stoppen

21. Mai 2021, 14:32

Inzwischen sind einige Jahre vergangen, der TV hat viele Male die LEDs an und ausgeschaltet. Nun stand ein Hardware wechsel aufrund eines defekts an. In diesem Zuge habe ich das ganze System auf hyperion.ng aktualisiert. Da habe ich dann mein altes python script etwas angepasst und optimiert.

Code: Alles auswählen

import time
import os
import RPi.GPIO as GPIO

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)

# Pin 18 (GPIO 24) auf Input setzen
GPIO.setup(18, GPIO.IN)


# Dauersschleife
while 1:

    # GPIO lesen
    if GPIO.input(18) == GPIO.LOW:
        # LED an
        os.system("hyperion-remote --enable LEDDEVICE")

    elif GPIO.input(18) == GPIO.HIGH:

        # LED aus
        os.system("hyperion-remote --disable LEDDEVICE")
    time.sleep(2)


Wichtig ist, dass alles korrekt eingerückt ist. Sonst gibts eine Fehlermeldung.

Eingerichtet wir das folgendermaßen

Code: Alles auswählen

sudo nano usbswitch.py

das öffnet den editor nano, dort kopiert ihr den quelltest von oben rein. Wichtig wie gesagt auf die tabs achten!

Speichern mit STRG+O
Schließen mit STRG+X

Code: Alles auswählen

python3 usbswitch.py

da könnt ihr jetzt testen ob alles läuft, ihr solltet dann kein error bekommen und das Programm müsste in Dauerschleife laufen

Beenden mit STRG+Z

Code: Alles auswählen

sudo nano /etc/rc.local


es üffnet sich wieder der editor. Dort tragt ihr den Pfad mit dem Programm ein, wichtig ist das & am ende der zeile und es muss vor dem exit0 stehen:

Code: Alles auswählen

python3 /home/pi/usbswitch.py &
exit 0


Speichern mit STRG+O
Schließen mit STRG+X

Code: Alles auswählen

sudo reboot

Der Pi wird neu gestartet und das Programm läuft ab jetzt immer ab start und überwacht ob der TV an oder aus ist.

Zurück zu „Allgemein“