Heizungssteuerung (Ein/Aus) mittels SMS

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Ausgangslage:
    Stadtwohnung, die ein bis zwei Mal in der Woche benutzt wird.
    Beheizung durch Elektro-Wandpaneele, Warmwasserbereitung durch Elektro-Durchlauferhitzer. Wegen des Stromhungers des Durchlauferhitzers gibt es einen Lastabwurfschalter, der die Heizung abschaltet, wenn man Warmwasser entnimmt.

    Derzeit wird die ein Paneel über eine GSM-Schaltsteckdose geschaltet. (Vor vielen Jahren gekauft, um einen PC aus der Ferne zu starten und mit Teamviewer darauf zuzugreifen)
    Problem: Die Schaltsteckdose schickt bei Stromausfall eine SMS und nach Wiederkehren des Stroms zwei weitere SMS. Die Stromausfallsmeldung kann man deaktivieren, die Wiederkehrmeldung nicht. Also ständig SMS, wenn man in der Wohnung ist. Nervt!
    Über die SMS-Steckdose kann die Temperatur abgefragt werden.
    An der SMS-Steckdose kann auch direkt geschaltet werden.

    Ziel:
    Einzeln schalten von zwei, eventuell drei Paneelen.
    Abfragen des Schaltzustandes der Paneele.
    Abfragen der Temperatur in den einzelnen Räumen.
    Abfrage der Temperatur und des Schaltzustandes der Heizung sowie Ein- und Ausschaltbefehle über SMS. Grund ist, dass meine Freundin kein Smart-Phone will, der Punkt ist nicht verhandelbar :)

    Vorarbeiten:
    Informationen aus diversen Internetseiten und aus dem Buch „Hausautomation mit Raspberry PI von E.F. Engelhardt – Franzis Verlag.

    Einkauf:
    Doppel-Relais-Modul für Ardurino
    (5V-Relais, sollte meiner Meinung nach auch mit Rasperry funtionieren) Link

    Kapazitiver Berührungssensor

    Zum vor Ort Ein- und Ausschalten der Heizung. Link
    Diese Bauteile könnten 1-Wire-Geräte sein – werde es nach der Lieferung sehen (Postweg für obiges ca. 30 Tage).

    Weiteres Zubehör
    (LEDs, Kabel, Dosen, 1-Wire-Temperatursensoren etc.) wird bei Bedarf besorgt.

    Zum Projekt
    Temperaturmessung über 1-wire-Sensoren sollte kein Problem darstellen.
    Abfrage der Temperatur über SMS.

    Ein- und Ausschalten der Relais sollte kein Problem sein. Ich frage mich, ob Relais in der Form von Stromstoßschaltern nicht die bessere Alternative sind, weil die Spule nicht gehalten werden muss und daher weder die Spule noch (und vor allem) der R-PI belastet wird.

    Abfragen des Schaltzustandes:
    Deshalb habe ich Doppel-Relaismodule genommen. Über das 2. Relais kann ich zwischen GPIO-Spannung und GPIO-Eingang schalten und am Eingang abfragen, ob Spannung da ist und damit den Ein- der Ausschalt-Zustand erkennen.

    Lokales Ein- und Ausschalten:
    Über die Berührungssensoren möchte ich vor Ort ein- und ausschalten können. Als ich mir jetzt die Beschreibung noch einmal angeschaut habe, habe ich festgestellt, dass diese nach Aktivierung bis zur nächsten Berührung, maximal aber 12 Sekunden auf „output-high“ bleiben. Das sollte aber programmtechnisch kein Problem sein.
    Meine Vorstellung „quick and dirty“:
    Deamon, der darauf wartet, dass der Touch-Sensor auf high geht, das Relais auf „ein“ schaltet und dann so lange in einer Schleife läuft, bis der Touch-Sensor wieder auf low geht. Nach dem nächsten high wird das Relais ausgeschaltet.

    Schaltzustandsanzeige: über eine LED, die parallel zu den Relaisspulen geschaltet ist. Das wird wohl der einfachste Teil sein :)

    Raumthermostat:

    An den Paneelen kann ich die gewünschte Temperatur einstellen. Ich überlege, diese auf Maximum zu stellen und die Heizung über die Temperatursensonren zu steuern.

    SMS-Kommunikation:
    Engelhardt beschreibt in dem Buch die Verwendung von Gnokii in Verbindung mit einem Mobiltelefon, allerdings über eine Blue-Tooth-Verbindung. Ich selbst habe ein altes Nokia liegen und ein Nokia Datenkabel auf eine serielle Schnittstelle.
    Mit Gnokii möchte ich mich vorerst beschäftigen, da mir die wesentlichen Bauteile noch fehlen.
    Wenn ich dem R-PI eine serielle Schnittstelle umhänge, sollte das funktionieren. Alternativ:

    Frage: Gibt es für R-PI einen Adapter USB-seriell und läuft dieser auch problemlos?
    Frage: Hat jemand Erfahrung mit Gnokii? Funktioniert es? Gibt es irgendwelche Probleme?


    So das wärs fürs Erste, habe ich mir da Fallen gestellt?

    Grüße
    Hannes

    Edit: Formatierung korrigiert

    Einmal editiert, zuletzt von haidi (24. Januar 2015 um 02:15)

  • Danke für die Antwort.

    Inzwischen habe ich beim Stöbern im Forum herausgefunden, dass man die SMS-Geschichte auch mit einem UMTS-Stick lösen kann, was mir sympatischer ist als die mit einem Handy (Je weniger Geräte, desto besser).

  • Moin,

    der Einsatz eines UMTS-Sticks wäre/ist auch meine Empfehlung.
    Ich nutze SMS Tools seit Jahren.
    Pi-Benachrichtigungen erhalte ich per email und kann den Pi per VPN vollständig aus der Ferne administrieren und per SMS (und email) steuern.
    Zudem meldet der Pi alle ermittelten Daten an GoogleDocs und ich kann das Diagramm, plattformunabhängig, abrufen. Erst wenn vorher definierte Schwellenwerte unter.- oder überschritten werden erfolgt eine Warnung per SMS und Mail.

    Sofern eine Schaltung zur Umstellung (manuel/bewohnt und Steuerung durch den Pi) angedacht ist bietet sich ein PIR-Bewegungsmelder an.
    Vorteil: wird das Umschalten auf Pi-Steuerung bei längerer Abwesenheit vergessen, aktiviert sich die Steuerung durch den Pi nach einer voreingestellten Zeit ohne Bewegungsevent.

    Wenn der Strombedarf grösser 10 A je Heiz-Panel ist kannst Du das erwähnte Relais nicht solo nutzen, dann musst Du ein Doppelrelais koppeln oder ein Relais verbauen, welches den Anforderungen entspricht.
    Wenn z. B. je Panel 220 Volt und max. 2000 Watt verbrät kannst Du dieses mit einem Relais(stufe) versorgen.
    Rechnung Watt max. : Volt = A

    Zu: Abfragen des Schaltzustandes:
    Das wird so wie angedacht nix, der Schaltzustand Relaisstufe 1 kann nicht über die Relaisstufe 2 ermittelt werden.

    Zu: Stromstoßschaltern
    Ist nicht notwendig, die Relaisspule verkraftet das, auch auf Dauer.

    Bye

    Jürgen

  • Danke für deine Antwort.

    Du hast mir wieder eine Anregung gegeben. Ich werde nichts mit einem Bewegungsmelder machen, aber nach jeweils 12 Stunden ununterbrochenem Ein eine SMS versenden.
    Auf die Leistung der Relais habe ich geachtet, die sind kein Problem, die Paneele haben unter 1000 Watt, die Relais schaffen 2000.

    Schaltzustand:
    Warum soll das nichts werden? Beide Relais schalten doch gleichzeitig, d.h. wenn angezogen, dann sind beide angezogen und ich kann über das 2. Relais einen Stromkreis am GPIO schließen und abfragen - oder habe ich da einen Denkfehler?

    Allerdings bin ich mit den Relais unsicher, die brauchen 5 V, verkraften das die GPIOs oder liefern die max. 3.3 V?


  • Beide Relais schalten doch gleichzeitig, ...
    Allerdings bin ich mit den Relais unsicher, die brauchen 5 V, ...

    Moin,

    nein, diese arbeiten unabhängig voneinander.

    Das Relais kann trotz 5 Volt verwendet werden.

    Sofern Du viele Relais gleichzeitig schaltest ist es ratsam die Ansteuerung der Spulen über eine eigenständige Stromversorgung zu speisen.

    Ansteuerung Optokoppler:
    Relaispinleiste rechts:
    IN1 = Schaltkreis Optokoppler Relais 1 an Pi GPIO
    IN2 = Schaltkreis Optokoppler Relais 2 an Pi GPIO
    VCC an Pi 5 Volt-PIN
    GND an 0V/Masse-Pi

    Ansteuerung Relaisspule:
    Relaissteckleiste links: vermutlich (dieses Relais hatte ich noch nicht in den Händen)
    gegebenfalls durch externe Stromversorgung
    ? ISOVCC = 5 Volt
    ? ISOGND = Masse

    Beispiel unter Verwendung wiringPi:
    Pi-PIN 11 = wiringPi GPIO 0 = BCM GPIO 17
    Da der Pi im Register aber als Eingang (IN) definiert ist muss dieser voher auf mode out gesetzt werden.
    Hier bietet sich z. B. conjob (crontab -e) an mit dem Eintrag an:
    wirinPi:

    Code
    @reboot   /usr/local/bin/gpio write 0 1 && /usr/local/bin/gpio mode 0 out


    oder wenn man die BCM-GPIO-Kennung verwenden möchte:

    Code
    @reboot   /usr/local/bin/gpio -g write 17 1 && /usr/local/bin/gpio export 17 out

    Nach einem Reboot hat GPIO 0 dann den Zustand:
    Mode OUT und V 1
    Der Relaisschaltzustand kann wie folgt verändert werden:
    Relais zieht an:

    Code
    gpio write 0 0


    und zurück:

    Code
    gpio write 0 1


    Bye

    Jürgen

  • Danek Jürgen,

    Ja du hast Recht, beide Relais sind getrennt schaltbar, die Eingänge sollte man aber Brücken können - schlimmstenfalls schalte ich Relais 1, das meldet mir sowohl den Status EIN an den Raspberry zurück als es auch das Relais 2 schaltet, dass dann die 230 V schaltet - oder ich kauf mir andere Relais.

    Ursprünglich habe ich nach Relais mit Kontrollausgang gesucht - die sollen über einen Optokoppler einen Ausgang schalten, den man abfragen kann.


  • ... Relais 1, das meldet mir sowohl den Status EIN an den Raspberry zurück als es auch das Relais 2 schaltet, das dann die 230 V schaltet....

    Hmmm, auch wenn Du Relais 1 schaltest und über die Relais-Klemmleiste (Umschalter) den Zustand über einen weiteren GPIO auswertest und hierüber Relais 2 schaltest, hast Du noch immer kein feedback ob über die Klemmleiste des 2. Relais Last/220 Volt geschaltet wird!
    Hierfür benötigst Du eine weitere, eigenständige Schaltung z. B. Relais mit 220 Volt Spulenspannung.
    Du hast ein 5 Volt (Spulenspannung) Doppelrelais, welches eine Last von bis zu 250 Volt und max 10 A an den Klemmen (je Relais) schaltet.

    Bye

    Jürgen

  • Danke!

    Mir genügt es, wenn ich über SMS abfragen kann, ob die Spule des "Lastrelais" bestromt wird, wenn das Relais dann durch einen technischen Defekt nicht schaltet oder der Stromkreis aus welchen Gründen auch immer abgeschaltet ist und die Heizung dann trotzdem nicht arbeitet, habe ich Pech gehabt, ist auch nicht so die Welt.

    Grüße
    Hannes

  • Zwischenstand (ja, es geht langsam, aber ich bin Neuling in der bash)

    Die Anbindung an das Mobilfunknetz erfolgt mit einem Huawei E1552
    Übernehmen SMS funtkioniert (Hier fehlt noch der Parameter, dass die SMS bei der Übernahme gelöscht wird,
    Überprüfung der SMS auf Fehler
    Antwort-SMS auf fehlerhafte SMS

    Bei der Fehlerbehandlung gefällt mir der Code nicht besonders, aber er funktionert. Für VErbesserungen bin ich immer offen.

    Jetzt gehts daran, den Raspberry das machen zu lassen, was ihm die SMS anschaffen.

  • Moin,

    das WE war feucht, fröhlich, daher überfordert mich dein script derzeit :stumm::stumm:

    Gib doch bitte einmal den genauen Inhalt der SMS an, die Du an den Pi sendest.

    Wenn ich das korrekt rauslese beinhaltet diese SMS die Syntax die Heizkörper/je Raum ein/aus-zuschalten.
    Es sollte aber ausreichend sein nur die Solltemp. zu senden, denn der Pi übernimmt ja die Steuerung der Heizung z. B. 20 18 21 für Zimmer1=20 Grad, Zimmer2=18 Grad ...
    Der Pi wertet die IST-Daten der Temp.-Sensoren aus und vergleicht diese mit der SOLL-Temp. und schaltet den Heizkörper an oder aus, bis die Soll-Temp. erreicht oder über.-/unterschritten wird.
    Zudem kann auch die Schaltdauer per SMS übermittelt werden z. B. 20 18 21 3T
    3T = Sollwert für die Dauer von 3 Tagen halten, dann wieder in die "Abwesend"-Regelung zurückfallen.
    Gegebenenfalls auch eine Nachtabsenkung für die Dauer der "Anwesend"-Steuerung mit einplanen und einen manuellen override switch, um den Pi aussen vor zu lassen und die Heizung händisch bedienen zu können.

    Bye

    Jürgen

  • Hallo Jürgen,

    der Inhalt der SMS ist im Script im 2. Absatz

    Nachdem wir ca. ein Mal pro Woche ein bis 2 Nächte in der Wohnung sind, ist ein Durchheizen nicht erwünscht. Zur Zeit hat es bei ca. 0° Außentemperatur 17°.

    Ich möchte die Sachen in folgender Reihenfolge abarbeiten:

    1) ERst einmal möchte ich ein- und ausschalten und die Raumtemperatur abfragen können.
    Damit geht das Ding erst einmal in den Betrieb - falls ich es vor dem Sommer schaffe :)

    2) Ergänzen um manuelles Ein- und Ausschalten vor Ort. (Sensortaster habe ich mir schon besorgt,)

    3) Thermostatfunktion und Nachtabsenkung

    Was mir nicht gefällt ist die Fehlerabrage mit den vielen IFs

    Dir CASE-Routine ist hier so, dass ich den Ausdruck, den ich abfrage, schon in der case-Zeile festlegen muss.
    Die mir bislang bekannten CASE-Routinen sind da etwas anders aufgebaut:

    Beispiel
    do case
    case a = 20
    do irgendwas
    case b = a
    do was anderes
    case datum = heute()
    do wieder was anderes
    endcase

    wobei sie nur das erste zutreffende Ereignis abarbeitet und dann zu endcase springt. Gibt es ähnliches in der bash-Programmierung?

    Grüße
    Hannes

Jetzt mitmachen!

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