<?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>IOBroker Archive - Smartebude</title>
	<atom:link href="https://smartebude.de/category/iobroker/feed/" rel="self" type="application/rss+xml" />
	<link>https://smartebude.de/category/iobroker/</link>
	<description>Smart Home Deals, Homeassistant und ESP8266 Basteleien</description>
	<lastBuildDate>Sat, 12 Nov 2022 20:15:50 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://smartebude.de/wp-content/uploads/2023/01/cropped-smart_logo_favicon-32x32.png</url>
	<title>IOBroker Archive - Smartebude</title>
	<link>https://smartebude.de/category/iobroker/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Shelly Dimmer &#8211; Ausschalten via Alexa</title>
		<link>https://smartebude.de/shelly-dimmer-ausschalten-via-alexa/</link>
					<comments>https://smartebude.de/shelly-dimmer-ausschalten-via-alexa/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Thu, 02 Jan 2020 16:44:51 +0000</pubDate>
				<category><![CDATA[IOBroker]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<guid isPermaLink="false">https://derfrickler.de/?p=362</guid>

					<description><![CDATA[<p>Beim Shelly Dimmer gibt es ein kleines Problemchen wenn man diesen via Alexa ausschalten will. Alexa sendet bei Dimmern den Ausschalt-Befehl mit dem Prozentsatz 0. Der Shelly kennt aber 0 Prozent nicht, sondern erwartet einen seperaten Ausschalt-Befehl. Das Ganze habe ich folgendermaßen gelöst: Dummy Object für den Dimmwert Dummy Object als Alexa Device im IOT [...]</p>
<p>Der Beitrag <a href="https://smartebude.de/shelly-dimmer-ausschalten-via-alexa/">Shelly Dimmer &#8211; Ausschalten via Alexa</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Beim Shelly Dimmer gibt es ein kleines Problemchen wenn man diesen via Alexa ausschalten will. </p>



<p>Alexa sendet bei Dimmern den Ausschalt-Befehl mit dem Prozentsatz 0. Der Shelly kennt aber 0 Prozent nicht, sondern erwartet einen seperaten Ausschalt-Befehl.</p>



<p>Das Ganze habe ich folgendermaßen gelöst:</p>



<p>Dummy Object für den Dimmwert</p>



<p>Dummy Object als Alexa Device im IOT Adapter eingetragen</p>



<p>Script das den Dummywert überwacht und die Befehle entsprechend sendet:</p>



<pre class="wp-block-code"><code>on({ id: 'javascript.0.dummies.abzugshaube_level', change: "ne" }, function (obj) {
    var value = obj.state.val;

    if (value == 0) {
        setState("shelly.0.SHDM-1#F35B12#1.light.Switch", false);
        setState("shelly.0.SHDM-1#F35B12#1.light.brightness", 50); // standard Helligkeitswert schonmal setzen, falls schalter mauell bedient wird
    } else {
        setState("shelly.0.SHDM-1#F35B12#1.light.Switch", true);
        setState("shelly.0.SHDM-1#F35B12#1.light.brightness", value);
    }

});</code></pre>



<p>Wenn der Wert für Level auf 0 fällt, dann wird das Object &#8222;Light Switch&#8220; auf False gesetzt um den Dimmer auszuschalten.</p>




<p>Der Beitrag <a href="https://smartebude.de/shelly-dimmer-ausschalten-via-alexa/">Shelly Dimmer &#8211; Ausschalten via Alexa</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://smartebude.de/shelly-dimmer-ausschalten-via-alexa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DIY Windsensor mit MQTT mit Esp8266 für IObroker</title>
		<link>https://smartebude.de/diy-windsensor-mit-mqtt-mit-esp8266-fuer-iobroker/</link>
					<comments>https://smartebude.de/diy-windsensor-mit-mqtt-mit-esp8266-fuer-iobroker/#comments</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Tue, 10 Sep 2019 07:57:44 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[IOBroker]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[esp8266]]></category>
		<category><![CDATA[iobroker]]></category>
		<category><![CDATA[mqtt]]></category>
		<category><![CDATA[sensor]]></category>
		<guid isPermaLink="false">https://derfrickler.de/?p=235</guid>

					<description><![CDATA[<p>Ein Windsensor für meine Haussteuerung steht schon lange auf meiner ToDo Liste. Diesen brauche ich vor allem als Sicherheitsfunktion für die automatische Steuerung der Raffstores &#8211; und aus Datensammelwut. Als Basis habe ich mir einen Ventus Ersatzsensor entkernt und dort einen ESP8266 + Arduino Mini Pro 3,3V untergebracht. Die Komponenten Folgende Komponenten habe ich verbaut: [...]</p>
<p>Der Beitrag <a href="https://smartebude.de/diy-windsensor-mit-mqtt-mit-esp8266-fuer-iobroker/">DIY Windsensor mit MQTT mit Esp8266 für IObroker</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://derfrickler.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-1024x768.jpg" alt="" class="wp-image-238" srcset="https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-1024x768.jpg 1024w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-300x225.jpg 300w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-768x576.jpg 768w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-30x22.jpg 30w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-75x56.jpg 75w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-110x82.jpg 110w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-160x120.jpg 160w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-500x375.jpg 500w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-1536x1152.jpg 1536w, https://smartebude.de/wp-content/uploads/2019/09/MVIMG_20190909_075416-2048x1536.jpg 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Ein Windsensor für meine Haussteuerung steht schon lange auf meiner ToDo Liste. Diesen brauche ich vor allem als Sicherheitsfunktion für die automatische Steuerung der Raffstores &#8211; und aus Datensammelwut. </p>



<p>Als Basis habe ich mir einen Ventus Ersatzsensor entkernt und dort einen ESP8266 + Arduino Mini Pro 3,3V untergebracht. </p>



<p></p>



<p><strong>Die Komponenten</strong></p>



<p>Folgende Komponenten habe ich verbaut: </p>



<ul class="wp-block-list">
<li>Ventus Ersatzwindmesser (<a href="https://www.reichelt.de/de/de/ersatz-windmesser-fuer-funkwetterstation-ventus-w132-p132595.html?r=1">link</a>)  ca. 23 € bei Reichelt .de</li>



<li>Arduino Pro 3,3V 8Mhz (<a href="https://amzn.to/2nCkogf">link</a>)  ca. 4 € bei Amazon.de</li>



<li>Wemos D1 Mini (<a href="https://amzn.to/2mUT4tb">link</a>) ca. 5 € bei Amazon.de</li>



<li>3 Volt Solarzelle (<a href="https://amzn.to/2mWt8xt">link</a>) für 8 € bei Amazon.de</li>



<li>100k Widerstand zur Spannungsmessung</li>
</ul>



<p>Macht insgesamt ca.  40 € für einen smarten Windsensor mit Batteriebetrieb. Deutlich Billiger als alle Modelle die auf dem Markt sind und auch etwas besser  zu befestigen als die Stab-Bauweise von Homematic. </p>



<p></p>



<p><strong>Warum 2 Boards?</strong><br>Für die Akkulaufzeit &#8211; den ESP8266 kann ich nicht mit einem externen Interrupt wecken ohne einen vollen Reboot zur durchlaufen. Der Arduino kann jedoch an 2 Interrupt Pins geweckt werden und anschließend wieder schlafen, ohne einen Reboot zu durchlaufen. </p>



<p>Der Ablauf ist eigentlich recht einfach, der Arduino zählt an PIN 2 alle Umdrehung des Windsensors und lauscht auf PIN3 ob ein Low vom Wemos gesetzt wird. Kommt das Signal auf PIN3 erfolgt eine Serielle Ausgabe des Aktuellen Windcounters. </p>



<p>Der Wemos Rebootet alle 30 Sekunden neu, liest den Serial Input und sendet ggf. Daten via MQTT an IObroker. Ansonsten sind beide Geräte im Deep Sleep und verbrauchen nur Minimal Strom.  </p>



<p>Der Ablauf nochmal grafisch dargestellt: </p>



<figure class="wp-block-image"><img decoding="async" width="908" height="684" src="https://derfrickler.de/wp-content/uploads/2019/09/New-Arduino-flowchart.png" alt="" class="wp-image-237" srcset="https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart.png 908w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-300x226.png 300w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-768x579.png 768w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-30x23.png 30w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-75x56.png 75w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-110x83.png 110w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-160x121.png 160w, https://smartebude.de/wp-content/uploads/2019/09/New-Arduino-flowchart-500x377.png 500w" sizes="(max-width: 908px) 100vw, 908px" /></figure>



<p>Aktuell läuft das ganze noch im Testbetrieb, um zu sehen, wie sich die Batterielaufzeit verhält. Um möglichst lange Betriebszeiten zu erreichen werden 2 NiMH Akkus durch eine 3V Solarzelle geladen &#8211; ohne Laderegler. Den Laderegler halte ich für überflüssig, da NiMH Zellen ein überladen mit geringer Stärke gut verkraften. Ich habe die Akkus vorher einem Kapazitätstest unterzogen und werde im Frühjahr einen weiteren Test mache. </p>



<figure class="wp-block-image"><img decoding="async" src="blob:https://derfrickler.de/4cbf11e3-3098-4e7d-9795-242985a8109f" alt=""/><figcaption class="wp-element-caption">&#8222;Durchdachtes&#8220; Kabelmanagement im Prototyp</figcaption></figure>



<p><strong>Code Arduino Pro mini</strong></p>



<pre class="wp-block-code"><code lang="yaml" class="language-yaml">#include &lt;LowPower.h&gt;


#define WIND_INTERRUPT 0
#define ESP_INTERRUPT 1
#define WIND_INTERRUPT_PIN 3
#define ESP_INTERRUPT_PIN 2


volatile int pulses = 0;
volatile long last_interrupt_time = 0;
volatile int sendcheck = false;


void pulse() {

  unsigned long interrupt_time = millis();

  // If interrupts come faster than 200ms, assume it's a bounce and ignore
  if (interrupt_time - last_interrupt_time &gt; 10)
  {
    ++pulses;

  }
  last_interrupt_time = interrupt_time;
}


void ESP_awake() {
  sendcheck = true;
}


void sendWind() {

  int temppulse = pulses;

  delay(200);
  Serial.println("-");
  Serial.print("pulses:");
  Serial.println(temppulse);

  // gesendete vom Global Counter abziehen
  pulses -= temppulse;

}

void setup() {
  pinMode(WIND_INTERRUPT_PIN, INPUT_PULLUP);
  pinMode(ESP_INTERRUPT_PIN, INPUT);

  Serial.begin(9600);

  attachInterrupt(digitalPinToInterrupt(WIND_INTERRUPT_PIN), pulse, RISING);
  attachInterrupt(digitalPinToInterrupt(ESP_INTERRUPT_PIN), ESP_awake, FALLING);

}


void loop() {

  delay(100);
  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);


  // Wake up ab hier
  if (sendcheck) {
    sendcheck = false;
    sendWind();
  }
}</code></pre>



<p><strong>Code Wemos  / Esp8266</strong></p>



<pre class="wp-block-code"><code lang="yaml" class="language-yaml">
#include &lt;ESP8266WiFi.h&gt;
#include &lt;ESP8266HTTPClient.h&gt;
#include &lt;PubSubClient.h&gt;
#include &lt;RTCVars.h&gt;
RTCVars state; // create the state object

int reset_counter;
int program_step;
int sumwindcount;

unsigned int raw = 0;
float volt = 0.0;

WiFiClient espClient;
PubSubClient client(espClient);


const char* ssid = "****";
const char* password = "****";

const char* mqttServer = "192.168.****";
const int   mqttPort = 1886;
const char* mqttUser = "*****";
const char* mqttPassword = "*****";


int sleepTimeS = 30;
volatile unsigned long ContactBounceTime; // Timer to avoid contact bounce in interrupt routine


void setup() {
  Serial.begin(9600);

  state.registerVar( &amp;reset_counter );
  state.registerVar( &amp;sumwindcount );

  if (state.loadFromRTC()) {
    reset_counter++;
  } else {
    reset_counter = 0;
    sumwindcount = 0;
    program_step = 0;
  }

  // Pin 4 Aktivieren / Deaktiveren &gt;&gt; Signal für Arudino Interrupt
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  delay(500);
  digitalWrite(4, LOW);

}


String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = { 0, -1 };
  int maxIndex = data.length() - 1;

  for (int i = 0; i &lt;= maxIndex &amp;&amp; found &lt;= index; i++) {
    if (data.charAt(i) == separator || i == maxIndex) {
      found++;
      strIndex[0] = strIndex[1] + 1;
      strIndex[1] = (i == maxIndex) ? i + 1 : i;
    }
  }
  return found &gt; index ? data.substring(strIndex[0], strIndex[1]) : "";
}



void senddata(int windspeed, int boe, float battery) {

  WiFi.begin(ssid, password);
  byte wifiCNT = 0;
  byte mqttCNT = 0;


  while (WiFi.status() != WL_CONNECTED  &amp;&amp; wifiCNT &lt; 10) {
    delay(500);
    wifiCNT++;
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");


  client.setServer(mqttServer, mqttPort);
  while (!client.connected() &amp;&amp; mqttCNT &lt; 10) {
    mqttCNT++;
    Serial.println("Connecting to MQTT...");
    if (client.connect("windsensor", mqttUser, mqttPassword )) {
      Serial.println("connected");
    } else {
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(200);

    }
  }


  if (windspeed != -1) {
    boolean rc = client.publish("windsensor/windspeed", String(windspeed).c_str());
  }

  if (battery != -1) {
    client.publish("windsensor/battery", String(battery).c_str());
  }
  if (boe != -1) {
    client.publish("windsensor/boe", String(boe).c_str());

  }

  delay(100);
}
void loop() {
  Serial.begin(9600);

  delay(100);
  String a;
  int aktwindcount = -1;

  while (Serial.available()) {
    Serial.println("wait for data");
    a = Serial.readString(); // read the incoming data as
    Serial.println(a);
    if (a.indexOf("pulses") &gt; 0) {
      a.replace("\n", "");
      a.replace("⸮-", "");
      a = getValue(a, ':', 1);

      Serial.println(a);
      aktwindcount = a.toInt();
      break;
    }

    delay(100);

  }


  if (aktwindcount &gt; 150) {
    senddata(-1, aktwindcount, -1);
  }

  // summe windcount erhöhen
  sumwindcount =  aktwindcount + sumwindcount;

  // aller 12 durchgänge senden oder wenn starker wind
  if (reset_counter &gt;= 12) {
    int raw = analogRead(A0);
    int windavg = sumwindcount / reset_counter;
    volt = raw / 1023.0;
    volt = volt * 4.2;


    senddata(windavg, -1, volt);
    reset_counter = 0;
    sumwindcount = 0;

  }

  state.saveToRTC();
  delay(100);
  ESP.deepSleep(29e6); // 20e6 is 20 microseconds


}




</code></pre>
<p>Der Beitrag <a href="https://smartebude.de/diy-windsensor-mit-mqtt-mit-esp8266-fuer-iobroker/">DIY Windsensor mit MQTT mit Esp8266 für IObroker</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://smartebude.de/diy-windsensor-mit-mqtt-mit-esp8266-fuer-iobroker/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Müllabfuhr Termine in Tagen anzeigen &#8211; Iobroker VIS</title>
		<link>https://smartebude.de/muellabfuhr-termine-in-tagen-anzeigen-iobroker-vis/</link>
					<comments>https://smartebude.de/muellabfuhr-termine-in-tagen-anzeigen-iobroker-vis/#comments</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Sat, 12 Jan 2019 13:46:58 +0000</pubDate>
				<category><![CDATA[IOBroker]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<guid isPermaLink="false">https://derfrickler.de/?p=64</guid>

					<description><![CDATA[<p>Die Termine der Müllabfuhr in der Visualisierung am Tablet anzuzeigen ist eine gute Sache. Hier im Beitrag beschreibe ich meine Lösung wie ich die Anzeige nach dem Schema &#8222;Abfuhr in XX Tagen&#8220; umgesetzt habe. Die Umsetzung erfolgt durch 2 Teilschritten ICal Kalender importieren Script zum Auslesen des Kalenders Ical Kalender einlesen Als erstes Brauchen wir [...]</p>
<p>Der Beitrag <a href="https://smartebude.de/muellabfuhr-termine-in-tagen-anzeigen-iobroker-vis/">Müllabfuhr Termine in Tagen anzeigen &#8211; Iobroker VIS</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" width="831" height="438" src="https://derfrickler.de/wp-content/uploads/2019/02/muellabfuhr.jpg" alt="" class="wp-image-150" srcset="https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr.jpg 831w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-300x158.jpg 300w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-768x405.jpg 768w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-30x16.jpg 30w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-75x40.jpg 75w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-110x58.jpg 110w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-160x84.jpg 160w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-500x264.jpg 500w, https://smartebude.de/wp-content/uploads/2019/02/muellabfuhr-325x170.jpg 325w" sizes="(max-width: 831px) 100vw, 831px" /></figure>



<p>Die Termine der Müllabfuhr in der Visualisierung am Tablet anzuzeigen ist eine gute Sache. Hier im Beitrag beschreibe ich meine Lösung wie ich die Anzeige nach dem Schema &#8222;Abfuhr in XX Tagen&#8220; umgesetzt habe. Die Umsetzung erfolgt durch 2 Teilschritten</p>



<ul class="wp-block-list"><li>ICal Kalender importieren</li><li>Script zum Auslesen des Kalenders</li></ul>



<h3 class="wp-block-heading">Ical Kalender einlesen</h3>



<p>Als erstes Brauchen wir Datensätze mit den Müllabfuhr- Terminen. Diese bekommt man in der Regel von der Stadt / Gemeinde Website oder vom lokalen Entsorger. Am besten als Ical (ics) Downloaden und anschließend in einen Webkalender importieren (so hat man die Daten parallel auch am Smartphone). Ich nutze dafür Gmail.</p>



<h4 class="wp-block-heading">Gmail ICal freigabe einrichten</h4>



<p>Um bei Gmail einen Kalender als Ical Freizugeben macht folgendes:</p>



<p>Besucht calendar.google.com. Links seht ihr alle Kalender die ihr habt. Am besten legt euch einen neuen an und importiert dort eure Mülltermine. </p>



<p>Fahrt ihr mit der Mouse über den entsprechenden Kalender, erscheinen 3 Punkte mit einem Submenü. Hier ein Klick auf &#8222;Einstellungen zur Freigabe&#8220;</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="452" height="275" src="https://derfrickler.de/wp-content/uploads/2019/01/muell-5.png" alt="" class="wp-image-71" srcset="https://smartebude.de/wp-content/uploads/2019/01/muell-5.png 452w, https://smartebude.de/wp-content/uploads/2019/01/muell-5-300x183.png 300w, https://smartebude.de/wp-content/uploads/2019/01/muell-5-30x18.png 30w, https://smartebude.de/wp-content/uploads/2019/01/muell-5-75x46.png 75w, https://smartebude.de/wp-content/uploads/2019/01/muell-5-110x67.png 110w, https://smartebude.de/wp-content/uploads/2019/01/muell-5-160x97.png 160w" sizes="auto, (max-width: 452px) 100vw, 452px" /></figure>



<p>Jetzt scrollt nach unten, dort gibt es unter dem Punkt  <strong>Kalender integrieren</strong> eine ICal Url bei <strong>Privatadresse im Ical-Format</strong>. Diese kopieren.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="952" height="1011" src="https://derfrickler.de/wp-content/uploads/2019/12/image.png" alt="" class="wp-image-352" srcset="https://smartebude.de/wp-content/uploads/2019/12/image.png 952w, https://smartebude.de/wp-content/uploads/2019/12/image-282x300.png 282w, https://smartebude.de/wp-content/uploads/2019/12/image-768x816.png 768w, https://smartebude.de/wp-content/uploads/2019/12/image-28x30.png 28w, https://smartebude.de/wp-content/uploads/2019/12/image-71x75.png 71w, https://smartebude.de/wp-content/uploads/2019/12/image-104x110.png 104w, https://smartebude.de/wp-content/uploads/2019/12/image-151x160.png 151w, https://smartebude.de/wp-content/uploads/2019/12/image-471x500.png 471w" sizes="auto, (max-width: 952px) 100vw, 952px" /></figure>



<h3 class="wp-block-heading">ICal Adapter konfigurieren</h3>



<p>Damit das Script später die Daten auch lesen kann, muss die Ical Url jetzt im Ical Adapter von IObroker eingetragen werden. Dazu müsst ihr diesen ggf. unter Adapter erst installieren. Danach geht über Instanzen in die Einstellungen des Adapters. Als Tagesvorschau habe ich 31 Tage genommen, da die Tonnen bei uns teilweise nur monatlich geleert werden und dieser Wert dann natürlich auch benötigt wird.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="900" height="585" src="https://derfrickler.de/wp-content/uploads/2019/01/muell-9.png" alt="" class="wp-image-77" srcset="https://smartebude.de/wp-content/uploads/2019/01/muell-9.png 900w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-300x195.png 300w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-768x499.png 768w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-30x20.png 30w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-75x49.png 75w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-110x72.png 110w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-160x104.png 160w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-500x325.png 500w, https://smartebude.de/wp-content/uploads/2019/01/muell-9-90x60.png 90w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption>meine Grundkonfiguration des Ical Adapters</figcaption></figure>



<p>Danach im Tab <em>Kalender</em> noch den Ical Kalender hinzufügen.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="102" src="https://derfrickler.de/wp-content/uploads/2019/01/muell-10-1024x102.png" alt="" class="wp-image-80" srcset="https://smartebude.de/wp-content/uploads/2019/01/muell-10-1024x102.png 1024w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-300x30.png 300w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-768x76.png 768w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-30x3.png 30w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-75x7.png 75w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-110x11.png 110w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-160x16.png 160w, https://smartebude.de/wp-content/uploads/2019/01/muell-10-500x50.png 500w, https://smartebude.de/wp-content/uploads/2019/01/muell-10.png 1326w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Ab jetzt gibt es unter Objekte beim Datensatz &#8222;ical.0.data.html&#8220; einen HTML String, der alle Termine enthält. Im Script zerflücken wir diesen nun und suchen nach dem nächsten Abfuhrtermin für Gelb, Bio, Schwarz und Papier. </p>



<h3 class="wp-block-heading">Script zum Berechnen der Tage</h3>



<p>Jetzt kommt der eigentliche Teil der View, die Berechnung der Tage bis zum nächsten Abfuhrtermin. </p>



<p>Das Script funktioniert folgendermaßen: </p>



<ul class="wp-block-list"><li>States zum Befüllen erzeugen</li><li>Alle Termine loopen</li><li>im Termin nach dem Vorkommen von Strings für Bio, Gelb, Schwarz und Papier suchen</li><li>jeweiliges Datum in eine Variable schreiben</li><li>nächsten Termin speichern als eigenen Datenpunkt</li><li>ein HTML String speichern für die Verwendung in VIS</li></ul>



<pre class="wp-block-code"><code>
createState('javascript.0.vis.muellkalender.html', 0, {
    name: 'Termine als String'
});

createState('javascript.0.vis.muellkalender.gelbe_tonne', 0, {
    name: 'Abfuhrtermin Gelb'
});
createState('javascript.0.vis.muellkalender.schwarze_tonne', 0, {
    name: 'Abfuhrtermin schwarz'
});
createState('javascript.0.vis.muellkalender.papier_tonne', 0, {
    name: 'Abfuhrtermin Papier'
});
createState('javascript.0.vis.muellkalender.bio_tonne', 0, {
    name: 'Abfuhrtermin Bio'
});



on({ id: "ical.0.data.table", change: "ne" }, function (obj) { updateMuellTermine(); });

function updateMuellTermine() {
    console.log("Start update");
    var terminPapier = "";
    var terminGelb = "";
    var terminBio = "";
    var terminRest = "";

    var termine = getState("ical.0.data.table").val;

    for (var i in termine) {
     //   Bio
     //   Restmüll
     //   Papier
     //   Gelbe
        
        var termin = termine[i];


        // suchen nach dem nächsten Termin der "Restmüll" enthält.
        console.log("###");
        // console.log(termin.event); // Debugging für Inhalt im Event Text
        // console.log(termin.date); // Debugging Inhalt Date

        if (termin.event.includes("Restmüll") &amp;&amp; terminRest == "") {
            terminRest = convertToEngDate(termin.date);
            console.log("Rest: "+ terminRest);
        }

        if (termin.event.includes("Bio") &amp;&amp; terminBio == "") {
            terminBio = convertToEngDate(termin.date);
            console.log(termin.date);
            console.log("Bio: "+terminBio);
        }

        if (termin.event.includes("Papier") &amp;&amp; terminPapier == "") {
            terminPapier = convertToEngDate(termin.date);
            console.log("Papier: "+ terminPapier);
        }

        if (termin.event.includes("Gelbe") &amp;&amp; terminGelb == "") {
            terminGelb = convertToEngDate(termin.date);
            console.log("Gelb: "+ terminGelb);
        }
    }


var visstring = '&lt;div class="muell schwarz">&lt;span>Schwarz&lt;/span>&lt;h1>'+ dateDiff(terminRest) + '&lt;/h1>&lt;i>'+convertToGermanDate(terminRest)+'&lt;/i>&lt;/div>'+ 
    '&lt;div class="muell papier">&lt;span>Papier&lt;/span>&lt;h1>'+ dateDiff(terminPapier) + '&lt;/h1>&lt;i>'+convertToGermanDate(terminPapier)+'&lt;/i>&lt;/div>'+ 
    '&lt;div class="muell gelb">&lt;span>Gelb&lt;/span>&lt;h1>'+ dateDiff(terminGelb) + '&lt;/h1>&lt;i>'+convertToGermanDate(terminGelb)+'&lt;/i>&lt;/div>'+ 
    '&lt;div class="muell bio">&lt;span>Bio&lt;/span>&lt;h1>'+ dateDiff(terminBio) + '&lt;/h1>&lt;i>'+convertToGermanDate(terminBio)+'&lt;/i>&lt;/div>';
    
    // einzelne States setzen
    setState('javascript.0.vis.muellkalender.html', visstring);
    setState('javascript.0.vis.muellkalender.gelbe_tonne', terminGelb);
    setState('javascript.0.vis.muellkalender.bio_tonne', terminBio);
    setState('javascript.0.vis.muellkalender.schwarze_tonne', terminRest);
    setState('javascript.0.vis.muellkalender.papier_tonne', terminPapier);
    
}

// Datum aus dem Kalender zu einem englischen Date formatieren
function convertToEngDate(str) {
   str = str.replace("→", "");
   var tempdate = str.trim().split(" ");
   var date = tempdate[0].split(".");
   return date[2]+"-"+date[1]+"-"+date[0];
}
// Deutsches Datum ausgeben. 
function convertToGermanDate(str) {
   var date = str.split("-");
   return date[2]+"."+date[1]+".";
}

// Differenz in Tagen zwischen heute und dem Abfuhrtag berechnen
function dateDiff(datestring) {
    var today = new Date();
    var date = new Date(datestring);
    date.setHours(0,0,0,0);
    today.setHours(0,0,0,0);

    var seconds = (date.getTime() / 1000) - (today.getTime() / 
                   1000) ;
    var days =  seconds / 86400 | 0;

    return days;
}

updateMuellTermine();</code></pre>



<p>Das Script muss je nach Kalenderformat ggf. angepasst werden. Tauchen Fragen auf, lasst gerne ein Kommentar da.</p>



<h3 class="wp-block-heading">View erstellen</h3>



<p>Die View ist eigentlich der schnellste Teil, da im Script ein fertiger HTML String erzeugt wird, den wir nur noch über das Widget &#8222;String (unescaped)&#8220; laden müssen. </p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="734" height="268" src="https://derfrickler.de/wp-content/uploads/2019/01/muell-3-1.png" alt="" class="wp-image-84" srcset="https://smartebude.de/wp-content/uploads/2019/01/muell-3-1.png 734w, https://smartebude.de/wp-content/uploads/2019/01/muell-3-1-300x110.png 300w, https://smartebude.de/wp-content/uploads/2019/01/muell-3-1-30x11.png 30w, https://smartebude.de/wp-content/uploads/2019/01/muell-3-1-75x27.png 75w, https://smartebude.de/wp-content/uploads/2019/01/muell-3-1-110x40.png 110w, https://smartebude.de/wp-content/uploads/2019/01/muell-3-1-160x58.png 160w, https://smartebude.de/wp-content/uploads/2019/01/muell-3-1-500x183.png 500w" sizes="auto, (max-width: 734px) 100vw, 734px" /></figure>



<p>Damit das ganze noch schön aussieht, legen wir über den Tab &#8222;CSS&#8220; noch den Style fest. Den CSS Code den ich verwendet hab findet ihr  unten.</p>



<h4 class="wp-block-heading">CSS Style für die Müll Abfuhranzeige</h4>



<pre class="wp-block-code"><code>.muell {
    float: left;
    width: 80px;
    text-align: center;

}

.muell.papier {
    background-color: blue;
    color: white;
}
.muell.gelb{
    background-color: #e4d519;
    color: white;
}
.muell.schwarz {
    background-color: black;
    color: white;
}
.muell.bio {
    background-color: #8B4513;
    color: white;
}

.muell span {
    padding-top: 10px;
    font-weight: bold;
    display: block;
    color: white;
}

.muell h1 {
    margin: 0px;
    padding: 0px; 
}</code></pre>



<h4 class="wp-block-heading">Fragen? Anregungen?</h4>



<p>Irgendwas unklar oder noch Ideen für den Ausbau? Dann hinterlasst mir gern ein Kommentar.</p>
<p>Der Beitrag <a href="https://smartebude.de/muellabfuhr-termine-in-tagen-anzeigen-iobroker-vis/">Müllabfuhr Termine in Tagen anzeigen &#8211; Iobroker VIS</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://smartebude.de/muellabfuhr-termine-in-tagen-anzeigen-iobroker-vis/feed/</wfw:commentRss>
			<slash:comments>39</slash:comments>
		
		
			</item>
		<item>
		<title>IOBroker Offset für Messwert / Variable mit Script umsetzen</title>
		<link>https://smartebude.de/iobroker-offset-fuer-messwert-variable-mit-script-umsetzen/</link>
					<comments>https://smartebude.de/iobroker-offset-fuer-messwert-variable-mit-script-umsetzen/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Wed, 18 Jul 2018 09:05:37 +0000</pubDate>
				<category><![CDATA[IOBroker]]></category>
		<guid isPermaLink="false">http://www.derfrickler.de/?p=13</guid>

					<description><![CDATA[<p>Nicht jeder Sensor ermöglicht das Einstellen eines Offsets (Abweichung eines Wertes). So ging es mir beispielsweise beim Temperaturdifferenzsensor von Homematic. Dort habe ich das Problem, dass die Sensorposition an der Heizung eine Differenz zur korrekten Temperatur aufweist die aber durch einen Offset einfach korrigierbar ist. Das ganze lässt sich super einfach mit einem Script mit [...]</p>
<p>Der Beitrag <a href="https://smartebude.de/iobroker-offset-fuer-messwert-variable-mit-script-umsetzen/">IOBroker Offset für Messwert / Variable mit Script umsetzen</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Nicht jeder Sensor ermöglicht das Einstellen eines Offsets (Abweichung eines Wertes). So ging es mir beispielsweise beim Temperaturdifferenzsensor von Homematic. Dort habe ich das Problem, dass die Sensorposition an der Heizung eine Differenz zur korrekten Temperatur aufweist die aber durch einen Offset einfach korrigierbar ist.</p>
<p>Das ganze lässt sich super einfach mit einem Script mit Blocky Bausteinen.</p>
<p>Im voraus einfach unter <strong>Objekte &gt; Javascript  </strong>ein neues Objekt erstellen. Im Beispiel heißt dieses <em>tank_temp.</em></p>
<p>Dann unter Scripte ein neues Script erstellen und wie folgt aufbauen:</p>
<p><a href="http://www.derfrickler.de/wp-content/uploads/2018/07/blocky-offset.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-14" src="http://www.derfrickler.de/wp-content/uploads/2018/07/blocky-offset-1024x505.png" alt="" width="688" height="339" srcset="https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-1024x505.png 1024w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-300x148.png 300w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-768x379.png 768w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-30x15.png 30w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-75x37.png 75w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-110x54.png 110w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-160x79.png 160w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-500x247.png 500w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-50x25.png 50w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-100x49.png 100w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset-200x99.png 200w, https://smartebude.de/wp-content/uploads/2018/07/blocky-offset.png 1313w" sizes="auto, (max-width: 688px) 100vw, 688px" /></a></p>
<p>Bedeutet: Falls sich das Objekt <em>Homematic Temperatur Sensor Wert</em> ändert, dann aktualisiere die Variable <em>temp_tank</em> mit dem Offset von 2.5</p>
<p>falls Objeckt -&gt; Trigger<br />
aktualisiere -&gt; System<br />
addieren -&gt; Mathematik</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Der Beitrag <a href="https://smartebude.de/iobroker-offset-fuer-messwert-variable-mit-script-umsetzen/">IOBroker Offset für Messwert / Variable mit Script umsetzen</a> erschien zuerst auf <a href="https://smartebude.de">Smartebude</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://smartebude.de/iobroker-offset-fuer-messwert-variable-mit-script-umsetzen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
