www.mikrocontroller.net

Forum: Haus & Smart Home I2C-Hausbussteuerung mit Windows über USB


Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Möchte hier mal meine Hausbussteuerung vorstellen, da hier im Forum 
immer mal wieder dieses Thema angesprochen wird.

Hardware „Zentrale“:
Als „Zentrale“ dient ein Siemens/Fujitsu Scovery-PC mit 550Mhz. Diese 
PC’s gibt’s öfters bei ebay für ca. 20-30 Euro. Die Leistungsaufnahme 
liegt bei ca. 34 Watt mit Festplatte. Ich betreibe den PC mit einer 
CF-Card wo Win98 installiert ist und ohne Festplatte. Somit lässt sich 
die Leistungsaufnahme auf ca. 25 Watt begrenzen. Hatte es auch für 30 
Tage mal mit WinXP versucht (da allerdings mit Festplatte) – hat auch 
einwandfrei funktioniert. Bis auf eine Meldung von XP wo ein Neustart 
nach ca. 3 Wochen empfohlen wurde (da konnte ich mir das Lachen doch 
nicht verkneifen ...). Windows 98 lief nach ca. 9 Monaten Dauerbetrieb 
immer noch stabil und wäre wohl auch noch weiter gelaufen, wenn sich 
nicht der CPU-Lüfter verabschiedet hätte und sich der PC dann 
abgeschaltet hat – zum Glück hatte ich noch einen „Hardware“ 
Haustürschlüssel dabei... . Der PC läuft jetzt bei mir seit knapp 3 
Jahren im Dauerbetrieb und seit 1,5 Jahren ohne Probleme. Am Anfang 
stürzte das Delphi-Programm alle 5-20 Tage ab. Habe diesen Fehler sage 
und schreibe ca. 1 Jahr lang gesucht. Die Ursache war der 
Delphi-Multimedia-Timer für den Takt. Inzwischen habe ich selber einen 
Taktgeber programmiert der einwandfrei funktioniert. Davor hatte ich 
alles über eine Steuerung mit einem 8085 Prozessor betrieben (9 Jahre 
lang). Dieser musste aufgrund umständlicher (zeitraubender) 
Assembler-Programmierung und Komfort vor 3 Jahren der PC-Variante 
weichen. Auch wenn ein PC mehr Leistungsaufnahme hat als eine reine 
Mikrocontroller-Steuerung hat es sich für mich gelohnt. Alleine was ich 
an Heizöl spare durch eine sinnvolle Einzelraumtemperaturauswertung / 
Zeitbeschränkungen gegenüber der Standardkesselsteuerung ist der 
Stromverbrauch für den PC locker drin.

Software „Zentrale“:
Die Software habe ich in Delphi geschrieben. Da ich nicht bei jeder 
Erweiterung oder Änderung der Software das ganze Haus „lahmlegen“ 
wollte, wird jedes I2C-Modul mit einer eigenen DLL angesprochen. Diese 
wird vom Hauptprogramm gestartet oder beendet. Somit können einzelne 
Programme für I2C-Module erweitert / geändert werden und der Rest 
funktioniert weiter. Mit integriert ist auch ein Web-Server für Anzeige 
/ Bedienung übers Internet, den ich auch in Delphi erstellt habe.

USB auf I2C-Umsetzer und Textanzeige:
Im PC befindet sich noch eine Platine (die ich als Slotkarte ausgeführt 
habe) mit dem USB auf I2C-Umsetzer. Diesen habe ich mit einem AN2131Q 
Controller (8051-Kern) aufgebaut. Zusätzlich ist noch eine Textanzeige 
mit 2x40 Zeichen und 4 Bedientastern sowie Infrarot-Empfänger daran 
angeschlossen, um Ereignisse vom Delphi-Programm bzw. I2C-Meldungen über 
Taster oder mittels IR-Fernbedienung anzuzeigen.

I2C-Module im Haus:
1. Geräteschuppen (1x PCF 8574 - 8fach I/O):
- Folientastatur Zahlencodeeingabe für Türöffner Geräteschuppentür
- Rauchmelder
2. Wohnzimmer (1x PCF 8574):
  - Folientastatur Zahlencodeeingabe für Verriegelung 
Wohnzimmerterrassentür über Stoßmagnet.
  - Bedienung Markise
  - Bedienung Teichpumpe
3. Küche (1x PCF 8574):
  - Folientastatur Zahlencodeeingabe für Verriegelung Küchenterrassentür 
über Stoßmagnet.
  - Bedienung Teichpumpe
  - Futterautomat für die Katze (da meine Katze wenig Verständnis für 
Überstunden hat...)
  - Taster für Rufgong (wenn mich meine Beste wieder aus meinem 
Arbeitszimmer locken will oder auch zum Essen...)
4. Keller (1x PCF 8574):
  - Signal Haustürklingeltaster gedrückt
  - Signal vom RFID-Modul für Türöffner Haustür
  - Relais Teichpumpe
  - Signal Wasseruhr dreht (damit ich bei einem Rohrbruch über Handy 
informiert werde)
  - Signal Bewegungsmelder (verbunden mit IP-Camera)
  - Rauchmelder
  - Meldungssummer
5. Bad, Wohnzimmer, Kinderzimmer (jeweils 1xPCF 85754 und 1x PCF 8591):
  - Raumtemperaturfühler
  - Sollwertpoti Raumtemperatur
  - Heizkörper Ventilmotor
  - Bedientaster für Hand/Automatikbetrieb Temperaturregelung
6. DTMF (1xPCF 8584 für galvanische Trennung zur Atmel DTMF-Einheit mit 
AT mega 8535):
- Alarmmeldungen zum Handy (erfasst werden 3x Rauchmelder, 
I2C-Busausfall, Wasser läuft, 3x Zahlencodeschlösser wurden zu oft 
gedrückt, PC-Ausfall).
  - Haustür öffnen übers Handy
  - Katze füttern übers Handy
7. Komplette Ölbrenner- / Sonnenkollektorregelung (1x AT mega 8535) 
daran angeschlossen sind:
  - 4 Pumpen
  - 2 Mischer
  - 7 I2C-Temperaturfühler
  - Ölbrenner
  - Warmwasseruhr dreht (für einschalten der Warmwasserzirkulationspumpe 
außerhalb der programmierten Zeiten)
  - Statusmeldungen

8. Musikturm (1x AT mega 8535) daran angeschlossen sind:
  - 10x SAA 1064 für 320 Stück Anzeige-LED’s für Lautstärke, Höhen, 
Mitten, Tiefen, Equalizer
  - 4 x SAA 1064 für 7-Segmentanzeige Signalquelle, Festeinstellungen 
usw.
  - 6 x PCF 8574 für Multiplexen der SAA 1064  LED-Anzeigen, Relais für 
Endverstärker, Ansteuerung Klangsimulatoren, Signalauswertung 
Infrarotfernbedienung, CD-Player Bedienung, Musikturm-PC-Bedienung usw.
  - 2 x TEA 6360 Equalizer
  - 2 x TEA 6360 Klangregler
  - 2 x TEA 6320 Signalquellenselektor
9. Wohnzimmer (1x Atmel 2313) für 6-Kanal-Dimmer mit IR-Fernbedienung


I2C-Busausführung:
  - Alle I2C-IC’s, ATmega’s sowie der AN2131Q (Zentrale) sind mit dem 
Extender 82B715 versehen.
  - Beim Hausbau (1992) habe ich bereits auf ca. 30cm über dem Fußboden 
sowie ca. 20 cm unter der Decke ringsum in jedem Raum Leerrohre verlegt. 
Bei jedem Heizkörperventil wurde schon eine Unterputzdose gesetzt. Dies 
hat sich aber mehr als gelohnt. Wenn ich jetzt irgendwo einen 
Busanschluss benötige reicht es aus, an der Stelle eine 
Unterputz-Leerdose zu setzen. Somit habe ich bis heute keine sichtbaren 
Leitungen aufputz verlegen müssen (auch wenn mich der Architekt wohl 
damals für verrückt gehalten hat... seine Aussage: So viel Lehrrohre hat 
er noch nie gesehen...).
  - In den Leerrohren sind zwei Kabel verlegt. 1x Datenleitung SDA, SCL 
(2-adrig geschirmt) und ein 4x1,5² für +15Volt, -15 Volt, Masse und 
Interrupt.
  - Die Verlegte Kabellänge dürfte bei ca. 120m liegen.
  - Obwohl die Kabellänge so gewaltig ist und die Datenleitungen 
praktisch in einer Baumstruktur verlegt wurden (teilweise sogar parallel 
mit 230Volt Leitungen – aber in getrennten Leerrohren) – funktioniert 
das Bussystem seit über 11 Jahren ohne Fehlfunktion. Der I2C-Bustakt 
beträgt ca. 90 kHz.


I2C-Kommunikation:
  - Senden: Das Delphi-Programm sendet ein Datenpaket über USB zum 
AN2131Q-Controller. Dieser sendet dann das Datenpaket zum adressierten 
I2C-Modul. Sollte das I2C-Modul nicht antworten, wird ein Fehlerbit 
gesetzt und das Delphi-Programm fragt es unmittelbar nach dem Senden ab. 
Antwortet das I2C-Modul auch nach wiederholten 10 Versuchen nicht, wird 
dieses Programm (DLL) geschlossen.
  - Einlesen im Prinzip wie Senden. Nur das eben nicht nur ein 
Fehlerbyte über USB eingelesen wird sondern auch die angeforderten Bytes 
eingelesen werden.
  - Interrupt-Empfang: Wird ein Interrupt ausgelöst, liest der 
AN2131Q-Controller alle Interruptfähigen I2C-Adressen ein und speichert 
die Zustände. Somit ist sichergestellt, dass das Delphi-Programm keine 
ganz kurzen Änderung (<20ms) „verschläft“. Da das Delphi-Programm nur 
alle 20ms den AN2131Q-Controller über USB abfragt.


Browser-Kommunikation:
  - Für jedes I2C-Modul wird eine Ereignisliste geführt und eine 
Steuerungsliste.
  - Die Abfrage von Ereignissen (z.B. Haustürklingeltaster gedrückt) 
oder Parameteranzeige (z.B. Raumtemeraturen) erfolgt über einen Browser.
-  Das Delphi-Programm schreibt dann die Ereignisse und Parameter an die 
entsprechende Stelle in der html-Datei, die dann geladen wird.


Programmierung einer DLL:
In der DLL habe ich verschiedene Prozeduren vordefiniert. 
Programmstartinitialisierung für I2C-Modul, Programmendeinitialisierung, 
100ms Intervallaufruf, Interruptaufruf usw. Somit kann ein Programm für 
ein I2C-Modul schnell erstellt werden (natürlich je nach Umfang) – was 
doch wesentlich komfortabler ist als die Assembler-Programmierung eines 
8085 Prozessors (den ich bis vor 3 Jahren im Einsatz hatte).


Ich hoffe mit der Beschreibung konnte ich ein paar interessante 
Informationen geben. Nachfolgend jetzt noch ein paar Bilder, die die 
Beschreibung hoffentlich noch gut ergänzen.

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein Bild von der gesamten Heizungssteuerung. Oben die 
Relaisplatinen, darunter die geöffnete ATMEL-Steuerung und darunter die 
Handbedienung.

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Modul für die Heizkörperansteuerung.

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
... und der Musikturm mit den LED-Anzeigen.

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
... die Umsetzerplatine USB auf IC2 mit Anschluss für Textanzeige und 
Infrarotfernbedienung im Scovery PC.

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Programmoberfläche auf dem Scovery-PC.

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
... und zum Schluss noch die Browseroberfläche.

Autor: Sebastian H. (shalbig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ersteinmal ein großes RESPEKT für dieses System. Wenn du das ganze auch 
noch alleine entworfen und eingebaut hast, dann glaube ich, habe ich ein 
Vorbild für mein geplantes Projekt. :-)
Ziehlich viele Informationen, mit denen ich mich ertmal 
auseinandersetzen muss.

MfG DaBasti

Autor: Maik Fox (sabuty) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen W. schrieb:
> Bis auf eine Meldung von XP wo ein Neustart
> nach ca. 3 Wochen empfohlen wurde (da konnte ich mir das Lachen doch
> nicht verkneifen ...). Windows 98 lief nach ca. 9 Monaten Dauerbetrieb
> immer noch stabil...

> Am Anfang
> stürzte das Delphi-Programm alle 5-20 Tage ab. Habe diesen Fehler sage
> und schreibe ca. 1 Jahr lang gesucht. Die Ursache war der
> Delphi-Multimedia-Timer für den Takt.

Nein. Das ist ein bekanntes Problem von Windows 98 und Konsorten, dass 
der System-Tick-Timer nach einer bestimmten Zeit überläuft und danach 
die seltsamsten Dinge passieren können.

Autor: lrlr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow, ...



da wunderts mich nicht, dass du kein kinderzimmer hast ;-)


(ist nicht bös gemeint..)

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Finde ich cool!
(Allerdings würde ich CAN dennoch bevorzugen, einfach nur weil ich 
weiss, dass i2c dafür eigentlich nicht geeignet ist...)

Was passiert, wenn irgendwo mal 230V auf den I2C Bus kommen? Ist dann 
alles futsch?

Autor: Hennessy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@lrlr

Hast wohl den Beitrag nicht ganz lesen mögen. CTRL+F ist Dein Freund und 
Helfer ...

Autor: Jürgen W. (juergenw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@ Sebastian:
>Wenn du das ganze auch
>noch alleine entworfen und eingebaut hast, dann glaube ich, habe ich ein
>Vorbild für mein geplantes Projekt. :-)

Platinen, Software wurde alles von mir entworfen. Stelle auch gerne die 
Schaltpläne / Layouts zur Verfügung. Sind aber teilweise schon ziemlich 
alt, da ich die ersten Busmodule bereits 1997 eingebaut habe (heute 
würden die Layouts anders aussehen). Und bis heute musste ich kein Modul 
wegen eines Defektes auswechseln.
Falls Du oder jemand anderes an einer Demoversion der Software 
interessiert ist, schreibt mir bitte ein Mail.

@ Maik:
>Das ist ein bekanntes Problem von Windows 98 und Konsorten, dass
>der System-Tick-Timer nach einer bestimmten Zeit überläuft und danach
>die seltsamsten Dinge passieren können.

Damit kein Missverständnis auftritt: Wenn der System-Tick-Timer nach ca. 
50 Tagen überläuft passiert überhaupt nichts. Nachdem Win98 ca. 9 Monate 
(ca.270 Tage) bei mir am Stück gelaufen ist, ist der System-Tick-Timer 
etliche Male übergelaufen. Das Problem mit den Abstürzen lag an der 
Delphi Multi-Media-Timer Komponente die ich eingesetzt hatte. Da hat 
auch WinXP nichts geändert welches ich mal für 30 Tage versucht hatte.

@ Karsten:
>Was passiert, wenn irgendwo mal 230V auf den I2C Bus kommen? Ist dann
>alles futsch?

Ich wüsste nicht wie 230 Volt auf den Bus kommen sollte. Das einzige 
Modul welches Verbindung zum 230V-Netz hat ist der Dimmer. Und dieser 
Teil ist durch Optokoppler getrennt und auch das Layout entsprechend 
gestaltet. Ansonsten hatte ich nur erwähnt, dass Lehrrohre mit 230Volt 
und Busleitung teilweise parallel verlaufen, welche aber wohl doch einen 
Abstand von ca. 2 cm aufweisen. Vielmehr hatte ich angenommen, dass es 
durch 230V Schaltvorgänge zu Busfehlern kommen könnte. Nachdem ich die 
ersten Module schon 1997 eingebaut habe und bis heute keine 
Fehlfunktionen aufgetreten sind, habe ich wohl den Beweis angetreten, 
dass auch ein I2C-Bus über lange Strecken und mit vielen Modulen 
einwandfrei funktioniert – auch wenn es mich manchmal selber wundert....

@ all:
Und im Anhang noch die alte „Zentrale“ mit dem 8085-Prozessor, die seit 
1997 im Einsatz ist und auch von mir komplett selber entwickelt und 
gebaut wurde. Inzwischen ist diese nur noch für meinen Musikturm da, bis 
ich wohl hoffentlich die nächsten Wochen dazu komme das PC-Programm 
dafür zu schreiben.

Autor: Hennessy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1997 und 8085 ist ja wohl eine Verzweiflungstat? Da gab es doch schon 
weitaus interessantere uC ...

Autor: Ralf G. (old-school) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Jürgen,

auch ich habe meine Hausbus-Steuerung über I2C realisiert ...

habe Testweise Kabelstrecken von über 200 Meter aufgebaut und es 
funktioniert mit 100 kHz.

Als Leitungstreiber habe ich den P82B96 verwendet mit einer Bus-Spannung 
von 12 Volt Schaltpegel ist U/2.

Ich verwende als Leitung 2 x 2 x 0.8 Telefonleitung:
Schirm + sw = ground
rot         = +12 Volt
weiss       = SCL (12V-Pegel)
gelb        = SDA (12V-Pegel)


Um die gesamt Kapazität des I2C-Bus so kein wie möglich zu halten,
verwende ich noch einen aktiven HUB im Hauptverteiler, von dort aus 
gehen die Bus-Zweige durch Haus.

Sollte ein Buszweig eine Störung erzeugen wird dieser Zweig durch den 
Hub vom Bus getrennt bis die Störung wieder behoben ist.

Da ich als Aktoren Standard I2C-Komponenten verwende , erfüllt der
Hub noch eine weitere Ausgabe, eine zusätzliche Adressierung.
Die Zweige können über eine zusätzliche Adresse selektiert werden.

Es ist so möglich einige hundert gleicher Bausteine zu verwenden.

mehr unter www.greinert-dud.de

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.