Beiträge von Chris1705

    Wie meigrafd schon richtig sagt, BeautifulSoup ist da dein Freund. Du müsstest etwas in der Art machen:

    Code
    def get_ids(html_file, regular_expression):
        soup = BeautifulSoup(html_file, 'html.parser')
        ids = dict()
        for element in soup.find_all('td', id=re.compile(regular_expression)):
            ids[element.id] = ""
        return ids

    Wobei html_file der Inhalt deiner HTML Datei ist und regular_expression dein Regulärer Ausdruck zum filtern der vorkommenden ids.

    Nebenbei denke ich kaum, dass meigrafd deine Beiträge missverstehen wollte. ;)

    Edit: Danke an meigrafd für den Hinweis! Könnte man sicherlich mit lambdas schöner machen, aber für mich ist das schwarze Magie und Hexerei...


    Beim zweiten Link würde ich eher auf die offizielle Doku verweisen als auf die obige Seite, denn wenn ich so was lese wie:

    Code
    def Interrupt(channel):
       global Counter
       Counter = Counter + 1
       print "Counter " + str(Counter)

    ist für mich so ne Seite nicht zu empfehlen...

    Ups. Ich muss gestehen, dass ich mir die Seite nicht ganz so genau angeschaut habe.

    Wir haben hier einen Haufen hilfsbereiter Nutzer, vor denen man keine Angst haben muss, wenn man als erstes die Suchmaschine seines Vertrauens bemüht und erst dann einen aussagekräftigen Beitrag erstellt. :thumbs1:

    Es erfordert auch keine große Erfahrung im Umgang mit dem Raspberry, um seine bisherigen Schritte und eventuell aufkommende Fehlermeldungen zu posten. Oftmals ist es aber so, dass man nur ein "Geht nicht" und "Ich möchte möglichst wenig selbst machen" mit entsprechender Erwartungshaltung vorgesetzt bekommt. Da sollte es wenig verwunderlich sein, dass der ein oder andere mit einem entsprechenden Beitrag reagiert. ;)


    Der einzige Unterschied der zwischen dem funktionierenden System und dem derzeit nicht funktionierenden System besteht, ist die Node.js Version (auf dem laufenden System ist die Version 0.12.0 installiert und auf dem aktuellen 0.12.1), ansonsten ist alles gleich.

    Kann es in irgendeiner Form mit der Version von Node zusammenhängen? Oder kann das nur ein Hardware Problem sein?

    Ich würde mich über Hilfe sehr freuen und schreibe auch gerne noch den Code hier rein, wenn es irgendwie helfen sollte. :)
    :helpnew:

    Wenn das Setup bis auf die NodeJS Version das selbe ist, solltest Du die gleiche Revision installieren. :)

    Aber ohne Quelltext (und eventuell auch Schaltplan) können wir auch nur raten. :stumm:


    ``is not`` heißt nicht ``ist nicht`` sonder mit ``is not`` prüft man auf ``None`` und ``hourNow `` und ``endTime`` ist niemals hier im Beispiel ``None``.
    dreamshader hat das richtig erkannt...

    Das stimmt so nicht. Vorrangig ist der Unterschied, dass mit "is" zwei Instanzen (bzw. die Speicheradressen der Instanzen) miteinander verglichen werden und mit == auf Wertgleichheit geprüft wird.

    Edit: Auf None kann man sowohl mit is als auch mit == vergleichen, da None ein Singleton ist.
    Edit 2: Der Vergleich auf None ist eh nicht relevant, da weder hourNow noch endTime None sind...
    Edit 3: Ich würde es so lösen (ungetestet, ohne Konfigurationsdatei und ohne Fehlerbehandlung):

    Spoiler anzeigen

    [code=php]from time import sleep
    from apscheduler.schedulers.blocking import BlockingScheduler
    import RPi.GPIO as GPIO

    scheduler = BlockingScheduler()

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(7, GPIO.IN)
    GPIO.setup(6, GPIO.OUT)

    @scheduler.scheduled_job('cron', id="attach_event", hour="23", minute="00")
    def attach_event():
    GPIO.add_event_detect(7, GPIO.RISING, callback=interrupt_event, bouncetime=100)

    @scheduler.scheduled_job('cron', id="detach_event", hour="06", minute="00")
    def detach_event():
    GPIO.remove_event_detect(7)

    def interrupt_event():
    GPIO.output(6, GPIO.HIGH)
    sleep(100)
    GPIO.output(6, GPIO.LOW)

    if __name__ == "__main__":
    scheduler.start()[/php]

    Ich würde es wie meigrafd lösen (sprich mit Interrupts) und in der Übergebenen Callback-Funktion bei Änderung des GPIO Pegels prüfen, ob die aktuelle Uhrzeit zwischen 23:00 und 6:00 liegt und anschließend das Relais entsprechend schalten. :)

    Offtopic: Wieso führen hier so viele Leute Python Skripte mit subprocess aus? Komischer Trend.. :s

    ---
    Edit: Alternativ könntest Du Dir auch die APScheduler Bibliothek ansehen. Damit kannst Du festlegen, wann Methoden (Jobs) ausgeführt werden sollen. Dann könntest Du für 23 Uhr einen Job anmelden, der den Interrupt aktiviert und einen weiteren um 6 Uhr, der das ganze wieder abschaltet.

    Mit "except ValueError" wird nur die Value Error Exception gefangen. Erst mit return False wird die Methode verlassen und False zurückgegeben. :)

    Gibt es eigentlich einen besonderen Grund, dass Du das DHT Modul von Adafruit über subprocess aufrufst und nicht normal importierst und so auf die Biblothek zugreifst? Dann würdest Du Dir das ganze String gefrickel und die damit verbundenen Nachteile sparen.. :s

    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

    Hallo und Herzlich Willkommen im Forum,

    bitte gewöhn' Dir zünftig an, deine Code-Schnippsel mit Hilfe des Code-Blocks zu formatieren, da ansonsten Leerzeichen und Tabs verschlungen werden. :thumbs1:

    Python ist sehr empfindlich was Einrückungen angeht, scheinbar hast Du vor deiner FOR-Schleife ein Leerzeichen oder einen Tab zu viel. ;)

    Gruß
    Chris

    Wieso PHP wenn er sich schon für NodeJS entschieden hat?

    Was spricht denn dagegen, deinen Webserver direkt auf dem Raspberry laufen zu lassen? Vielleicht hilft dir dieser Artikel einwenig weiter?

    Wenn du wirklich das ganze trennen möchtest, könntest Du auf deinem Raspberry Pi einen NodeJS Server laufen lassen, der ausschließlich REST Schnittstellen für das Schalten bereitstellt und diese über deinen ursprünglichen Server ansprichst (Proxy mäßig)