Heizung automatisiert. Mit Home Assistant und MAX!

MAX! Starterkit bei Amazon

 Kurz vor der kalten Jahreszeit, bevor die Heizungen wieder auf Hochtouren laufen habe ich meinem Hausautomatisierungs-System eine steuerbare Heizung verpasst. Das MAX! System von eQ-3 besteht aus meheren Komponenten: Dem Thermostat an der Heizung, einem Sensor, der den Fensterzustand (offen, geschlossen) erkennt und ein Thermostat an der Wand, das die Temperatur anzeigt. Pro Zimmer können diese Geräte miteinander kommunizieren und autark arbeiten. Mit Hilfe des MAX! Cube LAN Gateways können mehrere dieser Gruppen miteinander agieren. Für die Wohnung habe ich also die drei meist genuzten Heizkörper und alle Fenster mit Thermostaten und Sensoren ausgestattet. Das Wohnzimmer hat noch ein Wandthermostat bekommen. Im Bad habe ich ebenfalls ein Thermostat an der Heizung, ein Sensor am Fenster und eine Anzeige an der Wand. Beide Gruppen sind mit dem MAX! Cube verbunden. Home Assistant ist ebenfalls mit dem MAX! Cube verbunden und kann so die Temperaturen der Sensoren auslesen und schreiben.

Fenster Sensoren für MAX! bei Amazon


Jetzt fehlt nur noch die Einbindung in die Automatisierung der Wohnung. Home Assistant bringt eine Schnittstelle für MAX! mit. Daher muss in der configuration.yaml nur noch die IP vom MAX! Cube eintragen. Die bezieht der Cube vom DHCP Server über die Ethernet Schnittstelle.

maxcube:
host: 192.168.0.10

Sobald Home Assistant verbunden ist, stehen die Werte als Devices zur Verfügung. Die Fenstersensoren sind als binäre Schaltsensoren, die Thermostate als Thermostat mit Temperaturkurve und verschiedenen Einstellmöglichkeiten abgebildet.
Einige der MAX! Sensoren in der Übersicht
Für die Zukunft fehlen hier noch die ganzen Automatisierungen. Diese sind im Moment über den MAX! Cube gesteuert, sollen aber schlussendlich über Home Assistant laufen.

Nokia 3210 Retro Fit Board Teil 6

Es geht voran mit dem Projekt. Nachdem ich den Audio Teil der Schaltung durch ein paar einfacher lötbare Teile getauscht und das Layout angepasst hatte, konnte ich mit den Feinheiten beginnen. Dazu gehören alle DRC Fehler zu betrachten. Jeder dieser Fehler könnte im späteren Produkt also der Leiterplatte zu Kurzschlüssen oder anderen Problemen führen. Nachdem in einem weiteren Review das Design vollständig überprüft ist, kann ich die Leiterplatte bestellen. Es gibt eine vielfältige Auswahl an PCB Herstellern. Viele dieser Hersteller sind aus dem Asiatischen Gebiet und können Leiterplatten zu unglaublich günstigen Preisen zu erstaunlicher Qualität herstellen. Bei einer 6-lagigen Platte ist das allerdings ein wenig anders. Hier muss ein wenig mehr Aufwand getrieben werden um die Leiterplatte zu erzeugen. Dadurch treten auch bei den Asiatischen Herstellern Kosten auf, die an den Kunden weitergegeben werden. Es ist also nicht ungewöhnlich Angebote zu bekommen, die im Bereich der europäischen Konkurrenten liegen.

Hersteller Eurocircuits multicb EasyEDA Smart Prototyping PCBJOINT
Anzahl 5 5 5 5 5
Stückpreis 54,88 38,78 25,81 48,30 50,92
Gesamtpreis 274,41 193,90 129,07 241,52 254,61
Lieferzeit 7 6 14 16 14
Porto 0 20 19,82 19,34 20,69
Summe 274,41 213,90 148,89 260,86 275,30
Anzahl 10 10 10 10 10
Stückpreis 35,38 26,26 13,44 24,76 26,93
Gesamtpreis 353,79 262,60 134,44 247,60 269,30
Lieferzeit 7 6 14 16 14
Porto 0 20 19,82 19,34 20,69
Summe 353,79 282,60 154,26 266,94 289,99

Wie es im Moment aussieht wir des wohl entweder multicb als europäischer Hersteller, oder eben EasyEDA also asiatischer Anbieter.

Das Design sieht im Moment so aus wie oben gezeigt. Für die Fertigung der Leiterplatte muss an den von KiCad erzeugten Gerber Daten allerdings eine Kleinigkeit geändert werden. KiCad bietet nicht die Möglichkeit die Restringe der Vias auf den einzelnen Lagen gesondert zu bearbeiten. In diesem Design musste das Pad des Controllers an Masse angebunden werden, einerseits um einen guten elektrischen Anschluss an die Masseplane zu bekommen, andererseits um Temperatur an das Kupfer der Leiterplatte abgeben zu können. Das Problem dabei ist leider, dass das Pad direkt hinter einer Kontaktfläche für die Knackfrösche der Tastatur liegt. Also müssen wir in dem Isolationsbereich der Kontaktfläche Vias bohren. Dabei bleiben aber auf der Oberseite nur ein sehr kleiner Bereich zwischen Kontaktring und Via übrig.

Wie man sieht ist im linken Bild die Wahrscheinlichkeit eines Kurzschlusses zwischen den Kontaktflächen und der Via sehr hoch. Der Kupferring der Via ist aber für diese Schaltung auf der Top Seite nicht wichtig. Also können wir das überflüssige Kupfer entfernen. Zur Sicherheit machen wir dann noch einen Tropfen Beschriftungslack drauf und gut ist. Das geht mit GerbV ganz einfach.

KiCad improved via management

Today I am putting out the first version of my KiCad via improvements. I created this during routing of my Nokia Retro Fit project. The board I wanted to create has this layer stack:

As you can see I want to be able to create micro vias on the layers 1,2,3 and 6,7,8. Using even the nightly builds of KiCad only allows you to place micro vias on the top or bottom to the adjacent layer below. so from 1 to  2 and 7 to 8. This where my additions come into to play.

I enhanced the user vias diameter and drill part of the Design Rules dialog. It now comes with more options.

  • Via Type (Through, Blind/Burried, Micro)
  • Start Layer
  • End Layer

The via class has those additional values as well.

Placing a micro vias during layout does not yet work as intended, but I am working on it. You can change it after placement nonetheless. So placing vias is not yet as comfortable as I would like it to be.
Editing a via after placing now gives you this dialog:

It gives you a list of all the vias created and you can double click to change the values below. It does not let you enter values that are not listed in the user via list. But you can select the „Add user via“ checkbox to add your desired values to the list of user vias.

With this modifications to the KiCad source code I think I should be able to finish routing my DDR3 signals.

The issue with measuring the tracks still is on my list of things to do. Placing micro vias in a sensible way was more important to achieve though.

To try out the changes for yourself you can find the source code here

KiCad Via Eigenschaften Dialog

Ich habe meine erste Änderung im KiCad Quelltext als Patch in die Mailingliste gegeben. Diese Änderung ermöglicht es den Via Eigenschaften Dialog dazu zu verwenden, den Via Typ, Start- und Endlage, sowie die Bohr- und Kupferdurchmesser festzulegen.

Ändern des Via Typs

Ist der Netzklassen Durchmesser der Via kleiner als der angegebene Wert, wird eine Meldung angezeigt, mit der die Größe der Netzklasse übernommen werden kann. Das ist hilfreich, wenn eine Micro-Via zur Through-Hole werden soll, denn die ist meistens größer als die Micro-Via.


Der Patch befindet sich gerade in der Diskussion und wird eventuell in leicht abgeänderter Form in der nächsten Zeit integriert.

Wer den Dialog selbst mal ausprobieren möchte, findet das Projekt hier.

KiCad Net Class Constraint Management

Ich bin gerade dabei ein relativ komplexes Design in KiCad zu entwicklen. Es handelt sich dabei um ein i.MX7 Prozessor mit DDR3 Anbindung. Für DDR3 sind einige Designrichtlinien einzuhalten. Diese sind neben der Leitungsimpedanz (50 Ω Transmission Line und 100 Ω Differantial Line) auch die Länge der einzelnen Signalgruppen und des Clock Signals. Darüber ein Überblick zu behalten ist nicht leicht. KiCad hat keine Funktion einfach diese Constraints zu checken und zu verwalten. Zum Glück handelt es sich um ein Open Source Projekt und daher habe ich den Versuch gestartet, pcbnew mit den nötigen Funktionen auszustatten. Ziel ist es einen angenehmen Routing-Vorgang solcher komplexen Schaltungen zu erhalten. Dazu gehören neben der Verwaltung der Constraints auch noch andere Features:

  • Live Tracking der Leitungslängen
  • Reporting der Constraints
  • DRC der Constraints
Der erste Schritt wird sein die Constraint Daten in die Netzklasse mit einzubinden. Dazu habe ich den Design Rule Dialog erweitert. Er hat 8 neue Spalten erhalten.
  1. Max Vias
  2. Topology
  3. Min Length
  4. Max Length
  5. Max Skew
  6. Stub Length
  7. Type
  8. Layer

Max Vias

Ein hochfrequentes Signal wird an jedem Materialeigenschaften-Übergang reflektiert und verliert Energie. Das können beispielsweise Änderungen des Leitungsquerschnitts, Bezugsmasse, Leitungsmaterials, oder anderer Umgebungsparameter sein. Eine Signalübergabe über ein Via in eine andere Lage ist genau so ein Übergang und führt zu Signalfehlern. Daher gibt es für manche Signale eine maximale Anzahl von Vias.

Topology

Die Routing Topologie ist die Art und Weise, wie das Signal von der Quelle zu einer Senke, oder mehrerer Senken übertragen wird. Es werden folgende Topologien erkannt:

  • STAR
    Das Signal geht von der Quelle sternförmig zu jeder Senke mit einer eigenen Leitung.
  • T
    Das Signal teilt sich (auch mehrmals) in jeweils zwei gleichlange Äste auf.
  • FLYBY
    Hier wird das Signal von der Quelle aus an jeder Senke vorbei geführt, ohne sich aufzuteilen. Alle Zwischenstücke sind gleichlang ausgelegt.
  • HORIZONTAL
    Alle Signale sollen horizontal geführt werden.
  • VERTICAL
    Alle Signale sollen vertikal geführt werden.
  • SIMPLE_DAISY_CHAIN
    Das Signal geht von der Quelle zur ersten Senke, von dort zur zweiten und so weiter. Vergleichbar mit der FLYBY Topologie.
  • MIDDRIVEN_DAISY_CHAIN
    Bei dieser Topologie geht das Signal von der Quelle nach beiden Seiten an mindestens zwei Senken. Dies ist eine Kombination aus eine Ebene T und FLYBY.
  • MULTIPOINT_TOPOLOGY
    Das Signal wird an vielen Stellen verbunden. (Niederfrequente Signale oder Spannung/Ground)

Min/Max Length

Signale, die laufzeitbegrenzt sind, oder in Relation mit anderen Signalen stehen, müssen eine gewisse Länge einhalten. Diese beiden Werte geben das Längenfenster an, in dem sich alle Signale der Netzklasse befinden dürfen.

Max Skew

Ähnlich wie die Min/Max Länge ist der Skew eine Toleranzangabe für die Länge aller Signale der Netzklasse. Beispielsweise muss ein Bus mit 8 Signalen maximal nur 60mm lang sein. Die 8 Signale sind aber auf einem Skew von 2mm begrenzt. So kann die Gruppe an sich in der Länge variieren, die einzelnen Signale sind aber strikter reglementiert.

Stub Length

Ein Stub ist eine Abzweigung des Signals. Am Ende der Leitung wird das Signal reflektiert und zurück geworfen. Das kann bei zu langen Stubs zu Problemen führen. Daher werden für diese Fälle maximale Stublängen angegeben.

Type

Hier kann zwischen den Leitungstypen Signal, Power oder Mixed gewählt werden. Diese werden an den globalen Layer Einstellungen gemessen.

Layer

Der Type Wert kann manuell überschrieben werden um die Lage in der die Leitung geführt werden darf weiter zu beschränken, oder weiter aufzulösen. Manchmal dürfen Signale nicht auf die andere Seite der Leiterkarte übertragen werden. Das kann mit dieser Einstellung konfiguriert werden.

Der aktuelle Stand ist, dass die Werte in die Tabelle eingetragen werden und mit dem Projekt abgespeichert werden können. Ich erweitere gerade die Tabelle dahin, dass die Werte schöner angezeigt werden und es für die Topologie, und Type Felder eine Dropdown-Liste gibt. Das Layer Feld soll eine Auswahlliste bekommen, in der die erlaubten Layer markiert werden können.

Live Tracking der Leitungslängen

Ein weiteres großen Feature soll das messen der Leitungslänge in Echtzeit sein. Dazu gehören mehrere Elemente. Einerseits soll auf der rechten Seite des Fensters zwischen Zeichenfeld und Toolbar eine Liste mit den zu messenden Leitungen eingeblendet werden können. Das soll ebenso wie der Layer-Dialog entweder fest am Fenster verankert, oder frei beweglich im Fenster verschoben werden können.
Andererseits soll ein weiteres Element eine Statusbar-Anzeige sein, die in Echtzeit zeigt, ob die Leitung zu lang oder zu kurz ist. Idealerweise kann hier schon eine Prognose eingebaut werden, die versucht zu ermitteln, ob mit der Länge das Ziel überhaupt erreicht werden kann. Hier werde ich am Anfang auf die „Luftlinie“ zurückgreifen und den direkten Weg als Grenze nehmen.

Reporting der Constraints

Dieses Feature ist relativ einfach zu realisieren. Alle Netze mit Constraints in der Netzklasse werden in einem Report ausgegeben und stehen als Textdatei zur Verfügung.

DRC der Constraints

Der Design Rule Check soll um die Constraints erweitert werden und mit den Fehlerklassen Report, Warning, Error über die Constraints berichten.

KiCad auf Ubuntu selbst kompilieren

Ich möchte einige Änderungen in KiCad einfügen und dazu will ich mir die aktuellste Version aus dem Sourcecode übersetzen. Das ganze werde ich mit Ubuntu 17.4 durchführen. Dazu benötigen wir aber erst mal ein paar zusätzliche Funktionen

sudo apt install build-essential libwxbase3.0-dev libwxgtk3.0-dev libglew-dev libglm-dev libcurl4-gnutls-dev libcairo2-dev libboost-all-dev swig python-wxgtk3.0-dev doxygen libssl-dev git cmake

Mit all diesen Bibliotheken können wir nun anfangen den Code herunterzuladen, für unser System zu konfigurieren und zu übersetzen. Dazu laden wir den aktuellsten Code vom Git Repository herunter:

git clone -b master https://git.launchpad.net/kicad

Danach legen wir einen Ordner an in dem wir die Übersetzung vornehmen möchten und konfigurieren unsere Umgebung:

cd kicad
mkdir -p build/debug
cd build/debug
cmake -DCMAKE_BUILD_TYPE=Debug \
 -DKICAD_SCRIPTING=ON \
 -DKICAD_SCRIPTING_MODULES=ON \
 -DKICAD_SCRIPTING_WXPYTHON=ON ../..

Wenn das dann durchgelaufen ist, können wir die eigentliche Übersetzung starten:

make

Der Prozess kann je nach Systemleistung einige Zeit dauern.  Bei mir waren es ca. 30 Minuten. Nach Fertigstellung der Programme stehen sie in dem aktuellen Ordner zur Verfügung. Installieren kann man dann KiCad mit dem Befehl

sudo make install

Das nächste mal schauen wir dann, wie wir den Quellcode bearbeiten können um ein weiteres Menüfenster hinzuzufügen.