ATIX #CrewDay: Rhino lernt Sprechen!
Beim #CrewDay werden selbstverständlich die Kollegen aus dem Marketing nicht außenvorgelassen. Daher ist es wichtig Themen zu finden, die für alle Abteilungen relevant sind. Vor diesem Hintergrund hatte vor einiger Zeit ein Kollege die Idee mittels Sprachsteuerung einen neuen Host mit Hilfe von orcharhino zu erstellen. Ein perfektes Projekt für den #CrewDay! Also hieß es nicht lange fackeln, sondern unserem Rhino das Sprechen beibringen. Rhino? Ist das ein Kollege bei ATIX? Fast – Rhino ist das „Maskottchen“ unseres Produkts orcharhino. Mit diesem können Rechenzentren weiter automatisiert und das Deployment, Configuration- und Patch Management von Linux Servern unter einer einheitlichen Oberfläche umgesetzt werden.
Doch zurück zu unserem kleinen Alexa-Projekt: Zunächst galt es die dafür vorhandenen Möglichkeiten auszuloten. Variante eins wäre eine eigene Alexa Skill zu schreiben. Variante zwei ist die, für die wir uns zunächst entschieden haben: Als Kommunikationsvermittler zwischen Amazon Echo Dot und orcharhino nutzten wir Node-RED. Node-RED wurde initial von IBM entworfen und steht unter einer Open Source Lizenz. Dadurch lassen sich Szenarien im Internet der Dinge direkt im Browser wie in einem Baukastensystem zusammensetzen. Neben Alexa sind weitere Module für Google Dienste, IRC, Social Media Plattformen und zur Steuerung von Smart Home Geräten verfügbar. Dabei kam gleich eine weitere Idee auf: Warum nicht mit Hilfe eines Tweets einen neuen Server per orcharhino bauen?
Nach der Installation von Node-RED mittels „npm“ kann man mit dem Browser per http://127.0.0.1:1880 direkt darauf zugreifen. Weitere Module können per „Manage Palette“ über das Menu auf der rechten Seite neben „Deploy“ gesucht und installiert werden. Hier haben wir das Modul node-red-contrib-alexa-home-skill [1] hinzugefügt. Dieses Modul nutzt einen Server [2] im Internet mit dem es zwischen Alexa und Node-RED kommuniziert. Eigentlich wollten wir das vermeiden und alles lokal umsetzen. Doch dann stellten wir fest, dass andere Module [3], die sich mit dem lokalen Netzwerk begnügen, ausscheiden. Denn Node-RED, Alexa und orcharhino sind nicht im gleichen Netzwerk. Es dauerte ein paar Minuten bis eine erfolgreiche Kommunikation zwischen Alexa und Node-RED bestand. Nun konnten wir erste Sprachbefehle über Node-RED empfangen. Als nächstes galt es nun, orcharhino anzubinden.
In Node-RED ist ein Modul zum Senden von HTTP Requests vorhanden. Die API von orcharhino erlaubt so gut wie alles über entsprechende API Aufrufe zu steuern. Dies beinhaltet das Anlegen von Content Views, das Löschen von Compute Resources sowie das Starten eines Deployment-Prozesses für neue Hosts. Dies war in Kürze geschafft und wir konnten Alexa mit „Alexa, rhino ein“ (wir verwenden rhino statt orcharhino , denn wir als Entwickler wissen: „In der Kürze liegt die Würze“;) ) auffordern, einen neuen Host zu bauen.
Nun noch die Auflösung für alle, die sich wundern, warum wir „orcharhino ein“ als Kommando verwendet haben: Dieser node-red-contrib-alexa-home-skill bildet intern Smart Home Funktionalitäten wie Lampensteuerung ab. Daher ist der Skill von Sytax- und Sprachbefehlen für unseren Anwendungsfall ungeeignet.
Doch das sei nur am Rande erwähnt, nun wieder zurück zum Essentiellen:
Die Erstellung neuer Hosts mittels Tweet und dem Posten einer Nachricht in einen IRC Channel, sobald ein neuer Host verfügbar ist ?
Der fertige Node-RED Flow sieht folgendermaßen aus:
Für die Ansteuerung der orcharhino API mussten wir den Header und den HTTPS Post Body definieren. Hierfür haben wir folgende Methode verwendet:
//set headers and payload var payload = { "host": { "enabled": true, "compute_resource_id":"1", "hostgroup_id":"1", "location_id":"2", "organization_id":"1", "compute_attributes": { "start":"1" }, "interfaces_attributes": { "0":{ "subnet_id":"1" } } }}; // construct the result msg.payload= JSON.stringify(payload); msg.headers = {}; msg.headers["Content-Type"] = "application/json"; msg.headers["Accept"] = "application/json"; return msg;
Nachdem die Nachricht per „Send orcharhino HTTPS Post“ abgeschickt wurde, erhält Node-RED die Antwort auf den HTTPS Post Request in „Set New Host Msg“. In dieser Javascript Funktion extrahieren wir den Namen des neuen Hosts:
//Set New Host Msg var hostname = msg.payload.match(/"name":"([a-zA-Z-\.]*).stage.atix"/); var msg = {}; if (hostname !== null{ msg.payload = "New Host created: " + hostname[1]; } return msg;
In der restlichen Zeit haben wir uns noch überlegt, wie wir einen eigenen Alexa Skill so entwerfen, dass wir auf den entfernten Server verzichten und zudem richtige Kommandos à la „Alexa, baue mit orcharhino einen mittelgroßen Host“ geben können. Hier hatten wir wieder das Problem mit unterschiedlichen Netzwerksegmenten. Leider ging uns dann die Zeit aus, um eine adäquate Lösung zu finden. Bei einem der nächsten ATIX #CrewDays wollen wir dies jedoch nochmal aufgreifen und einen eigenen Alexa Skill entwerfen.
Was haben wir gelernt:
– die Sprachsteuerung über Alexa ist ziemlich gut!
– Node-RED als Tool zur Vernetzung von Internet der Dinge Komponenten ist sehr mächtig!
– es macht Spaß mit orcharhino ausgefallene Ideen umzusetzen!
[1] https://www.npmjs.com/package/node-red-contrib-alexa-home-skill
[2] https://alexa-node-red.bm.hardill.me.uk/
[3] https://www.npmjs.com/package/node-red-contrib-alexa-local
Amazon hat mit Alexa bzw. Echo (Dot) Maßstäbe gesetzt. Es ist davonauszugehen, dass sich unser Projekt auch mit anderen Systemen wie Google Home Assistant oder Apple HomePod umsetzen lässt.
Was ist orcharhino?
orcharhino ist DAS Tool um in einem Rechenzentrum Server automatisch zu deployen, Configuration Management durchzuführen und mittels Patch Managment immer up-2-date zu sein. In orcharhino werden mehrere Open Source Technologien miteinander verbunden um die Ziele Automatisierung und Standardisierung zu erreichen. Dazu bietet orcharhino drei Kernfunktionen; Deployment, Patch Management, Configuration Management und noch einiges mehr. Alles natürlich Enterprise tauglich.
On 20.11.2017 it was time again: All colleagues of ATIX AG – from consultants and developers to marketing and support, met at the ATIX #CrewDay to exchange ideas and work together on different projects. Of course, they are all about LINUX & Open Source.
Of course, the #CrewDay does not exclude colleagues from marketing. Therefore, it is important to find topics that are relevant for all departments. Against this background, a colleague had the idea some time ago to create a new host with the help of orcharhino using voice control. A perfect project for #CrewDay! So, it wasn’t long torchlighting, but teaching our rhino to speak. Rhino? Is that a colleague at ATIX? Almost – Rhino is the „mascot“ of our product „orcharhino„. With this, data centers can be further automated and the deployment, configuration and patch management of Linux servers can be implemented under a uniform user interface.
But back to our little Alexa project: First of all, we had to explore the available possibilities. Variant one would be to write your own Alexa Skill. Variant two is the one we initially chose: As a communication intermediary between Amazon Echo Dot and orcharhinowe used Node-RED. Node-RED was originally designed by IBM and is licensed under an open source license. This means that scenarios in the Internet of Things can be put together directly in the browser as if in a modular system. In addition to Alexa, other modules are available for Google services, IRC, social media platforms and for controlling Smart Home devices. A further idea came up: Why not build a new server with the help of a tweet via orcharhino?
After the installation of Node-RED with „npm“ you can access it directly with the browser via http://127.0.0.1:1880. Further modules can be searched for and installed using the „Manage Palette“ menu on the right-hand side next to „Deploy“. Here we have added the module node-red-contrib-alexa-home-skill[1]. This module uses a server[2] in the internet with which it communicates between Alexa and Node-RED. Actually, we wanted to avoid this and implement everything locally. But then we found out that other modules[3], which are content with the local network, are no longer available. Because Node-RED, Alexa and orcharhino are not in the same network. It took a few minutes until a successful communication between Alexa and Node-RED took place. Now we could receive the first voice commands via Node-RED. The next step was to bind orcharhino. A module for sending HTTP requests exists in Node-RED. The API of orcharhino allows you to control almost everything via API calls. This includes creating content views, deleting compute resources, and starting a deployment process for new hosts. This was soon done and we could ask Alexa with „Alexa, rhino ein“ (we use rhino instead of orcharhino, because we as developers know:““Keep it short and sweet““;)) to build a new host.
Now the resolution for all those who wonder why we used „orcharhino ein“ as a command: This node-red-contrib-alexa-home-skill internally maps Smart Home functionalities such as lamp control. Therefore, the skill of Sytax and voice commands is unsuitable for our application. But let me mention this only marginally, now back to the essential: Creating new hosts using Tweet and posting a message to an IRC channel as soon as a new host is available: -)
The finished Node-RED Flow looks like this:
To control the orcharhino API we had to define the header and HTTPS Post Body. We have used the following method for this:
//set headers and payload var payload = { "host": { "enabled": true, "compute_resource_id":"1", "hostgroup_id":"1", "location_id":"2", "organization_id":"1", "compute_attributes": { "start":"1" }, "interfaces_attributes": { "0":{ "subnet_id":"1" } } }}; // construct the result msg.payload= JSON.stringify(payload); msg.headers = {}; msg.headers["Content-Type"] = "application/json"; msg.headers["Accept"] = "application/json"; return msg;
After the message has been sent via „Send orcharhino HTTPS Post“, Node-RED receives the response to the HTTPS Post Request in „Set New Host Msg“. In this Javascript function we extract the name of the new host:
// Set New Host Msg{ var hostname = msg.payload.match(/"name":"([a-zA-Z-\.]*).stage.atix"/); var msg = {}; if (hostname !== null{ msg.payload = "New Host created: " + hostname[1]; } return msg;
In the rest of the time we thought about how to design our own Alexa Skill in such a way that we can do without the remote server and give real commands à la „Alexa, build with orcharhino a medium-sized host“. Here again we had the problem with different network segments. Unfortunately, we ran out of time to find an adequate solution. At one of the next ATIX CrewDays we want to take this up again and design our own Alexa Skill.
What have we learned:
– the voice-control over Alexa is pretty good!
– Node-RED as a tool for networking Internet of things components is very powerful!
– It’s fun to realize unusual ideas with orcharhino!
[1] https://www.npmjs.com/package/node-red-contrib-alexa-home-skill
[2] https://alexa-node-red.bm.hardill.me.uk/
[3] https://www.npmjs.com/package/node-red-contrib-alexa-local
Amazon has set standards with Alexa and Echo (Dot). It is to be assumed that our project can also be implemented with other systems such as Google Home Assistant or Apple HomePod.
What is orcharhino?
orcharhino is THE tool for deploying servers automatically in a data center, performing configuration management and being always up to date with patch management. In orcharhino several open source technologies are combined to achieve the goals of automation and standardization. In addition, orcharhino offers three core functions: deployment, patch management, configuration management and much more. Of course, everything is Enterprise compatible.