<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JSON &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<atom:link href="https://www.smarthomeng.de/tag/json/feed" rel="self" type="application/rss+xml" />
	<link>https://www.smarthomeng.de</link>
	<description>Die Device Integrations-Plattform für Dein Smart Home</description>
	<lastBuildDate>Sun, 29 Mar 2020 09:28:14 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.smarthomeng.de/wp-content/uploads/global/logo_small_152x152-150x150.png</url>
	<title>JSON &#8211; SmartHomeNG | smarthome knx homematic mqtt hue 1wire home automation</title>
	<link>https://www.smarthomeng.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Verarbeiten von JSON Messsages in Items</title>
		<link>https://www.smarthomeng.de/verarbeiten-von-json-messsages-in-items</link>
					<comments>https://www.smarthomeng.de/verarbeiten-von-json-messsages-in-items#respond</comments>
		
		<dc:creator><![CDATA[Martin Sinn]]></dc:creator>
		<pubDate>Fri, 06 Apr 2018 19:33:11 +0000</pubDate>
				<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Items]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[mqtt1]]></category>
		<guid isPermaLink="false">https://www.smarthomeng.de/?p=1414</guid>

					<description><![CDATA[Verarbeiten von JSON Daten Eine Reihe von Devices liefert Antworten bzw. Stati in Form von JSON formatierten Daten zurück. Diese Daten können in Items verwendet werden, wenn sie in Items vom Typ dict oder vom Typ list eingelesen werden können. &#160; Einlesen von JSON Messages in dicts mit dem MQTT Plugin<a class="moretag" href="https://www.smarthomeng.de/verarbeiten-von-json-messsages-in-items"> Weiterlesen&#8230;</a>]]></description>
										<content:encoded><![CDATA[<h2>Verarbeiten von JSON Daten</h2>
<p>Eine Reihe von Devices liefert Antworten bzw. Stati in Form von JSON formatierten Daten zurück. Diese Daten können in Items verwendet werden, wenn sie in Items vom Typ <strong>dict</strong> oder vom Typ <strong>list</strong> eingelesen werden können.</p>
<p>&nbsp;</p>
<h3>Einlesen von JSON Messages in <strong>dict</strong>s mit dem MQTT Plugin</h3>
<p>Besonders einfach ist das Einlesen von Daten in Items der Typs <strong>dict</strong>, wenn man MQTT Messages mit dem aktuellen MQTT Plugin empfängt. Das MQTT Protokoll bis zur Version 3.1x unterstützt keine Datentypen. Die Payload, also die übertragenen Daten, werden immer als Array of Byte übertragen.</p>
<p>Das aktuelle MQTT Plugin unterstützt das Casting in den Datentyp des Items. Wenn also z.B. das Item vom Typ <strong>str</strong> ist, wird beim Empfang das Array of Byte in einen String gewandelt.</p>
<p>Wenn man in der Payload der MQTT Message JSON formatierte Daten in ein Item vom Typ <strong>dict</strong> empfängt, werden die Daten in Form eines <strong>Python dict</strong> gespeichert und können in Logiken und eval-Ausdrücken entsprechend weiter verarbeitet werden.</p>
<p>Bei komplexen JSON Strukturen ist die Weiterverarbeitung mit einer Logik zu empfehlen. Bei einfacheren Strukturen kann die Weiterverarbeitung jedoch auch sehr gut in Items mit Hilfe von <strong>eval</strong> oder <strong>on_change</strong> erfolgen.</p>
<p>&nbsp;</p>
<h4>Ein einfaches JSON Beispiel</h4>
<p>Wenn eine MQTT Message z.B. folgende Daten liefert:</p>
<pre><code class="language-json">{  
   "key1":"value1",
   "key2":"value2",
   "key3":"value3"
}</code></pre>
<p>und Du nur den Wert von <strong>key2</strong> benötigst, kannst Du das über ein Hilfs-Item lösen, in dem Du die MQTT Payload einliest und den entsprechenden Wert in das Ziel-Item schreibst. Dazu musst Du die Items folgendermaßen definieren:</p>
<pre><code class="language-yaml">
test:
    hilfs_item:
        type: dict
        mqtt_topic_in: <mark>test/test</mark>
        on_change: ..ziel_item = value['key2']

    ziel_item:
        type: str</code></pre>
<p>Das MQTT Topic musst Du durch einen sinnvollen Wert ersetzen. Natürlich kann im <strong>on_change</strong> Attribut anstelle der relativen Item Adressierung auch die absolute Adressierung (<strong>test.ziel_item</strong>) verwendet werden.</p>
<p>&nbsp;</p>
<p>Alternativ kannst Du das auch mit <strong>eval</strong> / <strong>eval_trigger</strong> lösen:</p>
<pre><code class="language-yaml">test:
    hilfs_item:
        type: dict
        mqtt_topic_in: <mark>test/test</mark>

    ziel_item:
        type: str
        eval: sh.test.hilfs_item()['key2']
        eval_trigger: test.hilfs_item</code></pre>
<p>Diese Variante kannst Du natürlich auch mit relativer Item-Adressierung realisieren.</p>
<p>&nbsp;</p>
<h3>Einlesen von JSON Messages in <strong>list</strong>s mit dem MQTT Plugin</h3>
<p>Wenn man in der Payload der MQTT Message JSON formatierte Daten in ein Item vom Typ <strong>list</strong> empfängt, werden die Daten in Form eines <strong>Python list</strong> gespeichert und können in Logiken und eval-Ausdrücken entsprechend weiter verarbeitet werden.</p>
<p>&nbsp;</p>
<h4>Ein einfaches JSON Beispiel</h4>
<p>Wenn eine MQTT Message z.B. folgende Daten liefert:</p>
<pre><code class="language-json">[  
   "value1",
   "value2",
   "value3"
]</code></pre>
<p>und Du nur den zweiten Wert von benötigst, kannst Du das über ein Hilfs-Item lösen, in dem Du die MQTT Payload einliest und den entsprechenden Wert in das Ziel-Item schreibst.</p>
<p>Listen sind so definiert, dass das ersten Element den Index 0 hat. Um den zweiten Wert zu adressieren, musst Du den Index 1 verwenden. Dazu musst Du die Items folgendermaßen definieren:</p>
<pre><code class="language-yaml">
test:
    hilfs_item:
        type: list
        mqtt_topic_in: <mark>test/test</mark>
        on_change: ..ziel_item = value[1]

    ziel_item:
        type: str</code></pre>
<p>&nbsp;</p>
<h3>Auswertung komplexerer Datenstrukturen</h3>
<p>Ein <strong>dict</strong> oder eine <strong>list</strong> kann statt einfacher Daten auch <strong>dict</strong>s oder <strong>list</strong>s enthalten. Auch diese Daten lassen sich auswerten und es können Einzelwerte dieser Datenstruktur in Items gespeichert werden.</p>
<p>Wenn eine MQTT Message z.B. folgende Daten liefert:</p>
<pre><code class="language-json">{  
   "key1":"value1",
   "key2":[  
      "value21",
      "value22",
      "value23"
   ],
   "key3":{  
      "key31":"value31",
      "key32":"value32",
      "key33":"value33"
   }
}</code></pre>
<p>&nbsp;</p>
<p>kannst Du folgendermaßen auf den <strong>value22</strong> oder den <strong>value33</strong> zugreifen:</p>
<pre><code class="language-yaml">
test:
    hilfs_item:
        type: dict
        mqtt_topic_in: <mark>test/test</mark>
        on_change: 
          - ..ziel_item1 = value['key2'][0]
          - ..ziel_item2 = value['key3']['key33']

    ziel_item1:
        type: str

    ziel_item2:
        type: str
</code></pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smarthomeng.de/verarbeiten-von-json-messsages-in-items/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
