{"id":371,"date":"2013-03-01T14:27:45","date_gmt":"2013-03-01T12:27:45","guid":{"rendered":"http:\/\/marko-seifert.de\/blog\/?p=371"},"modified":"2020-01-15T12:23:06","modified_gmt":"2020-01-15T10:23:06","slug":"teil-3-das-internet-der-dinge-logik","status":"publish","type":"post","link":"http:\/\/marko-seifert.de\/blog\/?p=371","title":{"rendered":"Teil 3: Das Internet der Dinge \u2013 Logik"},"content":{"rendered":"<h1>Ein Experiment mit Arduino, MQTT, Apache ActiveMQ und Apache Camel<\/h1>\n<div id='gallery-1' class='gallery galleryid-371 gallery-columns-3 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=400'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Use-cases-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Das Internet der Dinge: Use-Cases Simulation einer Alarmanlage\" aria-describedby=\"gallery-1-400\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-400'>\n\t\t\t\tDas Internet der Dinge: Use-Cases Simulation einer Alarmanlage\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=414'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/eai-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Das Internet der Dinge: EIP Pattern\" aria-describedby=\"gallery-1-414\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-414'>\n\t\t\t\tDas Internet der Dinge: EIP Pattern\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='http:\/\/marko-seifert.de\/blog\/?attachment_id=418'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Camel-HomeControl-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Das Internet der Dinge: schematischer Aufbau mit EIP-Pattern\" aria-describedby=\"gallery-1-418\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-418'>\n\t\t\t\tDas Internet der Dinge: schematischer Aufbau mit EIP-Pattern\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Im\u00a0<a href=\"http:\/\/marko-seifert.de\/blog\/?p=264\">ersten Teil des Blogs<\/a>\u00a0wurde die Hardware und die Infrastruktur und im <a href=\"http:\/\/marko-seifert.de\/blog\/?p=295\">zweiten Teil<\/a> die Vernetzung vorgestellt. Apache ActiveMQ wurde mit dem MQTT-Konnektor konfiguriert und die Arduino-Software Home Gateway beschrieben. Im letzten Teil des Blogs geht es um die intelligente Logik &#8211; die Fachlichkeit die entscheidet, was mit den gelesenen Werten der Sensoren passiert passieren soll und welche Aktoren angesteuert werden. Dazu wird das Framework Apache Camel verwendet.<\/p>\n<p><!--more--><\/p>\n<h2>Das Beispiel:\u00a0Simulation\u00a0einer Alarmanlage<\/h2>\n<p>Ich gebe zu, das gew\u00e4hlte Beispiel &#8211; Simulation\u00a0einer Alarmanlage &#8211; ist nicht besonders intelligent. Mir ist leider kein besserer Anwendungsfall eingefallen. Mein Ansatz im Blog war, die Technischen Grundlagen daf\u00fcr auszuprobieren.<\/p>\n<p>Das Beispiel hat folgende 3 Use-Cases:<\/p>\n<ol>\n<li>Alarmanlage aktivieren<\/li>\n<li>Alarm ausl\u00f6sen<\/li>\n<li>Alarm ausschalten und Alarmanlage deaktivieren<\/li>\n<\/ol>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Use-cases.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-400\" title=\"Use-cases\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Use-cases.png\" alt=\"\" width=\"530\" height=\"408\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Use-cases.png 530w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Use-cases-300x230.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Use-cases-389x300.png 389w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: 10px; letter-spacing: 0.1em; line-height: 2.6em; text-transform: uppercase;\">Alarmanlage aktivieren<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<th>Name<\/th>\n<th>UC\u00a0Alarmanlage aktivieren<\/th>\n<\/tr>\n<tr>\n<td><strong>Akteure<\/strong><\/td>\n<td>Mieter<\/td>\n<\/tr>\n<tr>\n<td><strong>Beschreibung<\/strong><\/td>\n<td>Der Mieter einer Wohnung kann die Alarmanlage aktivieren. Ab da sind die Sensoren aktiv.<\/td>\n<\/tr>\n<tr>\n<td><strong>Ausl\u00f6ser \/ Vorbedingungen<\/strong><\/td>\n<td>Der Mieter dr\u00fcckt den Taster S1 auf dem Bedienpult und aktiviert damit die Alarmanlage. \/ Die Alarmanlage ist deaktiviert<\/td>\n<\/tr>\n<tr>\n<td><strong>Ergebnisse<\/strong><\/td>\n<td>Die Alarmanlage wird aktiviert, die LED 1 leuchtet<\/td>\n<\/tr>\n<tr>\n<td><strong>Ablauf\/Hinweise<\/strong><\/td>\n<td>\n<ul>\n<li>Nutzer dr\u00fcckt den Taster S1<\/li>\n<li>Event wird vom HomeGateway per MQTT an den MessageBroker gesendet (Nachricht: [6,1])<\/li>\n<li>Der HomeControler erh\u00e4lt die Nachricht und \u00e4ndert den Status auf &#8222;aktiviert&#8220;<\/li>\n<li>Der HomeController sendet per MQTT eine Nachricht ([1,1]) an den Broker<\/li>\n<li>Das HomeGateway erh\u00e4lt die Nachricht und schaltet DeviceID = 1 (LED1) auf HIGH<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Varianten\/alternativer Ablauf<\/strong><\/td>\n<td>kein<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Alarm ausl\u00f6sen<\/h3>\n<table>\n<tbody>\n<tr>\n<th>Name<\/th>\n<th>UC\u00a0Alarm ausl\u00f6sen<\/th>\n<\/tr>\n<tr>\n<td><strong>Akteure<\/strong><\/td>\n<td>\u00a0Einbrecher<\/td>\n<\/tr>\n<tr>\n<td><strong>Beschreibung<\/strong><\/td>\n<td>Der Einbrecher wird durch den Sensor (Taster S2) bemerkt und meldet den Alarm<\/td>\n<\/tr>\n<tr>\n<td><strong>Ausl\u00f6ser \/ Vorbedingungen<\/strong><\/td>\n<td>Sensor (Taster S2) liest HIGH-Signal \/ Alarmanlage wurde aktiviert<\/td>\n<\/tr>\n<tr>\n<td><strong>Ergebnisse<\/strong><\/td>\n<td>Alarm wurde ausgel\u00f6st, Sirene und Signalleuchte gehen an (im Simulator LED 2)<\/td>\n<\/tr>\n<tr>\n<td><strong>Ablauf\/Hinweise<\/strong><\/td>\n<td>\n<ul>\n<li>Einbrecher wird vom Sensor bemerkt (Taster S2)<\/li>\n<li>Event wird vom HomeGateway per MQTT an den MessageBroker gesendet (Nachricht: [7,1])<\/li>\n<li>Der HomeControler erh\u00e4lt die Nachricht, der Status der Alarmanlage ist auf &#8222;aktiviert&#8220;, die Alarmmeldung wird akzeptiert<\/li>\n<li>Der HomeController sendet per MQTT eine Nachricht ([2,1]) an den Broker<\/li>\n<li>Das HomeGateway erh\u00e4lt die Nachricht und schaltet DeviceID = 2 (LED2) auf HIGH<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Varianten\/alternativer Ablauf<\/strong><\/td>\n<td>\n<ul>\n<li>Alarmmeldung wird \u00fcbermittelt und der Status der Alarmanlage ist &#8222;deaktiviert&#8220;<\/li>\n<li>nachricht wird verworfen<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Alarm ausschalten und Alarmanlage deaktivieren<\/h3>\n<table>\n<tbody>\n<tr>\n<th>Name<\/th>\n<th>UC\u00a0Alarm ausschalten und Alarmanlage deaktivieren<\/th>\n<\/tr>\n<tr>\n<td><strong>Akteure<\/strong><\/td>\n<td>Mieter<\/td>\n<\/tr>\n<tr>\n<td><strong>Beschreibung<\/strong><\/td>\n<td>Der Mieter einer Wohnung kann die Alarmanlage deaktivieren. Ab da sind die Sensoren inaktiv. Bestehende Alarmmeldungen werden gel\u00f6scht und Sirene und Signalleuchte (im Simulator LED 2) ausgeschalten.<\/td>\n<\/tr>\n<tr>\n<td><strong>Ausl\u00f6ser \/ Vorbedingungen<\/strong><\/td>\n<td>Der Mieter dr\u00fcckt den Taster S1 auf dem Bedienpult und deaktiviert damit die Alarmanlage. \/ Die Alarmanlage ist aktiviert<\/td>\n<\/tr>\n<tr>\n<td><strong>Ergebnisse<\/strong><\/td>\n<td>Die Alarmanlage wird deaktiviert, die LED 1 ist ausgeschalten<\/td>\n<\/tr>\n<tr>\n<td><strong>Ablauf\/Hinweise<\/strong><\/td>\n<td>\n<ul>\n<li>Nutzer dr\u00fcckt den Taster S1<\/li>\n<li>Event wird vom HomeGateway per MQTT an den MessageBroker gesendet (Nachricht: [6,1])<\/li>\n<li>Der HomeControler erh\u00e4lt die Nachricht und \u00e4ndert den Status auf &#8222;deaktiviert&#8220;<\/li>\n<li>Der HomeController sendet per MQTT eine Nachricht ([1,0]) an den Broker<\/li>\n<li>Das HomeGateway erh\u00e4lt die Nachricht und schaltet DeviceID = 1 (LED1) auf LOW<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td><strong>Varianten\/alternativer Ablauf<\/strong><\/td>\n<td>kein<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #000000; font-weight: bold;\">Apache Camel<\/span><\/p>\n<p>Apache Camel ist ein Framework f\u00fcr die Intergration von verschiedensten System \u00fcber die unterschiedlichsten Schnittstellen. Es implementiert die\u00a0<a title=\"Enterprise Integration Patterns\" href=\"http:\/\/camel.apache.org\/enterprise-integration-patterns.html\" shape=\"rect\">Enterprise Integration Patterns<\/a>\u00a0nach dem gleichnamigen <a href=\"http:\/\/www.eaipatterns.com\/\">Buch<\/a>. In der folgenden Grafik sind die elementaren Bestandteil dargestellt.<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/eai.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-414\" title=\"eai\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/eai.png\" alt=\"\" width=\"215\" height=\"370\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/eai.png 215w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/eai-174x300.png 174w\" sizes=\"auto, (max-width: 215px) 100vw, 215px\" \/><\/a><\/p>\n<p>\u00dcber eine relativ einfache API werden die Bestandteile zum Messagesystem zusammengesetzt:<\/p>\n<pre>RouteBuilder#configure(){\r\n from(EP1).to(EP2);\r\n<span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\"> from(EP1).bean(myBean, \"doSomething\"); <\/span><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\"> from(EP1).process(myProcessor); <\/span><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\"> from(EP1).transform(myBean, \"doSomething\"); <\/span><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\"> from(EP1).recipientList(simple(\"direct:${header.operationName}\")); <\/span><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\">from(EP1).multicast().to(EP2, EP3,EP4); <\/span><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\"> ... }\u00a0<\/span><\/pre>\n<p>Neben der Java-API gibt es auch die M\u00f6glichkeit die Bestandteile per Spring-XML zu verbinden:<\/p>\n<pre>&lt;camelContext xmlns=\"http:\/\/camel.apache.org\/schema\/spring\"&gt; \r\n &lt;route&gt;\r\n &lt;from uri=\"EP-URI1\"\/&gt;\r\n &lt;to uri=\"EP-URI2\"\/&gt;\r\n &lt;\/route&gt;\r\n&lt;\/camelContext&gt;<\/pre>\n<h2>HomeControl<\/h2>\n<p>Das folgende Bild in EIP-Notation zeigt den schematischen Aufbau des Messagingsystems. Apache Camel wird auch per MQTT \u00fcber einen entsprechenden Endpoint an dem Nachrichtenkanal des Brokers angebunden.<\/p>\n<p><a href=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Camel-HomeControl.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-418\" title=\"Camel-HomeControl\" src=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Camel-HomeControl.png\" alt=\"\" width=\"567\" height=\"248\" srcset=\"http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Camel-HomeControl.png 567w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Camel-HomeControl-300x131.png 300w, http:\/\/marko-seifert.de\/blog\/wp-content\/uploads\/2013\/02\/Camel-HomeControl-500x218.png 500w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/a><\/p>\n<p>Mit folgendem Code wird das Routing und die Bearbeitung realisiert:<\/p>\n<pre><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\">from(\"mqtt:in?subscribeTopicName=sensor-topic-in\").process(<\/span><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\"> alarmProcessor).to(\"file:\/\/out\");<\/span><\/pre>\n<pre><span style=\"font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 13px; font-style: normal; line-height: 1.5;\">from(\"file:\/\/out\").to(\"mqtt:out?publishTopicName=<\/span>actor-topic-out\");<\/pre>\n<p>Die Nachrichten werden aus dem Topic\u00a0<em>sensor-topic-in<\/em> gelesen. \u00dcber <em>process(alarmProcessor)<\/em>\u00a0wird die Nachricht an dem <em>AlarmProcessore<\/em> \u00fcbergeben. Dort werden die Nachrichten fachlich verarbeitet und die Steuernachricht f\u00fcr die Aktoren erstellt. Am Ende des Nachrichtenkanals werden die Nachrichten im Dateisystem (<em>file:\/\/out<\/em>) zwischengespeichert. Im zweiten Nachrichtenkanal werden die Nachrichten dort ausgelesen und an dem Broker \u00fcbergeben. Aus dem Topic\u00a0<em>actor-topic-out<\/em> kann dann das Homgateway (Arduino-Board) die Nachrichten empfangen.<\/p>\n<p>Das zugeh\u00f6rige Projekt kann aus dem <a href=\"https:\/\/github.com\/msedd\/HomeControl\">GITHUB-Repository<\/a> geladen werden.<\/p>\n<h2>Ergebnis<\/h2>\n<p><iframe loading=\"lazy\" src=\"http:\/\/www.youtube.com\/embed\/Aw4OkUgAOSI?feature=player_detailpage\" width=\"640\" height=\"360\" frameborder=\"0\"><\/iframe><\/p>\n<p>Bitte die schlechte Videoqualit\u00e4t entschuldigen.<br \/>\nIch habe kein besseres Ger\u00e4t f\u00fcr die Aufnahme<\/p>\n<h2>Ausblick<\/h2>\n<p>Durch den Message-orientierten Aufbau, hat man eine saubere Trennung der\u00a0Verantwortungen\u00a0in der Architektur. Das System skaliert, es bietet M\u00f6glichkeiten f\u00fcr Authentifizierung und Autorisierung und es k\u00f6nnen beliebig weitere Systeme wie Sensoren, Aktoren, oder Mobile Ger\u00e4te als User Interface f\u00fcr die Steuerung hinzugef\u00fcgt werden. Mit dem Einsatz von Apache Camel f\u00fcr das Bearbeiten und Routing der Nachrichten hat man ein starkes Werkzeug zur Verf\u00fcgung, die fachliche Logik relativ einfach anzupassen oder erweitern zu k\u00f6nnen. Mit folgender Zeile Code k\u00f6nnte man zus\u00e4tzlich ein E-Mail verschicken.<\/p>\n<pre>from(\"file:\/\/alarm\").to(\"smtp:\/\/MAIL_HOST?to=MAIL_TO&amp;subject=Einbruch!!!&amp;from=MAIL_FROM\");<\/pre>\n<h2>Links<\/h2>\n<ul>\n<li><a href=\"http:\/\/www.redbooks.ibm.com\/redbooks\/pdfs\/sg248054.pdf\">Building Smarter Planet Solutions with MQTT and IBM WebSphere MQ Telemetry<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/msedd\/HomeControl\">HomeControl Source Code<\/a><\/li>\n<li><a href=\"http:\/\/de.wikipedia.org\/wiki\/Apache_Camel\">Apache Camel Wikipedia<\/a><\/li>\n<li><a href=\"http:\/\/camel.apache.org\/\">Apache Camel<\/a><\/li>\n<li><a href=\"http:\/\/camel.apache.org\/mqtt.html\">Apache Camel MQTT<\/a><\/li>\n<li><a href=\"http:\/\/www.slideshare.net\/markoseifert39\/workshop-apache-camel-16596550\">Workshop Apache Camel<\/a><\/li>\n<li><a title=\"Enterprise Integration Patterns\" href=\"http:\/\/camel.apache.org\/enterprise-integration-patterns.html\" shape=\"rect\">Enterprise Integration Patterns<\/a><\/li>\n<li><a title=\"Teil 1: Das Internet der Dinge - Infrastruktur und Ger\u00e4te\" href=\"http:\/\/marko-seifert.de\/blog\/?p=264\">Teil 1: Das Internet der Dinge &#8211; Infrastruktur und Ger\u00e4te<\/a><\/li>\n<li><a href=\"http:\/\/marko-seifert.de\/blog\/?p=295\">Teil 2: Das Internet der Dinge &#8211; Vernetzung<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ein Experiment mit Arduino, MQTT, Apache ActiveMQ und Apache Camel Im\u00a0ersten Teil des Blogs\u00a0wurde die Hardware und die Infrastruktur und im zweiten Teil die Vernetzung vorgestellt. Apache ActiveMQ wurde mit dem MQTT-Konnektor konfiguriert und die Arduino-Software Home Gateway beschrieben. Im letzten Teil des Blogs geht es um die intelligente Logik &#8211; die Fachlichkeit die entscheidet, was mit den gelesenen Werten der Sensoren passiert passieren soll und welche Aktoren angesteuert werden. Dazu wird das Framework Apache Camel verwendet.<\/p>\n","protected":false},"author":1,"featured_media":418,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,172,4,12,10],"tags":[59,58,161,60,57,127,128,103,56,55],"class_list":["post-371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-iot","category-java","category-microcontroller","category-softwarearchitektur","tag-apache-activemq","tag-apache-camel","tag-arduino","tag-broker","tag-eai","tag-internet-der-dinge","tag-internet-of-things","tag-m2m","tag-messaging","tag-mqtt"],"_links":{"self":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=371"}],"version-history":[{"count":44,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/371\/revisions"}],"predecessor-version":[{"id":1087,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/371\/revisions\/1087"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=\/wp\/v2\/media\/418"}],"wp:attachment":[{"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=371"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/marko-seifert.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}