Touchscreen "Lichtschalter"

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Moin Moin,
    Ich stelle euch denn mal mein aktuelles Projekt vor :)

    Ja, was ist eigentlich das Ziel? Im Grunde genommen war für mich der Weg das Ziel... Eigentlich wollte ich nur Python lernen. Nachdem ich mich ein wenig in die Grundlagen eingearbeitet habe, musste ich es irgendwie interessant machen. Nur wie?

    So richtig interessant wird es doch erst wenn etwas sichtbar und anfassbar ist, und mit einem interagiert. Deswegen kam ich schnell auf Pygame und Funksteckdosen. Warum also nicht einen einfachen Lichtschalter durch etwas modernes wie einen Touchscreen austauschen. Am besten so, dass er einen noch andere Informationen anzeigt, wie das aktuelle Wetter, die Temperatur, Uhrzeit, Datum, und denn auch noch schön verpackt?

    jkgcdxoj.png

    Als Softwarebasis benutze ich:
    -Raspbian
    -raspberry-remote von xkonni
    -wiring-pi
    -notro´s FBTFT Treiber
    -pywapi (Eine Python Wetter API)
    -Python
    -Pygame

    Die Hardware ist folgende:
    -RPi 2 (soll später vielleicht auf einem RPi A+ laufen)
    -Waveshare 3.5 inch RPi LCD (A) mit Touchscreen
    -einen kleinen WLAN-Stick den ich noch rumliegen hatte
    -ein 433MHz Funkmodul
    -Brennenstuhl Funksteckdosen


    Funktionen:
    Dauerhaft angezeigt werden Datum, Uhrzeit und Wetterinformationen

    Auf der linken Seite kann man in die einzelnen Raum-Menüs, sowie in das "Einstellungs-Menü" gehen

    jig7ae8l.png

    Durch antippen der Icons auf der rechten Seite, schaltet sich das jeweilige Gerät an oder aus und das Icon wechselt dementsprechend.

    Das "Einstellungs-Menü"

    jkkg75rr.png

    Ja... Viel lässt sich nicht gerade einstellen, wie man sieht :D

    Man kann aktuell nur die Farbe der oberen Leiste wirklich einstellen.
    Weiterhin, kann man einen Reboot oder einen Shutdown ausführen.
    Oben rechts werden Statusinformationen angezeigt, wie die IP-Adresse (aktuell nur von wlan0), die Uptime und die CPU-Temperatur.

    Da wird im laufe der Zeit bestimmt noch mehr dazu kommen....

    #######Update 1#######

    Bestätigungsabfrage für Shutdown und Reboot hinzugefügt:

    c4omcsnu.png

    #######Update 2#######

    Dank der tollen Unterstützung von GreatJo, stürzt das Skript nicht mehr ab, wenn die Internetverbindung verloren geht.
    Statt der der Wetterdaten erscheint jetzt der Schriftzug "Wetterdaten nicht verfügbar".

    6tspldr5.png

    Was noch folgen soll:

    1. Sprachsteuerung über Mikro oder Smartphone
    2. Steuerung über das Smartphone/Web
    3. Eine Webcam, in Verbindung mit einer Lichtschranke und Telegram. Wenn jemand die Wohnung betritt, soll mir ein Bild zugeschickt werden.
    4. Fensterkontakte, mit denen der RPi mich warnen kann, wenn ich die Wohnung verlasse und vergessen hab ein Fenster zu schliessen
    5. Mein NAS-Integrieren, sodass er sich schlafen legt, wenn ich die Wohnung verlasse und aufwacht wenn ich wieder Heim komme.
    6. Display Abschaltung nach x-Sekunden und eine Helligkeitsregelung.
    7. Schnellschaltfunktion. Durch schnelles doppeltes tippen auf den Touchscreen schaltet sich das Licht im jeweiligem Raum ein.

    Weitere Ideen werden bestimmt noch folgen, allerdings geh ich das erstmal langsam an, da auch noch einige Probleme vorhanden sind.

    Aktuelle Probleme:

    1.
    Die raspberry-remote von xkonni verwendet als DATA-Pin, den Pin 11 (GPIO17). Dieser wird nun aber meinem Display benutzt. Dieses belegt die ersten 26 Pins. Ich hab es noch nicht geschafft den Pin zu ändern.
    Nun bin ich vorhin auf ein Tutorial gestoßen. Dort wird von "overlays" gesprochen. Könnte ich diese Funktion nutzen, um der raspberry-remote einen anderen Pin zuzuweisen? Kann das Display dann den Pin auch noch regulär weiter nutzen?

    2. Problem gelöst
    Das Pygame Skript stürzt ab, wenn die Internet Verbindung verloren geht. Das liegt daran, dass Pywapi dann keine Wetterinformationen holen kann und einen Fehler zurückbringt. Ich hab noch nicht herausgefunden, wie ich mit solchen Fehlern im Skript umgehen muss.

    Da ich aktuell Urlaub habe und mein RPi an meinem Arbeitsort liegt, kann ich Lösungsvorschläge leider noch nicht testen.
    Ich würde mich trotzdem freuen wenn sich der eine oder andere dazu äußern könnte. Vielleicht habt ihr ja noch ein paar Ideen :)

    Ich hoffe es gefällt euch :)

    Einmal editiert, zuletzt von execute1337 (14. April 2015 um 14:54)

  • Mir gefällt dein Projekt sehr gut und ist auch sehr interessant :thumbs1:

    Da ich erst seit ein paar Wochen mit einem Raspberry pi experimentiere, hätte ich ein paar Fragen zu deinem Projekt.

    Wie hast du deine Display Oberfläche gemacht, also gibt es da ein bestimmtes Programm?

    Wenn du auf deinem Display drückst, was wird intern im PI aufgerufen also welche Programme laufen dann bei einer Berührung? Damit die richtige Aktion ausgeführt wird

    Wie hast du das mit dem Lichtschalter gemacht, wie steuerst du deine Lampen im Zimmer an?

    Und könntest du noch eine kurze Erklärung geben, wie dein ganzes Projekt funktioniert?

    Wäre sehr dankbar :danke_ATDE:

    MFG

  • Schaut sehr gut aus und gefällt mir! Gehört auf jeden Fall zu den schönsten Projekten hier im Board. :thumbs1:

    Das einzige was mich ein ganz kleines bisschen stört, dass die Beschriftungen in der Liste nicht vertikal zentriert sind und ich würde die Wetter-Daten ähnlich vom Rest abheben, wie die beiden oberen Leisten. Aber das ist meine persönliche Präferenz. :P

    Deine Pläne klingen gut. Vor allem die Idee mit dem Doppel-Tippen für Licht einschalten find' ich gut. Wenn man in einen Raum kommt, will man ja nicht umbedingt erst auf dem Display nach dem konkreten Schalter suchen. :thumbs1:

    Bei deinem ersten Problem kann ich Dir leider nicht weiterhelfen, beim zweiten fehlen mir — und den anderen sicherlich auch — noch weitere Informationen. Was bedeutet Fehler in dem Fall? Wird eine Exception geworfen? Wenn ja was für eine? :huh:

    Sind die Ansichten in deinem Menü eigentlich hardgecodet oder werden sie generiert?

    Gruß
    Chris

  • Christof_12

    Zitat

    Wie hast du deine Display Oberfläche gemacht, also gibt es da ein bestimmtes Programm?

    Ich hab alles in Python geschrieben. Für die Oberfläche habe ich eine Python-Bibliothek namens Pygame verwendet.

    Wie der Name es schon erahnen lässt, ist diese eigentlich für Spiele gedacht. Aber sie lässt sich sehr gut für solche Sachen zweckentfremden :D

    Zitat

    Wenn du auf deinem Display drückst, was wird intern im PI aufgerufen also welche Programme laufen dann bei einer Berührung? Damit die richtige Aktion ausgeführt wird

    Um die Funksteckdosen zu schalten, nutze ich die raspberry-remote von xkonni. Um eine Funksteckdose an zu schalten muss einfach der Befehl

    Code
    sudo send433 11111 1 1


    ausgeführt werden. Und um sie auszuschalten

    Code
    sudo send433 11111 1 0

    Ich hab die wahrscheinlich eine sehr unschöne Variante genutzt um diese Befehle abzusetzen.

    Code
    os.system('sudo send433 11111 1 1')
    Zitat

    Wie hast du das mit dem Lichtschalter gemacht, wie steuerst du deine Lampen im Zimmer an?

    Noch garnicht :D Der kleine Touchscreen soll ja im Grunde genommen die Lichtschalter ersetzen. Für die Lampen werde ich wohl Funksteckdosen umbauen, oder Funkrelais (falls es sowas gibt) nutzen und sie dann nur über den RPi steuern. Das ganze ist momentan noch ein Testaufbau mit Funksteckdosen...

    Zitat

    Und könntest du noch eine kurze Erklärung geben, wie dein ganzes Projekt funktioniert?

    Da musst du schon ein wenig präziser werden :D Was genau ist denn unklar?

    Chris1705

    Zitat

    Schaut sehr gut aus und gefällt mir! Gehört auf jeden Fall zu den schönsten Projekten hier im Board. :thumbs1:

    Danke :)

    Zitat

    Das einzige was mich ein ganz kleines bisschen stört, dass die Beschriftungen in der Liste nicht vertikal zentriert sind und ich würde die Wetter-Daten ähnlich vom Rest abheben, wie die beiden oberen Leisten.

    Die Beschriftung wollte ich schon linksbündig haben, das gefällt mir persönlich am besten :) Die Wetter-Daten abheben? Meinst du, ich sollte die Zeile auch farblich unterlegen? Ich kann das in nächster Zeit mal ausprobieren, aber ich sehe keinen Grund, was die Wetter-Daten so besonders macht, dass ich sie hervorheben muss :D
    Ich hab mich beim "Design" übrigens an Google´s Material Design orientiert

    Zitat

    Deine Pläne klingen gut. Vor allem die Idee mit dem Doppel-Tippen für Licht einschalten find' ich gut. Wenn man in einen Raum kommt, will man ja nicht unbedingt erst auf dem Display nach dem konkreten Schalter suchen


    Genau das ist der Gedanke dahinter :D Wenn man in Eile ist, kann so ein Display noch kleiner werden, als es eh schon ist :D Das gehört aber noch zu den Sachen, an die ich mich noch nicht rangesetzt habe.

    Zitat

    Bei deinem ersten Problem kann ich Dir leider nicht weiterhelfen, beim zweiten fehlen mir — und den anderen sicherlich auch — noch weitere Informationen. Was bedeutet Fehler in dem Fall? Wird eine Exception geworfen? Wenn ja was für eine?

    Eine Frage die ich gerne beantworten würde... aber nicht kann :D Mein Projekt-RPi liegt leider an meinem Arbeitsort und ich befinde mich im Urlaub :) Du hast natürlich recht! Ich sollte das schon genauer erläutern. Das werde ich auch gerne nachholen, sobald ich meinen RPi wieder in den Fingern habe :D

    Zitat

    Sind die Ansichten in deinem Menü eigentlich hardgecodet oder werden sie generiert?

    Alles hardgecodet und in voller Dreistigkeit nur auf meine eigenen Bedürfnisse zugeschnitten :D Das Problem ist, ich bin in Sachen Python sehr, sehr, unerfahren! Ich bin noch nicht lange dabei und hab mir alles selbst bei gebracht. Und da ich mich kenne, weiß ich auch was für ein schlechter Lehrer ich bin :D

    Ich würde auch gerne meinen "Code" zeigen, aber dann würde mich wahrscheinlich die Python-Gemeinde erhängen für 988 Zeilen pure Beleidigung :D

    Danke für eure Meinungen :)

    Einmal editiert, zuletzt von execute1337 (8. April 2015 um 15:42)

  • Hallo execute1337
    Das Problem mit dem Display und dem DATA-Pin hatte ich auch.
    Vor dem erstellen von raspberry-remote oder rcswitch-pi in der
    send.cpp den Eintrag PIN = 0 suchen und ändern.
    Die Belegung ist in wiringpi, also standard 0 = GPIO17.


  • Hallo execute1337
    Das Problem mit dem Display und dem DATA-Pin hatte ich auch.
    Vor dem erstellen von raspberry-remote oder rcswitch-pi in der
    send.cpp den Eintrag PIN = 0 suchen und ändern.
    Die Belegung ist in wiringpi, also standard 0 = GPIO17.

    Danke für die Antwort!
    Die Methode hab ich schon probiert, wenn ich dann aber etwas schalten möchte steht für ca 30 Sekunden folgendes da:

    Code
    sending systemCode[11111] unitCode[1] command[0]


    Dabei tut sich leider garnichts. Die Steckdosen lassen sich leider weder an, noch aus schalten.
    Ich hab das natürlich auch mit verschiedenen GPIO´s probiert.
    Normalerweise dauert ein Schaltvorgang nur ca. 1 Sekunde.

    Als Tutorial hab ich dieses verwendet. Ist Irgendetwas fehlerhaft? Ich bin in der Sache echt am verzweifeln :D

  • Hm...seltsam.
    Bedenke das du die alte Installation vorher komplett entfernen musst,
    sonst funzt das nicht.
    Mit rcswitch-pi hat es bei mir 100 % funktioniert.

  • Bei Linux mitunter nicht so einfach.
    Mir fällt da auch nur die remove --purge Methode ein.
    Der daemon muss vorher gestoppt werden.
    Ansonsten habe ich persönlich für solche Fälle immer ein aktuelles "frisches" Image
    auf Lager, welches ich auf eine Karte bügeln kann. Für meine Projkte halte ich
    immer eine Step-by-Step Liste aktuell. So kann ich in max.15 Minuten alles
    neu aufsetzen.

    Viele Grüße

  • Naja... Ich hab noch ein Backup, allerdings fehlte mir die Zeit mein Changelog dafür zu schreiben. Das heißt ich weiß nicht genau auf welchem stand es sich befindet :D
    Notfalls muss ich das System neu aufsetzen. Da gehört aber einiges zu:
    Grundkonfiguration, samba, FBTFT Treiber, Wiring-Pi, Pywapi, Pygame, etc...

    Wenn es auch ohne geht wäre es natürlich toller, als alles neu zu machen und dann festzustellen, dass es immer noch nicht läuft :D

  • Habe hier einen Beitrag gefunden:
    RPi SmartHome Control 2.2
    Da beschreibt ein User, er habe die send.cpp im Ordner /opt/ geändert und dann mit erneutem sudo make die Änderungen wirksam gemacht.

    Also du kannst dich darauf verlassen, dass es funktioniert. Mein SHC von Agent47 läuft mit dem geänderten Pin seit Wochen tadellos.
    Notfalls musst du halt ein neues Image auf einer neuen SD-Card aufsetzen und erst mal testen - ohne das du deinen Versuch zerstörst.
    Nur: Ich rate dir dringend genau Buch zu führen, über Dinge die du gemacht hast.
    Oberste Priorität beim basteln mit dem Pi !

    Gruß

  • sooooo...
    Um nochmal auf den ersten Fehler mit den Wetterdaten zurück zu kommen:
    Wenn die Internetverbindung verloren geht, beendet sich das Pygame-Skript mit folgendem Fehler:

    Code
    Traceback (most recent call last):
      File "pygame_test.py", line 241, in <module>
        wetterdegrees = string.lower(yahoo_result['condition']['temp'])
    KeyError: 'condition'

    Ich hab das Skript einfach mal auf einer virtuellen Linux Mint Distro laufen lassen und die Internetverbindung gekappt.

    Die Frage ist jetzt wie ich es anstelle, dass sich das Skript nicht einfach beendet.
    Ich hab mir überlegt, Yahoo einfach anzupingen. Bei einer erfolgreichen Rückmeldung, soll er sich die Wetterdaten holen. Andernfalls nur ein "Nicht verfügbar" anzeigen.

    Vielleicht gibt es ja auch eine elgantere Lösung. Hat jemand eine Idee? :)

  • Das sieht sehr vielversprechend aus :)
    Ich werde damit mal ein wenig rumprobieren.

    Danke :)
    ______________________________________________

    Hab jetzt mal ein wenig rumprobiert. Irgendwie steh ich auf dem Schlauch :D

    Hier mal der Code-Schnipsel, den ich abgeändert habe:

    Code
    while running:
    	try:
    		yahoo_result = pywapi.get_weather_from_yahoo('GMXX0030', 'metric')        
    		wetterdegrees = string.lower(yahoo_result['condition']['temp'])
    	except KeyError:
    		wetterdegrees = ("Nicht Verf"+umlautu1+"gbar") 
    	zeit = time.strftime("%H:%M") 
    	datum = time.strftime("%d.%m.%Y")
    	#cputemperature = str(round(int(str(os.popen("cat /sys/class/thermal/thermal_zone0/temp").readlines()).strip ("[\ ]'/n"))/1000 , 1))
    	uptime = str(timedelta(seconds = int(str(os.popen("cat /proc/uptime | awk -F '.' '{print $1}'").readlines()).strip ("[\ ]'/n"))))

    Am Fehler hat sich bis jetzt nichts geändert :huh:

    Einmal editiert, zuletzt von execute1337 (12. April 2015 um 20:47)

  • Versuch mal dieses:

  • Das wäre ja quasi die Möglichkeit mit dem anpingen :D
    Funktioniert so aber leider nicht. Da steckt irgendwo ein Syntax-Fehler drinne

    Hier mal die Ausgabe:

    Code
    File "pygame_test1.py", line 242
        ping = subprocess.Popen(["ping", "-n", "-c 5", website], stdout=subprocess.$
                                                                                   ^
    SyntaxError: invalid syntax
  • Habs den Code mal ein wenig auf meine Situation angepasst:

    Ist das so korrekt? Der Fehler bleibt leider weiterhin bestehen:

    Code
    Traceback (most recent call last):
      File "pygame_test1.py", line 251, in <module>
        wetterdegrees = string.lower(yahoo_result['condition']['temp'])
    KeyError: 'condition'

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!