RPI HomeControl ohne BUS

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Wie findet Ihr das System? 5

    1. Gibt es schon (0) 0%
    2. Mal was anderes (1) 20%
    3. Gut (1) 20%
    4. Genial (3) 60%

    Hallo Leute,

    hiermit moechte ich mein Projekt vorstellen. Es ist sicherlich anders als die, die es bereits gibt. Es lohnt sich mal durchzulesen wie ich bisher vorgegangen bin.

    Mein Haus ist ausnahmslos mit Tastern ausgestattet, Alle Lichter und Rollos werden mit handelsueblichen Tastern gesteuert. Demnach fuehrt von jedem taster ein Schaltkabel in den Schaltschrank. Und hier war die idee diese abzugreifen und an meine eigene Steuerung anzuschliessen.

    Ich habe ein Prorotyp board gebastelt das mit 64xRelais und erstaml mit 200 Eingaengen ausgestattet ist. Dabei ist die Hardware modular erweiterbar. Pro Modul bekommt man 16x neue Relais und rund 30 neue Eingaenge, davon 10 mit Analog I/O fuer z.B. Temperaturmessungen (Eingang) oder fuer Dimmersteuerung (Ausgang). Die Module bestehen aus einem ATMEL MEGA128 Microprozessor und einem 16x Relais board. Jedes Modul wird mit einem ebenfalls selbst geschriebenem Programm geflasht, es wird lediglich nur die I2C Bus Adresse angepasst.

    Die einzelnen Module kommunizieren mit dem RPI ueber den im PRI vorhandenen I2C Bus, daher auch einfach erweiterbar. Als OS im PRI habe ich Debian mit MySQL und Apache gewaehlt. Damit ich die Kommunikation direkt ueber PHP und nicht umstaendlich ueber shell scripte nutzen kann, habe ich mir einen eigenen PHP MOD fuer I2C steuerung geschrieben. Damit habe ich die Moeglichkeit alle 200 Eingaenge zig mal pro Sekunde abzufragen.

    Administration

    Mit der Administrativen Weboberflaeche laesst sich alles was moeglich ist konfigurieren.
    Nach dem Start des PRI werden erstmal alle vorhandenen Module mit den vorhandenen I/O ports aufgelustet. Hier hat man erstmal die Moeglichkeit die ports als Ein- oder Ausgang zu definieren. Da dies aber ein riesen durcheinander geben kann, habe ich die Initialisierungsfunktion eingebaut.


    Initialisieren

    Die Initialisierungsfunktion laesst das gesammte System bei Neuinstallation oder bei Erweiterungen ganz einfach einrichten. Sobald sich das System im Init-Modus befindet, werden alle I/O Ports auf Lauschmodus geschaltet. Das bedeutet, dass bei druecken eines beliebigen Schalters im Haus die Weboberflaeche zeitgleich reagiert und automatisch den entprechenden Port auf Editieren umschaltet. So kann man ganz einfach den Namen des Schalters (z.B. "Kinderzimmer Tuerschalter") hinterlegen, ohne alle Leitungen bis zum richtigen Port zu untersuchen. Wenn man nun mit einem Notebook quer durchs Haus rennt schnell alle Schalter einmal antippt und den Namen hinterlegt, hat man alle Eingaenge initialisiert.
    Die Ausgaenge werden auf dem herkoemlichen Weg eingestellt. Sprich herausfinden welches Relai fuer Lampe in der Kueche zustaendig ist und dann in der Oberflaeche den Namen hinterlegen.

    Zuordnung

    Die Schalter werden nun zu den Entsprechenden Verbrauchern ueber die Weboberflaeche per Drag&Drop zugeordnet. Es koennen mehrere Eingaenge zu ein und dem selben Verbraucher verknuepft werden. z.B. soll der "Schalter im Flur vorne" und der "Schalter im Flur hinten" den Verbraucher "Lampe Flur" bedienen. Ebenfalls koennen mehrere Verbraucher an einen oder mehrere Eingaenge zugeordnet werden. So koennen mehrere Schalter die lichter "Flur decke" und "Flur Wand" bedienen.
    Bei jedem Eingan koennen unterschiedliche Eingangsfunktionen eingestellt werden.

    • Standardfunktion (Taster drueck -> AN, Taster nochmal drueck -> AUS)
    • Verzoegerungsfunktion mit Millisekunden Eingabe (Taster gedrueckt halten, millis -> AN, usw.)
    • Intervallfunktion mit Anzahl Eingabe (z.B. Anzahl wurde auf 3 eingestellt, so muss der Taster 3 mal gedrueckt werden -> AN, usw.)


    Bei jedem Ausgang (Verbraucher) kann auch eine Ausgangsfunktion eingestellt werden.

    • Standardfunktion (direkt AN oder AUS)
    • Verzoegerungsfunktion mit Millisekunden Eingabe (Wenn Schalter getaetigt wurde, dann Millis warten und dann erst -> AN)
    • Timeoutfunktion mit Millisekunden Eingabe (Wenn Verbraucher an ist, wird er nach millis wieder ausgeschaltet)
    • Blinkfunktion mit Intervall eingabe (Verbraucher blinkt mit eingestelltem intervall)


    Rolladenfunktion

    Fuer jede Ralladenschaltung werden generell 2 Eingaenge (Schalter hoch, Schalter runter) und 2 Ausgaenge (Rollosmotor hoch, runter) benoetigt. Diese 4 Ports werden zu einem Rollos Modul per Drag&Drop vereint. Die 2 Ausgaenge (Relais) werden softwaretechnisch so miteinander gekoppelt, dass niemals beide gleichzeitig an sein koennen. Sonst koennte der Antriebsmotor beschaedigt werden.
    Wenn ein Rollomodul fertig zusammengestellt wurde, kann ideses initiirt werden. Man misst mit einem Assistenten dafuer die Zeiten wie lange das Rollo fuer eine komplette Schliessung und eine komplette Oeffnung benoetigt. Diese 2 Zeiten werden in der Datenbank abgelegt und koennen spaeter fuer die Berechnung der aktuellen Lage des Rollos verwendet werden. In der mobilen Version kann z.B. ueber den Touchscreen das Rollo einfach mit dem Finger auf beliebige % Zahl gestellt werden, so kann das Rollo z.B. auf 50% geoeffnet gestellt werden.

    Gruppen

    Es koennen aus allen konfigurierten Ports wie z.B. Rollo oder Schalter oder Lichter, Gruppen erstellt werden. z.B. kann eine Gruppe Namens "Wohnzimmer" erstellt werden. Dahin koennen alle Schalter Lichter und Rollos aus Wohnzimmer bewegt werden. Die Guppe kann anschliessend als eine Einheit z.B. als Ausgang bei der Zuordnung verwendet werden. So koennte man z.B. den Schalter "Wohnzimmer Wohnbereich Rollos hoch" so konfigurieren, dass wenn man ihn 3xmal drueckt, gehen alle Rollos im Wohnzimmer auf 80% zu. oder wenn man den selben schalter 4xmal drueck gehen alle Rollos im Wohnzimmer und Flur auf 100% zu. Hier gibt es bei der Konfiguration schon fast keine Grenzen mehr.

    Mobile Anwendung

    Die Mobile Anwendung hab ich mit dem Framework Sencha Touch 2.2 programmiert. Hier lassen sich Gruppen hirarchisch darstellen und die Verbraucher sowie die Rollos koennen bereits bedient werden.
    Es gibt natuerlich noch jede Menge Entwicklungsbedarf, aber die ersten Funktionen laufen schon recht passabel.


    Allgemein

    Die Administrative, sowie die mobile Oberflaeche laufen beide ueber die Websocket Technilogie, so dass eine Echtzeitdarstellung ueber die Aktionen der Schalter, der Lampen oder sogar der Rollos ermoeglicht wurde. Wenn man also ein Rolle mit dem Schalter bedient, sieht man in der mobilen Anwendung in Echtzeit wie das Rollo hochfaehrt. Genauso mit den Lichtern, macht man ein Licht per Schalter an, bewegt sich der Schalter auch sofort in der Oberflaeche.

    Ich habe das ganze als ein kleines Hobbyprojekt ins Leben gerufen, vertreibe mir damit manchmal die Zeit. Naja und werde mich natuerlich freuen wenn ich mein Haus bald von unterwegs unter kontrolle hab. :)
    Bei Gelegenheit kann ich euch gerne einige Screenshots zeigen, aber ich wuerde mich schonmal riesig ueber eure Meinung freuen.

    Schoene Gruesse
    Meda

  • Hi,

    ja das Projekt ist im Backend ausnahmslos in PHP geschrieben, Frontent ist natuerlich sehr Javascript lastig.

    Was moechtest du denn genau wissen? Kann gerne deine Fragen beantworten.

  • Hi,

    das mobile Framework ist sencha Touch. Die meisten kleinen icons gibt es in der kostenlosen famfam sammlung, aber alles andere, gerade das themenspeziefische erstelle ich mir selbst.

    Gruss
    Meda

  • Dein PHP MOD für die I²C-Steuerung würde mich beispielsweise interessieren, da du damit ja vollkommen ohne Shell-Skripte auskommst.

    Wie läuft dein PHP-Skript denn durchgängig, weil standardmäßig ist die Ausführungszeit ja auf 30 Sekunden begrenzt. Hast du den Wert dafür einfach auf 0 gesetzt oder hast du da eine andere Lösung?

  • Der PHP Mod ist einfach gestrickt, muss natürlich in C geschrieben mit Zend compiliert werden, aber im grunde lassen sich so alle GPIO ports mit einem kleinen PHP mod direkt aus PHP ansteuern. Der Vorteil, die Kommunikationszeiten sind um Welten schneller als mit php -> shell -> php.

    Ich habe die Scriptlaufzeit natürlich wie du schon sagtest auf 0 gesetzt. In der Endlosschleife lass ich auf meinem websocket port lauschen, dabei bleibt die Lauschpause auf dem Spcket genau 10ms, so dass im falle eine Socketruhe die Schleife maximal 100/sek. läuft. Ansonsten geht die Prozessorauslastung hoch. Besteht Kommunikation auf dem Websocket so läuft die Schleife ohne Pause durch, so entstehen keiene unnötigen Latenzzeiten.
    Die I/O Ports der Module werden dann dementsprechend 100/sec abgefragt, was natürlich schon übertrieben viel ist, läuft bei mir aber seit Monaten stabil, der I2C Bus macht das mit.
    So etwas mit PHP umzusetzen ist eigentlich nicht gewöhnlich. Man bräuchte eigentlich multihreading. Ich hätte es mit JAVA machen sollen, doch da es mir mit PHP leichter fiel, bin ich irgendwie dran hängen geblieben.

  • Wow ich bin tief beeindruckt!

    Interessieren würde mich auch der PHP-Mod... der weg PHP-Shell-PHP erschien mir auch schon immer irgendwie umständlich... vielleicht hast du ja sogar lust das zu veröffentlichen?

    Leider bin ich noch nicht im Eigenheim-Alter dass ich da selbst soviel umsetzen könnte. Was mich aber interessiert: Ist das "üblich" bzw standardisiert (wie auch immer ;) ) im kompletten Haus nur Taster zu haben? Ich hab das einfach noch nirgends gesehen... aber macht ja viel mehr Sinn und lässt viel mehr Möglichkeiten als die historische Verkabelungsweise... ;)

Jetzt mitmachen!

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