Philips Hue Go mit OpenHab steuern

Seit einigen Jahren nutze ich nun schon OpenHab auf einem Raspberry Pi um Heizung, Licht, Giessanlage usw. in unserem Haus zu steuern. Was noch fehlte war die Integration von Philips Hue Lampen, genauer gesagt einer Philips Hue Go.

Die Hue Go ist wirklich toll um einem Raum eine gewisse Stimmung zu verpassen, ob Abends beim Fernsehen oder auch mal als Hintergrundbeleuchtung für ein Candle-Light Dinner. Mit dem eingebauten Akku kann man die Lampe auch mal mit auf die Terrasse nehmen. Das einzigste Problem war eben bisher das ich diese nur per Bluetooth steuern konnte, weil ich keine Philips Hue Bridge hatte. Die Bridge kostete bei Amazon ca. 50 Euro, ich möchte euch aber hier zeigen wie ihr die Lampe auch mit einem Zigbee Stick für ab ca. 8 Euro in euer OpenHab-System integrieren könnt.

Was benötigt ihr hierfür:

Schritt 1 – OpenHabian auf dem Raspberry installieren

Eine Anleitung hierzu würde den Umfang des Beitrags sprengen, daher verlinke ich euch hier die Anleitung.

Schritt 2 – Zigbee2MQTT Installieren

Als erstes loggst du dich per SSH auf dem OpenHabian ein.

Dann installieren wir Node.js:

sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

sudo apt-get install -y nodejs git make g++ gcc

Und klonen dann das Zigbee2Mqtt Git-Repository:

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

Nun ändern wir den User und Gruppe des Repositories

 sudo chown -R openhab:openhabian /opt/zigbee2mqtt/

Und installieren die notwendigen Abhängigkeiten

cd /opt/zigbee2mqtt
npm ci --production

Nun stecken wir den Zigbee CC2531 Stick in den Raspberry Pi und prüfen dann unter welche ID er erkannt wurde, im Beispiel unten wurde er als ttyACM0 erkannt.

[12:27:51] openhabian@openHABianPi:/opt/zigbee2mqtt$ ls -l /dev/serial/by-id
insgesamt 0
lrwxrwxrwx 1 root root 13 Jan  3 11:59 usb-busware.de_CUL868-if00 -> ../../ttyACM1
lrwxrwxrwx 1 root root 13 Jan  3 11:59 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018E333C8-if00 -> ../../ttyACM0

Nun passen wir die Konfiguration von Zigbee2Mqtt an um den Stick zu nutzen, hierzu öffnen wir die Konfiguration-Datei

nano /opt/zigbee2mqtt/data/configuration.yaml

Und ändern diese wie folgt

homeassistant: false
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: /dev/ttyACM0
'\n\nadvanced:\n    network_key': GENERATE
experimental:
  output: attribute

Nun könnt ihr die Konfiguration testen

cd /opt/zigbee2mqtt
npm start

Ihr solltet eine Ausgabe ähnlich wie unten bekommen

Zigbee2MQTT:info  2019-11-09T13:04:01: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-09.14-04-01'
Zigbee2MQTT:info  2019-11-09T13:04:01: Starting Zigbee2MQTT version 1.6.0 (commit #720e393)
Zigbee2MQTT:info  2019-11-09T13:04:01: Starting zigbee-herdsman...
Zigbee2MQTT:info  2019-11-09T13:04:03: zigbee-herdsman started
Zigbee2MQTT:info  2019-11-09T13:04:03: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20190425}}'
Zigbee2MQTT:info  2019-11-09T13:04:03: Currently 0 devices are joined:
Zigbee2MQTT:warn  2019-11-09T13:04:03: `permit_join` set to  `true` in configuration.yaml.
Zigbee2MQTT:warn  2019-11-09T13:04:03: Allowing new devices to join.
Zigbee2MQTT:warn  2019-11-09T13:04:03: Set `permit_join` to `false` once you joined all devices.
Zigbee2MQTT:info  2019-11-09T13:04:03: Zigbee: allowing new devices to join.
Zigbee2MQTT:info  2019-11-09T13:04:03: Connecting to MQTT server at mqtt://localhost
Zigbee2MQTT:info  2019-11-09T13:04:03: Connected to MQTT server

Um nun Zigbee2mqtt als Service zu starten könnt ihr der Anleitung hier folgen.

Schritt 3 – Hue Go mit Zigbee2mqtt pairen

Nun können wir die Hue Go mit Zigbee2mqtt pairen, da ich die Hue Go per Bluetooth verbunden hatte konnte ich sie mit de Hue Bluetooth app auf die Werkseinstellungen zurücksetzen, und sie hat sich dann direkt mit Zigbee2mqtt verbunden. Falls ihr damit Probleme habt findet ihr hier eine Anleitung.

In der Zigbee2mqtt Konfigurationsdatei könnt ihr der Hue Go nun auch einen neuen Namen vergeben, der nicht so kryptisch ist wie die Device-Id. Hierzu einfach mit “nano /opt/zigbee2mqtt/data/configuration.yaml” die Datei öffnen und dann den “friendly_name” anpassen, ich verwende “HueGo”.

....
devices:
  '0x0017XXXXXXXXXXXX':
    friendly_name: HueGo

Schritt 4 – HueGo als OpenHab Thing anlegen

Nun legen wir die HueGo als Thing in OpenHab an, hierzu legen wir eine .thing Datei an

nano /etc/openhab2/things/zigbee.things

Und kopieren folgenden Inhalt

Bridge mqtt:broker:mosquitto "Mosquitto" [ host="127.0.0.1", port=1883, secure=false, username="xxxx", password="xxxx", clientID="openHAB2" ]
{
    Thing topic zigbeebridge "Zigbee2mqtt Bridge" {
    Channels:
        Type switch : permitJoin         [ commandTopic="zigbee2mqtt/bridge/config/permit_join", on="true", off="false" ]
        Type string : state              [ stateTopic="zigbee2mqtt/bridge/state" ]
        Type string : logType            [ stateTopic="zigbee2mqtt/bridge/log",  transformationPattern="JSONPATH:$.type" ]
        Type string : logMessage         [ stateTopic="zigbee2mqtt/bridge/log",  transformationPattern="JSONPATH:$.message" ]
    }
 	Thing topic HueGo "HueGo" {
    Channels:
        Type switch : state "HueGo1" 							[stateTopic="zigbee2mqtt/HueGo/state", commandTopic="zigbee2mqtt/HueGo/set/state",  on="ON", off="OFF" ]
        Type number : dimmer "HueGo_Dimmer" 					[stateTopic="zigbee2mqtt/HueGo/brightness", commandTopic="zigbee2mqtt/HueGo/set/brightness", min=0, max=255, step=1 ]
		Type colorRGB : color  "HueGo_Color"        			[stateTopic="zigbee2mqtt/HueGo/color", commandTopic="zigbee2mqtt/HueGo/set/color"]
		Type string : colorstring  "HueGo_Color"        			[stateTopic="zigbee2mqtt/HueGo/color", commandTopic="zigbee2mqtt/HueGo/set/color"]
		Type number : color_temperature "HueGo_Color Temp" 	[stateTopic="zigbee2mqtt/HueGo/color_temp", commandTopic="zigbee2mqtt/HueGo/set/color_temp"]
    }
}

Anschliessend legen wir ein entsprechende Items an, um die HueGo später auch mit HomeKit richtig nutzen zu können benötigen wir mehrere Items:

nano /etc/openhab2/items/zigbee.items
Switch HueGoSwitch "HueGoColor" (HueGo){ channel="mqtt:topic:mosquitto:HueGo:state"}
Number HueGo1Dimmer "HueGoColor" (HueGo){ channel="mqtt:topic:mosquitto:HueGo:dimmer"}
String HueGo1ColorString "HueGoColor String" (HueGo){ channel="mqtt:topic:mosquitto:HueGo:colorstring"}
Color HueGo2 "ColorGo" (HueGo)[ "Lighting" ]

Zu letzt benötigen wir noch eine Regel, welche die ausgewählte Farbe richtig an die HueGo sendet. In vielen anderen Beispielen werden hier Java Script Transformatoren benutzt, diese haben bei mir aber nicht funktioniert. Daher die Lösung über mehrere Items und eine Regel.

nano /etc/openhab2/rules/zigbee.rules
rule "HueGo - Color"
when
    Item HueGo2 received command
then
    var String result = ""

    if(receivedCommand == OFF)
    {
        HueGoSwitch.sendCommand(OFF)
    }
    else
    {
        var HSBType hsbValue = receivedCommand as HSBType
        val xyY = hsbValue.toXY.toString // convert to xyY
        val double x = Float::parseFloat(xyY.split(",").get(0).substring(1)) / 100.0 // scale to 0..1.0
        val double y = Float::parseFloat(xyY.split(",").get(1).substring(1)) / 100.0 // scale to 0..1.0
        val int   Y = (hsbValue.brightness * 2.55).intValue // scale to 0..255
       
        var String text="{\"x\":" + String.format("%.3f", x).replace(',','.') + ",\"y\":" + String.format("%.3f", y).replace(',','.') + "}"
       
        HueGo1Dimmer.sendCommand(Y)
        HueGo1ColorString.sendCommand(text)    
    }
end

Fertig, nun solltet ihr die Hue Go mit HomeKit oder über eure OpenHab Oberfläche steuern können.

Optionaler Schritt – Symlinks für USB Stick (Busware, Homematic, Zigbee CC2531, …)

Falls ihr wie ich mehrer USB Stick verwendet, in meinem fall ein Busware Stick um per Homegear Hommatic Geräte mit OpenHab zu steuern und nun den CC2531 Zigbee Stick, kann es sein das diese nach jedem Neustart mal ttyACM0 oder ttyACM1 heißen, was natürlich zu Problemen mit der statischen Konfiguration führt.

Die Lösung: wir vergeben Symbolische Namen für die beiden Sticks, die bei jedem Neustart zugewiesen werden. Dies geht mit Regeln welche ihr in die Datei

sudo nano /etc/udev/rules.d/99-com.rules

hinzufügt.

Diese Regeln ganz unten in die Datei schreiben

SUBSYSTEM=="tty", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SYMLINK+="ttyHomematic"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", ATTRS{serial}=="__0X0XXXXXXXXXX", SYMLINK+="ttyZigbee"

Die idVendor, idProduct und serial Information bekommt ihr mit dem Befehl

udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM1)

Nach einem Neustart könnt ihr mit dem Befehl

udevadm info -a -p $(udevadm info -q path -n /dev/ttyZigbee)

testen ob alles geklappt hat.

Nun müsst ihr nur noch in der Konfigurationsdatei den Port auf den neuen symbolischen Namen anpassen.

nano /opt/zigbee2mqtt/data/configuration.yaml
...
serial:
  port: /dev/ttyZigbee
...

Neustarten und fertig!

Hat alles geklappt oder habt ihr noch Fragen? Schreibt mir gerne einen Kommentar.

Mitarbeiterführung auf Distanz

Wir haben bei uns im Unternehmen natürlich eine Regelung zur Mobil Arbeit, welche Arbeiten von zu Hause aus ermöglicht und regelt, und ja auch im Umfang beschränkt. Diese gilt in “normalen Zeiten”, “normale Zeiten” sind im Prinzip alle Zeiten, hiervon ausgenommen sind nur Zeiten in denen die Verbreitung eines Virus das Ausmaß einer Pandemie annehmen …

Aber beginnen wir am Anfang, an einem Januarabend in 2020, kurz vor der Tagesschau (oder zumindest kurz bevor wir die Tagesschau streamen weil die Kinder nun schlafen 😉 ). Ich berichte meiner Frau das ich die Planung für die nächste Geschäftsreise nach China begonnen habe, 10 Minuten später … der Coronavirus hat es zum ersten Mal in die Tagesschau geschafft … meine Reisepläne sind auf Eis gelegt …

Fast Forward – mein Team in China ist mittlerweile wieder im Büro, der Rest der Welt, Arbeitet nun größtenteils im Home Office, hier ein paar Tipps für Führungskräfte, wie die Mitarbeiterführung auf Distanz gelingt:

Klare Regeln und Absprachen

Unabhängig davon ob Home Office in Corona-Zeiten oder mobil Arbeit im Normal-Zustand, wichtig ist das klar geregelt und abgesprochen ist, was ihr von euren Mitarbeitern erwartet.

  • Wie sieht es mit Erreichbarkeit aus? (Skype, Handy, …)
  • Wie wird dem restlichen Team kommuniziert wer, wenn und wo arbeitet? (Outlook Termine an das Team, Slack, …)
  • Wie sollen Arbeitszeiten erfasst und zurück gemeldet werden?
  • Wie sieht es generell mit Arbeitszeiten aus, ist diese wie im Büro am Stück (natürlich mit den vorgeschriebenen Pausen) zu leisten oder darf die Arbeit auch flexibler über den Tag und Abend verteilt werden? Gerade in Corona-Zeiten und Schulschliessungen ist es wichtig Flexibilität zu schaffen wenn es die Arbeitssituation zu lässt.

Vertrauen und Kontrolle

Ich suche Mitarbeiter denen ich vertrauen kann und gebe Ihnen das vertrauen auch, trotzdem halte ich es in der aktuellen Situation für Sinnvoll , täglichen Kontakt zu halten und ähnlich wie bei einem Agilen Stand-Up Meeting die Fragen

  • Was hast machst du heute?
  • Was planst du morgen?
  • Was behindert dich in deiner Arbeit?

zu stellen, ergänzt um die anfängliche Frage “Wie geht’s?”.

Für viele ist die Situation neu, sicherlich hat der ein oder andere auch schon früher Zuhause gearbeitet, aber das wahr weil in Deutschland viele Dienstleister mit kundenfreundlichen Service-Fenstern von 09:00 – 18:00 Uhr arbeiten und nicht weil man sich und die ganze Familie vor einer globalen Pandemie schützen musste. Deswegen ist es aus meiner Sicht einfach nur persönliche Wertschätzung der Mitarbeiter gegenüber und muss sein.

Die restlichen Fragen dienen weniger der eigentlichen Kontrolle, aber die Abstimmung ist in solchen Zeiten einfach schwieriger, Prioritäten ändern sich, und durch die Distanz und Technik ergeben sich auch neue Blocker.

Nicht zu letzt wegen der “Wie geht’s?” Frage denke ich auch das diese Meetings persönlich und nicht als “Gruppen-Status-Calls” stattfinden sollten.

Auch Home Office muss gelernt sein

Nicht zuletzt, es sit eine neue Situation, nicht jeder der Mitarbeiter mag Home Office erprobt sein, daher sprecht auch über die Home Office Do’s und Don’ts mit euren Mitarbeitern.

  • Auch im Home Office sind Pausen wichtig, ebenso wie ausreichend Trinken und im Idealfall Bewegung zwischen durch.
  • Auch Arbeitszeit Regelungen gelten weiterhin, d.h. Arbeit ist Arbeit und Freizeit ist Freizeit und nur weil Home jetzt auch im Office ist bedeutet das nicht das man rund um die Uhr arbeiten soll.
  • Auch der richtige Ort für das Home Office ist wichtig, genauso wie klare Regeln für die restlichen Mitbewohner …

Das T3N Magazin hat hierzu einen schönen Guide erstellt den ich euch und euren Mitarbeitern nur empfehlen kann: https://t3n.de/guides/corona-home-office-guide/

International Data SIM / International Data Plan – Keepgo Review

I frequently travel internationally either as part of my job or for personal reasons. While I’m on the road, especially when traveling job related, it is very important for me to stay connected. A while ago I came across the Keepgo lifetime data SIM card.

dfa6f16b-6c7c-4de3-b14f-5eaaa1f45266

What distinguishes Keepgo from other travel SIM cards is that it works in a lot of countries around the globe and that the data plan is valid a whole year. This means, for example, that I can use the international data plan while I’m in the taxi in Switzerland, when waiting for a connection flight in London and at my final destination in Shanghai.

There are two options to choice from to get started a 1 GB international data SIM only offer for $59 and a GB international data SIM + mobile WIFI hotspot offer for $119.

I tested the service in China, Switzerland, United Kingdom, Germany and in Spain and it worked very well.

If you use this link you get 15% off on your Keepgo lifetime data SIM card.

Automotive System Safety Europe

bildschirmfoto-2016-11-19-um-13-50-13 I will be speaking at the Automotive System Safety Europe conference in Berlin at November 29th, 2016. In my talk I will give some insides about how freedom from interference can be achieved in automotive systems. I will also discuss best practices on how to deal with mixed ASIL architectures and how freedom from interference can be achieved in legacy systems.

Personal Update

It has been a while since the last time I posted a blog post here. The reasons have been manyfold and include becoming a father for the first time, starting a job in industry while finishing up my PhD thesis and moving to a new house and all that at almost the exact same time 😉

All these milestones in my life obviously  shifted some the priorities in my life. This does not mean that the blog is no longer important for me, but I needed some time to decide in which direction I would like to go with this blog. After some time I know decided what I want this blog to be. I want it to be a reflection of my thoughts and ideas both professional and personal. This means that in the future I will write about

  • topics evolving around (automotive) software engineering, project management as well as functional safety
  • but also web development and technology in general and hobby-projects (e.g. home automation)
  • and I will write about my life as a dad

In terms of language I have not entirely decided whether all my blog posts will be in English or whether maybe the more personal ones will be in German.

I’m also not yet sure in which frequency I will be able to write blog posts but initially I will aim at one post per month … so keep tuned 😉

SPIN 2014 Talk: SpinCause: A Tool for Causality Checking

Today I talked at the SPIN 2014 symposium in San Jose, CA about the SpinCause tool. The slides for my talk are available here.

In this paper we present the SpinCause tool for causality checking of Promela and PRISM models. We give an overview of the capabilities of SpinCause and briefly sketch how the causality checking algorithms are integrated into the state-space exploration algorithms used for model checking. In addition we compare the runtime and memory needed for causality checking with the different state-space exploration algorithms and two newly proposed iterative causality checking approaches.

1st International Conference Automotive Embedded Systems

automotive_embedded_systems

I’m happy to announce that I will chair the 1st International Conference Automotive Embedded Systems. The Automotive Embedded Systems conference focuses on the challenges of nowadays automotive software and systems development.

The conference will be held from 25 – 27 February 2014 at the Lindner Hotel Airport, Düsseldorf, Germany.

We will discuss emerging trends in automotive software and systems engineering such as:

  • model-based engineering,
  • agile development,
  • autonomous driving,
  • safety and security,
  • and many more

I’m looking forward to meet you at the conference!

 

Neues Buch: Funktionale Sicherheit nach ISO 26262

IMG_6836

Ursprünglich hätte das Buch “Funktionale Sicherheit nach ISO 26262: Ein Praxisleitfaden zur Umsetzung” schon in 2012 erscheinen sollen. Mit einiger Verzögerung ist es nun am 31. Juli 2013 erschienen und ist damit aktuell eines der sehr wenigen verfügbaren deutschsprachigen Büchern das sich dem Thema funktionaler Sicherheit nach ISO 26262 widmet.

Kurzbeschreibung (Quelle Amazon):

Dieses Buch behandelt die prozessrelevanten Aspekte des funktionalen Sicherheitsmanagements und insbesondere die Umsetzung der Anforderungen aus der ISO 26262 hinsichtlich der Planungsaktivitäten. In aufeinander aufbauenden, strukturierten Schritten wird gezeigt, wie sicherheitsrelevante Komponenten geplant und welche Prozessanforderungen damit umgesetzt und verfolgt werden. Exemplarisch geschieht dies an einem durchgängigen Praxisbeispiel aus dem Automotive-Bereich, das den passenden Kontext liefert. Im Einzelnen werden erörtert:

– Rollen im Sicherheitslebenszyklus
– Konfigurations- und Änderungsmanagement
– ASIL (Automotive Safety Integrity Level)
– Gefährdungs- und Risikoanalyse
– Verifikations- und Validationsplanung
– Produktentwicklung auf Systemebene
– Dokumentation und Arbeitsprodukte
– Reviews
– Qualifizierung von Softwarewerkzeugen
– Retrospektive

Ergänzt werden die Ausführungen durch umfangreiche Umsetzungsbeispiele, hilfreiche Vorlagen und praktische Anwendungstipps. Der Leser wird auf diese Weise durch die notwendigen Prozessphasen des Sicherheitslebenszyklus begleitet und erwirbt ein tieferes Verständnis für den Aufbau des funktionalen Sicherheitsmanagements.

Ob das Buch hält was es verspricht in kürze hier.

Functional Safety Book recommendation: Design and Safety Assessment of Critical Systems

I have updated my list of literature on functional safety with the book of Marco Bozzano et al..
The book is a very well written introduction into the topic of safety assessment and functional safety and I can recommend it for readers on beginner levels as well as for functional safety experts that want learn more about formal methods and model checking in the context of safety assements.

Design and Safety Assessment of Critical Systems (recommended)

by Marco Bozzano and Adolfo Villafiorita

Short Description (source: amazon.com):
Safety-critical systems, by definition those systems whose failure can cause catastrophic results for people, the environment, and the economy, are becoming increasingly complex both in their functionality and their interactions with the environment. Unfortunately, safety assessments are still largely done manually, a time-consuming and error-prone process. The growing complexity of these systems requires an increase in the skill and efficacy of safety engineers and encourages the adoption of formal and standardized techniques. An introduction to the area of design and verification of safety-critical systems, Design and Safety Assessment of Critical Systems focuses on safety assessment using formal methods. Beginning with an introduction to the fundamental concepts of safety and reliability, it illustrates the pivotal issues of design, development, and safety assessment of critical systems. The core of the book covers traditional notations, techniques, and procedures, including Fault Tree Analysis, FMECA, HAZOP, and Event Tree Analysis, and explains in detail how formal methods can be used to realize such procedures. It looks at the development process of safety-critical systems, and highlights influential management and organizational aspects. Finally, it describes verification and validation techniques and new trends in formal methods for safety and concludes with some widely adopted standards for the certification of safety-critical systems. Providing an in-depth and hands-on view of the application of formal techniques to advanced and critical safety assessments in a variety of industrial sectors, such as transportation, avionics and aerospace, and nuclear power, Design and Safety Assessment of Critical Systems allows anyone with a basic background in mathematics or computer science to move confidently into this advanced arena of safety assessment.