smartHome Eigenbau – Update der Software Zeitschaltuhr auf 2.1

In den letzten Tagen habe ich jede Menge kleinerer und größerer Änderungen an der Software vorgenommen und kann endlich eine stabile Version 2.1 der smartHome Zeitschaltuhr vorstellen.

Dazu wurden diverse Fehler behoben, sowie an ein paar Punkten Verbesserungen eingeführt.

Im folgenden die Liste mit allen Änderungen:

  • Änderung : Nutzung von Objektliteralen innerhalb der json-Strings in der Kommunikation über websockets
    Dadurch wird das Ganze übersichtlicher, außerdem lässt sich das Protokoll so sehr leicht erweitern.
  • Neu : Server-Rückmeldung beim Anlegen, Ändern und Löschen von Zeitschaltuhr-Einträgen
    Nun kann man sehen ob die Befehle beim Server ankommen und erfolgreich bearbeitet wurden.
  • Neu : Leichtere Installation durch eine automatische IP-Erkennung und einen Standalone-Modus
    Sofern alle Teile (Client, Server, Datenbank und Webserver) auf dem gleichen Rechner laufen kann man sich über die Variabel „STANDALONE“ in den config.py Dateien die Eingabe von IP-Adressen sparen.
    In diesem Fall genügt es in den 2 x config-Dateien die Variable „STANDALONE“ auf True zu setzen und das war es dann auch schon.
    Laufen nicht alle Teile auf dem gleichen Rechner, so muss nur noch die IP der Datenbank und beim Client zusätzlich die des Servers angegeben werden.
    Die Skripte (Server & Client) erkennen nun ihre eigene IP selbst.
  • Neu : es gibt nun die Möglichkeit den Zeitschaltuhr-Server über das html-frontend neuzustarten
    In der Übersicht findet sich nun ein neuer Button um den Zeitschaltuhr-Server neuzustarten.
    Dies kann nützlich sein wenn man die Datenbank per Hand geändert hat oder wenn man das Gefühl hat die Zeitschaltuhr würde falsch gehen.
  • Fehlerbehebung : XSS-Lücke in den Formularen geschlossen
    Es sollte jetzt nicht mehr möglich sein Code einzuschleusen.
    Es wäre nett wenn das der ein oder andere mal austesten würde.
  • Fehlerbehebung : im GPIO-Modul werden die Pins jetzt korrekt geschaltet
    Es gab einen Fehler im GPIO-Modul, deshalb wurden die Pins nicht richtig geschaltet.
    Das ist jetzt behoben.
  • Fehlerbehebung : in der Vorschau der Zeitschaltuhr funktioniert die Sortierung nach Datum jetzt richtig
    Bei der Sortierung von mehr als einem Monat in der Vorschau gab es einen Fehler.
    Dieser ist behoben und die Sortierung arbeitet jetzt wie gewünscht.

 

Ansonsten gab es noch die ein oder andere Code-Änderungen, diese waren dann aber größtenteils kosmetischer Natur.

Ich denke das die Zeitschaltuhr jetzt soweit ist das man sie als stabil bezeichnen kann.

30 Gedanken zu „smartHome Eigenbau – Update der Software Zeitschaltuhr auf 2.1“

  1. Hallöchen,

    bis jetzt nutzen wir Fhem für die Hausautomation. Aber der „WAF“ ist wirklich grauenvoll. Die anderen freien Automatisierungssysteme sind auch nicht weniger kompliziert. Und so bin ich ungefähr 3 Jahre zu spät auf dieser Website gelandet. Eine Anleitung konnte ich in keinster Weise finden. Lediglich die Installation aller möglichen Pakete per pip3 ist mir geglückt (laut Readme.md auf Github).

    Da das Image inzwischen stark veraltet ist und uns irgendwie auch die RasPis ausgegangen sind, musste ich auf einem Produktivsystem arbeiten. Hier mein bisheriger Verlauf:
    – Github-Archiv als Zip heruntergeladen
    – lokal entpackt (nutze Linux Mint)
    – per SFTP aufs 3er RPi geladen (Ordner: /var/www/html/dash)
    – Alle drei im Unterordner „Server“ enthaltenen Dateien angepasst (Datenbank, User, Passwort, Pfade – per „nano“)
    – In MariaDB eine neue Datenbank und neuen User angelegt
    – PhpMyAdmin installiert
    – sql-Datei im Unterordner „database“ in die neue DB importiert
    – versucht, den Server zu starten

    Beim letzten Punkt hänge ich nun. Ausgabe:
    pi@fhem:/var/www/html/dash/server $ sudo bash ./server-startup.sh start
    Server started.
    pi@fhem:/var/www/html/dash/server $ Traceback (most recent call last):
    File „/var/www/html/dash/server/sh-server.py“, line 11, in
    import database
    ImportError: No module named ‚database‘

    Betreffende Zeile 11 beinhaltet nur „import database“ – was mir als Nicht-Python-Programmierer absolut nichts sagt. Spaßeshalber habe ich pip3 gefragt, ob das Paket „database“ existiert, was verneint wurde.
    Unter https://www.w3schools.com/python/python_mysql_getstarted.asp konnte ich nichts finden, was mir weitergeholfen hätte. Das Befolgen dieser Anleitung brachte auch keine Besserung.
    Ich habe den RPi auch mehrfach neu gestartet und bin nun mangels tieferer Schlangen-Kenntnisse in eine Sackgasse geraten.

    System: RPi 3B + Raspbian (Debian Stretch) mit neuesten Updates, sofern noch verfügbar. (Ja, ich muss den bald neu installieren. Aber mit Fhem an Bord?!)

    Für Ratschläge jeder Art wäre ich sehr dankbar.

    Lieben Gruß

    Jentaia

    Antworten
    • Ich muss leider sagen das ich das Projekt nicht mehr weiterverfolge.
      Auch habe ich die Dateien seit 1-2 Jahren nicht mehr aktualisiert, von daher denke ich das es zu Problemen bei den Abhängigkeiten kommen kann.
      Falls im am WE Zeit finde schaue ich mir dein Problem aber mal an.
      Ich habe für mich selbst HomeAssistant gefunden. https://www.home-assistant.io/
      Das gefällt mir von der Oberfläche sehr gut und ist im Zusammenspiel mit ESPHome einfach der Hammer. https://esphome.io/index.html#
      Der Zeitaufwand für eine Eigenentwicklung steht in keinem Verhältnis zu dem Ergebnis, vor allem wenn man alles alleine macht.

      Antworten
  2. Bekomme leider weder das Image noch Version 2.1 zum Laufen. Schade. Finde das Projekt echt cool.
    Habe beim Image gemäß Anleitung die IP Adressen in client und server config.py angepasst. Sobald ich über Port 5505 per Scmartphone auf die GUI zugreifen möchte, schmiert das Programm ab. Verwende einen Raspi3.

    Antworten
  3. Hallo Christopher,
    ich bin noch absoluter Frischling in Sachen Raspberry und Programmieren, habe aber die ersten Gehversuche schon hinter mir.
    Be der Such nach Tipps, Anleitungen und Ideen bin ich auf Dein Projekt gestoßen. Ich muss sagen, es ist genau das was ich gerne hätte und was ich so nie hinbekommen würde.

    Nun meine Frage: gibt es von der Zeitschaltuhr 2.1 auch ein fertiges Image? Wenn ja, wo finde ich das?

    Antworten
  4. Hallo,
    gibt es jemanden hier in der Runde der ein lauffähiges .img zur Verfügung stellen kann. Ich versuche jetzt seit tagen die Version aus dem Git https://github.com/Mausbiber/smartHome zum laufen zu bekommen.
    Leider ohne Erfolg.
    Bei dem .img welches vom Christopher zur verfügung gestellt wird habe ich auch das Problem das ich eigentlich mein 4fach GPIO Relais nicht ansteuern kann. Egal was ich in argA eintrage http://raspberrypiguide.de/howtos/raspberry-pi-gpio-how-to/ geschaltet wird da nichts.
    Sollte jemand da unterstützend wirken können würde ich mich sehr freuen.
    Hoffe es findet sich jemand.

    MfG
    Tim

    Antworten
    • Hallo Tim, hallo Christopher,

      ich habe das gleiche Problem. Ich würde so gerne die Zeitschaltuhr nutzen. Die Oberfläche und die ganzen Funktionen sind genau das was mir bei meiner Haussteuerung noch fehlt. Leider habe ich nicht das nötige Wissen das ich es zum laufen bekommen. Auch bei mir werden keine Relais über die Software geschalten.

      Ein Traum währe wenn Christoher wieder ein funktionierendes Image zur Verfügung stellt.

      Schöne Grüße
      Stefan

      Antworten
    • Hallo Christopher,

      konntes Du schon an dem neuen Image in deinem Urlaub was machen. Deine Zeitschaltuhr ist das einzigste was noch in meiner Haussteuererung fehlt.

      MfG Stefan

      Antworten
    • Hallo,
      gibt es hier schon irgendwelche Neuerungen oder ist das Projekt eingestellt? Ich wäre auch an einem fertigen Image interessiert. Seit Tagen versuche ich mich an diesem Projekt aber scheiter immer wieder kläglich 🙁

      LG Mario

      Antworten
  5. Hallo Christopher,
    ich bin durch Webrecherchen zu python und Raspi auf Deine Seite gestoßen und finde Dein Projekt sehr gut gelöst. Habe meinen Raspi 3B im Februar mit dem aktuellen „Jessy lite“ aufgesetzt und weitestgehend nach Anleitung (unter Projekt 2.0) konfiguriert. Bei mir sind vorerst alle Funktionen auf einem Raspi vorgesehen. Habe die Dateien von GitHub verwendet.
    Gestolpert bin ich über folgende Punkte:
    – Jessy Lite beinhaltet kein python 3 -> nachinstalliert: „sudo apt-get install python3“ (wird Version 3.4)
    – bei der Installation des moduls „apscheduler“ treten Syntax-Fehler auf. Das liegt daran, dass die aktuelle Quelle in den Repositorys schon auf python>3.5 optimiert ist. Im Installationsverzeichnis des apscheduler die Datei …/executors/base_py3.py auf alte Syntax korrigiert. Außerdem dort auch „Import asyncio“ am Dateianfang eingefügt.
    – ich musste die passenden *.py – Dateien zu Client oder Server in die jeweiligen Verzeichnisse (und nicht in die bei Punkt 9 angegebenen) kopieren, damit das server- und client-python-script funktionierte.
    – Die Runlevel-integration der Startscripte (Punkt 6 und 7 der Anleitung) führt nicht zum gewünschten Erfolg. Habe deshalb die Scripte rudimentär lsb-tauglich umgeschrieben.
    – In den Dateien „update_status.php“ und „timer_python_bridge.js“ sind noch bei websocket-Aufrufen im javascript-Bereich Verweise zu Deinem Server als IP fest eingeschrieben. Deshalb wird nach dem Verändern von Schaltzeiten immer „Server offline“ gemeldet. Habe die Zeilen allgemeingültig korrigiert (nach passenden Funden in den Weiten des Internets 😉
    var host = window.document.location.host.replace(/:.*/, “);
    var socketServer = new WebSocket(‚ws://‘ + host + ‚:5505‘);
    Mittlerweile funktioniert der „Zeitschalter“ bei mir mit GPIO-Relaissteuerung stabil.

    Und nun hoffe ich auf die weiteren Module, um Sensoren (z. B. 1-wire-Temperatursensoren) anzeigen zu können. Bist Du da noch am werkeln oder ist für Dich dieses Projekt Geschichte?

    Schöne Grüße
    Jens

    Antworten
  6. Hallo ich bekomme immer folgende fehlermeldungen.
    Beim start der server-startup.sh bekomme ich folgende meldung:

    Server started.
    root@raspberrypi:/etc/init.d# Traceback (most recent call last):
    File „/smartHome/server/sh-server.py“, line 8, in
    import database
    ImportError: No module named ‚database‘

    Beim Start der client-startup.sh folgende meldung:

    Client started.
    root@raspberrypi:/etc/init.d# /usr/local/bin/python3.4: can’t open file ‚/smartHome/client/sh-client.py‘: [Errno 2] No such file or directory

    Beim einrichten der schaltzeiten kommt immer die meldung server Offline.

    Mit freundlichen Grüßen
    Matthias

    Antworten
  7. Hallo Christopher,

    Gratulation zu Deimem tollen Projekt. Ich hoffe, dass Du die Zeit findest es aktuell noch weiter zu entwickeln. Etwas Vergleichbares scheint es bisher nicht zu geben.

    Ich habe Dein Image verwendet und bisher alles zu Laufen bekommen.
    Ich verwende manuell konfigurierbare Funksteckdosen, einen Raspberry Pi und ein standard 433MhZ Sendemodul, welches an Pin 11 GPIO angeschlossen ist.

    Mit Wiring Pi und Raspberry-Remote lassen sich die Funksteckdosen schalten.

    Kannst Du mir helfen, welchen Schalter ich hier verwenden muss und welche Argumente ich für ArgA – ArgD verwenden muss.

    Mit Raspberry-Remote funktioniert das Schalten mit „./send 10111 4 1“ ein und „./send 10111 4 0“ aus.

    Evtl. kannst Du uns helfen einen geeigneten Schalter zu definieren, bzw. ausführen, wie dieser gestalltet sein muss.

    Eine ähnliche Frage mit einer teilweise funktionierenden Lösung wurde hier schon bei der Version 2 von einem User vorgestellt, aber es wurden keine Lösungen dazu gepostet.

    Vielen Dank für Deine Bemühung im Voraus

    Antworten
  8. Hey, mit deiner wheezy distro habe ich soweit alles am laufen.
    Manuell über wiringPi bekomme ich meine Relais auch angesteuert, jedoch nicht über den zeit schalter

    Wenn ich es richtig weiß, muss ich ja beim anlegen eines schalter unter ArgA den anzusteuernden pin angeben. Jedoch weiß ich nicht in welcher Form und alles was ich versuche klappt irgendwie nicht.
    Wäre nett wenn du das einmal erklären könntest

    Antworten
  9. hi super Projekt! Ist es möglich auch einfach einen Temperatur und Feuchtigkeit Sensor einzubinden?
    ich habe seit Monaten die Komponenten da leider hatte ich bisher keine zeit Python Programmieren zu lehren und komme nicht weiter

    Antworten
  10. folgenden Fehler erhalte ich wenn der Client eine Funksteckdose per tf-remote schalten soll:

    root@raspberrypi:~# 2016-09-08 15:28:45 : System startet
    2016-09-08 15:28:45 : mySQL ……… Verbindung online
    2016-09-08 15:28:45 : get_switches… Test id=1 (tf_remote)
    2016-09-08 15:28:45 : Tinkerforge … Remote-Bricklet „A“ initialisiert
    Traceback (most recent call last):
    File „/smartHome/client/sh-client.py“, line 242, in
    get_switches()
    File „/smartHome/client/sh-client.py“, line 202, in get_switches
    tinkerforge_connection.connect(DEVICE_IP, 4223)
    File „/usr/local/lib/python3.4/site-packages/tinkerforge/ip_connection.py“, line 348, in connect
    self.connect_unlocked(False)
    File „/usr/local/lib/python3.4/site-packages/tinkerforge/ip_connection.py“, line 546, in connect_unlocked
    tmp.connect((self.host, self.port))
    ConnectionRefusedError: [Errno 111] Connection refused

    Antworten
  11. Servus Christopher,
    super Projekt. Ich habe das ganze installiert und ansatzweise zum laufen bekommen.

    Das html frontend auf nginx spricht mit der Datenbank und Server und Client laufen auch und sprechen miteinander. Ich lasse alles auf einem Raspberry Pi 3B Laufen. Leider jedoch musste ich einen extra nutzer für msql anlegen da der server via localhost / 127.0.0.1 nicht zugreifen konnte. Gut das Problem ist durch den neuen Nutzer gelöst, wenn auch dadurch unsicherer, mein großes Problem ist jedoch das das html-frontend nicht via 127.0.0.1 mit dem server sprechen kann, beim Anlegen neuer Schalter kommt nach langer Wartezeit Server offline. Hilft dort vielleicht auch das ganze übder das intranet also die ip 192.168.0.18 laufen zu lassen?

    Ebenfalls bekomme ich die startroutinen nicht nach deiner Anleitung zum laufen, sie werden zwar eingebunden jedoch starten diese beim start vom Raspberry Pi einfach nicht, ein manuelles starten ist möglich.

    Antworten
  12. Hi Christopher…
    erstmal das obligatorische „Wow, was für ein tolles Projekt“ 😉 Hmm, ich versuche gerade Dein Projekt für mich zum laufen zu kriegen, da ich eine Terrariumsteuerung auf einem Pi realisiert habe, also ein 4port Relayboard welches 230V schaltet. Allerdings wäre es interessant zu wissen, welche Art von GPIO Pinbelegung du für das „ARG_A“ gewählt hast. BCM oder BOARD? Das würde mir das manuelle testen ersparen…
    Ach ja, und ist zufällig eine Implementierung von Sekunden in den Schaltzeiten geplant? Da ich Pumpen benutze und Schaltzeiten im Minutentakt zu ungenau wären… Ich würd mich über eine Antwort freuen!

    cheers, Dan

    Antworten
  13. Guten Abend,

    ich finde das bis jetzt ein super Projekt!
    Ich wollte das smartHome für mein Aquarium ausprobieren, um die Beleuchtung, etc. zu schalten.
    Gibt es eine Möglichkeit, dass ich zwei 1-wire Temperatursensoren (DS 18S20) im Web-UI anzeigen lassen kann oder auch neben der smartHome Web-UI auf ein zweiten Web-UI anzeigen lassen kann (d.h. über die IP-Adresse vom Raspberry PI auf den smartHome zugreifen und irgendwie auf ein zweites Programm zugreifen über Browser, wo ich dann die Temperaturen auslesen kann)?
    Ich bin programmiertechnisch leider nicht so fortgeschritten und ich hoffe, dass Du mir weiterhelfen kannst?

    Gruß Christian M.

    Antworten
  14. Hallo Christopher,

    Kompliment, nettes Projekt hast Du da am Start.
    Ich finde dass die Einrichtung genügend von Dir dokumentiert wurde.
    Ich habe mir das ganze heute mit MariaDB und nginx eingerichtet.

    Eine kleine Anmerkung hätte ich da,
    wäre es nicht besser das Dashboard in die index.php zu packen und die Zeitschaltuhr in z.B.: zeitschaltuhr.php zu packen?
    Im Dashboard könnte man z.B.: auch die aktuelle Systemauslastung des „raspis“ anzeigen lassen.

    Wenn ich wieder mehr Zeit habe, würde mich gerne an deinem Projekt beteiligen. Habe in 2 Wochen mündliche Prüfung und muss mich darauf vorbereiten.

    MfG

    Steffen

    Antworten
  15. Hallo Christopher,
    auch mich interessiert genau dieses Thema, weswegen ist bereits mehrfach bei Dir vorbeigesurft bin. Ich gehe auch gerade den Leidensweg FHEM, Openhab. Auch ich bin mit dem großen Umfang von Openhab nicht ganz zufrieden. An Hardware habe ich Homematic per Wired und mit Heizkörperventilsteuerung schon länger laufen und neuerdings auch Tinkerforge. Mit Tinkerforge habe ich vorsichtig angefangen, aber es läuft gut und mir gefält der offene Ansatz. Weniger gefällt mir an Tinkerforge die Ausrichtung an User, die „nur“ Smarthome betreiben wollen, ohne genau zu wissen, wie sich das elektronisch verhält. Ich bin zwar elektronisch gut bewandert, aber ich habe keine Zeit, alles selbst zu machen.
    Deshalb komme ich auf Dein Projekt. Ein wenig irritiert mich die Überschrift. Einerseits machst Du ein Smarthome-Projekt, aber andererseits schriebst Du in Deiner Überschrift „Zeitschaltuhr“. Zeitschaltuhr ist für mich nur 1 Aspekt unter vielen. Unter Spezifikation bei Dir beschriebst Du eine für mich gute Struktur, die ich gerne nachbauen würde. Ich weiß aber nicht, ob der Grundaufbau schon mit meiner Tinkerforge Hardware funktionieren würde, wenn ich Deine Programmierung erstmal 1:1 „einbaue“.
    Als Smarthomeler fängt man ja leider häufiger wieder bei Null an, deshalb würde ich es gut finden, wenn Du auf Deiner Webseite eine Extra-Seite aufbaust, in der eine Schritt-für-Schritt Anleitung enthalten ist. Was meinst Du?
    Schöne Grüße
    Thomas

    Antworten
    • So, die Antwort kommt leider wieder etwas später.
      Ich muss aktuell einen MS Server & Exchange 2016 einrichten und da dies das erste mal ist (bisher nur Linux), hält es mich länger auf als gedacht.

      Aber lieber spät als nie.
      Zuerst einmal danke für dein Kompliment.

      Das dich die Überschrift irritiert kann ich verstehen.
      „Noch“ ist das Ganze kein smartHome-System, sondern erst einmal „nur“ eine Zeitschaltuhr.

      Ich habe auch etwas dazu in einem der ersten Einträge geschrieben.
      Das Problem war, das ich mit meinem smartHome-System irgendwo anfangen musste.
      Und da eine Zeitschaltuhr zu jedem smartHome-System gehört, habe ich damit begonnen.
      Quasi als Unterbau.

      Von der Zeitschaltuhr aus wird das Projekt dann nach und nach zu einem smartHome System ausgebaut.
      Der nächste Schritt wird die Möglichkeit sein, die angelegten Schalter auch manuell zu bedienen, also ohne Zeitschaltuhr.
      Außerdem wird in diesem Schritt auch noch der aktuelle Status der einzelnen Schalter optisch angezeigt.
      Danach kommt im nächsten Ausbauschritt die Unterstützung von Sensoren dazu, erstmal nur die Anzeige der Werte.
      Weiter geht es dann mit einem Trigger-System um mithilfe von Sensordaten automatisch Schaltungen vorzunehmen.

      Das Problem bei all dem ist aber der Zeitaufwand und die Tatsache das ich nebenbei noch viele andere Dinge zu tun habe.

      Aktuell stockt die Entwicklung auch deshalb, weil ich am Grundprinzip der Schalter und wie diese intern eingebunden, bzw. konfiguriert werden am rumspielen bin.
      Bin mit dem aktuellen System nicht ganz glücklich, ich muss aber bevor ich weiter mache hier zuerst zu einem Ergebnis kommen.

      Normalerweise solltest du mit dem Dual Relay, dem Industrial QuadRelay und dem Remote Switch von TF problems meine Software nutzen können.
      Inwiefern du hier etwas 1:1 einbauen willst verstehe ich nicht ganz.
      Die Software ist ja schon auf github vorhanden.

      Die Idee mit einer Schritt-zu-Schritt Anleitung ist ganz gut, gibt aber 2 Probleme:
      1. Ich tue mich wirklich sehr schwer mit dem Schreiben von Anleitungen
      2. Ich weiß nicht ganz was du dir darunter vorstellst? Wie meine Software installiert wird habe ich ja schon Schritt-für-Schritt beschrieben.
      Meinst du eine Anleitung für ein konkretes Projekt, inlusiv Hardware-Aufbau?

      Wenn du mir vielleicht etwas genauer erklären könntest was du gerne in dieser Anleitung hättest und wie sie grob aussehen soll, dann kann ich mich mal an die Arbeit machen.

      Eventuell könnte mir hier auch einer der vielen Leser meines Blogs helfen, wäre gut.

      So, ich hoffe ich konnte dir weiter helfen und warte auf deine Antwort.

      Antworten

Schreibe einen Kommentar