Heizungsfernsteuerung

Meine Heizung (und noch ein paar Dinge mehr) steuert ein openhab2. Man koennte nun meinen, das Thema Fernsteuerung ist damit erledigt. Aber halt, nicht so schnell, ich meine etwas anderes: mein Wohnzimmer grenzt auf der einen Seite an einen Balkon, mit schoen grosser Fensterfront, darunter der Heizkoerper. Das ist die gute Nachricht. Auf der anderen Seite oeffnet sich das Zimmer zu einer Diele, in welcher eine Treppe ins kuehle Obergeschoss fuehrt. Das ist die schlechte Nachricht, genau genommen eine Katastrophe: waehrend es auf der Couch direkt an der Heizung kuschelig warm ist, friert der, welcher mit dem Ruecken zur Diele sitzt.

Als Abhilfe fallen mir ohne viel Nachdenken gleich drei Loesungen ein:

  1. Feingefuehl gepaart mit Erfahrung: nach ein paar Jahren in der Wohnung wird man wohl ein sicheres Gefuehl dafuer entwickeln, auf welche Temperatur man die Heizung einstellen muss, um im ganzen Wohnzimmer eine behagliche Temperatur zu haben. Vielleicht noch unter Beachtung der Aussentemperatur. Im Prinzip kann man das dann auch in Code giessen. Ist sicher eine gangbare Loesung fuer jemanden mit Geduld und eben Feingefuehl. Faellt fuer mich also flach.
  2. Eine Art KI-Algorithmus, welcher die Temperatur regelmaessig reguliert, aus den Ergebnissen lernt, damit quasi eine Wissendatenbank aufbaut und damit regelt. Offenbar muss man fuer diese Loesung die Temperatur irgendwo im Uebergang zwischen Wohnzimmer und Diele messen. Und dann realisiert der Computer im Prinzip die Variante 1. Das waere mein Favorit, wenn da nicht meine pragmatische Faulheit waere.
  3. Wenn ich fuer Variante 2 eh schon einen weiteren Messpunkt habe, kann ich es mir auch einfach machen: der Messpunkt steuert einfach die Heizung. Wenn ich am Messpunkt 20 Grad einstelle, dreht openhab einfach die Heizung solange hoch, bis die 20 Grad erreicht sind. Und dann halt wieder runter auf 20 Grad. Das klingt doch gut: einfach und funktional.

Fuer die Realisierung braucht man also einen Heizungsthermostat, bei welchen openhab2 die Temperatur lesen und setzen kann. Dazu ein Thermometer, welches openhab2 auslesen kann. Ich habe mich bei letzteren fuer das “HomeMatic Funk-Wandthermostat, Aufputzmontage” entschieden. Das ist batteriegetrieben, kann also beliebig platziert werden, und hat einen Einstellknopf, man kann also auch manuell regeln. Damit es nicht zu einfach ist, haben wir noch eine Balkontuer – deren Oeffnung soll natuerlich die Heizung abschalten.

So, lange Vorrede, jetzt endlich mal etwas Substanz:

Wir brauchen einige Items:

  • Temperature_Wall_Wohnzimmer: die Ist-Temperatur des Wandthermostats,
  • Soll_Temperatur_Wall_Wohnzimmer: die Soll-Temperatur des Wandthormostats,
  • Soll_Temperatur_Wohnzimmer: die Soll-Temperatur des Heizungsthermostats
  • Fenster_Wohnzimmer: der Fensterkontakt an der Balkontuer

Und damit bauen wir uns einfach eine Regel:

var Number targetTemp =  18
rule "heizung aufdrehen falls zu kalt oder zudrehen falls zu warm"
when
  Item Temperature_Wall_Wohnzimmer received update
then
  val Number sollTemp = Soll_Temperatur_Wohnzimmer.state
  val Number istTemp = Temperature_Wall_Wohnzimmer.state

  // sometimes targetTemp is null if this rule gets called...
  if (targetTemp == null) return;

  // no adjustments during window open
  if (Fenster_Wohnzimmer.state == OPEN) return; 

  if (istTemp < targetTemp) {
    if (sollTemp < targetTemp) {
      sendCommand(Soll_Temperatur_Wohnzimmer, targetTemp)
    }
    else {
      if (sollTemp - targetTemp > 5) {
        /* diff to high, do nothing */ 
      }
      else {
        sendCommand(Soll_Temperatur_Wohnzimmer, sollTemp+1)
      }
    }
  }
  if (istTemp > targetTemp && istTemp - targetTemp > 0.5) {
    if (sollTemp > targetTemp) {
      logInfo("dyn wohnz", "set sollTemp runter")
      sendCommand(Soll_Temperatur_Wohnzimmer, targetTemp)
    }
  }
end

Dazu kommt dann noch eine Regel, mit welcher der Wandthermostat quasi die Heizung ueberstimmt:

rule "heizung wohnzimmer wall thermostat overrules"
when 
  Item Soll_Temperatur_Wall_Wohnzimmer received update
then
  targetTemp = Soll_Temperatur_Wall_Wohnzimmer.state
  if (Fenster_Wohnzimmer.state == CLOSED && targetTemp != Soll_Temperatur_Wohnzimmer.state) {
    sendCommand(Soll_Temperatur_Wohnzimmer, targetTemp)
  }
end

Ich habe dann noch ein paar Regeln, welche die Heizung ab- und anschalten, wenn die Balkontuer geoeffnet oder geschlossen wird, am Wochenende Morgens die Temperatur etwas hochdrehent und spaet abends auf jeden Fall runterdrehen.

Im Ergebnis sieht das dann so aus:

Man kann schoen sehen, wie die Heizung staendig nachregelt. Offenbar wurde abends dann die Temperatur runtergedreht und am spaeten Vormittag hat wohl jemand gelueftet.

Im Ergebnis hat schon lange niemand mehr im Wohnzimmer manuell an der Heizung rumgestellt. So wie es sein soll.

Ausgelesen: Die Diktatur der Dummen


Im Untertitel schreibt Frau Witzer passend dazu: “Wie unsere Gesellschaft verblödet, weil die Klügeren immer nachgeben”. Nur hat der Inhalt des Buches wenig bis gar nicht mit Titel und Untertitel zu tun. Anhand zahlreicher Beispiele bekommt der Leser vorgeführt, wie die Gesellschaft, der Staat und schlussendlich unser ganzes Leben mehr oder weniger subtil von Konzernen und Interessengruppen kontrolliert und gesteuert werden. Letztere stellen sich dabei ganz und gar nicht dumm an, was den Titel angeht, kann also Entwarnung gegeben werden: wir werden nicht von den Dummen regiert, sondern von einigen recht schlauen Leuten. Letztere manipulieren erstere nur, damit sich daran auch in Zukunft nichts ändern wird. Dass für die besonders doof, die nicht zu einer der beiden Gruppen gehören. An diese Leute richtet dann wohl auch das Buch.

Leider wird man als intelligenter Leser nicht viel Spass bei der Lektüre haben: der Sprachstil ist holperig, an vielen Stellen hätte ich mir mehr kritische Distanz gewünscht, während Frau Witzer ihren Emotionen freien Lauf lässt. All das tut sie aus ihrem aktuellen Status heraus, offenbar hat sie einiges erreicht im Leben und kann sich jetzt auch mal entspannt zurücklehnen. Den Luxus hat nicht jeder, während Frau Witzer mir also erklärt, was ich ändern kann oder soll und wieso es früher doch schon mal besser war (Opa erzählt vom Krieg), gehe ich weiterhin einem Job nach, in dem ich das Gegenteil davon mache. Genau wie das Frau Witzer früher auch mal getan hat, schliesslich möchte ich auch mal einem dem ihren ähnlichen Status erreichen.

Dokumentenverwaltung mit ecodms

Daheim habe ich ja schon seit fast 10 Jahren ein papierloses Büro: alle reinkommende Post wird gescannt und digital weiterverarbeitet. Bisher habe ich es mir einfach gemacht und die gescannten Dokumente in einen grossen Ordner geworfen und mich beim Suchen auf Tools wie grep verlassen. Nun ist mir von Bekannten ecodsm als komfortable Alternative für den Hausgebrauch empfohlen worden. Für den Privatanwender kostenlos bringt es neben der obligaten Verschlagwortung auch eine Volltextsuche mit.

Installation und Inbetriebnahme gestalten sich einfach, es gibt ein gutes Handbuch. Das System arbeitet zweistufig: alle neuen Dokumente landen erstmal in einer Inbox, koennen dort verschlagwortet und dann archiviert werden. Ich habe ungefähr 3500 Dokumente, die will ich nicht alle einzeln einlesen. Dafür gibt es Templates: man definiert, welche Eigenschaften wie enthaltenen Text ein Dokument hat, wie es dann verschlagwortet werden soll und schon kann so ein Dokument automatisch archiviert werden. Für den initialen Load habe ich mir also so eine Art wildcard Template angelegt: egal welcher Text, es soll archiviert werden. Ein paar Tests funktionieren, also werfe ich dem ecodsm mal meine gesamten Datenbestand vor die Füsse.

Dass dauert dann doch eine ganze Weile. ecodsm macht selber eine ocr, dass kann schonmal eine gute halbe Stunde pro Dokument dauern. Wie weit er mit dem Import ist, erfährt der Anwender nicht. Irgendwann ist er dann wohl durch und ich bin erstaunt: gut 600 Dokumente sind in der Inbox hängen geblieben. Warum die nicht per Template automatisch archiviert worden sind, sagt ecodsm nicht. Noch spannender wird es, wenn man sich die archivierten Dokumente anschaut: eine Funktion zum zählen habe ich nicht gefunden, aber ecodsm vergibt fortlaufende Nummern und die höchste, die ich finden kann, liegt bei knapp 2500. Satte 1000 Dokumente sind einfach verschwunden. Fehlermeldungen sind keine zu finden. Da ecodms auch keine Duplikate erkennt, verzichte ich auf Wiederholung des Imports.

Die ocr von ecodms basiert auf tesseract. Das hatte ich zum letzten Mal Mitte letzten Jahres getestet, und verworfen. Die Qualität der Ergebnisse war alles andere als überzeugend. Wie macht sich Tesseract mit ecodms? Nicht viel besser, ein paar Volltextsuchen liefern magere Ergebnisse. Das ist vor allem schmerzhaft, da die importierten pdfs schon beim Scannen einer ocr unterzogen worden waren, mit deutlich besseren Ergebnissen.

Also in der Disziplin “Importieren von Altdaten” hat mich ecodms bis jetzt nicht überzeugt. Mal schauen, wie es sich dann im Alltag schlägt. Eine Chance will ihm noch geben.