Zeitschaltuhr installieren, nur wie?

Nachdem jetzt einige wissen wollten wie Sie die Zeitschaltuhr installieren können, versuche ich euch hier zu helfen.

Eine Installationsroutine gibt es leider nicht.
Das liegt vor allem daran das ich selbst sowas noch nie gemacht habe und nicht weiß wie das geht.
Dazu müssten Abhängigkeiten abgefragt, eine Datenbank samt Tabellen installiert und verschiedene File (UI & server) kopiert werden.
Im Augenblick für mich nicht machbar.
Es steht aber jedem anderen offen eine Installationsroutine zu schreiben, das Projekt liegt bei github.

Im Moment braucht man für die Installation zumindest grundlegende Kenntnisse von Linux, mysql und python.
Ich werde nun versuchen zumindest im Ansatz zu beschreiben wie eine Installation auf einem Raspberry Pi ablaufen sollte.

  1. Da wir python mindesten in der Version 3.3 brauchen, rate ich dazu die neue raspbian Variante zu nehmen.
    Raspbian Jessie
    Wer unbedingt Wheezy nutzen will muss python 3.4 entweder selbst installieren, oder er greift zu meinem ISO
    raspbian_custom.rar
  2. Nachdem wir python installiert haben, brauchen wir noch die diversen python-packages.
    Diese werden ja nach python-Version mit „pip“, „pip3“ oder „pip3.4“ installiert.
    Hier brauchen wir:
    – websockets
    – pymsql
    – pyusb
    – apscheduler
    – tinkerforge
    – RPi.GPIO
    – logging
  3. Als nächstes steht die Datenbank auf dem Programm.
    Ich persönlich nutze immer mysql, im Prinzip sollte aber jede andere SQL-Datenbank funktionieren (sofern man das python-Skript anpasst).
    Nun muss die Datenbank ansich angelegt werden („smartHome“) und darin die entsprechenden Tabellen.
    Anbei ein mysql-Dump der öffentlichen Demo-Seite
    mysql-Dump v.0.1
  4. Jetzt braucht Ihr natürlich noch einen Webserver auf welchem die Benutzeroberfläche läuft.
    Ich persönlich nutze apache, allerdings dürfte der auf dem raspi etwas zuviel des guten sein.
    Diese Wahl überlasse ich jedem selbst.
  5. Wenn ihr soweit seid, dann habt ihr es fast geschafft – jetzt wird kopiert.
    Als erstes nehmen wir die github-Files aus dem Ordner „html-frontend“ und kopiert diese in das Webverzeichnis (meistens „/var/www/httpd“).
    Danach nehmen wir die Dateien „scheduler.py“ aus dem Ordner „server“, sowie die Dateien aus dem Ordner „libs“ und kopieren alle in den gleichen Ordner auf die Festplatte (ich lege dafür z. Bsp. einen Extra-Ordner „/sourcecode“ an).
  6. Nun öffnen wir die Datei „scheduler.py“ und entfernen die Ausgabe-Teile die wir nicht brauchen.
    Wer z.Bsp. nur GPIO-Port schalten will braucht den kompletten Tinkerforge & USB-Part nicht und sollte es entfernen.
    Danach passen wir noch die Angaben für IP’s und die mySQL-Zugangsdaten an.
  7. Das wars, jetzt sollte alles funktionieren. Mit „python scheduler.py“ wird die Software gestartet.
    Ich lasse das Programm immer als root-Nutzer ausführen.
    Nicht die beste Lösung, aber so muss ich mich nicht mit Rechte-Problemen herumschlagen. Im Prinzip müsste das Programm aber auch als Benutzer funktionieren.

Die ganze Anleitung ist aus dem Kopf heraus geschrieben und nicht(!) getestet.
Ich glaube aber das ich keinen Fehler gemacht und nichts vergessen habe.

Wie man sieht braucht aber schon gewissen Grundkenntnisse.
Ich stelle derzeit die Datenbank um, sowie das System auf einen Client/Server-Basis um.
In dem Zuge werden auch config-Dateien eingeführt.
Das alles sollte die Installation dann schon wesentlich vereinfachen.

Wenn auf das USB- und GPIO-Modul verzichtet wird, dann läuft die server-Software auch ohne Probleme unter Windows.

29 Gedanken zu „Zeitschaltuhr installieren, nur wie?“

  1. Ich finde dein Projekt klasse, nur leider komme ich es nicht zum laufen mit hilfe der Anleitung.
    In den dateien auf git hub sind datein wie z.b die scheduler.py nicht enthalten.

    oder nutze ich einfach die falsche Anleitung für die Version 2.1

    MfG Schu

    Antworten
  2. ooookaayyy

    Ich weiß nicht wie aktuell das hier noch ist, allerdings habe ich die anleitung soweit befolgt um alles auf meinem RasPi 3 zu installieren.
    Als erstes fiel mir auf das scheduler.py nicht im html-frontend ordner existiert, habe jedoch mit den restlichen dateien so agiert wie beschrieben. Der RasPi läuft mit Apache2 welches nicht den ordner „httpd“ sondern „html“ welcher auch erreichbar ist. Jedoch habe ich keine Grafische Oberfläche sondern bloß eine reine Ordnerstruktur. Liegt das an dem Ordnernamen von Apache?
    Binleider noch sehr neu in diesem bereich und könnte dringend hilfe brauchen

    Antworten
  3. Hallo Christopher,
    Zuerst einmal ein ganz großes Lob für diese tolle Programmierung.
    Sieht, soweit ich das aus deinen Demos sehen konnte, super aus.
    Nun aber zu mir und miner Frrage:
    Ich habe schon einige Erfahrungen mit C++ ….. und einen Pi 2.
    Die instalation deiner Programmierung hat eigentlich geklappt.
    Jetzt hänge ich fest und weiß nicht mehr weiter. Wenn ich die scheduler.py
    Starte werden die 3 ¨logger.info¨ Hinweise in Python angezeigt. Mehr aber
    auch nicht. Ich habe den Lighttpd installiert anstelle von apache2.
    Muss ich hierzu noch etwas ändern?
    Vielen Dank & Gruß
    ASK

    Antworten
    • Nabend,
      ich war die letzten Tage anderweitig eingespannt, deshalb kommt die Antwort so spät.

      Also wenn die Web-Oberfläche funktioniert, d.h. du Schaltzeiten anlegen, löschen und ändern kannst, dann dürfte auch lighttpd funktionieren.
      Ich selbst habe das aber noch nicht getestet.

      Für die Verbindung python <-> Schaltzeiten ist die Datenbank wichtiger.
      Wenn du aber Schaltzeiten anlegen kannst, dann sollte die Datenbank auch laufen.

      Bitte auch darauf achten im python-Skript die IP-Adressen (mysql-Server) entsprechend anzupassen.

      Ich würde zuerst einfach mal über die Web-Oberfläche 1-2 Schaltzeiten anlegen und erst danach das python-Skript starten.
      Dann müsste nach den logger-Infos die Datenbank geladen werden und die einzelnen Einträge ausgegeben werden.

      Ist das so bei dir?
      Wenn nicht mal im Skript schauen ob die IP und die Zugangsdaten für die mySQL-Datenbank auch wirklich stimmen.

      Antworten
  4. Hallo Zusammen

    Erstmal Herzliches Dankeschön an den Ersteller super Sache sieht echt schön aus. Ich habe folgendes Problem leider habe ich keine Steckerleiste mit USB bekommen dafür welche mit LAN Anschluss. Da ich Neuling bin auf dem Gebiet Raspi und keine Ahnung vonPhyton habe wollte ich euch fragen wie ich diese Leisten via Netzwerk in die Webapplikation einbinden und via Raspi ansteurn kann.

    Gruss Mark

    Antworten
    • Oh, da kann ich dir jetzt leider auch nicht weiterhelfen, da ich keine entsprechende Steckerleiste hier habe.

      Um mein Programm dafür fit zu bekommen solltest dich aber mit python & Co auskennen.

      Du musst dafür erst einmal herausfinden wie du die Steckdose über python ansteuern kannst.
      Danach schreibst du ein entsprechendes Ausgabemodul und legst in mysql einen passenden Schaltertyp an.

      So sollte es dann funktionieren.

      Antworten
  5. Hallo Christopher,
    kann das sein, dass die bevorstehenden Schaltzeiten nicht stimmen? Ich hab z.B. eine wiederkehrende Schaltung ersetellt 2Min an 2 Min aus.
    jetzt zeigt er mir an, dann am 1.11. um 0 uhr die nächste Schaltung ist, was ja nicht stimmt, sondern so in etwas 1,2 Min.

    Antworten
      • So, ich hab den „Übeltäter“: in der index.php, Zeile 13, $timer = new Data($db);
        dieser Befehl dauert ewig… kann mir jemand sagen, warum das so ist?

      • In Zeile 13 wird eigentlich nur eine Klasse registriert, verstehe jetzt nicht was da so lange dauert.

        Hast du den Fehler aktuell eigentlich noch?
        Wie schon geschrieben lädt die Seite bei mir ja sofort.

      • Hmm, also wenn ich deinen Link besuche, dann braucht die Seite nur 1-2 Sekunden zum aufbauen.

        Wo hast du die html-Seiten gehostet?
        Auf dem raspberry pi?
        Wenn ja welcher raspi ist es? A,B,2?

        Könnte mir vorstellen das der raspi mit apache vielleicht etwas zu langsam ist, in dem Fall könnte man es anstatt mit apache mit lighttpd versuchen.

        Allerdings wird deine Seite bei mir sofort geladen, hmm, seltsam.

      • Hallo Christopher,
        jetzt geht es wieder schnell! Ich hab deine Datenbankeinstellungen wieder komplett importiert (davor die alte gelöscht), dann ging es wieder! Ich brauch halt nur 3 gpio´s. Den Rest brauch ich nicht. Deshalb hab ich den rest gelöscht und die zusätzlichen 2 gpio´s eingefügt. Anschließend ein paar Zeiten reingetan und dann ging es wieder langsam.. jetzt mach ich mal ein paar Tests und geb wieder bescheid. Evtl. wäre es gut, wenn du meinen Kommentar hier mit dem Link löscht oder für den Rest der Welt unleserlich machst.. nicht dass die mir meine Zeiten verstellen 🙂 Danke

      • So, habe den Kommentar mit dem Link gelöscht 😉

        Schon sehr komisch bei dir mit der Geschwindigkeit.
        Hmm,kannst du eventuell mal einen mysql-dump machen? So das ich deine Daten bei mir einspielen kann um zu schauen woran es liegen könnte?

      • so, jetzt rattert das Relais nach Vorgabe. Aber ich muss die Zeiten einstellen, dann das Python scheduler.py beenden und neu starten, damit die Vorgaben wieder am Relais ausgegeben werden.
        im SSH kommt folgendes:
        2015-10-27 20:58:06 : websockets …. ein GUI-Client wurde aus der Queue entfernt
        2015-10-27 20:58:30 : websockets …. GUI Queue startet
        2015-10-27 20:58:30 : websockets …. ein GUI-Client wurde in die Queue aufgenommen

        und in der Datenbank stehen auch die neuen werte, aber das Relais tut nichts.

      • Der Ablauf ist bei dir also wie folgt:
        1. du startest scheduler.py – ok
        2. du erstellst über die weboberfläche schaltzeiten – ok
        3. es wird aber nichts geschaltet
        4. du stopst scheduler.py und startest es direkt neu – jetzt wird geschaltet?

        Richtig?
        Wenn es das ist, dann liegt es daran das die weboberfläche aus irgendeinem grund nicht mehr dazu kommt den befehl über websockets raus zu schicken.
        Deshalb habe ich der Datei „timer_python_bridge.js“ eine Zeitverzögerung von 500ms eingebaut.
        Manchmal ging es bei mir mit 250ms, manchmal habe ich 2000ms gebraucht – verstehe bis heute nicht warum es mal klappt und mal nicht.

        Versuch mal in der „timer_python_bridge.js“ die 500 (kommt 4 mal vor) durch 2500 zu ersetzen und teste es dann neu.
        Danach kannst du dann in 500 Schritten runter gehen bis es nicht mehr klappt.

        Würde den Fehler gerne abstellen, weiß aber leider nicht einmal warum er manchmal auftritt und manchmal nicht.

  6. Hallo, also ich hab jetzt nach deiner Anleitung installiert, die config.php auch noch angepasst..
    jetzt wollte ich die scheduler.py starten, jetzt kommt folgender Fehler:

    pi@raspberrypi ~/zeitschaltuhr $ sudo python scheduler.py
    File „scheduler.py“, line 85
    data = yield from sending_queue_gui.get()
    ^
    SyntaxError: invalid syntax

    ***
    ich hab folgende python-erweiterungen installiert:
    pi@raspberrypi ~ $ pip freeze
    APScheduler==3.0.4
    Pillow==2.6.1
    PyMySQL==0.6.7
    RPi.GPIO==0.6.0a3
    RTIMULib==7.2.1
    argparse==1.2.1
    chardet==2.3.0
    colorama==0.3.2
    futures==3.0.3
    html5lib==0.999
    logging==0.4.9.6
    lxkeymap==0.1
    mcpi==0.1.1
    ndg-httpsclient==0.3.2
    numpy==1.8.2
    picamera==1.10
    pifacecommon==4.2.1
    pifacedigitalio==3.1.0
    pyOpenSSL==0.13.1
    pyasn1==0.1.7
    pygame==1.9.2a0
    pygobject==3.14.0
    pyserial==2.6
    pytz==2015.7
    requests==2.4.3
    sense-hat==2.1.0
    six==1.8.0
    tinkerforge==2.1.5
    tzlocal==1.2
    urllib3==1.9.1
    websocket-client==0.32.0
    wheel==0.24.0
    wsgiref==0.1.2


    wer kann mir dabei helfen?

    Antworten
    • Was mir auf den ersten Blick auffällt, dir fehlt das package „websockets“.

      websockets UNGLEICH websockets-client

      Du willst ja einen websockets-server starten, da bringt dir ein client recht wenig.

      Das package mal installieren -> websockets

      Welche python-Version hast du installiert?

      Antworten

Schreibe einen Kommentar