{"id":2142,"date":"2018-12-11T21:45:11","date_gmt":"2018-12-11T20:45:11","guid":{"rendered":"https:\/\/funrecycler.com\/?p=10937"},"modified":"2018-12-11T21:45:11","modified_gmt":"2018-12-11T20:45:11","slug":"abfallkalender-im-iobroker","status":"publish","type":"post","link":"https:\/\/funrecycler.com\/index.php\/2018\/12\/11\/abfallkalender-im-iobroker\/","title":{"rendered":"Abfallkalender im ioBroker"},"content":{"rendered":"<p style=\"overflow-wrap:anywhere\">Mein Ziel war es, im ioBroker VIS einen Auszug aus dem Abfallkalender darzustellen, der mit Symbolen die n\u00e4chsten vier Termine anzeigt. Ich realisiere das, indem ein Skript die Termine aus einer ical-Instanz liest und dann zusammen mit den Symbolen im VIS dargstellt. <img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-e6149bcaa008e8bd.png\" alt=\"\" style=\"display:block;margin-left:auto;margin-right:auto;width:789px;height:275px;max-width:100%;height:auto\" \/> <\/p>\n<h2>Voraussetzungen<\/h2>\n<ul>\n<li>\n<p style=\"overflow-wrap:anywhere\">Eine eigene &quot;ical&quot;-Instanz f\u00fcr den Abfallkalender<\/p>\n<\/li>\n<li>\n<p style=\"overflow-wrap:anywhere\">Abfallsymbole<\/p>\n<\/li>\n<li>\n<p style=\"overflow-wrap:anywhere\">einen Google-Kalender f\u00fcr die Abfalltermine<\/p>\n<\/li>\n<\/ul>\n<h2>Verbinden der ical-Instanz mit dem Google-Kalender<\/h2>\n<p style=\"overflow-wrap:anywhere\"> Zun\u00e4chst erstellt ihr euch einen Google-Kalender, der nur f\u00fcr die Abfalltermine verwendet wird. Im Idealfall stellt euer Abfallunternehmen eine ics-Datei bereit, die in den Kalender importiert wird. Wichtig! Bei mir funktioniert das nur korrekt, wenn die Termine &quot;ganztags&quot;-Termine sind. <\/p>\n<p style=\"overflow-wrap:anywhere\"> Die ical-Instanz ben\u00f6tigt einen URL auf den Kalender. Den bekommt man, wenn man in der Webansicht des Google-Kalenders auf die drei Punkte, dann <em>Einstellungen und Freigabe<\/em> klickt. Ziemlich weit unten findet sich dann der URL mit der <em>Beschriftung Privatadresse im ical-Format<\/em>. Diese Adresse wird f\u00fcr die ical-Instanz ben\u00f6tigt. <\/p>\n<figure style=\"display:block;margin-left:auto;margin-right:auto;width:1024px;max-width:100%\">\n<p style=\"overflow-wrap:anywhere;display:block;margin-left:auto;margin-right:auto;width:1024px\"><img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-1a497862c5ec9398.png\" alt=\"\" style=\"display:block;margin-left:auto;margin-right:auto;width:1024px;height:559px;max-width:100%;height:auto\" \/><\/p><figcaption> Adapterkonfiguration Haupteinstellungen<\/figcaption><\/figure>\n<figure style=\"width:1024px;max-width:100%\">\n<p style=\"overflow-wrap:anywhere;width:1024px\"><img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-c60ee69f44b2aa8c.png\" alt=\"\" style=\"width:1024px;height:373px;max-width:100%;height:auto\" \/><\/p><figcaption> Konfiguration der Kalender-Adresse<\/figcaption><\/figure>\n<p style=\"overflow-wrap:anywhere\"> \u00a0 Unter dem Men\u00fcpunkt <em>Ereignisse<\/em> habe ich <em>Vacation<\/em> deaktiviert.<\/p>\n<p style=\"overflow-wrap:anywhere\"> Der Adapter wird nun neugestartet. In der Objekt-Ansicht von ioBroker kann nun gepr\u00fcft werden, ob die Schritte erfolgreich waren. Dazu geht ihr mit der Maus \u00fcber den <em>Wert<\/em> in der Zeile <em>html<\/em> und solltet dann im Popup schon ein paar Termine sehen. <\/p>\n<figure style=\"width:1024px;max-width:100%\">\n<p style=\"overflow-wrap:anywhere;width:1024px\"><img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-a1dc0399b910f590.png\" alt=\"\" style=\"width:1024px;height:152px;max-width:100%;height:auto\" \/><\/p><figcaption> ioBroker\/Objekte\/ical-Instanz<\/figcaption><\/figure>\n<h2>VIS vorbereiten<\/h2>\n<p style=\"overflow-wrap:anywhere\"> Damit VIS Bilder anzeigen kann, werden diese mit dem <em>Dateimanager<\/em>, der im VIS-Editor \u00fcber <em>Setup<\/em> erreicht wird, hochgeladen. Ich habe denen folgende Namen gegeben <\/p>\n<ul>\n<li>\n<p style=\"overflow-wrap:anywhere\"><strong>bt.png<\/strong> f\u00fcr <em>Blaue Tonne<\/em><\/p>\n<\/li>\n<li>\n<p style=\"overflow-wrap:anywhere\"><strong>gt.png<\/strong> f\u00fcr <em>Gelbe Tonne<\/em><\/p>\n<\/li>\n<li>\n<p style=\"overflow-wrap:anywhere\"><strong>st.png<\/strong> f\u00fcr <em>Schwarze Tonne<\/em><\/p>\n<\/li>\n<\/ul>\n<p style=\"overflow-wrap:anywhere\"> Weitere Abfallereignisse sind f\u00fcr mich nicht relevant. <\/p>\n<figure style=\"width:1024px;max-width:100%\">\n<p style=\"overflow-wrap:anywhere;width:1024px\"><img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-2abc88e1e88c67b3.png\" alt=\"\" style=\"width:1024px;height:433px;max-width:100%;height:auto\" \/><\/p><figcaption> Die Bilder habe ich im Ordner \/vis.0\/main\/bilder\/abfall abgelegt.<\/figcaption><\/figure>\n<p style=\"overflow-wrap:anywhere\"> Im VIS-Editor wird Anzeige des Abfall-Kalenders lediglich ein HTML-Widget angelegt, in die Eigenschaft HTML des Widgets schreiben wir\u00a0<strong>{javascript.0.vis.Abfall}. <\/strong>Das ist ein Verweis auf einen State des Unterhalb des Objektes <em>javascript.0.<\/em> <\/p>\n<p style=\"overflow-wrap:anywhere\"> Dieser State muss zun\u00e4chst angelegt werden. Dazu wird under <em>ioBroker\/Objekte<\/em> die Zeile <em>javascript.0<\/em> markiert, dann ganz oben auf das Plussymbol <em>Ein Tochterobjekt&#8230;\u00a0<\/em>klicken. <\/p>\n<figure style=\"width:1024px;max-width:100%\">\n<p style=\"overflow-wrap:anywhere;width:1024px\"><img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-360fd9f65a49f73f.png\" alt=\"\" style=\"width:1024px;height:464px;max-width:100%;height:auto\" \/><\/p><figcaption> Den State javascript.0.vis.Abfall als Zeichenkette hinzuf\u00fcgen<\/figcaption><\/figure>\n<p style=\"overflow-wrap:anywhere\"> Zur Formatierung verwende ich etwas CSS, das im VIS-Editor in der CSS-Eigenschaft einf\u00fcgt wird. <img decoding=\"async\" src=\"https:\/\/funrecycler.com\/wp-content\/uploads\/2018\/12\/m-46eb67d46a4486cf.png\" alt=\"\" style=\"width:340px;height:396px;max-width:100%;height:auto\" \/> <\/p>\n<pre><code>table.Abfall {\n    color: white;\n}\ntd.Abfallimage {\n    background-color: gray;\n    padding:5px;\n}\ntd.AbfallText {\n    text-align: center;\n    padding: 5px 10px;\n    color: lightblue;\n}<\/code><\/pre>\n<h2>Skriptdatei erstellen<\/h2>\n<p style=\"overflow-wrap:anywhere\"> Unter ioBroker\/Skripte wird ein neues Skript erstellt. Als Typ ins Javascript zu w\u00e4hlen. Dort wird folgender Skripttext eingef\u00fcgt. <\/p>\n<pre><code>on(&#x27;ical.0.data.table&#x27;, function(theObj) {\n   var obj = theObj.state.val;\n   MakeAbfallHTML(obj);\n});\nfunction MakeAbfallHTML(obj) {\n    var html = &quot;&lt;table class=Abfall&gt;&lt;tr&gt;&quot;;\n    for (i=0; i&lt;4; i++) {\n        if (obj&#91;i&#93;) {\n            if (obj&#91;i&#93;.event.indexOf(&quot;Gelber Sack&quot;) &gt; -1) {\n                html = html + &quot;&lt;td class=Abfallimage&gt;&lt;img width=120 height=120 src=\/vis.0\/main\/bilder\/abfall\/gt.png&gt;&lt;\/td&gt;&quot;;\n            }\n            if (obj&#91;i&#93;.event.indexOf(&quot;Papier&quot;) &gt; -1) {\n                html = html + &quot;&lt;td class=Abfallimage&gt;&lt;img width=120 height=120  src=\/vis.0\/main\/bilder\/abfall\/bt.png&gt;&lt;\/td&gt;&quot;;\n            }\n            if (obj&#91;i&#93;.event.indexOf(&quot;Haus&quot;) &gt; -1) {\n                html = html + &quot;&lt;td class=Abfallimage&gt;&lt;img width=120 height=120  src=\/vis.0\/main\/bilder\/abfall\/st.png&gt;&lt;\/td&gt;&quot;;\n            }\n        }\n    }\n    html = html + &quot;&lt;\/tr&gt;&lt;tr&gt;&quot;;\n    for (i=0; i&lt;4; i++) {\n        if (obj&#91;i&#93;) {\n            html = html + &quot;&lt;td class=AbfallText&gt;&quot;+obj&#91;i&#93;.date+&quot;&lt;\/td&gt;&quot;   ;\n        }\n    }\n   html = html + &quot;&lt;\/tr&gt;&lt;\/table&gt;&quot;;\n   console.log(html);\n   setState(&#x27;javascript.0.vis.Abfall&#x27;, html);\n}<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Das Skript reagiert auf drei Ereignisse, bei denen im Text die Begriffe <\/p>\n<ul>\n<li>\n<p style=\"overflow-wrap:anywhere\">Gelber Sack<\/p>\n<\/li>\n<li>\n<p style=\"overflow-wrap:anywhere\">Papier<\/p>\n<\/li>\n<li>\n<p style=\"overflow-wrap:anywhere\">Haus<\/p>\n<\/li>\n<\/ul>\n<p style=\"overflow-wrap:anywhere\"> vorkommen und ordnet diesen Ereignissen die jeweiligen Bilder zu. Vergleiche dazu im Skript die Zeilen 12, 16 und 20 (siehe Bild). Diese Begriffe m\u00fcssen gegebenenfalls an die Texte die in eurem Abfallkalender stehen, angepasst werden. Ebenfalls k\u00f6nnte dies leicht zum Beispiel um Biotonne erweitert werden, wenn nach Zeile 22 folgender Code eingef\u00fcgt wird und ein zus\u00e4tzliches Bild <strong>bit.png<\/strong> hochgeladen wird. <\/p>\n<pre><code>if (obj&#91;i&#93;.event.indexOf(&quot;Bio&quot;) &gt; -1) {\n                html = html + &quot;&lt;td class=Abfallimage&gt;&lt;img width=120 height=120  src=\/vis.0\/main\/bilder\/abfall\/bit.png&gt;&lt;\/td&gt;&quot;;\n            }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Mein Ziel war es, im ioBroker VIS einen Auszug aus dem Abfallkalender darzustellen, der mit Symbolen die n\u00e4chsten<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,13],"tags":[],"class_list":["post-2142","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-tutorial"],"_links":{"self":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/2142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/comments?post=2142"}],"version-history":[{"count":1,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/2142\/revisions"}],"predecessor-version":[{"id":3153,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/2142\/revisions\/3153"}],"wp:attachment":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/media?parent=2142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/categories?post=2142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/tags?post=2142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}