Donnerstag, 16. Februar 2017

Wifi led Fluter mit MQTT, ESP8266 und Arduino IDE

im Winter ist es bei uns dunkel ­čśĹ:


Abhilfe schafft ein neuer Led Fluter von 100W aus China. dieser bekam noch einen Esp8266, seit einiger Zeit gibt es fertige Relay Boards f├╝r wenige Euro.


programmiert wurde der ESP mit der Arduino IDE und fast dem gleichen Sketch wie die anderen SmartHome Arduinos die schon ihre Arbeit seit Jahren tun.

auf Bewegungsmelder haben wir bewusst verzichtet, die Praxis zeigt, sie gehen kaputt, sie gehen am Tag an, oder reagieren schon auf Katzen - alles Mist.
also muss das Licht per Hand angeschalten werden.
aber Handy anschalten - warten bis es sich per Wlan verbunden hat - App ├Âffnen - Licht anschalten, dass ist auch nicht smart ­čśé

hier kommt der Amazon Dash Button ins Spiel


f├╝r 5€ bekommt man dann einen Wifi Schalter

hier der ganze Aufbau:



­čśÇ

Donnerstag, 9. Februar 2017

Arduino Speicherproblem, kein RAM mehr, out of free RAM

bei gro├čen Projekten geht der Ram eines Arduino uno schneller zu neige als man denkt.
unsere Frischwasserstation nutzt einen Arduino und dort gab es mitlerweile Probleme.
der Funktionsumfang ist seit dem Bau erheblich gewachsen:

Frischwasserstation Anzeige im smarthome fhem
als es dann beim kompillieren die Warnung f├╝r wenig freien Ram gab, folgten auch die ersten Abst├╝rze:



das eigentliche Problem sind nicht etwa Variablen, sondern die vielen Zeichenketten, die ├╝ber die serielle Schnittstelle und ├╝ber MQTT zum smarthome ├╝bertragen werden.
folgendes Beispiel soll dies verdeutlichen:


dieser Sketch macht nichts anderes als etwas Text auf der Schnittstelle auszugeben. der avr l├Ądt aber die Literale beim Start in den RAM, somit sind 21% einfach weg. um dieses Problem zu beheben kann man sich des F() Makros behelfen:


nun werden die Literale nicht mehr in den RAM geladen, leider funktioniert das nur bei den print Befehlen.

andere Funktionen die eine Zeichenkette (char) erwarten, wollen sie auch im RAM liegen haben.

dazu kann man sich ein eigenes Makro schreiben:

char StringBuffer[80];
#define P(str) strncpy_P(StringBuffer, PSTR(str), sizeof(StringBuffer))

ab jetzt k├Ânnen Literale auch an Funktionen ├╝bergeben werden die einen char im RAM erwarten, da er ja vorher ins RAM kopiert worden ist. die gr├Â├če des StringBuffer sollte man etwas gr├Â├čer w├Ąhlen als die l├Ąngste Zeichenkette [80].

ein Beispiel s├Ąhe dann so aus:
client.publish(P("/Frischwasserstation1/VorlaufHeizung"), [char] );


in diesem Sinne frohes programmieren.



Mittwoch, 16. November 2016

Frischwasserstation Eigenbau

Frischwasserstationen sind teuer und ein vierstelliger Preis ist in meinen Augen nicht gerechtfertigt. also selber bauen:

L├Âtfittinge, Plattenw├Ąrmetauscher, Pumpenverschraubung

der Plattenw├Ąrmetauscher und das Unterteil einer  Wasseruhr

als Str├Âmungsschalter  oder genauer gesagt als Durchflussmesser  kommt eine 1,5m2 3/4" Wasseruhr zum Einsatz. Das Z├Ąhlwerk hat keine direkte Verbindung mit dem Unterteil aus Messing, sondern wird ├╝ber eine Magnetkupplung mitgenommen.  Diesen Umstand nutze ich und z├Ąhle mit einem Hall Sensor die Umdrehungen. genauer gesagt werden die Zeiten zwischen einem Nord und S├╝dpol gemessen, also die Zeit zwischen zwei Flankenwechsel des Hall Gebers.

sowohl als Ladepumpe, als auch als Zirkulationspumpe kommen Laing Pumpen zum Einsatz. Sie sind mit einem Kugelmotor und Keramiklager aufgebaut. der einzige Nachteil ist der hohe Einschaltstrom von 30-40 A der durch den riesigen Elko des Zwischenkreises zustande kommt, evt. f├╝hrt daher der Lichtbogen beim Anschalten zu erh├Âhtem Verschlei├č an den Relais.

soweit so gut, hier der Prototyp aufgebaut auf einer Seekieferplatte

Frischwasserstation der erste Prototyp

Anschluss der onewire Dallas DS18B20 Temperatursensoren

da durch die vorgegebene Einbaurichtung der Ladepumpe, der Leistungsregler auf der Plattenseite liegt, habe ich den Motor vom Gussk├Ârper der Pumpe abgeschraubt.

Keramiklager der Laingpumpe

der Anker des Kugelmotors

nach einer Reinigung habe ich den Motor um 180° verdreht wieder montiert, nun zeigt der Anschluss nach unten und das Poti nach oben :-)

gesteuert wird die Anlage von einem Arduino Uno Klon aus China. er hat noch ein W5100 Netzwerkshild bekommen. dar├╝ber versendet er MQTT Nachrichten an unseren Smarthome Raspi. ├╝ber OpenHAB 2 k├Ânnen dann alle Temperaturen und Fehler im Webinterface oder in der nativen Android App angezeigt werden.

so nun will ich euch noch zeigen, wie die Frischwasserstation montiert ist.

der erste Probelauf der Frischwasserstation

ich muss ja erlich sagen, ganz sicher war ich nicht ob die Station zuverl├Ąssig funktioniert, also habe ich die Leitungen in gro├čz├╝gigen B├Âgen gelegt, so h├Ątte ich sie im Notfall wieder an den Brauchwasserspeicher anschlie├čen k├Ânnen.
die Sorge war unbegr├╝ndet, alles funktioniert wie ausgedacht. einen bug hatte ich noch drin, so ist die erste Nacht alle 10min die Zirkulation gelaufen. jetzt wird die Zirkulation aber ordentlich ├╝ber den R├╝cklauf angepasst.