Konzept SmartHome Steuerung

Hallo,

wir sind vor ein paar Wochen in unser neu gebautes Einfamilienhaus eingezogen. Beim Neubau ist SmartHome für viele noch kein Thema und damit sind die Möglichkeiten schwierig zu sondieren. Dazu kommt das es aktuell kein System gibt das alle meine Anforderungen erfüllt und durch die geschlossenen Systeme die oft an einzelnen Herstellern hängen, auch die Zukunft nicht sicher ist.

Aus den genannten Gründen habe ich mich dafür entschieden mir entsprechende Schnittstellen schaffen zu lassen und die SmartHome Steuerung selbst zu bauern und programmieren.Für die Konzessionierung benötige ich aber noch ein paar Tipps.

Die SmartHome Software habe ich komplett selbst entwickelt und bin daher an keine vorgegebenen Schnittstellen gebunden. https://github.com/agent4788/SmartHome

Gegebenheiten:

  • alle Aktoren werden mittels 24 V DC gesteuert
  • alle Lampen werden durch einen Bistabilen Stromstoßschalter gesteuert (alle Lichtschalter sind Taster)
  • Rollläden werden über zweit Taster pro Rollladen gesteuert
  • Pro Stockwerk gibt es eine Unterverteilung mit allen Aktoren des Stockwerkes
  • Optional kann später die Fußbodenheizung ebenfalls gesteuert werden

Zuerst hatte ich den Controllino im Auge. Aufgrund der Anzahl der benötigten Ein-/Ausgänge würde ich vier Controllino MEGA benötigen (für ~ 1 300 €). Daher habe ich mich entschlossen ein Konzept für eine eigene Steuerung, ebenfalls auf Arduino Basis, zu erarbeiten.

Anforderungen:

  • Grundfunktionen und einfache Komfortfunktionen müssen auch ohne Verbindung zum SmartHome Server funktionieren
  • Der Status aller Aktoren muss auch bei Neustart des Controllers erhalten bleiben
  • Der SmartHome Server muss mit der Steuerung interagieren können (Tasten Drücke erkennen, Licht Ein/Aus, Rollo Auf/Zu)
  • Es sind verschiedene Zeitliche Limits zu beachten
  • Die Rollladenmotoren sollten per Relais angesteuert werden und dürfen niemals in beide Richtungen gleichzeitig angesteuert werden
  • Alle Netzwerkkommunikation soll über Kabel laufen

Nun steht zuerst die Frage nach dem Controller selbst. Hier habe ich einen Arduino Due vorgesehen. Er hat von Haus aus viele Schnittstellen und fast unbegrenzt Speicher und Power. Dazu ein Ethernet Shield und entsprechende Platinen für die Porterweiterungen.

Hier kommen wir dann zu den eigentlichen Fragen.

Anzahl der Ein-/Ausgänge:

Um die nötige Anzahl der Ein und Ausgänge zu erreichen würde ich MCP23017 IC's verwenden (5 oder 6 Stück).
Bei den Eingängen konnte ich leider keine Zufriedenstellende Lösung zur Verwendung mit den 24 V der Taster finden. Kann mir dazu jemand einen Tipp geben (am besten mit IC's um den Aufwand gering zu halten).
Für die Ausgänge habe ich bei den Stromstoßrelais ULN2803A IC's angedacht, die dann direkt 24 V Ausgeben. Die Stromstoßrelais benötigen laut Datenblatt zum Schalten etwa 8 Watt für 100 ms.
Die Ausgänge für die Rolläden würde ich mit den allgemein erhältlichen Relais Platinen ausstatten. Da bin ich mir nur nicht sicher ob dazu auch noch einmal ULN2803A IC's notwendig sind (da der Due mit 3V3 Volt arbeitet und die Relais eigentlich immer mit 5 V).

Kommunikation mit dem SmartHome Server:

Für die Kommunikation mit meinem SmartHome Server habe ich an Sich eine einfache REST Schnittstelle angedacht. Ein Webserver ist auf dem Arduino mittlerweile kein Hindernis mehr. Allerdings benötigt meine Test Applikation auf dem Steckbrett für eine Lampe und Eine Rolladen schon ~ 50 ms für die Antwort an den SmartHome Server. Wenn ich dann davon ausgehe das insgesamt etwa 30 Aktoren pro Stockwerk zu steuern sind. Habe ich die Befürchtung das der Controller dann mehr mit den Anfragen vom SmartHome Server beschäftigt ist, als mit seinen eigentlichen aufgaben.

Eine Alternative dazu währe wohl MQTT? Damit habe ich aber keinerlei Erfahrung.

Speichern des Status:

Da der Arduino Due über keinen intigrierten EEPROM verfügt, habe ich jetzt einfach den EEPROM in der DS3231 RTC Platine aktiviert. Das hat gleich noch den Vorteil das man den EEPROM bei einem defekt einfach und günstig austauschen kann.

Ich hoffe ihr könnt mir ein paar Tipps geben. Der aktuelle Stand der Controller Software ist auf GitHub zu fineden:
https://github.com/agent4788/SmartHomeController

Hi,
das klingt ja nach einem großen Projekt!

Auf jeden Fall würde ich mir MQQT mal genauer ansehen! Denn dort versendest Du Nachrichten, die an mehrere Empfänger gehen können. Also z.B. an den Aktuator und die Basisstation. Dann entfällt ein Hin- & Her.
Abgesehen davon ist es immer gut sich ein bestehendes System anzuschauen, in welches schon hunderte/tausende Stunden Arbeit und Erfahrung geflossen sind.
Es gibt bereits komplette OpenSource SmartHome Systeme, die auf MQQT setzen.

Müssen es Arduinos sein? Ein ESP verfügt über WLAN und einen dermaßen großen Speicher, dass man OTA machen kann. Also Over The Air Updates, gemütlich vom Rechner, egal wo das Teil anschließend verbaut ist.
Wenn man ein System neu entwickelt, kommt man da nicht drum herum.

Persönlich kenne ich niemanden, der beim Neubau kein SmartHome mit bedenkt. Selbst bei größeren Renovierungsaktionen werden schon Leitungen für z.B. ein KNX verlegt.
Auf welches System dann letztendlich gesetzt wird ist dann meist weniger Glaubensfrage, sondern Überzeugung des Elektrikerbetriebs :wink:
Der verbaut nämlich i.d.R. nur was er kennt :slight_smile:

Ja, das ganze Projekt ist etwas umfangreicher geworden als ursprünglich gedacht.

Ich habe mich zwischenzeitlich noch etwas mit dem MQTT Protokoll befasst. Ich denke das ist genau das richtige Protokoll für das Projekt. Die Implementierung in meinem SmartHome Server (in Java geschrieben) ist damit auch kein Problem.

Es muss nicht zwingend ein Arduino sein, nur mit der Arduino Plattform kompatibel muss es sein.
Ein ESP32 würde sich natürlich auch anbieten. Ich will nur nicht unbedingt das ganze auf WLAN aufbauen. Mir wäre ein Netzwerkkabel wesentlich lieber. Schon alleine anhand der zu erwartenden Kommunikations last. Das würde wahrscheinlich die generelle WLAN Performance negativ beeinflussen.
Im Gegenzug wäre die Möglichkeit OTA Updates ein zu spielen auch hilfreich.

Eine Möglichkeit wäre dann den ENC28J60 Netzwerkchip zu nutzen um eine Hardware Ethernet Schnittstelle zu haben. Für OTA Updates könnte man dann einen Taster mit einbinden der für ein paar Minuten eine WLAN Verbindung für das Update aufbaut. Das müsste sich denke ich ja trennen lassen.

ESP32 und ENC28J60 Chips hätte ich auch da.

Die meisten die ich kenne, haben mit SmartHome noch nichts am Hut. Dadurch findet das auch beim Hausbau wenig Beachtung. Mein Elektriker hat mindestens zwei mal graue Haare bekommen. Ich habe dem wirklich alles vorgegeben und gleich mit Plänen und Klemmstellen festgezogen. Er wollte genau so möglichst sein 0815 SmartHome einbauen wie er das bei allen vor mir gemacht hat.

agent4788:
......
ESP32 und ENC28J60 Chips hätte ich auch da.

......

Hi Agent4788,

ich kann zu Deinen Fragen nichts beitragen. Aber ein Hinweis von mir in bezug auf die LAN - Anbindung. Ich erfasse meine Heizungsaten und Werte diese mit JFreeChart aus. Die Erfassung der Daten erfolgt auch nit java.

Mit der Lananbindung haba ich anfangs auch mit dem ENC28J60 etc. gespielt (getestet).
Jetzt nutze ich erfolgreich den Com2Lan Converter USR-TCP232-T2 Modul mit NANOS und NodeMCU bzw ESP32.

Viele Grüsse
Achim

@womisa

Danke für den Hinweiß, die Leistungsdaten des Chips klingen ja recht gut. Die UART Schnittstelle dürfte der ganzen Übertragungsgeschwindigkeit zu gute kommen.

Hattest du konkret Probleme mit dem ENC28J60 oder warum hast du alternativen gesucht.
Nutzt du dafür eine Arduino Libary oder hast du selbst die AT-Kommandos implementiert?

agent4788:
@womisa

Danke für den Hinweiß, die Leistungsdaten des Chips klingen ja recht gut. Die UART Schnittstelle dürfte der ganzen Übertragungsgeschwindigkeit zu gute kommen.

Hattest du konkret Probleme mit dem ENC28J60 oder warum hast du alternativen gesucht.
Nutzt du dafür eine Arduino Libary oder hast du selbst die AT-Kommandos implementiert?

Das hat zu viel Speicherplatz und programmiererei auf dem Arduino erfordert. Dieser Modul kann als Webserver oder Client benutzt werden. Such mal nach dem Manual.

So sehe ich halt nur die serielle Schnittstelle auf dem Arduino (ttl) und die ist leicht zu bedienen. Auf der Gegenseite habe ich einen Java Client der die Daten der seriellen Schnittstelle in eine Datei schreibt um diese später oder LIFE auszuwerten.

... so etwa....

  static Thread CControlLogger = new Thread() {

        String fromServer = "";
        Socket clientSocket = null;
        BufferedReader inFromServer = null;
        boolean bStart=true;


        public void run() {
            try {
                while (bRun) {
                    clientSocket = new Socket(CControlIP, CControlPort);
                    inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                    while (bRun) {
                        fromServer = inFromServer.readLine();

                        if(!bStart){         //falls 1. Zeile unvollständig
                            addToLogfile(fromServer);
                        }

                        System.out.println(fromServer);
                        bStart=false;
                    }
                }
                clientSocket.close();
                inFromServer.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    };

@womisa

Die Einbindungung in Java ist an sich kein Problem. Micht würde eher die Arduino Seite interessieren.

agent4788:
...Micht würde eher die Arduino Seite interessieren...

Sieh Dir insbesondere hinsichtlich der Speicherausstattung auch mal die neuen Nanos an. Z. B. Arduino Nano Every — Arduino Official Store (6 kB SRAM, 5 V), Arduino Nano 33 BLE with headers — Arduino Official Store (256 kB, 3,3 V)

Gruß

Gregor

agent4788:
@womisa

Die Einbindungung in Java ist an sich kein Problem. Micht würde eher die Arduino Seite interessieren.

Bei der Arduinoseite gibt es nicht viel zu sagen. Der USR-TCP232-T2 ist als Server konfiguriert. Da Tool kann von derenen Seite runtergeladen werden. Die Ausgabe an der seriellen Schnittstelle werden,ohne weiteres zu tun, an die IP/Port Adresse des Clients (Java) durchgereicht.

Aus der Arduno Sicht ist das eine "normale" Ausgabe auf die serielle Schnittstelle. Ich habe TX Pin des Nanos über einen Spanungsteiler, da der TSr 3.3V hat, an den RX Pin des TSR gehängt. das wars. Läuft bei mir schon längere Zeit stabil.

Siehe Wohnzimmer LOG von heute

WoziHeizung.png

Hallo agent.
Ich glaube hier mal irgendwo im forum die Idee gefunden zu haben die 2 relais für jedes Rollo in Reihe zu schalten.
relais1 zieht an um Strom auf relais 2 durch zu lassen, relais 2 gibt mit seinem Wechsler die Richtung vor.
So kann nichts passieren.

Die Verrigelung für die Rollos gabe ich aktuell Softwareseiti implementiert. Ich bin noch am überlegen ob ich extra Hutschinenrelais mit zwei Wechslern oder Öffner/Schließer verwende. Damit kann man das noch auf der Hardwareseite 100% sicherstellen. Dafür müsste ich aber 38 derartige Relais kaufen. Was bei einem Stückpreis um die 10 € nicht ganz ohne ist.

Hi

Mit dem Ansatz von raznz_snasna brauchst Du nur zwei Relais, 1xS und 1xW.
Das 1xS schaltet Dir die Spannung auf Relais 2.
An Relais 2 sind die Drähte für AUF und AB angeschlossen.
Wenn Relais 2 angezogen ist, wird die eine Richtung bestromt, abgefallen die Andere.
Hier ist Es, wie schon geschrieben wurde, UNMÖGLICH, beide Fahrtrichtungen gleichzeitig auszulösen.
Dir kann ein Relais verkleben - ja - aber dann fährt der Rollo

  • immer in Endlage oder gar nicht mehr (R1 verklebt)
  • immer nur in die gleiche Richtung (R2 verklebt)

MfG

Morgen,

ja das ist schon verständlich, durch den Wechsler gibt es keine Signalüberschneidung. Es gibt nur einen Fall den diese Schaltung nicht abdeckt. Klebt das Freigaberelais wird eine Richtung des Relais immer angesteuert. Da bin ich mir nicht ganz sicher ob das für die Rollladenmotoren OK ist. Dazu gibt das Datenblatt leider keine Auskunft. Theoretisch müsste der Motor aber über die Drehmoment Abschaltung einfach stehen bleiben.

Mit zwei Relais mit je zwei Wechslern lässt sich auch dieser Fall verhindern. Ist ein Relais defekt geht nichts mehr oder nur eine Richtung.

agent4788:
Bei den Eingängen konnte ich leider keine Zufriedenstellende Lösung zur Verwendung mit den 24 V der Taster finden.

Die im industriellen Umfeld verwendeten 24 V werden gerne mittels Optokopplern mit Elektronik verbunden. Wenn man die im µC eingebauten PullUp-Widerstände nutzt, schaltet der Optokoppler-Transistor den Eingang nach GND. Den Strom für die Optokoppler-LEDs würde ich wenn möglich eher im oberen Bereich (20 mA) ansiedeln, um Störungen zu minimieren.

Auch in umgekehrter Richtung würde ich die 3,3 V der µC-Ausgänge auf Optokoppler-LEDs führen, um mit dem Optokoppler-Transistor kleine Relais, Logik-Level-FETs oder andere Leistungselektronik zu schalten. Je nach µC sind nur wenige mA für die Ausgänge erlaubt, da muß der Optokoppler-Transistor sauber schalten.

Die Optokoppler müssen nur schnell genug sein. Bei der Größe des Projektes würden sich möglicherweise schon kleine mit SMD bestückte Platinen lohnen.

Bei der Hardware ist der ESP32 (aus Arduino-Sicht leider) kaum zu "vermeiden". In manchen Fällen auch interessant ist der kleine ProMini (Nano ohne USB), eine kleine Variante des Mega2560, sowie der 5V-tolerante (gilt für die digitalen Eingänge) Teensy 3.2 oder 3.5 mit viel Speicher. Die MCP23017 finde ich eine gute Wahl, allerdings könnte ein kleiner Mega2560 im Zusammenspiel mit einem ESP32 auch gute Dienste leisten.

Alternativ zu Ethernet schlage ich Dir CAN-Bus vor, habe ich bislang mit UNO, Mega2560 und Teensy 3.2 getestet (UNO - Mega - Teensy mittels CAN-Bus verbinden). Die Hardware ist günstig und hat einen eigenen Controller drauf (MCP2515), was den µC angenehm entlastet. Teensy und ESP (Controller Area Network (CAN)) können das nebenbei.

Nun hast Du was zum Grübeln :slight_smile:

Weiter zum Grübeln:

Statt ENC28J60 den Wiznet W5100/W5500 glaube ich brauchen wir nicht extra zu diskutieren. Da sollte es genug Beiträge geben.

Allgemein: Wired LAN wäre mir vom Verkabelungsaufwand zu viel. Wenn ich mir vorstelle zu jedem Node ein LAN-Kabel. Wer will das patchen ^^

Der ESP32 käme mit integriertem CAN-Bus - da bräuchtest nur mehr einen kleinen 8 beinigen Käfer (TTL-CAN Wandler).

Aber wenn Haustechnik würde ich versuchen so viel wie möglich fertig anzuschaffen. Da fällt man dann immer noch über Modbus (auf Basis RS485, aber auch Ethernet).

Hallo.

Glückwunsch zum neuen Haus.

Da ich Erfahrungen habe mit einer Haussteuerung, teile ich diese hier mal.
Vielleicht hilft es Dir oder jemanden ja.

Habe über die Feiertage meine SPS von WAGO (750-880) ausgebaut, bis dahin hat sie immer gute Dienste verrichte.

Deshalb auch meine Empfehlung, dass man fertige Komponenten nehmen sollte.

Es gibt dafür viele Gründe, aber die wichtigsten für mich sind:

Was ist, wenn das Haus verkauf wird?
Was ist, wenn Du krank / tot / Montage / etc. bist, kann Deine Frau dann evtl. Probleme beheben?
Was ist, wenn etwas defekt ist, hast Du sofort Ersatz bzw. kannst das Problem sofort lösen?

Ich würde heute auf eine WAGO PFC200 oder PFC100 setzen.
Diese würde alle wichtigen Funktionen bedienen (Licht, Rolllos, Heizung, ....).

Die Bewässerung würde ich dann ggf. über einen ESP machen oder auch Gartenlampen, ....
Auch die Erfassung von Daten, wie Temperatur, Feuchtigkeit, etc. in den Räumen würde ich so lösen. Wenn hier mal keine Daten kommen, bekommt die SPS es mit und reagiert entsprechen.

Als Verbindung würde ich MQTT nutzen, ist eigentlich schön einfach (z.B. auch mit openhab).

Meine Heizung und Lüftung ging auch über die SPS, aber bei einem Ausfall, wäre sie ganz normal weiter gelaufen, was ich denke sehr wichtig ist.

Auch die Kosten sind überschaubar. Die PFC100 bekommst Du für ~350Euro dann eine Codesys Lizenz für ~120Euro.

16 A/E habe ich für ~20Euro bei eBay z.B. bekommen. Hier hast Du dann auch keine Probleme mit den 24Volt.

Die Idee mit Stromstoßschalter ist nicht besonders gut. Wenn die Steuerung (welche auch immer) einem Impuls gibt, kann es sein der der Stromstoßschalter nicht geschaltet hat und schon weiß Du nicht mehr den richtigen Status. Hier müsste dann noch ein Schließer als Rückmeldung der Steuerung den Status mitteilen.

Hast Du eine SPS, dann könntest Du nur Relais nehmen und schalten. Ausgang TRUE --> Relais an.

Ein weiter Vorteil war bei mir immer: Ich habe im Speicher der SPS ein lauffähiges Programm, was getestet ist. Habe ich nun etwas neues gemacht, war das neue Programm nur temporär. Sollte es gar nicht mehr gehen oder was auch immer, Strom aus und Strom wieder an, dann wurde das lauffähige Programm aus der SPS genommen. Das hätte meine Frau auch mal ebend machen können, wenn ich nicht vor Ort bin.

Du siehst es gibt viele Gründe aus meiner Sicher gegen etwas "gebasteltes".

Lass es Dir nochmal durch den Kopf gehen :slight_smile:

Gruß
hd

Sicerlich gibt es fertige Lösungen. Aber wie bei allem gibt es auch da Verschiedene Vor- und Nachteile.

Fertige SmartHome Systeme sind teuer und hängen fast immer direkt an einem speziellen Hersteller. Geht der pleite oder backt in Zukunft Brote, sitzt man auf einem teuren Berg Elektroschrott.
Dazu kommt noch das weit größere Problem mit der Sicherheit und der Datenverarbeitung ( " nach Hause Telefonieren").

Industrieelle SPS System wären an sich sicher eine gute Wahl. Sind aber auch nicht Billig. Ich habe Beruflich sehr viel mit den Siemen SPS Steuerungen zu tun, da würde eine aktuelle S7-1200 mit allem Zubehöhr auch mit 1200 bis 1500 € zu Buche schlagen.
Zu dem Punkt wer kann das weiter betreiben wenn ich das nicht kann. In meinem direkten Umfeld gibt es keinen der das könnte, so oder so nicht. Daher ist die Installation so ausgelegt das man alles auf Stand null zurück klemmen könnte.

Das Problem mit den Stromstoßschaltern ist mir bekannt. Das hat aber dafür wieder andere Vorteile. So brauchen Stromstoßschalter zum beispiel keinen Haltestrom. Da duese dann eh nur über die SmartHome Steuerung gesteuert werden, ist die gefahr gering das es nicht passt. Zudem baue ich für den Notfall eine Synchronisationsfunktion ein.

agent4788:
Zudem baue ich für den Notfall eine Synchronisationsfunktion ein.

Wie hast Du Dir diese vorgestellt?

Gruß Tommy

Die Idee ist, einfach die Lampe aus zu schalten und dann den Taster zehn oder fünftehn Sekunden zu drücken, danach wird dann der Status auf "aus" gesetzt und ist wieder synchron.
Ähnliches ist auch bei den Rolläden nötig.

Das habe ich jetzt nicht wirklich verstanden.

Nehmen wir an, das Stromstoßrelais verliert einen Impuls.
Nach der internen Variablenlage müsste dieser von Aus auf An geschaltet haben. Die Lampe ist aber immer noch aus.

Wie soll da die Synchronisation erfolgen? (händisch oder automatisch?)

Gruß Tommy