Smart Home Use Cases - Part 2

Wasserzähler

Ich habe einen Standard Wasserzähler der pro Liter eine kleine Scheibe dreht auf der sich ein Metallplättchen befindet.
Dafür habe ich mir einen Näherungssensor zugelegt. Diesen habe ich professionell mit einem Winkel und Kabelbinder befestigt:

/images/2017/smarthome_usecase2_wasser.jpg

Hier im Loxwiki gibt es eine Anleitung um das ganze in Loxone einzubinden.

Use Cases

Zum einen kann damit der Gesamt- als auch der Tageswasserverbrauch gemessen werden.

Wenn sich das Haus im “Alle Abwesend” Modus befindet, lasse ich mich benachrichtigen wenn während dessen das Wasser läuft. So kann man z.B. einem Wasserschaden vorbeugen.

Außerdem lässt sich so über eine Logik erkennen ob geduscht wird und darüber dann die Abluft der Heizungsanlage hoch regeln. Die Logik ist zum Beispiel etwas in der Richtung:

  • Wasser läuft länger als 3 Minuten UND
  • es ist morgens zwischen 6 und 7 UND
  • Licht im Bad ist an

Smart Home Use Cases - Part 1

Bewegungsmelder

Es gibt zu diesem Thema verschiedene Meinungen, ob man sie nun nur draußen, nur in Fluren oder überall braucht.
Wir haben sie überall, in jedem Raum, den Fluren und auch draußen.
Bei den Drinnen-Modellen handelt es sich bei mir um diese kleinen Modelle:

/images/2017/smarthome_usecase1_pm.jpg

Sie sind klein, geräuschlos (kein Klackern, verwenden statt Relais einen Open Collector Ausgang) und nahezu unsichtbar, da sie keine LEDs enthalten. Bestens für jeden Raum geeignet. Außerdem haben sie einen Helligkeitssensor um die aktuelle Helligkeit im Raum zu messen.

Use Cases

Zunächst mal natürlich das offensichtliche:
In den meisten Räumen schaltet das Licht automatisch beim Betreten ein, sofern es entsprechend dunkel genug ist.

Und auch wenn man irgendwo manuell Licht einschaltet, dient der Bewegungsmelder dazu, nach z.B. 30 Minuten ohne Bewegung das Licht auszuschalten. So wird kein Licht vergessen.

In der Küche steuert der Bewegungsmelder außerdem morgens auch das Radio und schaltet es zur Frühstückszeit automatisch bei Betreten ein und nach kurzer Zeit auch wieder aus, wenn niemand mehr im Raum ist.

Ein Gimmick ist dann noch die Benachrichtigung auf den Fernseher, wenn der “Kinder-Nacht-Modus” aktiv ist und jemand im Flur im Obergeschoss rum läuft.

Smart Home - Konfiguration

Software

Die Software für Loxone gibt es gratis zum Download hier.
Hier verwaltet man die gesamte Infrastruktur und die Programmierung. Man findet im folgenden Objektbaum u.a. vordefinierte Zeiten, Räume, Benutzer, Merker (Variablen) und ganz unten auch die angebundenen Erweiterungen:

/images/2017/smarthome_konfig1.jpg

Die daran angeschlossenen Ein-/Ausgänge bzw. Geräte können dann auf die einzelnen Seiten gezogen werden und dort mit weiterer Logik verknüpft werden.
Um zum Beispiel einen Taster mit einer Lampe zu verknüpfen zieht man sowohl den Eingang des Tasters auf eine Seite, als auch den Ausgang an dem die Lampe hängt.

/images/2017/smarthome_konfig2.jpg

Nun möchte man ja nicht die ganze Zeit den Taster gedrückt halten damit das Licht leuchtet. Daher greift man auf vorhandene Bausteine zurück. Zum Beispiel den Lichtbaustein oder für ein einfaches Beispiel auf einen Schalter:

/images/2017/smarthome_konfig3.jpg

Im Simulationsmodus kann man das ganze dann direkt in der Software ausprobieren, auch ohne vorhandene Hardware:

/images/2017/smarthome_konfig.gif

Mein Smart Home

Hintergrund

Wir wohnen seit Mai diesen Jahres im neuen Haus. Für mich war schon lange vor Baubeginn klar, es muss ein Smart Home werden.
Damit sind hier allerdings nicht diese Insellösungen wie Philips Hue, o.ä. gemeint sondern eine Lösung für das ganze Haus. Integriert und vor allem kein “App Home”, sondern Smart im Sinne von automatisch.

Anbietervergleich

Als erstes trifft man beim Neubau und dem Thema automatisierung auf KNX. Ein Industriestandard mit sehr vielen Herstellern und Produkten. Die Verkabelung erfolgt im Bussystem. Ein Kabel geht an jedem Schalter, jeder Lampe, jeder Steckdose, jedem Fenster, etc. vorbei. Das ist eine dezentrale Lösung und man programmiert jeden einzelnen Sensor/Aktor mit entsprechender Logik. Das ganze ist relativ teuer, Stichwort Zertifizierung der Geräte.

Nach einiger Recherche bin ich auf Loxone gestoßen. Ein österreichischer Anbieter von properitärer Hard- und Software für die Hausautomatisierung. Allerdings hat das System offene Schnittstellen zu diversen anderen Systemen, z.b. KNX, Modbus, HTTP.
Die Verkabelung erfolgt dabei sternförmig. Es handelt sich also um eine zentrale Lösung im Verteilerkasten. Jeder Schalter, jedes Licht, jedes Fenster, etc. hat ein eigenes Kabel in den Schaltschrank.
Das klingt schlimmer als es ist:

Loxone

Die Loxone Lösung besteht aus den einzelnen Hardwaremodulen mit ihren entsprechenden Ein- und Ausgängen. Dazu gehört dann noch die Software “Loxone Config”. Mit der kommt man relativ schnell zu einem funktionierenden Haus.
Neben der Automatisierung bedient man das Haus weiterhin über Standard-Taster und wenn man möchte auch über eine App.
Das Hauptziel ist aber natürlich die Automatisierung. Am besten das Haus weiß selbstständig, was zu tun ist, ohne dass ich dafür eine App oder einen Schalter benötige.

Umsetzung

Für die Umsetzung benötigt man zunächst einen Plan was alles umgesetzt werden soll.
In meinem Fall bestand die Einkaufsliste u.a. aus:

  • Loxone Hardware. Soviel wie für die geplanten Ein-/Ausgänge notwendig
  • Präsenzmelder in jedem Raum/Flur
  • Taster anstatt Schalter
  • Fensterkontakte wie z.B. diese
  • Temperatursensoren
  • Rauchmelder

Bei den Präsenzmeldern habe ich eine sehr kleine und geräuschlose Variante verwendet die zudem auch keine blinkenden LEDs hat. Dafür messen sie gleichzeitig die Helligkeit.
Verwendet werden sie natürlich um das Licht automatisch beim Betreten des Raumes einzuschalten (in Abhängigkeit der Helligkeit). Außerdem um z.B. die Musik zu starten.

Taster werden statt Schaltern verwendet, damit der Zustand keine Rolle spielt. Außerdem lässt sich so in Loxone auch ein Doppelklick oder lang von kurzen Klicks unterscheiden. Damit lassen sich dann unterschiedliche Lichtszenen steuern, etc.
In den meisten Räumen wird nur ein Taster verwendet um sowohl Licht als auch Rolläden zu steuern:

  • Einmal drücken: Licht an/aus
  • Länger als 1sek drücken: Rolladen fährt ab (oder auf, je nach aktuellem Zustand).
  • Einmal drücken während der Rolladen fahrt stoppt den Rolladen

Was die Rolläden angeht dienen diese auch der automatischen Beschattung. Dafür verwende ich die Raumtemperatur (über die Temperatursensoren), den Einfallswinkel der Sonne auf die entsprechenden Fenster und ob die Sonne überhaupt scheint. Dadurch fahren die Rolläden automatisch in eine Beschattungsposition.

Mit Hilfe der Fensterkontakte fahren Rolläden automatisch hoch beim öffnen der Terrassentür, bzw. kann der Rolladen nicht runtergefahren werden wenn die Terrassentür geöffnet ist.

Die Rauchmelder sind vernetzt und über ein Relais an Loxone angebunden. Dadurch kann bei Auslösung eines Rauchmelders automatisch das Licht im gesamten Haus eingeschaltet werden und alle Rolläden für die Fluchtwege hochgefahren werden.

Wenn man nun alles mit allem vernetzt hat, sind der Phantasie keine Grenzen gesetzt. Dazu folgt dann mehr in weiteren Artikeln.

Make my blog faster and cheaper

History

My blog ran on BlogEngine.NET since 2012. I’ve migrated it from a dedicated server to an Azure VM in 2015.
It was the smallest VM available which is about 12 EUR/month. However you also have to pay for storage and traffic.

Welcome Hexo

So now I’m trying a new thing: Generating my blog with Hexo, which is a static html generator, based on node.js.
You do npm install -g hexo-cli and then hexo init to create a new blog. Create a new post hexo new post MyNewPost, then hexo server to start a local web server which serves the generated HTML files. To generate the output files: hexo generate.

Now you have a public folder which contains HTML, CSS and a JS file. There are a ton of themes and plugins you can install on top of it. E.g. to migrate from existing blogs or to minify the output files.
There is also a deployment plugin which deploys the files directly to your Azure storage account.

Azure CDN

Now to make the blog available to others and not only on localhost, you need a web server. One which serves static files. No need for a server-side framework like ASP.NET, PHP, or something else. Just static files.
Here comes Azure CDN:
It is really cheap, powerful, super fast and perfect for static files.

First create a new Azure Subscription which is free. Then create a new storage account within the portal:

Then create a new CDN:

I’ve selected the Verizon premium CDN, because only Verizon premium supports rewrite rules (and a bunch of other stuff).
Select to create a new endpoint, select “Storage” and your newly created storage account as the origin.

I’ve added a custom domain and enabled HTTPS which is free.

You don’t have to worry about setup, expiration and management of certificates, which is great.
Did I mention that this setup is cheap? At least for my blog with not that much traffic. It is about 0,14EUR/GB outgoing traffic plus storage costs which are basically nothing (0,01EUR/GB/month).

To make hexo work with Azure CDN you have to create a rule within the CDN rules engine:

  • Source ((?:[^\?]*/)?)($|\?.*) with destination $1index.html$2
  • Source ((?:[^\?]*/)?[^\?/.]+)($|\?.*) with destination $1/index.html$2

That makes sure, that you can access this post with this url
https://blog.mwiedemeyer.de/post/Make-my-blog-faster-and-cheaper
and the rules engine rewrites that to
https://blog.mwiedemeyer.de/post/Make-my-blog-faster-and-cheaper/index.html

Raspberry Pi Jukebox für Kinder

Vor einiger Zeit habe ich von der Toniebox erfahren. Das ist die “Revolution” für das Kinderzimmer. Ein Musikspieler ohne CDs und Kassetten. Dafür mit Spielfiguren und Musik aus der Cloud.

Nach einer kurzen Recherche gibt es die Idee in ähnlicher Form schon von vielen mit Hilfe eines Raspberry Pi umgesetzt, z.B. hier die Jukebox4Kids oder hier. Das Ziel war damit klar. Wir haben eine Kiste gefunden die eine gute Größe hat und ich habe dann nach den passenden Teilen gesucht. Die Hauptkomponente bildet der Raspberry Pi 3 mit einer 6 EUR USB Soundkarte, da der Raspi Audio Ausgang nicht ansatzweise einen erträglichen Klang liefert. Außerdem hat dieser bereits WLAN integriert um ihn später leicht mit neuer Musik bestücken zu können.

WP_20160704_14_59_24_Pro_LI

Die Idee von Tonie mit den Figuren war gut, aber ganz schön kostspielig. Daher habe ich zu einem China RFID Leser von Amazon (im Bild rechts an der Seitenwand) gegriffen plus die zugehörigen RFID Karten.

WP_20160706_22_54_22_Pro_LI

Das ganze ist günstiger und simpler als NFC. Der RFID Leser (6 EUR; 50 Karten ~15 EUR) funktioniert dabei per USB wie eine Tastatur direkt am Raspi. Nach jedem Lesevorgang “tippt” er die Nummer + ENTER ein. Auf dem Raspi selbst habe ich dazu MPD installiert und Mono. Der Raspi ist so konfiguriert, dass er direkt eingeloggt startet und über ein Startskript mono mit dieser Konsolenanwendung startet. Diese wartet im Wesentlichen auf Eingabe einer Zahl (+ENTER) und verwendet dann die Telnet Schnittstelle des MPD um eine Playliste zu laden und abzuspielen. Außerdem ist sie für die Auswertung der Taster zuständig.

Die Musik wird dabei direkt auf der SD Karte des Raspi gespeichert und eine Playliste mit der 10-stelligen Seriennummer der RFID Karte erstellt. Außerdem ist das Samba Paket installiert, womit man also jederzeit im WLAN zu Hause neue Musik und Playlisten auf der SD Karte ablegen kann. Dann noch ein Sticker auf die RFID Karte geklebt, damit leicht erkennbar ist, was “darauf” gespeichert ist.

WP_20160706_22_52_16_Pro_LI

Nun fehlte noch die Audioausgabe und ein paar Eingabemöglichkeiten (Play/Pause, Vor, Zurück, Lauter, Leiser). Für die Audioausgabe verwende ich eine Platine und Lautsprecher aus einem alten Radio (Werbegeschenk).

WP_20160706_21_03_06_Pro_LI

Hier sieht man links oben den Raspi, rechts die Verstärkerplatine aus dem Radio mit angeschlossenem Lautsprecher. Unten links liegt dabei noch ein “Übertrager” um das Audiosignal galvanisch zu trennen, da ansonsten ein Brummen auf dem Lautsprecher zu hören war. Dies liegt daran, dass der Verstärker zufällig mit 5V betrieben wird und ich diesen direkt an dem 5V Output des Raspi hängen habe. Die Verstärkerplatine hat auch gleichzeitig einen Kopfhörerausgang der bei Einstecken eines Kopfhörers den Lautsprecher unterbricht. Diese wird ebenfalls einfach nach außen am Gehäuse geführt.

Um das Gerät nicht nur anschalten zu können (was “hart” durch einen Einrastenden Taster mit LED Beleuchtung direkt in der USB Zuleitung passiert), sondern auch die anderen Funktionen verfügbar zu machen, habe ich “Arcade” Taster von eBay bestellt.

WP_20160706_21_01_38_Pro_LI WP_20160706_21_03_15_Pro_LI WP_20160706_21_02_26_Pro_LI

Die verfügbaren IO Ports am Raspi reichen um die 5 Taster aufzunehmen und die Verstärkerplatine und Power LED mit Strom zu versorgen.

Durch eine Powerbank kann das Gerät nicht nur im Kinderzimmer sondern auch im Auto und unterwegs verwendet werden. In Kürze kommt oben noch ein Griff dran und eine Markierung an die Seite an der der RFID Leser angebracht ist.

SharePoint changes files during CU installation

You might think, I’m drunk, but I’m not.

SharePoint, as a document management system, should never ever modify files without any notice. However, it seems that we found a bug, where it does modify files.

What?

We have a lot of CSS files in SharePoint. They are used for some custom apps in SharePoint or were just uploaded to OneDrive for Business. All in a SharePoint 2013 OnPrem environment. The CSS files contain base64 encoded data URIs.

Sample:

.myClass {
    background-image: url(‘data:image/png;base64,MY_IMAGE_AS_A_BASE64_ENCODED_STRING’) !important;
}

Then we installed a Cumulative Update and ran PSCONFIG.

And then?

What happened then is a really strange thing. The CSS files seem to be the same as before. The “Last Modified” date has not changed. However the content of the CSS file changed a little bit:

.myClass {
    background-image: url(‘data:image/png;base64,MY_IMAGE_AS_A_…_HERE_NOW_SOME_OTHER_STRING’) !important;
}</pre>

The base64 string before was about 600 characters. After installing the CU it is now 234 characters and only the first about 100 are the same. The rest is some garbage. That leads to broken images and icon-fonts all over the place.
The worst thing here is: What else did the CU installation?
We reproduced the behavior with 2 different CU installations on different sites and it seems, that only the base64 string is modified. Everything else is untouched.

We’ve filed a case at Microsoft and I will update the post when we will have an official statement.

Lync Box for the team

In my last vacation, I built a Lync Box for me and my team at work with a Raspberry Pi Model 2 and 15 LEDs.

The idea came from Jon Gallant who already built the same thing for a single user. He called it beakn, the Lync Status Light and tried not only a Raspi but also some other hardware. I took the idea and made a thing for the whole team (5 people)

Hardware

First of all: How does it look like?

WP_20151020_17_07_20_Pro

It is very simple and the inside and the box is not very nice. Maybe I should build one with a 3D printer. However, it is working and we will install it in front of our space. To connect the LEDs I have used an old IDE cable which perfectly fits on the IO ports of the Raspi (after cutting one of the sides).

WP_20151020_17_07_39_Pro

Software

I’m not using Windows 10 on the Raspi because as I started the project, Windows 10 IoT had no Wifi. It is using the default Raspian Linux Image with Mono. I’m running a .NET console app on it which actually checks an Azure queue every few seconds for new messages. On the clients I’m using a plain old WinForms app without a window and the Lync SDK. It checks for Lync status changes and then sends a message to the Azure queue.

You can find the software on Github here.

SharePoint 2013: Profile synchronization does not delete user profiles

We have configured AD Import in SharePoint 2013 with an LDAP filter set. After some time we discovered, that accounts deleted from AD are not automatically deleted from SharePoint.

After a lot of debugging and testing I found the solution:

The LDAP filter is an “Include” filter so you have to define which accounts should be imported. The filter looked like:

(&(objectCategory=person)(objectClass=user)(!(title=*Service Account*))(|(company=MyCompany1)(company=MyCompany2)))

(Import all accounts which are not service accounts and belong to MyCompany1 or MyCompany2)

You see the issue? Deleted accounts are not included in the filter, so I had to change the filter to include “isDeleted”:

(|(isDeleted=TRUE)(&(objectCategory=person)(objectClass=user)(!(title=*Service Account*))(|(company=MyCompany1)(company=MyCompany2))))

Now also deleted accounts are included and SharePoint will delete the profiles correctly.

Maybe Microsoft should mention this in the documentation. Currently there is only one sentence regarding the LDAP filter:

If you want to filter the objects that you import from the directory service, in the Filter in LDAP syntax for Active Directory Import box, type a standard LDAP query expression to define the filter.Source: https://technet.microsoft.com/en-us/library/jj219646.aspx