ioBroker-Tutorial - eCharts-Adapter im Detail
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
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>