Sonntag, 18. Dezember 2016
Einkaufsliste
Was ich schon lange mal geplant hatte, war eine Einkaufsliste einzurichten, auf die mehrere Leute Zugriff haben. Bedient werden würde die Liste größtenteils vom iPhone aus. Ideal wäre es gewesen, wenn man einfach die Notizen teilen könnte, was aber leider (noch?) nicht geht und viel Komfort gäbe es auch nicht. Also musste eine Alternative her. Klar, es gibt zig Apps, die sowas bieten, aber das ist dann doch zuviel des Guten, ich wollte was einfaches. Also habe ich mich in den Weiten des Web auf die Suche begeben und nach längerer Suche folgendes gefunden: Einkaufsliste 0.8.3
Da ich auf meinem Synology NAS sowieso einen Webserver mit Datenbank laufen habe, der auch von außen erreichbar ist, war die erste Hürde schonmal genommen. Jetzt musste ich "nur" noch die Installation hinbekommen, was etwas tricky war. Hier die finalen Schritte:
  • den Ordner in das Web Verzeichnis entpacken
  • in /db/index.php den connection string zur MariaDB eintragen:

    R::setup( 'mysql:host=localhost;dbname=Einkaufsliste','user', 'password' ); //for both mysql or mariaDB

  • auf der Datenbank Instanz die entsprechende Datenbank anlegen und User berechtigen, die Tabelle wird dann beim erstmaligen Aufruf der Seite automatisch angelegt
  • auf der Synology die notwendigen Voraussetzungen schaffen:

    ipkg install git
    cd /volume1/web/Einkaufsliste
    bower install --allow-root

    Nachdem das alles geschafft war, lief es erst einmal. Allerdings hatte ich noch zwei Probleme:

    1. beim Eintragen eines neuen Artikels musste man immer die Anzahl mit angeben, die meistens eigentlich ja 1 ist
    2. die Icons auf dem iPhone wurden falsch dargestellt

    1. war recht einfach zu lösen, indem ich die Files /src/views/new.tpl.html und /src/js/app.js angepasst habe. Wenn ich bei der Anzahl jetzt nichts eintrage, wird der Artikel mit 1 als Standard Wert angelegt - perfekt

    2. war ein sehr nerviges Problem, dessen Ursache offensichtlich die Fonts auf dem iPhone sind. Ich konnte das nur umgehen, indem ich die Darstellung der Icons nicht dem Client überlassen habe, sondern direkt Bilder eingebaut habe. Generiert zwar mehr Traffic, aber in sehr überschaubarem Rahmen, da die Icons nur wenige Byte bis in den einstelligen KByte Bereich groß sind.

    Nach mehreren Wochen Praxistest muss ich sagen, dass die Liste alle Erwartungen erfüllt und übertroffen hat. Hier findet Ihr meine angepasste Version zum download: einkaufsliste (zip, 1,739 KB)
  • Jetzt noch 2 Screenshot, wie das live aussieht:


    -> die Liste


    -> neue Artikel auf die Liste




    Donnerstag, 15. Dezember 2016
    Haussteuerung - Sauna
    Als ich mal wieder auf der Suche nach neuen Ideen war, was ich noch so automatisieren könnte, fiel mir unsere Sauna ein. Ihr werdet jetzt vielleicht denken, was kann man da großartig automatisieren? Nun eigentlich ganz einfach, zum einen das Einschalten per App und eine Info, sobald die Sauna die Betriebstemperatur erreicht hat.

    Technisch musste dazu erst einmal dafür sorgen, dass ich irgendwie den Saunaofen schalten kann. Dazu habe ich die folgenden Komponenten im Schaltschrank verbaut:

    - Universal Lastschuetz, Relais 230V, 400V 3xNO, 1xNC bis 20A f. Hutschiene
    - Homematic Hutschienen Schaltaktor HM-LC-Sw1-DR

    Grundsätzlich muss ich aber wieder sagen, Finger weg vom Schaltschrank, wenn Ihr nicht wisst, was Ihr tut. Denn:

    Strom macht klein, schwarz und hässlich ;)

    Hier der Code des eingebundenen Schaltaktors in FHEM:

    define UG.Saunaofen CUL_HM 3710B3
    attr UG.Saunaofen IODev HMLAN0
    attr UG.Saunaofen IOgrp CCU:HMLAN0
    attr UG.Saunaofen autoReadReg 4_reqStatus
    attr UG.Saunaofen event-on-change-reading state
    attr UG.Saunaofen expert 1_on
    attr UG.Saunaofen firmware 2.7
    attr UG.Saunaofen group 1: Sauna
    attr UG.Saunaofen model HM-LC-Sw1-DR
    attr UG.Saunaofen peerIDs 00000000,3710B301,
    attr UG.Saunaofen room UG.Sauna
    attr UG.Saunaofen serialNr MEQ0276306
    attr UG.Saunaofen subType switch
    attr UG.Saunaofen webCmd statusRequest:toggle:on:off

    Das Schalten ist theoretisch schon möglich. Ich wollte aber noch einen Sicherheitsmechanismus haben, der die Sauna ganz sicher spätestens wieder nach 3 Stunden ausschaltet. Das Schöne bei dem Aktor ist, dass er einen internen Timer hat, den man dafür nutzen kann. Dummerweise wird der nur bei physischem Tastendruck angetriggert, den wir aber nicht haben. Zum Glück kann man das aber auch simulieren, was zwar nicht kompliziert ist, aber die Lösung etwas aufbläht.

    set UG.Saunaofen regSet shOnTime 10800 self01

    - zuerst das Register vom Aktor auf 10800 Sekunden = 3h setzen

    define UG.Saunaschalter dummy
    attr UG.Saunaschalter group 1: Sauna
    attr UG.Saunaschalter room UG.Sauna
    attr UG.Saunaschalter setList off on

    - Dummyschalter definieren

    define UG.SaunaAn notify UG.Saunaschalter:on set UG.Saunaofen press short self01;; set UG.Saunagaenge 1
    attr UG.SaunaAn group 1: Sauna
    attr UG.SaunaAn room UG.Sauna
    define UG.SaunaAus notify UG.Saunaschalter:off set UG.Saunaofen press short self01;; set UG.Saunagaenge 0
    attr UG.SaunaAus group 1: Sauna
    attr UG.SaunaAus room UG.Sauna

    define set_UG_SaunaAn notify Saunaofen* { if (Value("UG.Saunaofen") eq "on") { fhem ("setstate UG.Saunaschalter on");; fhem ("setstate UG.SaunaBereit defined") }}
    attr set_UG_SaunaAn group 1: Sauna
    attr set_UG_SaunaAn room UG.Sauna

    define set_UG_SaunaAus notify Saunaofen* { if (Value("UG.Saunaofen") eq "off") { fhem ("setstate UG.Saunaschalter off;;set UG.Saunagaenge 0") }}
    attr set_UG_SaunaAus group 1: Sauna
    attr set_UG_SaunaAus room UG.Sauna

    - auf den Dummy reagieren und den Status des Dummies setzen, wenn der Ofen an- bzw. ausgeschaltet wird, UG.Saunagaenge wird nur für statistische Zwecke geschrieben



    Dienstag, 6. Dezember 2016
    Hauststeuerung - Benachrichtigungen und Feedback
    Um für uns noch einiges an Comfort zu schaffen, wollte ich vom Haus bei gewissen Aktionen aktiv benachrichtigt werden. Folgende Szenarien sind das aktuell:

    - Rückmeldung, dass die Waschmaschine fertig ist per akustischem Signal und Push Nachricht auf´s Smartphone
    - Benachrichtigung sobald die Sauna die Soll-Temperatur erreicht hat
    - morgentlicher Wetterservice
    - Statusrückmeldungen bei kritischen Events

    Für die Umsetzung der Push Nachrichten verwende ich Pushover. Pushover ist ein kostenfreier Dienst, mit dem man Push Nachrichten auf sein Handy schicken kann. Apps gibt es für iOS und Android, die allerdings einmalig bezahlt werden muss. Und natürlich gibt es auch mal wieder ein Modul: PUSHOVER, welches das Einbinden in FHEM vereinfacht. Auf das Setup geh ich nicht weiter ein, das ist im Wiki sehr gut beschrieben. Ich zeige Euch nur ein paar Beispiele zur Anregung:

    define Weatherforecast OPENWEATHER meinProjekt meinOrt meinAPIkey
    attr Weatherforecast INTERVAL 21600
    attr Weatherforecast room Wetter

    define DailyWeatherNotify at *06:45 {my $TETemperatur = ReadingsVal("WS1_TEMPERATURE","state", "");; my $TERain = ReadingsVal("WS1_ISRAINING","state", "");; my $TETempmax = ReadingsVal("Weatherforecast","fc0_tempMax11", "");; my $TEWeather = ReadingsVal("Weatherforecast","fc0_weather11", "");; my $TEUnit = "°C";; system ("curl -s -F 'token=aYA4DVYTVt77Dc93JsUZXWBtaBWVXm' -F 'user=u8QsBGPTr41B5H7GupYVD4qS6W8j5S' -F 'message=aktuelles Wetter\nTemperatur $TETemperatur°C\nRegen: $TERain\nHeute: $TETempmax$TEUnit / $TEWeather' https://api.pushover.net/1/messages.json")}
    attr DailyWeatherNotify room Wetter

    -> mein täglicher Wetterservice, für den Forecast verwende ich Openweather

    define UG.SaunaBereit DOIF ([UG.Saunaofen] eq "on" and [UG.SaunatemperaturInnen] > 79) (set Pushover msg 'FHEM' 'Sauna bereit')
    attr UG.SaunaBereit disable 0
    attr UG.SaunaBereit group 1: Sauna
    attr UG.SaunaBereit room UG.Sauna

    -> Sauna bereit:)

    Für die akustische Rückmeldung ist ein HomeMatic-Funk-Gongmodul MP3 im Einsatz. Auf einer SD Karte sind verschiende Sound Samples hinterlegt, die man einfach abrufen kann:

    define HM_3674FE CUL_HM 3674FE
    attr HM_3674FE IODev CUL1
    attr HM_3674FE IOgrp CCU:CUL1
    attr HM_3674FE autoReadReg 4_reqStatus
    attr HM_3674FE devStateIcon .*:audio_volume_high
    attr HM_3674FE expert 2_raw
    attr HM_3674FE firmware 1.0
    attr HM_3674FE group 2: Benachrichtigungen
    attr HM_3674FE model HM-OU-CM-PCB
    attr HM_3674FE peerIDs 00000000,
    attr HM_3674FE room System
    attr HM_3674FE serialNr MEQ0277871
    attr HM_3674FE subType outputUnit

    set HM_3674FE playTone 032

    Ein paar Soundfiles für den Aktor könnt Ihr hier: soundfiles (zip, 6,066 KB) runterladen.