ioBroker-Tutorial - eCharts-Adapter im Detail

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

ioBroker-Tutorial - eCharts-Adapter im Detail
ioBroker-Tutorial - eCharts-Adapter im Detail
  • Matthias Kleine
  • 18.11.2021
  • Grundlagen

Eine der Hauptaufgaben im Smart Home ist es, Daten grafisch aufzubereiten und zu analysieren. Wann wurde wieviel Strom verbraucht oder wie hat sich die Temperatur im Raum verändert, nachdem die Heizung eingeschaltet wurde? All das lässt sich auf viele Wege realisieren. Ich habe dafür in der Vergangenheit immer Grafana verwendet. Das ist eine zusätzliche Software, welche unabhängig vom ioBroker auf dem System läuft und die Daten z.B. aus InfluxDB liest und aufbereitet. Dieses Vorgehen ist zwar für erfahrene Nutzer sehr sinnvoll, weil man dort die maximale Flexiblität hat, allerdings ist es doch sehr komplex. Meistens geht es ja doch um eher einfache Darstellungen. Und da bietet der ioBroker mit dem eCharts-Adapter mittlerweile eine starke Alternative. Gerade was die Schnittstellen zur Visualisierung VIS angeht, ist der Adapter nicht zu übertreffen.

Video

ioBroker-Kurs

Nötige Pakete

Normalerweise sollte der ioBroker-Installer diese Pakete alle installieren. Bei älteren Installationen kann es aber sein, dass diese fehlen (wie bei mir).

sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev

JavaScript-Code

Solltest Du Deine Scripts direkt in JavaScript schreiben, findest Du hier den Beispiel-Code aus dem Video. Blockly folgt weiter unten.

on({id: "telegram.0.communicate.request", change: "any"}, async (obj) => {
    if (obj.state.val.indexOf('luftdruck') > -1) {
        sendTo('echarts.0', {
            preset:   'echarts.0.youtube.Luftdruck',

            renderer: 'jpg',
            background: '#FFFFFF',
            theme: 'light',
            quality: 0.8,

            fileOnDisk: '/opt/iobroker/iobroker-data/echarts-tmp.jpg'
        }, result => {
            if (result.error) {
                console.error(result.error);
            } else {
                // Send image to telegram
                sendTo("telegram.0", "send", {
                    text: '/opt/iobroker/iobroker-data/echarts-tmp.jpg'
                });
            }
        });
    }
});

Blockly-Script

<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id=";?0A?.X~u{17x%9[YUNU">chartId</variable>
    <variable id="])*A}+V:V%JPxQtNZL|Q">telegramText</variable>
    <variable id="RQT6o,Qcgf1Iy4t}*}5w">result</variable>
  </variables>
  <block type="variables_set" id="%$;A{L=$Dy0.qH-MFWO|" x="287" y="63">
    <field name="VAR" id=";?0A?.X~u{17x%9[YUNU">chartId</field>
    <value name="VALUE">
      <block type="text" id="4YNkG@|:!AHU!cO3f%Zc">
        <field name="TEXT">echarts.0.youtube.Luftdruck</field>
      </block>
    </value>
    <next>
      <block type="variables_set" id="0tr(9uByJ)BUt+*8]*lp">
        <field name="VAR" id="])*A}+V:V%JPxQtNZL|Q">telegramText</field>
        <value name="VALUE">
          <block type="text" id="y{I.NO2;W[p!9R!)CT!J">
            <field name="TEXT">luftdruck</field>
          </block>
        </value>
        <next>
          <block type="on" id="u5Dsod6/{1pXbDOC|z7#">
            <field name="OID">telegram.0.communicate.request</field>
            <field name="CONDITION">any</field>
            <field name="ACK_CONDITION"></field>
            <statement name="STATEMENT">
              <block type="controls_if" id="Ry83v@V]a#3r==G;TJ18">
                <value name="IF0">
                  <block type="logic_compare" id="$8xYc=JjESI|Fi:5JLju">
                    <field name="OP">GT</field>
                    <value name="A">
                      <block type="text_indexOf" id="#|z~Q-$JcOw|6:sX)**K">
                        <field name="END">FIRST</field>
                        <value name="VALUE">
                          <block type="on_source" id=".kTpUv,?@vEYeE}?hjJQ">
                            <field name="ATTR">state.val</field>
                          </block>
                        </value>
                        <value name="FIND">
                          <shadow type="text">
                            <field name="TEXT"></field>
                          </shadow>
                          <block type="variables_get" id="M{qon@3)-1XGW~rvZMmJ">
                            <field name="VAR" id="])*A}+V:V%JPxQtNZL|Q">telegramText</field>
                          </block>
                        </value>
                      </block>
                    </value>
                    <value name="B">
                      <block type="math_number" id="h$vi=nNFL}QltEjkw9R4">
                        <field name="NUM">0</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="sendto_custom" id="Xm},bXkGJ[u98;fT_XWj">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" items="preset,renderer,background,theme,quality,fileOnDisk" with_statement="true"></mutation>
                    <field name="INSTANCE">echarts.0</field>
                    <field name="COMMAND">send</field>
                    <field name="LOG"></field>
                    <field name="WITH_STATEMENT">TRUE</field>
                    <value name="ARG0">
                      <shadow type="text">
                        <field name="TEXT"></field>
                      </shadow>
                      <block type="variables_get" id="^TkY*r6qDR-~tG=!qYG|">
                        <field name="VAR" id=";?0A?.X~u{17x%9[YUNU">chartId</field>
                      </block>
                    </value>
                    <value name="ARG1">
                      <shadow type="text" id="UuNlg}nv5dJPS.N25?IJ">
                        <field name="TEXT">jpg</field>
                      </shadow>
                    </value>
                    <value name="ARG2">
                      <shadow type="text" id="ORj%?3?Q.?0xu?hSLp[Y">
                        <field name="TEXT">#FFFFFF</field>
                      </shadow>
                    </value>
                    <value name="ARG3">
                      <shadow type="text" id="5urBkkFf//q/I.y8C.R#">
                        <field name="TEXT">light</field>
                      </shadow>
                    </value>
                    <value name="ARG4">
                      <shadow type="text">
                        <field name="TEXT"></field>
                      </shadow>
                      <block type="math_number" id="(hKi9PP-Grp{6I#IH[U!">
                        <field name="NUM">0.8</field>
                      </block>
                    </value>
                    <value name="ARG5">
                      <shadow type="text" id="G~k@NS#yBd+Q^u]R$=KP">
                        <field name="TEXT">/opt/iobroker/iobroker-data/echarts-tmp.jpg</field>
                      </shadow>
                    </value>
                    <statement name="STATEMENT">
                      <block type="controls_if" id="V8_3/]CSd@~pCRUBQZ^k">
                        <mutation else="1"></mutation>
                        <value name="IF0">
                          <block type="get_attr" id="+w%gqUf-t?0x^m%Rc73j">
                            <value name="PATH">
                              <shadow type="text" id="KSLPzOy),StLMXna.IN6">
                                <field name="TEXT">error</field>
                              </shadow>
                            </value>
                            <value name="OBJECT">
                              <block type="variables_get" id="|`+$/Dl9MhDG;C[Dq#QX">
                                <field name="VAR" id="RQT6o,Qcgf1Iy4t}*}5w">result</field>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="debug" id="-0vj.IERFzND5PyA*G:Z">
                            <field name="Severity">error</field>
                            <value name="TEXT">
                              <shadow type="text">
                                <field name="TEXT">test</field>
                              </shadow>
                              <block type="get_attr" id="5;:N6h2:hnL7{YI%Jnwr">
                                <value name="PATH">
                                  <shadow type="text" id="YK=$lC*1H+WB`1o{$b`.">
                                    <field name="TEXT">error</field>
                                  </shadow>
                                </value>
                                <value name="OBJECT">
                                  <block type="variables_get" id="guE`=QaKB7Jm^gAY)EH4">
                                    <field name="VAR" id="RQT6o,Qcgf1Iy4t}*}5w">result</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </statement>
                        <statement name="ELSE">
                          <block type="telegram" id="JQ#T;,d+vhD8SsBD%OL,">
                            <field name="INSTANCE"></field>
                            <field name="LOG"></field>
                            <field name="SILENT">FALSE</field>
                            <field name="PARSEMODE">default</field>
                            <value name="MESSAGE">
                              <shadow type="text" id="vVgKIG(KF^[o/p6+%ncb">
                                <field name="TEXT">/opt/iobroker/iobroker-data/echarts-tmp.jpg</field>
                              </shadow>
                            </value>
                          </block>
                        </statement>
                      </block>
                    </statement>
                  </block>
                </statement>
              </block>
            </statement>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>
Du willst mehr?

Smart-Home-Trainings von A-Z

Steig noch tiefer in die Themen ein und meistere Deine Projekte! Über 9.000 Teilnehmer konnten sich schon von der Qualität der Online-Kurse überzeugen.

ioBroker-Master-Kurs

ioBroker-Master-Kurs

Mehr Infos
Hausbau-Kurs

Hausbau mit KNX

Mehr Infos
Lox-Kurs

Lox-Kurs

Mehr Infos
NodeRed-Kurs

NodeRed-Kurs

Mehr Infos