Gelöst: Raspberry Pi nach Shutdown einschalten wenn TV eingeschaltet wird

  • Es gibt eine neue Version des Projektes. Ziel war es, die Platine in ein möglichst kleines Gehäuse zu bekommen, daher bin ich auf die Bauteilgröße 0603 umgestiegen. Da der Optokoppler viel zu groß ist, habe ich die "Shutdown"-Funktion weg gelassen. Dafür ist die Lösung sehr kompakt geworden, wie man auf den Bildern sehen kann.


    Wie fast immer, habe ich mehr Platinen als Bedarf. Wer also diese oder die bisherige Lösung haben möchte, kann mich weiterhin gerne per PN anschreiben.

  • Habe nach langer Recherche diese Lösung mit der Reset-Platine gefunden, sehr schönes Projekt!
    Das war auch der Grund, mich hier anzumelden. Werde bestimmt öfter hier im Forum vorbeischauen. :)


    Grüße vom Lötknecht

  • Ich bin da einen ganz anderen weg gegangen. Da ich auf meinem Samsung TV das Problem habe das er auch mal spontan Spannung auf den USB Port gibt und davon auch der Raspberry angeht womit, er wiederum über HDMI CEC den TV anschaltet. Habe ich entschieden einen ATtiny85 zu nutzen an diesem ist ein TSOP 31238, sich "Resetet" werden soll der Raspberry nur wenn der TV eine Spannung auf den USB Port gibt und auch der Power Knopf an der Fernbedienung benutzt wird. Das ganze ist noch in der Entwicklung aber funktioniert schon soweit.


    Meine Ursprüngliche Idee war es diese Schaltung in einem externen Gehäuse zu verbauen und dem Atiny mit der Spannung des TV zu versorgen so würde der Raspberry nur angehen wenn, zu dem Signal auch die Spannung ist. Jetzt möchte ich ein Board für den Raspberry Bauen an dem ich die Bauteile mit dem 3V3 Pin Versorge (weniger Verbrauch). Nur muss ich noch jetzt einen Pin des Attiny dafür benutzen dass, er erkennt ob der TV Spannung hat.


    Code des Attiny mit der Arduino IDE:


    Wenn ihr möchtet mache ich ein Schaltplan dazu ;)

  • Da wird Dein TV wohl zwischendurch in die Welt (wahrscheinlich nach Hause) funken, wodurch der USB-Port mit Spannung versorgt wird. Deine Idee finde ich gut. Aber ich verstehe nicht, wieso Du den Tiny nun doch dauerhaft mit Spannung versorgen willst, statt wie im ersten Gedanken die 5V vom USB zu nutzen.


    Könntest Du Dein Bild mal hier im Forum hochladen? Ich kann es nicht öffnen.


    Ein Schaltplan ist immer eine prima Sache. Zeig mal her. Soll der Tiny direkt auf der Stiftleiste des RasPi montiert werden?

  • Mein erster Gedanke war es den Raspberry direkt an die GPIO Stiftleiste zu montieren. Leider hat dies in der Praxis nicht so toll funktioniert da ich nur eine Lochrasterplatine mit einer kaschierten Seite habe. Die Buchsenleiste ist mit der Kaschierung abgebrochen. Jetzt verbau ich das alles doch in einem eigenen Gehäuse.


    Den Raspberry als Stromversorgung des Tiny habe ich wegen der Erweiterungsmöglichkeit genommen falls ich noch was machen möchte.
    Noch eine idee die ich hatte wäre es die Datenleitung des TSOP noch parallel an den Pi zu schalten so könnte er auch IR empfangen.


    Hier der neue verwendete Code:


    Die Schaltung funktioniert super. Selten kann es nur passieren das sich die Schaltung aufhängt und nicht Schaltet aber, dass ist jetzt nur einmal geschehen.
    Hier ist noch der Schaltplan und Bilder der Platine (nicht ganz Sauber geworden :D ).


    (IR Empfänger war extern über das Kabel verbunden)

  • Ich finde den Lösungsansatz sehr gut. Daher habe ich dazu ein kleines Platinchen entwickelt, dass direkt auf den RasPi gesetzt werden kann. Die kleinen Schaltungsfehler, die ich in der Zeichnung von DragonPi gefunden habe, habe ich beseitigt. Damit jeder die Möglichkeit hat, den Tiny zu flashen, habe ich ihn ausnahmsweise nicht als SMD-Version genommen, sondern gesockelt. Die Spannungsversorgung läuft über den RasPi, so dass der Tiny ständig läuft. Die Spannung des USB-Anschlusses kann als zusätzliche Bedingung unten rechts angeschlossen werden. Der Reset Anschluss ist direkt über dem RUN Anschluss des RasPi3 positioniert. Wer eine andere RasPi Version hat, müsste ein Jumperkabel verwenden.


    Wie (fast) immer habe ich mehr Platinen als Bedarf. Wer eine haben möchte, kann sich gerne per PN bei mir melden.


    edit 22.06.2017:
    Um das Signal der Fernbedienung auslesen zu können, benötigt man einen Arduino. Mit dem RasPi geht das sicherlich auch. Das müsste dann aber jemand anderes beschreiben. Die Vorgehensweise mit dem Arduino ist sehr einfach. Zuerst fügt man die Library "IRremote.h" hinzu, sofern sie noch nicht vorhanden ist. An dieser Stelle geht mein Dank mal wieder an dreamshader, der mir erklärt hat, wieso man "long" und nicht "char" für die Variable nimmt. :danke_ATDE:

    Kleiner Sketch für einen Arduino, um den HEX-Wert des IR-Signales einer Fernbedienung zu ermittlen.

     
    Der Sensor TSOP31236 wird mit 3V3 oder 5V, Masse und der Signalleitung (an Pin 2) an den Arduino angeschlossen.
     
    Es muss der serielle Monitor geöffnet werden. Dort sollte nach dem Übertragen dieses Sketches
    "ready..." zu lesen sein.
     
    Nun drückt man die Taste der Fernbedienung, auf die die Schaltung künftig reagieren soll. Der Code
    wird im seriellen Monitor angezeigt. Den so ermittelten Wert schreibt man in die Variable "IR_Wert".
    Hierbei muss 0x immer vorgestellt werden. Die Zahlen 1234 werden durch den ermittelten
    Wert ersetzt. Eventuell auftauchende Zeichenfolgen "FFFFFFFF" können ignoriert werden.
     
    Der so geänderte Sketch wird nun wieder auf den Arduino gespielt. Drückt man nun abermals die
    Taste der Fernbedienung, sollte die auf dem Arduino Uno on Board an Pin 13 angeschlossene LED
    zwei mal kurz aufblinken. Dies ist die Bestätigung für eine korrekte Eingabe.
     
    Den so bestätigen IR_Wert muss man nun in den zweiten Sketch für den ATtiny übertragen.


    Der zweite Sketch für den ATtiny folgt in den nächsten Tagen. Aktuell ist die Zeit etwas knapp.

  • Quote from "Ollemo" pid='140914' dateline='1426232834'


    Nagut, dann will ich mal. Die Schaltung ist ziemlich einfach. Es werden 5 Standardbauteile benötigt, die man zusammen für unter 50 Cent bei Reichelt bekommt. Wer zu Hause ein wenig bastelt, hat sie sowieso in der Bastelkiste liegen:


    ...


    Danke.

    Ich bin noch Neuling mit Raspbian / Linux.
    Raspberry Pi 3, Raspbian Stretch (Pi-Controle, Pi-Hole, http-Server, ftp-Server, psyBNC)
    Rechtschreibfehler sind beabsichtigt, und wurden zur allgemeinen Belustigung hinzugefügt.

  • Hallo zusammen,

    ich habe die Schaltung von der ersten Seite nachgebaut - auch ohne Optokoppler - wer wird schon feige sein.

    Eingangs sei erwähnt, dass ich es unglücklich finde, dass der Raspberry durch die Schaltung jedesmal resettet (wenn er schon läuft), wenn man das USB-Kabel einsteckt. Ich sollte dem ganzen wohl noch einen Pull-Up spendieren, der von den 3,3V des Raspberrys versorgt wird um das abzustellen - hole ich mal nach.


    Ich habe eingezeichneten Widerstand R4 durch einen Spannungsteiler ersetzt. Den Mittelabgriff des Spannungsteilers habe ich auf den Raspberry GPIO-Pin12 geführt.

    Geht der über USB-angeschlossene Fernseher aus, erkenne ich da über ein script und fahre den Raspberry runter.

    Als Status-Anzeige habe ich noch an GPIO-Pin4 eine Led mit Vorwiderstand gelötet.

    Diese schalte ich per Script beim hochfahren an, detektiere ich einen Pegelwechsel an GPIO-Pin12 von High nach Low blinke ich eine Minute und fahre dann runter.

    Die minute Wartezeit habe ich nur eingebaut, falls das mit der Erkennng mal nicht funktioniert - dann hab' ich noch eine Minute, das Script zu deaktivieren :-)

    Ich hab' das zuerst für die Jessie-Distribution geschrieben (in Python unter Verwendung der GPIO-LIB) - das fuktioniert ohne jede Zusatzinstallation.

    allerdings nicht unter Libreelec/Openelec, da dort die GPIO-Lib nicht vorhanden ist.

    Ich habe mal beide Versionen hier reinkopiert - falls die jemand verwenden möchte.

    in libreelec packt man den Inhalt am besten in /storage/.config/autostart.sh

    In Jessie kann man es in die rc.local einhängen (vor dem exit mit "python ./home/pi/Desktop/shutdown.py")


    Beide Scripte funktionieren auch ohne USB-Anschluss. Wenn der Stecker nicht im Fernseher steckt, verhält sich der raspberry wie gewohnt, da auf eine negative Flanke gewartet wird, die nicht da sein kann, wenn er nicht am Fernseher angeschlossen ist


    So fährt der raspberry sauber hoch- und runter und leuchtet auch noch passend :-)


    Achja: er IR-Empfänger hat natürlich nichts mit dem Rest der Schltung zu tun.



    autostart.sh


    shutdown.py

    Edited once, last by Normen ().

  • Hallo,

    ich bin absoluter Neuling und ich hoffe ihr verzeiht die vielleicht blöde Frage. ;)

    Ich habe die Schaltung lt. dem Schaltplan von #91 nachgebaut. Schaltet man den TV ein startet der Raspberry aber beim ausschalten des TV's funktioniert das shutdown nicht.

    Ich habe in diesem Thread mehrmals was von einem Skript im Autostart gelesen, muß man für das herunterfahren auch softwareseitig was machen und wenn ja wie?


    Danke! :)

  • Hallo nochmals,



    ich habe jetzt tagelang recherchiert und probiert, ich bekomme das mit dem Script einfach nicht hin.
    Wäre jemand so gnädig mit wenigen Worten zu beschreiben was ich im Putty nach dem login mit folgendem Script machen muss?


    Ich denke das Sript sollte so passen?

    (Libreelec 8, 10K Pullup, Pin11 - GPIO17)



    Danke!

  • Nabend zusammen,

    Ich habe ein kleines Problem :D

    und zwar habe ich auf Ansatz von post #126 mir die taste ausgelesen von meiner FB. Da mein TV leider den USB nicht abschaltet beim ausschalten, habe ich mir gedacht ich nehme den Run zum neustarte und nen GPIO 26 mit pullup an 3,3V um ihn auszuschalten.

    Also eigentlich läuft es auch Prima auf dem atmega 8 im uno.... aber sobald ich das Programm auf den attyni 85 hochlade geht nix.

    Vielleicht kann mir wer n Gedankenanstoß geben wo ich suchen könnt?


    Im Anhang der Quellcode und der Schaltplan aus KICAD

  • Hi, ich kann zwar mit nem Lötkolben umgehen und so ziemlich alles nachbauen das wars dann aber leider auch.

    Die Schaltung für das Auto Ein und Ausschalten ist super! Werd ich definitiv nachbauen..

    Was mich stört ist die zusätzliche permanente Stromversorgung.

    Mein Gedankengang ist: Wird der Pi am TV Betrieben und ist zum ein/aus- schalten per USB verbunden wärs doch genial könnte man nun noch die USB Stromversorgung für den Pi ebenfalls vom TV nehmen.Ich hätte hierfür 3 USB Buchsen am TV übrig.

    Lässt sich das Problem mit dem Strom plötzlich weg wenn TV ausgeschaltet wird nicht durch einen passenden Kondensator oder ähnliches lösen?

    Also im Grunde nur dafür sorgen das lang genug noch Spannung verfügbar ist bis der Shutdown sauber durchgelaufen ist ?? Das hätte doch den wie ich finde großen Vorteil das der Pi nicht permanent am Strom hängt, sondern nur dann wenn der TV eingeschaltet ist. Ich kann sowas leider nicht daher hier einfach mal die Frage/Idee... wenns zu komplex ist auch gut.. vielleicht findet das ja auch jemand total klasse und hat die passenden Lösung parat..

  • wo ist da sProblem?


    OSMC ist dafür geeignet, ich nutze es schon über 1 Jahr an 2 TV die mit einem Y-USB Kabel die beiden PI versorgt.

    Bei Abschalten wird auch der PI abgeschaltet, wenn der TV die USB Ports ausschaltet. Für andere müssen halt andere Lösungen gesucht werden, ich glaube Neueinsteiger hat eine Startplatine gebaut die bei TV an den PI mit den RUN port den PI hochfährt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ist es möglich, die Schaltung aus Post #3 so zu verändern, dass sie anstatt mit den 5V aus einem USB-Anschluss mit 12V (DC, 0,1A) aus dem Trigger-Out eines AVR funktioniert? Welche Bauteile müssten stattdessen eingebaut werden?


    Vielleicht wäre das eine einfache Alternative, falls die USB Spannung am Fernseher nicht mit abgeschaltet werden kann...

  • Hallo, an alle, ich bin neu hier im Forum, bin aber durch die Suche auf dieses Projekt gestoßen , welches die Lösung für mein Problem wäre.

    Neueinsteiger, kann man bei dir noch Platinen/Kabel bekommen?


    Vielen Dank schonmal

    smkcc

    Edited once, last by smkcc ().

  • Hallo zusammen,

    zuerst möchte ich mich bei Neueinsteiger bedanken. Er hat mir eines dieser wundervollen Kabel im August 2019 zugeschickt.


    Ich habe es dann direkt an meinem nagelneuen Raspberry Pi 4 anschließen wollen. Das ist mir zuerst nicht gelungen.
    Ich musste aus diesem Thread einen neuen Bootloader installieren:


    https://raspberrypi.stackexcha…-when-run-pin-is-grounded


    Der Raspberry Pi 4 schaltet ansonsten den gesamten Strom beim Ausschalten ab. Ein Start ist dann per Reset nicht mehr möglich.

    Dieser Bootloader setzt es wieder so, wie es bei den vorherigen Modellen üblich war.


    Weiterhin hat sich der Run-Pin verändert. Der Run-Pin besteht nun aus 3 Kontakten: RUN, GROUND, GLOBAL_EN.

    Den Raspberry Pi 4 kann man nur neu starten, indem man GLOBAL_EN mit GROUND kurzschließt.

    RUN bleibt ungenutzt.

    Damit funktioniert es einwandfrei.


    Nachteil: Der Raspberry Pi verbraucht so im Standby 1,1 Watt und er wird dabei handwarm.

    Aber hey, er schaltet sich mit dem Fernseher ein. Das ist doch großartig!

    Vielen Dank für die Hilfe hier im Forum! Auf die Idee wäre ich ansonsten nicht gekommen.

  • Ich möchte mich ebenfalls herzlichst bei Neueinsteiger bedanken.

    Für mich hatte er ebenfalls eine Platine (mit Shutdown-Steuerung).


    Das Beste: Er hat mir sogar noch einen StepDown von 12V auf 5V davorgeschaltet, damit ich den Trigger-OUT meines AVR nutzen kann.

    Klinkenbuchse oder -kabel anlöten fertig. Vielleicht auch interessant für andere, die das hier finden.

    nikelrah


    Besten Dank dafür!


    Der Reset funktionierte direkt einwandfrei - nur mit dem Python fürs runterfahren über den GPIO Pin musste ich etwas rumprobieren.

    Ergebnis poste ich morgen hier.


    EDIT:

    Hier das Python-Script. Und weil es für mich nicht ganz klar war und hier im Thread oftmals Python-Scripte mit Pull-Down gepostet wurden - nochmal mit Erklärung.
    Die Platine von Neueinsteiger zieht den Shutdown-Anschluss auf GND während die Trigger-Spannung anliegt.

    Das bedeutet, dass wir einen (internen) PullUP auf dem Pin brauchen, der diesen wieder auf 3,3V zieht wenn die Trigger-Spannung abfällt.

    Das Python-Script reagiert dann auf diese aufsteigende Flanke.


    Gestartet wird das Script bei mir per systemd-Unit.


    Ergänzung für alle OSMC-Benutzer:

    Ich musste bei OSMC erst die Berechtigungen für die GPIO-Pins anpassen, damit das Python nicht mit root laufen muss.

    Habe ich per UDev-Regel erledigt. Einfach eine Datei anlegen (z. B "997-gpio-permissions.rules) in /etc/udev/rules.d mit folgenden Inhalt und dann einmal neustarten.

    Code
    SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="osmc", MODE="0660"
    SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:osmc /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
    SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:osmc /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"
  • Hallo loeffelpan,


    sieh mal hier: https://gpiozero.readthedocs.i…ipes.html#shutdown-button ;)


    Das ist:

    - aktuell durch Python3

    - und gpiozero

    - kürzer und einfacher

    - pullup=true ist Standard

    - versehendliches Herunterfahren weniger möglich, weil der Taster 2 Sekunden gedrückt werden muss

    - benötigt keine root-Rechte


    Das verwendet ootb die BCM-Nummern (in Deinem Fall die 26 https://de.pinout.xyz/pinout/pin37_gpio26), also entweder du verwendest diese auch oder passt das Skript an, damit es BOARD-Nummern verewendet. Mehr dazu hier: https://gpiozero.readthedocs.i…ecipes.html#pin-numbering ;)

  • Sieht gut aus, funktioniert aber nur mit nem Taster bzw. wenn das Ziehen auf GND als Trigger dient.

    Noch einfacher wäre dann das hier - da braucht man sich gar nicht mit Python rumschlagen. Funktioniert aber nicht mit jedem Betriebssystem.

    https://blog.gc2.at/post/pi-herunterfahren/

    Da kann man einfach in der config.txt eine Zeile einfügen und nen Taster an einen definierten PIN anstecken/löten.

    Einmal drücken -> Herunterfahren; Nochmal drück -> Hochfahren; GENIAL!


    Leider entspricht das nicht ganz dem gewünschten Szenario, da es kein Taster ist und der Pin nicht als Trigger auf GND gezogen wird.

    Die Platine von Neueinsteiger zieht den Shutdown-Anschluss auf GND während die Trigger-Spannung anliegt.

    Heruntergefahren werden soll es wenn die Trigger-Spannung abfällt und die Spannung am PIN wieder ansteigt (GPIO.RISING).

    Hätte Neueinsteiger auch anders herum lösen können, aber dafür wäre die Platine aufwändiger gewesen und hätte noch einen Draht mehr gehabt (3,3V zur Platine).


    Danke trotzdem für die Ergänzung, vielleicht hilft es ja dem ein oder anderen.