Beiträge von execute1337

    Eine WebGUI ist vorhanden. Darüber kann ich ihn manuell schlafen legen und beispielsweise auch auf Aktivität im Netzwerk prüfen lassen. Das funktioniert aber nur sehr bescheiden. Außerdem würde ich ihn dennoch gerne mittels Python-Skriptes, quasi auf Knopfdruck, schlafen legen.

    Wehe, jemand sagt jetzt "dann drück doch den Knopf" :wallbash: :@ :D

    Hi!
    Mich würde interessieren, wie ich mit Hilfe von Python meinen NAS-Server schlafen lege?

    Von der Hardware her unterstützt er WakeOnLAN (falls es dafür relevant ist).
    Als Betriebssystem kommt Openmediavault (OMV) zum Einsatz. OMV basiert auf Debian Wheezy.

    Ziel ist es, dass ich mittels Python Skript und RPi diesen Server schlafen lege wenn ich meine Wohnung verlasse und aufwecke wenn ich wieder nach Hause komme.

    Hat jemand einen Ansatz, wie ich das ganze umsetzten könnte?

    Grüße, exe!

    oha... mit ArchLinux kenn ich mich nicht aus :D

    mal eine ganz abgefahrene Idee:
    Der Nutzer packt sich eine Textdatei auf einen USB-Stick. Diese enthält SSID und PW vom Netzwerk.
    Der Stick kommt in den RPi. Wenn dieser bootet, prüft ein Python Skript ob ein USB-Stick mit so einer Textdatei angeschlossen ist.
    Wenn ja...
    ...extrahiert das Skript die Informationen und trägt sie in die wpa-conf ein.
    Wenn nein...
    ... wird einfach weitergemacht wie bisher :D

    Wie genau das umzusetzen wäre weiß ich nicht, aber ich bin mir sicher das es klappen könnte.

    Python-Kenntnisse sind dafür natürlich vorrausgesetzt :D


    Hallo Freunde!

    Ich habe einen Pi so vorbereitet, dass jmd. anderes ihn gut nutzen kann und will. Nur kann ich beim ersten Nutzen nicht anwesend sein. Da soll aber das WLAN eingerichtet werden..
    Gibt es eine Möglichkeit, dem User einfach zu ermöglichen, seine WLAN Daten einzugeben?
    Vielleicht ein Webinterface, in dem man dann die SSID und das PW eingibt? Oder per Batch Datei das zu übergeben oder ähnliches?

    Beste Grüße und danke schon mal..
    Nick

    Hi,
    Da ich bei sowas auch sehr faul bin, nutze ich einfach die GUI dafür :D

    also:

    Code
    startx

    und dann den WPA-Configuration-Manager öffnen..
    Dort kann man einfach nach vorhandenen Netzwerken suchen und entsprechen verbinden.
    Das ganze bleibt auch nach einem reboot erhalten.

    Vorraussetzung dafür ist natürlich ein kompatibler WLAN-Stick

    Da Ich den ersten Post nicht mehr bearbeiten kann, kommen die Updates jetzt hinten ran :D

    ###########Update3###########

    Wettervorhersage hinzugefügt

    92kjcpom.png

    ###########Update4###########

    Kleines fade-in Intro beim starten des Skriptes hinzugefügt.
    In dem Video klicke ich ein wenig durch die Menüs :)

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Das Skript mag sehr träge wirken, das liegt aber an meiner virtuellen LinuxMint Distro.
    Auf dem RPi läuft alles flüssig :)

    ###########Update5###########

    Soooooo... Da ich nun meinen RPi wieder in den Finger hatte, konnte ich ein wenig weiter machen.
    Das erste Problem hat sich inzwischen auch erledigt. Das schalten per 433MHz über einen anderen GPIO funktioniert jetzt einwandfrei. Ich hatte mal eine LED an den Pin angeschlossen, um zu sehen ob er überhaupt sendet. Und siehe da: Er tut es! Also schien es ein Problem mit den timings zu geben. Ich fand hier einen Thread, wo darauf hingewiesen wurde, dass beim Pi2 sich die timings ändern, wenn der DeviceTree aktiviert ist.
    Also:

    Code
    sudo raspi-config


    und den DeviceTree deaktiviert.
    Da kam richtig Freude auf, als die Steckdose wieder geklickt hat :)

    Weiterhin hab ich das Intro und alles was Alpha genutzt hat wieder rausgenommen, da der RPi ein wenig überfordert schien (wahrscheinlich ein Programmierfehler meinerseits).
    Danach hat sich die Performance verbessert: statt 7 Sekunden, aktualisert er sich alle 4 Sekunden. Das reicht natürlich nicht aus.
    Als weiteren Übeltäter hab ich die Wetterdaten ausfindig machen können.
    Also mal ohne getestet: Es läuft flüssig (wahrscheinlich ebenfalls ein Fehler meinerseits).

    Auf Intro und Alpha kann ich verzichten. Bei den Wetterdaten würde ich aber eigentlich gerne bleiben. Nun weiß ich noch nicht, ob ich die einfach verwerfe (was wirklich schade um die Arbeit der Unterstützer in diesem Forum und die Arbeit meinerseits wäre), oder mich eventuell doch nochmal drum kümmer.

    Hier nochmal ein kleines Video vom aktuellem Stand:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Grüße!


    Hi execute1337
    Freut mich, dass es funktioniert :D
    Was ich allerdings nicht verstehe, ist, dass das erste except subprocess.... nicht anschlägt
    wenn die Internetverbindung gekappt ist. Logischerweise sollte dies so sein. Und des weiteren sogar, wenn zwar Internet verfügbar ist, aber aus irgendeinem Grund der yahoo Server down ist. Was selten vorkommt, aber vorkommen kann. Dann sollte es natürlich auch ein 'Nicht Verfügbar' geben.
    Werde daran noch arbeiten. Eventuell kann man die ganze ping-Geschichte komplett weglassen. Teste mal was dein Prog sagt, wenn du meinetwegen yahoo.xy anpingst.

    Daran hab ich schon gedacht :D
    Als Website, die du in deinem Beispiel genannt hast, verwendest du google.de

    Code
    website = "google.de"


    Ob Google erreichbar ist oder nicht, ist ja relativ uninteressant für mein Skript.
    Demnach hab ich das natürlich auf die Yahoo Wetter-Seite geändert, wo Pywapi sich anscheinend die Wetterdaten herholt. Also:

    Code
    website = "weather.yahoo.com"


    Eine andere Frage hätte ich noch betreffend deiner echt wunderschönen und zeitgemäßen Icons. Darf ich dir deswegen eine PN senden?

    Gruß

    Klar doch :)

    HAMMER!!!!

    Es Funktioniert! :thumbs1: :danke_ATDE:

    Ich musste zwar noch einen Haufen Sachen in meinem Skript anpassen, aber es läuft mit deiner Lösung! :)

    Internet an:

    i4kw4af7.png

    Internet aus:

    yvtrb8do.png

    Sieht natürlich noch nicht schön aus, aber da hab ich mich auch noch nicht drum gekümmert :D

    Nochmal ein fettes Dankeschön!! :danke_ATDE: :danke_ATDE: :danke_ATDE:

    In dem Beispiel scheint er sich die Google-Website mit den Wetterdaten zu öffnen und sich dann den benötigten kram rauszuholen...

    Ich würde aber gerne bei Pywapi und dem Yahoo-Wetter bleiben :D

    Ich versteh auch einfach nicht, warum er trotz des try/except-Blocks immernoch den KeyError raushaut :(
    Irgendwo muss da einfach ein Fehler drinne stecken...


    Eine andere Frage: Darf ich fragen, wie genau du das mit den Umlauten gemacht hast.
    Suche das schon seit langer Zeit als i-tüpfelchen für ein Programm.

    Gruß

    Ja, kann ich gerne machen :D
    Ich hab in verschieden Foren gelesen, dass wenn man einfach

    Code
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-


    am Anfang des Skriptes schreibt, einfach mit Umlauten in Strings arbeiten kann.
    Hat bei mir natürlich nicht geklappt :D
    Nach einigen Stunden Suche, hab ich eine (für mich) funktionierende und akzeptable Lösung gefunden.
    Ich definiere im Skript einfach die Sonderzeichen:

    Code
    umlauta1 = u"ä"
    umlauta2 = u"Ä"
    umlautu1 = u"ü"
    umlautu2 = u"Ü"
    umlauto1 = u"ö"
    umlauto2 = u"Ö"
    
    
    degree1 = u"°"

    Danach muss man sich die Strings etwas zusammenbasteln, aber immerhin funktionierts :D
    so sehen einige Beispiel-Strings mit Umlauten oder Sonderzeichen in meinem Skript aus:

    Code
    wetterdegrees = ("Nicht Verf" + umlautu1 + "gbar")
    toplabel = font4.render ("K"+umlautu1+"che", 20, white)
    wetterlabel1 = font1.render ("Frierende N"+umlauta1+"sse", 8, black)
    wetterlabel1 = font1.render (umlautu2+"berwiegend bew"+umlauto1+"lkt", 8, black)
    wetterlabel2 = font1.render ("Temperatur: " + wetterdegrees + " " + degree1 + "C", 8, black)

    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'

    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

    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:

    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? :)

    Danke für den Tipp :) Das werde ich übernächste Woche direkt mal ausprobieren!

    Eine Dokumentation führe ich schon, aber das macht den Arbeitsaufwand ja leider nicht weniger :D

    Ich gebe nochmal eine Rückmeldung, sobald ich weiter gemacht habe :)

    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


    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

    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 :)