{"id":3464,"date":"2020-07-02T11:05:07","date_gmt":"2020-07-02T09:05:07","guid":{"rendered":"https:\/\/www.basyskom.de\/?p=3464"},"modified":"2020-07-02T12:25:40","modified_gmt":"2020-07-02T10:25:40","slug":"opc-ua-pubsub-with-open62541-and-azure-iot-hub","status":"publish","type":"post","link":"https:\/\/www.basyskom.de\/en\/opc-ua-pubsub-with-open62541-and-azure-iot-hub\/","title":{"rendered":"Connect OPC UA with open62541 to MS Azure IoT Hub"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"3464\" class=\"elementor elementor-3464\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-922a3e2 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"922a3e2\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dcf641c\" data-id=\"dcf641c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3b4b5ae elementor-widget elementor-widget-text-editor\" data-id=\"3b4b5ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><img decoding=\"async\" class=\"wp-image-3560\" src=\"https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541-1024x383.png\" alt=\"open62541\" width=\"177\" height=\"66\" align=\"right\" srcset=\"https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541-1024x383.png 1024w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541-300x112.png 300w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541-768x287.png 768w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541-1536x575.png 1536w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541-560x209.png 560w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_open62541.png 1604w\" sizes=\"(max-width: 177px) 100vw, 177px\" \/> <img decoding=\"async\" class=\"wp-image-3561\" src=\"https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua-1024x383.png\" alt=\"opc ua\" width=\"177\" height=\"66\" align=\"right\" srcset=\"https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua-1024x383.png 1024w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua-300x112.png 300w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua-768x287.png 768w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua-1536x575.png 1536w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua-560x209.png 560w, https:\/\/www.basyskom.de\/wp-content\/uploads\/2020\/05\/partner_opcua.png 1604w\" sizes=\"(max-width: 177px) 100vw, 177px\" \/>OPC UA PubSub is defined in <a href=\"https:\/\/reference.opcfoundation.org\/v104\/Core\/docs\/Part14\/\" target=\"_blank\" rel=\"noopener\">part 14<\/a> of the OPC UA specification and introduces publish and subscribe capabilities in addition to the client server model. This article reviews the current state of PubSub in open62541 and shows how it can be used to connect an OPC UA server directly with an Azure IoT Hub.<\/p><p>As always in OPC UA, the data mapping and transport mechanisms are very flexible. In case of PubSub, this means that messages can be transmitted directly into a network (for example as multicast via UDP or raw ethernet frames via TSN) or through a message broker using protocols like MQTT or AMQP.<\/p><p>Having one-to-many messaging in OPC UA is interesting for use cases where data is only sent sporadically (sensors) or where large amounts of values must be sent with a high frequency or on a fixed schedule. The ability to reach multiple consumers with just one publish also reduces the processing power and network bandwidth required by the producer.<\/p><p>The introduction of broker based messaging in combination with the JSON mapping is an important step in simplifying the integration of OPC UA with cloud based services.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-77151da elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"77151da\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2247cc8\" data-id=\"2247cc8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-028c67c elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"028c67c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"hm hm-sitemap2\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce36d13 elementor-widget elementor-widget-text-editor\" data-id=\"ce36d13\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>OPC UA PubSub support in open62541<\/h2><p>The <a href=\"https:\/\/open62541.org\/doc\/current\/pubsub.html\" target=\"_blank\" rel=\"noopener\">PubSub implementation<\/a> in open62541 is progressing rapidly.<\/p><p>So far, open62541 supports UDP, raw Ethernet and MQTT transports with UADP (binary) or JSON encoding.<\/p><p>Publishers can publish values of node attributes. If the publisher application is also an OPC UA server, it can optionally provide clients with meta information on the data it publishes.<\/p><p>A subscriber can receive messages. If the subscriber application is also an OPC UA server, it is able to expose the most recent received values in its address space.<\/p><p>The implementation is also\u00a0<a href=\"https:\/\/github.com\/open62541\/open62541\/tree\/master\/examples\/pubsub_realtime\" target=\"_blank\" rel=\"noopener\">real time<\/a>\u00a0capable.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6770786 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"6770786\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c3838d5\" data-id=\"c3838d5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-93740aa elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"93740aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"hm hm-bond\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-982ab47 elementor-widget elementor-widget-text-editor\" data-id=\"982ab47\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Publishing to Azure IoT Hub via MQTT<\/h2><p>In our &#8220;basysKom industrial automation showcase&#8221;, we use an open62541 based OPC UA server to provide data to different clients like HMIs or the cloud connector. The current cloud connector reads the data from the OPC UA server\u00a0and then sends them to an IoT Hub using the Azure IoT SDK.<\/p><p>As mentioned in our\u00a0<a style=\"background-color: #ffffff;\" href=\"https:\/\/www.basyskom.de\/en\/2020\/connect-qt-app-with-azure-iot-hub\/\">IoT Hub article<\/a>, an IoT Hub can also be used directly via MQTT.\u00a0 This requires a TLS capable MQTT client. For authentication, it must be able to login at the MQTT broker using username and password. Iot Hub Devices with X.509 certificate authentication must present a client certificate. In this case, only the username must be used during login. An exact description of the credentials, client id and topics the client must use are described\u00a0<a style=\"background-color: #ffffff;\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-hub\/iot-hub-mqtt-support#using-the-mqtt-protocol-directly-as-a-device\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p><p>After a basic evaluation of the PubSub implementation in open62541, we wanted to replace the current cloud connector by publishing PubSub messages with JSON mapping directly to the MQTT broker of our IoT Hub.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2464d6d elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"2464d6d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a6cb766\" data-id=\"a6cb766\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a71ef24 elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"a71ef24\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-github\" viewbox=\"0 0 496 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cf89e54 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"cf89e54\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ae2b540\" data-id=\"ae2b540\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-04017cc elementor-widget elementor-widget-text-editor\" data-id=\"04017cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Our contribution to open62541<\/h2><p>TLS and login support were not available in the current implementation of the MQTT transport, so we decided to contribute\u00a0<a href=\"https:\/\/github.com\/open62541\/open62541\/pull\/3621\" target=\"_blank\" rel=\"noopener\">username\/password<\/a>\u00a0and\u00a0<a href=\"https:\/\/github.com\/open62541\/open62541\/pull\/3637\" target=\"_blank\" rel=\"noopener\">TLS<\/a>\u00a0support to open62541.<\/p><p>The MQTT transport plugin has been extended with five new connection options:<\/p><table><tbody><tr><th>Option<\/th><th>Use<\/th><\/tr><tr><td>mqttUseTLS<\/td><td>Set this to true to use TLS for the connection<\/td><\/tr><tr><td>mqttCaFilePath<\/td><td>The path to the file containing CA certificates in PEM format<\/td><\/tr><tr><td>mqttCaPath<\/td><td>The path to a directory containing CA certificate files in PEM format<\/td><\/tr><tr><td>mqttClientCertPath<\/td><td>The path to the client certificate in PEM or DER format<\/td><\/tr><tr><td>mqttClientKeyPath<\/td><td>The path to the private key for the client certificate in PEM or DER format<\/td><\/tr><\/tbody><\/table><p>If neither\u00a0<code data-no-translation=\"\">mqttCaFilePath<\/code>\u00a0nor\u00a0<code data-no-translation=\"\">mqttCaPath<\/code>\u00a0are available, the system&#8217;s default location will be used. To use a client certificate, both of the <code data-no-translation=\"\">mqttClientCertPath<\/code> and <code data-no-translation=\"\">mqttClientKeyPath<\/code> options must be specified.<\/p><p>TLS support has only been implemented for OpenSSL for now. It is activated by building open62541 with the CMake option\u00a0<code data-no-translation=\"\">UA_ENABLE_MQTT_TLS<\/code>\u00a0set to\u00a0<code data-no-translation=\"\">ON<\/code>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ab13b8c elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"ab13b8c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cdf21f6\" data-id=\"cdf21f6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cff8bf5 elementor-widget elementor-widget-text-editor\" data-id=\"cff8bf5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Conclusion<\/h2>\n<p>With this implementation, we were able to publish telemetry data directly to the IoT Hub using the username \/ password as well as the client certificate approach. We were able to remove the external Azure IoT Hub client from our &#8220;industrial automation showcase&#8221; resulting in a more streamlined implementation. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3c509fc elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no\" data-id=\"3c509fc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-459ae34\" data-id=\"459ae34\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ffde55c elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"ffde55c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"hm hm-sync-cloud\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>The open62541 OPC UA stack with its Pub-Sub extension now supports MQTT over TLS as well as MQTT-brokers requiring a login (contributed by basysKom). This allows the direct communication between open62541 and the Azure IoT Hub and therefore highly simplifies the connection of OPC UA based IoT Devices to the cloud.<\/p>","protected":false},"author":4,"featured_media":3575,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1,2,134,183],"tags":[139,137,124,122,184],"class_list":["post-3464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-blog","category-cloud","category-open62541","tag-azure","tag-cloud","tag-opc-ua","tag-open62541","tag-opensource"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/posts\/3464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/comments?post=3464"}],"version-history":[{"count":34,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/posts\/3464\/revisions"}],"predecessor-version":[{"id":3894,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/posts\/3464\/revisions\/3894"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/media\/3575"}],"wp:attachment":[{"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/media?parent=3464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/categories?post=3464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.basyskom.de\/en\/wp-json\/wp\/v2\/tags?post=3464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}