Allgemein

Soziale Folgen des Klimawandels – Die Kinderkrise

Veröffentlicht am
Geschätzte Lesezeit: 2 Minuten.

In der taz vom 01. Februar 2021 findet sich ein Artikel zum Thema Klimakatastrophe und Familienplanung. Darin findet sich auch eine Aussage von mir, welches ich hier in der ungekürzten Variante dokumentieren möchte. Der gesamte Artikel ist absolut lesenswert, und auch die Perspektiven der anderen Teilnehmer sind sehr interessant. Hier ist meine Aussage:

Mir ist bewusst, dass die Entscheidung, Kinder zu bekommen und somit diesem Planeten weitere Menschen aufzuzwingen, die klimaschädlichste Entscheidung meines Lebens ist. Trotzdem habe ich einen zweijährigen Sohn. Wenn wir das Abwenden der Klimakatastrophe als Voraussetzung für das Überleben unserer Spezies betrachten, dann müssen wir auch dafür sorgen, dass genug Kinder existieren, damit unsere Spezies überleben kann.

Stattdessen motiviert mich mein Sohn, die Klimakatastrophe zu bekämpfen. Die meisten Klimamodelle des IPCC enden im Jahr 2100, viele davon enden katastrophal. 2100 wäre mein Sohn 82 Jahre alt, es ist durchaus realistisch, dass er dieses Alter erreicht. Seine Kinder, meine Enkel, wären dann ca. 50, also mitten im Leben, wenn die Szenarien enden. Selbst falls ich die Klimakatastrophe nicht selbst miterleben sollte, mein Sohn und meine zukünftigen Enkel werden sie erleben. Ich schulde ihnen, dies zu verhindern und den Planeten jetzt zu schützen.

Der ganze Artikel findet sich hier: https://taz.de/Soziale-Folgen-des-Klimawandels/!5744802/.

Digitalisierung

openHAB IX: Fritz!Box und OH 3.0

Veröffentlicht am
This entry is part 9 of 9 in the series openHAB
Geschätzte Lesezeit: 5 Minuten.

Seit meinem Update auf openHAB 3.0 funktioniert die Einbindung meiner Fritz!Box 7590 nicht mehr. Es wird Zeit, das zu beheben.

Ich möchte zwei Dinge realisieren:

  • Ein An/Aus-Schalter für das Gäste-WLAN
  • Anwesenheitserkennung durch Erkennung, welches Smartphone im WLAN eingewählt ist

Einen besonderen Dank möchte ich übrigens an die Leser Christian und Ralf aussprechen, die mich darauf hingewiesen haben, dass das alte Binding nicht mehr funktioniert – und die durch Nachfragen dafür gesorgt haben, dass ich mich mit dem Thema auseinander gesetzt habe.

Grundkonfiguration

Los geht es. Administration > Einstellungen > Bindings > +. Hier finden sich zwei Bindings, die prinzipiell in Frage kämen:

  • AVM FRITZ! Binding – dies scheint speziell für die Smart-Home-Features der Fritz!Box zu sein, die ich nicht benutze. Das heißt, dies ist das falsche Binding.
  • TR-064 Binding – hier finden sich viele Channels für die Fritz!Box, insbesondere sind die LAN channels interessant. Dies ist das richtige Binding.

Also gut. Ich installiere das Binding TR-064 in der Version 3.0.0. Leider finden sich keine neuen Things in meiner Inbox, ich muss das Binding also manuell konfigurieren. Glücklicherweise habe ich das ja schon einmal gemacht, daher kann ich hoffentlich viel kopieren. Und tatsächlich steht in der Dokumentation, dass das Gateway-Device manuell verbunden werden muss, der Rest funktioniert dann angeblich automatisch. Okay, dann mache ich das so.

Ich klicke Einstellungen > Things > + und wähle das TR-064-Binding. Hier wird mir direkt eine Fritz!Box vorgeschlagen, also wähne ich diese aus. Ich gebe IP-Adresse, username und Passwort ein und klicke auf Create Thing. Und siehe da, die Fritz!Box ist vorhanden, und der Status ist online. Das ist ja extrem einfach – ich mag openHAB 3.

Ich klicke das Thing an, und wähle oben Channel. Ich möchte jetzt probeweise mal die Uptime verlinken, also klicke ich auf diesen Channel und erzeuge ein neues Item für diesen Channel. Okay, jetzt sehe ich die Fritz!Box-Uptime in Sekunden. Das ist natürlich recht albern, aber es funktioniert.

Gäste-WLAN

Okay, ich möchte ja eigentlich den Schalter für das Gäste-WLAN. Also gehe ich erneut unter Einstellungen > Things > + auf das TR064-Binding. Diesmal drücke ich Scan. Jetzt wird mir ein LAN-Device angezeigt – aus der Dokumentation weiß ich, dass dieses den Channel für das WLAN besitzt. Also füge ich es hinzu, und erzeuge erneut über die Channels ein entsprechendes Item für das Gäste-WLAN. Es wird automatisch vorgeschlagen, dass es ein Switch sein soll. Das ist alles extrem einfach und straight-forward (wenn man weiß, wo man suchen muss) – ich finde das super!

Anwesenheit im WLAN

Okay, kommen wir zum (vermutlich) schwierigen Teil. Ich möchte erkennen, ob jemand anwesend ist, indem ich prüfe, ob sich das entsprechende Smartphone im WLAN befindet.

Mein erster Gedanke war, dass ich vermutlich irgendwie einen Eintrag in einer .items-Datei ergänzen muss. Aber dieser Thread hat mich auf den richtigen Weg geführt. Das Konzept ist, dass das Binding für jede MAC-Adresse einen eigenen Channel anlegen kann, den macOnline-Channel. Dazu muss man dem Binding nur sagen, welche MAC-Adressen man denn bitte überwacht haben will.

Also gehe ich über Things > LANDevice in die Konfiguration des Fritzbox-LANDevices. Im unteren Teil gibt es den Punkt Configuration, dort trage ich unter MAC Online die MAC-Adresse meines Telefons ein. Die findet man übrigens am einfachsten in der Netzwerkübersicht des Fritzbox-Menüs.

2021-01-24_fritzbox-maconline

Anschließend klicke ich auf Channels und füge den (jetzt erstmals erscheinenden) MAC Online-Channel mit der richtigen MAC-Adresse einem neuen Item hinzu. Und schon funktioniert es, ich bekomme als Status tatsächlich „ON“ angezeigt.

2021-01-24_fritzbox-maconline-2

Dieses Item kann ich jetzt nutzen, um meine Anwesenheit zu detektieren. Alles funktioniert, Haken dran.

Allgemein

openHAB VIII: Update auf openHAB 3.0

Veröffentlicht am
This entry is part 8 of 9 in the series openHAB
Geschätzte Lesezeit: 7 Minuten.

Es gibt eine neue Version, und ich möchte auf openHAB 3 aktualisieren. Vielleicht lösen sich so die Probleme mit homematic von selbst.

Also gut. Ich folge dieser Anleitung. Die sieht nämlich sehr leicht aus. Spoiler: Leider wird sich herausstellen, dass es nicht ganz so einfach ist.

Tag 1: Erst einmal alles kaputtmachen

Tolle Überschrift, oder?

Die folgenden Schritte werden alle per SSH in der Konsole durchgeführt. Zuerst mache ich ein Backup, mit diesem Befehl:

sudo $OPENHAB_RUNTIME/bin/backup

Dann öffne ich das openHAB-Konfigurations-Tool:

sudo openhabian-config

Mich begrüßt direkt diese Meldung:
2021-01-02-update-1

Wenn das Update empfohlen ist, dann mache ich das doch direkt. Ich wähle also Continue, und das System rattert vor sich hin.

Nach ein paar Augenblicken kommt der nächste Screen:
2021-01-02-update-2

Öh, ja, ich möchte openHAB 3. Also wähle ich mit dem Cursor den unteren Branch, und drücke Enter.

Es folgt das Hauptmenü. Ich wähle den zweiten Menüpunkt Upgrade System.
2021-01-02-update-3

Das System arbeitet jetzt. Nach einer Weile erhalte ich folgenden Dialog:
2021-01-02-update-4

Öh, ja, also wenn ich Java 11 brauche, dann soll das bitte auch installiert werden. Continue.

Anschließend geht es zurück in das hauptmenü. Hier wähle ich nun Punkt 3, Install openHAB. In der beschreibung steht ja, dass hier openHAB 3 installiert wird, also sollte das passen.
2021-01-02-update-5

Als nächstes werde ich gefragt, ob ich ein Backup anlegen möchte. Das habe ich zwar schon vorhin manuell gemacht, aber es schadet ja nicht. Continue.
2021-01-02-update-6

Und eine Warnmeldung, dass das Update zu openHAB 3 nicht rückgängig zu machen ist. Jaja, Continue.
2021-01-02-update-7

Jetzt rödelt das System. Nach einer Weile erhalte ich eine Erfolgsmeldung:
2021-01-02-update-10

Und direkt danach folgt eine Fehlermeldung:
2021-01-02-update-8

Das ist seltsam. Mal sehen, ob es funktioniert hat. Ich gebe http://openhab/8080 in den Browser ein.

2021-01-02-update-8-2

Okay, da ist also etwas kaputt. Ein Reboot (sudo reboot) hilft nichts. Eine schnelle Google-Recherche führt mich zu dieser Diskussion. Hier wird der Fehler genau beschrieben, aber es wird gesagt, dass das ab openHAB 2.5.1 behoben sein sollte. Ich habe doch openHAB 3 installiert?

Ich gehe also erneut per SSH auf den RasPi. Der Begrüßungsdialog von openhabian sagt aber immernoch, dass ich openHAB 2.5 installiert hätte. Seltsam. Da hat wohl etwas nicht geklappt.

Also nochmal.

sudo openhabian-config

Diesman wähle ich Menüpunkt 1, Select Branch. Und siehe da, ich habe angeblich noch den stable-Branch ausgewählt. Ich muss das Sternchen auf openHAB3 verschieben, und erst dann Enter drücken. Aber wie geht das? Keine Ahnung. Ich drücke wild auf meiner Tastatur herum, und irgendwann ist das Sternchen an der richtigen Stelle. Ich glaube, die Leertaste war richtig, aber ich bin mir nicht sicher. Egal.

2021-01-02-update-9

Weiter geht es. Punkt 3, Install openHAB.
2021-01-02-update-10

Diesmal erhalte ich nur die Erfolgsmeldung, und keine Fehlermeldung. Und der Screen per SSH sieht so aus:

2021-01-02-update-11

Das ist doch super! Erstmal rebooten (sudo reboot), und dann auf zu http://openhab/8080:
2021-01-02-update-8-2

Verdammt.

Okay, die obige Lösung sagte, man müsse openHAB einfach nur löschen und neu installieren. Das würde ich gerne vermeiden, vielleicht geht es auch anders.

Eine andere Lösung sagt, man solle den Cache leeren.

openhab-cli stop
openhab-cli clean-cache
openhab-cli start

Und nun geht es erneut zu http://openhab/8080: Die Website ist nicht erreichbar. ERR_CONNECTION_REFUSED. Verdammt.

Tag 2: Reparieren

Sieh mal einer an, jemand anderes hat den gleichen Fehler wie ich. Die Lösung: Zwinge das System, Java 11 zu nutzen. Nur wie das geht, steht hier leider nicht.

Besser gesagt, da steht, derjenige habe es über das openHAB-Konfigurations-Tool geschafft:

sudo openhabian-config

Okay, ich wähle erstmal Menüpunkt 10, Apply Improvements > Packages. Kann ja nicht schaden. Der Installer läuft erfolgreich durch – aber das war nicht, was ich gesucht habe.

Menüpunkt 40, openHAB Related, listet als Punkt 46 Zulu Java 11 auf.
2021-01-02-update-12

Super, das will ich installieren, in der 32-Bit-Variante. Der Installer läuft erneut erfolgreich durch:
2021-01-02-update-13

Okay, Reboot.

Und siehe da, es funktioniert! Ich werde in das initiale Setup von openHAB 3 geleitet:
2021-01-02-update-14

2021-01-02-update-15

Ich vergebe einen Admin-Account, lege ein paar Daten und meinen Standort fest, und komme in die neutrale Übersichtsseite. Super!

2021-01-02-update-16

Jetzt muss ich das „nur noch“ konfigurieren.

Etwas rumspielen zeigt mir, dass meine Things, Channels und Rules übernommen wurden. Meine Sitemap auch, aber irgendwie funktioniert diese (noch) nicht. Anscheinend gab es da Änderungen. Glücklicherweise sind die wichtigsten Änderungen dokumentiert, insbesondere der Abschnitt über erforderliche manuelle Anpassungen ist sehr interessant. Besonders relevant für mich: Das Gardena-Binding ist komplett neu geschrieben worden. Das muss ich mir ansehen.

Außerdem wird das Fritzbox-064-Binding nicht mehr unterstützt. Vielen Dank an Christian für den Hinweis! Auch hier muss ich eine Lösung finden, die ich hier dokumentieren werde.

Agilität

Ich bin Certified Scrum Product Owner

Veröffentlicht am
Geschätzte Lesezeit: 2 Minuten.

Seit dem heutigen Tage bin ich zertifiziert als Product Owner.

product-owner-zertifikat

Ein Certified Scrum Product Owner® ist für die Wertmaximierung des Produkts sowie der Arbeit des Projektteams verantwortlich. Er fördert den Projekt- und Produkterfolg, indem er klare Produkt- und Sprintziele vorgibt, deren Erreichen einen echten Mehrwert für den Kunden und die Organisation darstellt.

Da ich bereits seit einigen Jahren als Scrum-Master arbeite (und ebenfalls zertifiziert bin), hoffe ich, so meine Kompetenzen zu erweitern und abzurunden. Und weil sie so schön sind, zeige ich hier noch die Badges:

seal-csposeal-cspo

Digitalisierung

openHAB VII: Waschmaschine und Trockner melden sich, wenn sie fertig sind

Veröffentlicht am
This entry is part 7 of 9 in the series openHAB
Geschätzte Lesezeit: 7 Minuten.

In unserem Haus stehen Waschmaschine und Trockner im Keller. Möchte ich wissen, ob eines der Geräte fertig ist, muss ich also in den Keller laufen. Das ist unpraktisch. Da muss es doch etwas besseres geben.

Natürlich gibt es etwas besseres. Es gibt dieses tolle Tutorial.

Tag 1: Installation, Items, Regeln

Das Konzept ist relativ simpel. Ich schließe die Waschmaschine und den Trockner jeweils an eine Steckdose, die den Verbrauch messen kann. Wenn der Verbrauch von einer hohen Last auf eine sehr niedrige Last fällt, muss der Waschgang fertig sein. Dann bekomme ich eine Nachricht.

Ich installiere an Waschmaschine und Trockner jeweils eine Schalt-Mess-Steckdose von Homematic IP, HmIP-PSM.1Bei amazon für 44,99€ pro Stück gekauft. Anschließend definiere ich die Items in homematic.items:

// Waschkeller
// HmIP-PSM_Waschmaschine
Number  SteckdoseWaschmaschine_Power  "Waschmaschine Verbrauch [%.1f W]" {channel="homematic:HMIP-PSM:3014F711A0001F9A499D1959:0001DBE9913DBB:6#POWER" }
Number Waschmaschine_Status "Waschmaschine [%d]"

// HmIP-PSM_Trockner
Number  SteckdoseTrockner_Power  "Trockner Verbrauch [%.1f W]" {channel="homematic:HMIP-PSM:3014F711A0001F9A499D1959:0001DA49A3492E:6#POWER" }
Number Trockner_Status "Trockner [%d]"

Es folgt die waschen.rules:

import java.util.concurrent.locks.ReentrantLock

val Number MODE_OFF = 0
val Number MODE_STANDBY = 1
val Number MODE_ACTIVE = 2
val Number MODE_FINISHED = 3

val ReentrantLock Waschmaschine_lock = new ReentrantLock()
val ReentrantLock Trockner_lock = new ReentrantLock()

rule "Status Waschmaschine"
when
    Item SteckdoseWaschmaschine_Power changed
then
    if (SteckdoseWaschmaschine_Power.state < 0.5) Waschmaschine_Status.postUpdate(MODE_OFF)
    else if (SteckdoseWaschmaschine_Power.state > 10) Waschmaschine_Status.postUpdate(MODE_ACTIVE)
    else if (SteckdoseWaschmaschine_Power.state < 4.5) {
        if (Waschmaschine_Status.state == MODE_OFF) Waschmaschine_Status.postUpdate(MODE_STANDBY)
        else if (Waschmaschine_Status.state == MODE_ACTIVE) {
			Waschmaschine_lock.lock()
			try {
				Thread::sleep(10000) // Debounce for 10 seconds
				if (SteckdoseWaschmaschine_Power.state < 4.5) { 
					Waschmaschine_Status.postUpdate(MODE_FINISHED)
					sendNotification("mail@dresse", "Waschmaschine ist fertig!")
				}
			} finally {
				Waschmaschine_lock.unlock()
			}
		}
    }
end

rule "Status Trockner"
when
    Item SteckdoseTrockner_Power changed
then
    if (SteckdoseTrockner_Power.state < 0.5) Trockner_Status.postUpdate(MODE_OFF)
    else if (SteckdoseTrockner_Power.state > 10) Trockner_Status.postUpdate(MODE_ACTIVE)
    else if (SteckdoseTrockner_Power.state < 4.5) {
        if (Trockner_Status.state == MODE_OFF) Trockner_Status.postUpdate(MODE_STANDBY)
        else if (Trockner_Status.state == MODE_ACTIVE) {
			Trockner_lock.lock()
			try {
				Thread::sleep(10000) // Debounce for 10 seconds
				if (SteckdoseTrockner_Power.state < 4.5) {
					Trockner_Status.postUpdate(MODE_FINISHED)
					sendNotification("mail@dresse", "Trockner ist fertig!")
				}
			} finally {
				Trockner_lock.unlock()
			}
		}
    }
end

Diese rules-datei ist im Prinzip copy-paste von obiger Anleitung. Okay, ich habe die entsprechende Regel verdoppelt, weil ich ja Waschmaschine und Trockner habe. Ansonsten habe ich nur noch das Lock verändert, indem ich den Import an den Anfang der Datei gesetzt habe. Das war nötig, weil ich sonst folgenden Fehler erhalten hatte:

[WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'waschen.rules' has errors, therefore ignoring it: [6,1]: missing EOF at 'import'

Zum Schluss noch die default.sitemap:

Frame label="Waschküche" {
        Text item=Waschmaschine_Status icon="whitegood" label="Waschmaschine" 
        Text item=Trockner_Status icon="whitegood" label="Trockner"
    }

Und dann schauen wir mal, ob es funktioniert.

Tag 2: Feinschliff

2020-09-21_trockner-notification

Es funktioniert.

2020-09-21_waschmaschine-notification

Öh. Es funktioniert zu gut. Das sid zu viele Nachrichten. Ich muss die Grenzen, an denen sich der Status ändert, etwas anpassen. So sieht die waschen.rules jetzt aus:

import java.util.concurrent.locks.ReentrantLock

val Number MODE_OFF = 0
val Number MODE_STANDBY = 1
val Number MODE_ACTIVE = 2
val Number MODE_FINISHED = 3

val ReentrantLock Waschmaschine_lock = new ReentrantLock()
val ReentrantLock Trockner_lock = new ReentrantLock()

rule "Status Waschmaschine"
when
    Item SteckdoseWaschmaschine_Power changed
then
    if (SteckdoseWaschmaschine_Power.state < 0.5) Waschmaschine_Status.postUpdate(MODE_OFF)
    else if (SteckdoseWaschmaschine_Power.state > 200) Waschmaschine_Status.postUpdate(MODE_ACTIVE)
    else if (SteckdoseWaschmaschine_Power.state < 2.2) {
        if (Waschmaschine_Status.state == MODE_OFF) Waschmaschine_Status.postUpdate(MODE_STANDBY)
        else if (Waschmaschine_Status.state == MODE_ACTIVE) {
			Waschmaschine_lock.lock()
			try {
				Thread::sleep(100000) // Debounce for 100 seconds
				if (SteckdoseWaschmaschine_Power.state < 2.2) { 
					Waschmaschine_Status.postUpdate(MODE_FINISHED)
					sendNotification("andreas@kolmer.one", "Waschmaschine ist fertig!")
				}
			} finally {
				Waschmaschine_lock.unlock()
			}
		}
    }
end

rule "Status Trockner"
when
    Item SteckdoseTrockner_Power changed
then
    if (SteckdoseTrockner_Power.state < 0.5) Trockner_Status.postUpdate(MODE_OFF)
    else if (SteckdoseTrockner_Power.state > 200) Trockner_Status.postUpdate(MODE_ACTIVE)
    else if (SteckdoseTrockner_Power.state < 200) {
        if (Trockner_Status.state == MODE_OFF) Trockner_Status.postUpdate(MODE_STANDBY)
        else if (Trockner_Status.state == MODE_ACTIVE) {
			Trockner_lock.lock()
			try {
				Thread::sleep(10000) // Debounce for 10 seconds
				if (SteckdoseTrockner_Power.state < 200) {
					Trockner_Status.postUpdate(MODE_FINISHED)
					sendNotification("andreas@kolmer.one", "Trockner ist fertig!")
				}
			} finally {
				Trockner_lock.unlock()
			}
		}
    }
end

Das hat geklappt, jetzt kriege ich nur noch eine Nachricht, wenn die Waschmaschine fertig ist.

Nächster Punkt: Die Sitemap ist noch nicht ganz perfekt. Da steht jetzt für die Waschmaschine eine Zahl als Status, also entweder 0, 1, 2 oder 3. Ich möchte aber viel lieber, dass da "Aus" oder "Standby" steht. Da es wie immer tolle Anleitungen gibt, hoffe ich, dass dieser Schritt einfach ist.

Ich bearbeite also meine homematicip.items:

// Waschkeller
// HmIP-PSM_Waschmaschine
Number  SteckdoseWaschmaschine_Power  "Waschmaschine Verbrauch [%.1f W]" {channel="homematic:HMIP-PSM:3014F711A0001F9A499D1959:0001DBE9913DBB:6#POWER" }
Number Waschmaschine_Status "Waschmaschine [%d]"
String Waschmaschine_Anzeige "[MAP(waschen.map):%s]"

// HmIP-PSM_Trockner
Number  SteckdoseTrockner_Power  "Trockner Verbrauch [%.1f W]" {channel="homematic:HMIP-PSM:3014F711A0001F9A499D1959:0001DA49A3492E:6#POWER" }
Number Trockner_Status "Trockner [%d]"
String Trockner_Anzeige "[MAP(waschen.map):%s]"

Und dann erstelle ich noch eine transform/waschen.map:

0=Aus
1=Standby
2=Läuft
3=Fertig
-=-
undefined=-
uninitialized=-
NULL=-

Und schon erhalte ich einen Fehler in den Logs:

[WARN ] [rest.core.item.EnrichedItemDTOMapper] - Failed transforming the state 'NULL' on item 'Waschmaschine_Anzeige' with pattern 'MAP(waschen.map):%s': Couldn't transform value because transformation service of type 'MAP' is not available.
[WARN ] [ui.internal.items.ItemUIRegistryImpl] - couldn't transform value in label because transformationService of type 'MAP' is unavailable
[WARN ] [rest.core.item.EnrichedItemDTOMapper] - Failed transforming the state 'NULL' on item 'Trockner_Anzeige' with pattern 'MAP(waschen.map):%s': Couldn't transform value because transformation service of type 'MAP' is not available.
[WARN ] [ui.internal.items.ItemUIRegistryImpl] - couldn't transform value in label because transformationService of type 'MAP' is unavailable

Tja, das wäre auch zu einfach gewesen. Aber auch für dieses Problem gibt es eine Lösung: Ich muss das Addon "MAP" installieren. Sonst geht das nicht. Also wähle ich in der PaperUI Addons > Transformations das Addon Map Transformation (transformation-map - 2.5.3). Und schon gibt es keine Fehlermeldungen mehr.

Okay, noch schnell die default.sitemap überarbeiten:

	Frame label="Waschküche" {
        Text item=Waschmaschine_Anzeige icon="whitegood" label="Waschmaschine" 
        Text item=Trockner_Anzeige icon="whitegood" label="Trockner"
    }

Sollte klappen, oder? Nein, leider nicht. Die Anzeige funktioniert nicht. Keine Ahnung, woran dies liegt. Da muss ich noch etwas basteln.