Im ioBroker den Batterie Status von Geräten abfragen

Im ioBroker wird von Geräten, die eine Batterie haben, auf unterschiedlichen Arten die Zustände der Batterien angezeigt.

Bei HomematicIP Geräten zum Beispiel, gibt es den Datenpunkt LOW_BAT der einen true oder false Wert darstellt. Bei ZigBee Geräten, zum Beispiel Aqara Tür-Fenster Sensor, wird der Datenpunkt battery benutzt um den Zustand der Batterie prozentual auszugeben.

Wie die Zusände der Batterien automatisch überprüft werden können, zeige ich Euch hier.

Dazu benötigt man ein Blocky Script und in den Aufzählungen eine Function.

Der Name der Function kann frei gewählt werden. Ist die Funktion angelegt, werden dort alle zu überwachenden Geräte hineingezogen.

ioBroker_Function_CheckBattery

Anschließend Importiert Ihr das folgende Blockly Script.

<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="(qTUpSTHa{aGLMu%OApC">LowBattery</variable>
    <variable id="64cz2+If*eW+1?:s@R$+">NameStateLow_Bat</variable>
    <variable id="Jwq6=[}Z|V~[J_j=biiJ">NameStateBattery</variable>
    <variable id=")^=hv+[]V?0J+W|T$VKG">DPPathCheckBattery</variable>
    <variable id="Ho[~fO([8}H5Q5oooRi[">EnumFunctionName</variable>
    <variable id="4wB:/!YE{cHL9D_%0znY">Message</variable>
    <variable id="@Qn$1x_,s/TD=W%hi!PB">SendToInstance</variable>
    <variable id="f#*Z/ltgn)xY5W2jBz]W">SendToInstanceCommand</variable>
  </variables>
  <block type="schedule" id="n%kpfPen#|ULUc}SI38;" x="38" y="166">
    <field name="SCHEDULE">0 0 * * *</field>
    <comment pinned="true" h="50" w="407">Prüft den Batterie Status von Geräten. Die Geräte müssen in ein Aufzählung =&gt; Funktion stehen.</comment>
    <statement name="STATEMENT">
      <block type="procedures_callcustomnoreturn" id="-;(N=F*]k%Kq^.QhZ0Sz">
        <mutation name="BatteryCheck">
          <arg name="LowBattery"></arg>
          <arg name="NameStateLow_Bat"></arg>
          <arg name="NameStateBattery"></arg>
          <arg name="DPPathCheckBattery"></arg>
          <arg name="EnumFunctionName"></arg>
          <arg name="Message"></arg>
          <arg name="SendToInstance"></arg>
          <arg name="SendToInstanceCommand"></arg>
        </mutation>
        <value name="ARG0">
          <block type="math_number" id="0*L=lfYDiB_*s:Ef:T8j">
            <field name="NUM">30</field>
          </block>
        </value>
        <value name="ARG1">
          <block type="text" id="^_`AqW!qu%FaJ7NDA0F.">
            <field name="TEXT">LOW_BAT</field>
          </block>
        </value>
        <value name="ARG2">
          <block type="text" id="w(*$*4cPT{tZ)1^[S{zg">
            <field name="TEXT">battery</field>
          </block>
        </value>
        <value name="ARG3">
          <block type="text" id="4cdYl%KE*DZm=h2AOIqG">
            <field name="TEXT">0_userdata.0.Checks.BatteryStatus</field>
          </block>
        </value>
        <value name="ARG4">
          <block type="text" id=")*j5UQ;CfKEcO!EDd9a$">
            <field name="TEXT">enum.functions.checkbattery</field>
          </block>
        </value>
        <value name="ARG5">
          <block type="text" id="SHtF_q@HUe8V_*}%IB!S">
            <field name="TEXT"> Batterie ist fast leer.</field>
          </block>
        </value>
        <value name="ARG6">
          <block type="text" id="vK@R%|P7f@LT0aGoS0{m">
            <field name="TEXT">telegram.0</field>
          </block>
        </value>
        <value name="ARG7">
          <block type="text" id="075Gr!evgZ:$!n[+H0:)">
            <field name="TEXT">send</field>
          </block>
        </value>
      </block>
    </statement>
  </block>
  <block type="procedures_defcustomnoreturn" id="K.d-N,j*cjgC:uFNlC:e" x="38" y="513">
    <mutation statements="false">
      <arg name="LowBattery" varid="(qTUpSTHa{aGLMu%OApC"></arg>
      <arg name="NameStateLow_Bat" varid="64cz2+If*eW+1?:s@R$+"></arg>
      <arg name="NameStateBattery" varid="Jwq6=[}Z|V~[J_j=biiJ"></arg>
      <arg name="DPPathCheckBattery" varid=")^=hv+[]V?0J+W|T$VKG"></arg>
      <arg name="EnumFunctionName" varid="Ho[~fO([8}H5Q5oooRi["></arg>
      <arg name="Message" varid="4wB:/!YE{cHL9D_%0znY"></arg>
      <arg name="SendToInstance" varid="@Qn$1x_,s/TD=W%hi!PB"></arg>
      <arg name="SendToInstanceCommand" varid="f#*Z/ltgn)xY5W2jBz]W"></arg>
    </mutation>
    <field name="NAME">BatteryCheck</field>
    <field name="SCRIPT">Ly9jb25zdCBMT1dCQVRURVJZID0gOTA7DQovL2NvbnN0IFNFTkRUT0lOU1RBTkNFID0gInRlbGVncmFtLjAiOw0KLy9jb25zdCBTRU5EVE9JTlNUQU5DRUNPTU1BTkQgPSAic2VuZCI7DQovL2NvbnN0IE1FU1NBR0VCQVRURVJZSVNFTVBUWSA9ICcgQmF0dGVyaWUgaXN0IGZhc3QgbGVlci4nOw0KLy9jb25zdCBCQVRURVJZTE9XX0JBVCA9ICdMT1dfQkFUJzsNCi8vY29uc3QgQkFUVEVSWUJBVFRFUlkgPSAnYmF0dGVyeSc7DQovL2NvbnN0IFBBVEhEUEJBVFRFUllTVEFUVVMgPSAnMF91c2VyZGF0YS4wLkNoZWNrcy5CYXR0ZXJ5U3RhdHVzJzsNCi8vY29uc3QgRU5VTUZVTkNUSU9OTkFNRUJBVFRFUllDSEVDSyA9ICdlbnVtLmZ1bmN0aW9ucy5jaGVja2JhdHRlcnknOw0KDQp2YXIgc2VuZE1lc3NhZ2UgPSAnJzsNCnZhciBvbGRCYXR0ZXJ5U3RhdHVzID0gJChEUFBhdGhDaGVja0JhdHRlcnkgKyAnLionKTsNCnZhciBuZXdCYXR0ZXJ5U3RhdHVzID0gZ2V0T2JqZWN0KEVudW1GdW5jdGlvbk5hbWUpLmNvbW1vbi5tZW1iZXJzOw0KDQpsb2coIkFuemFobCBCYXR0ZXJ5IFN0YXR1cyBhbHRlIERldmljZXM6ICIgKyBvbGRCYXR0ZXJ5U3RhdHVzLmxlbmd0aCk7DQpsb2coIkFuemFobCBCYXR0ZXJ5IFN0YXR1cyB6dSBwcsO8ZmVuZGUgRGV2aWNlczogIiArIG5ld0JhdHRlcnlTdGF0dXMubGVuZ3RoKTsNCg0KLy8gYWx0ZW4gU3RhdHVzIGzDtnNjaGVuDQpmb3IoIGEgPSAwOyBhIDwgb2xkQmF0dGVyeVN0YXR1cy5sZW5ndGg7IGErKykgew0KICAgIGRlbGV0ZVN0YXRlKG9sZEJhdHRlcnlTdGF0dXNbYV0pOw0KfQ0KICAgIA0KLy8gQmF0dGVyeSBTdGF0dXMgcHLDvGZlbg0KZm9yKGxldCBpID0gMDsgaSA8IG5ld0JhdHRlcnlTdGF0dXMubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgYmF0dGVySXNMb3cgPSBmYWxzZTsNCiAgICB2YXIgbmV3QmF0dGVyeVZhbHVlOw0KICAgIHZhciBiYXR0ZXJ5U3RhdGVuYW1lOw0KICAgIHZhciBCYXR0ZXJ5U3RhdHVzSW5Qcm96ZW50ID0gZ2V0U3RhdGUobmV3QmF0dGVyeVN0YXR1c1tpXSArICcuJyArIE5hbWVTdGF0ZUJhdHRlcnkpLnZhbDsNCiAgICB2YXIgQmF0dGVyeUxvd0JhdCA9IGdldFN0YXRlKG5ld0JhdHRlcnlTdGF0dXNbaV0gKyAnLicgKyBOYW1lU3RhdGVMb3dfQmF0KS52YWw7DQogICAgdmFyIEdlcmFldGVOYW1lID0gZ2V0T2JqZWN0KG5ld0JhdHRlcnlTdGF0dXNbaV0pLmNvbW1vbi5uYW1lOw0KICAgIA0KICAgIGxvZyhHZXJhZXRlTmFtZSArICIgQmF0dGVyeVN0YXR1c0luUHJvemVudDogIiArIEJhdHRlcnlTdGF0dXNJblByb3plbnQpOw0KICAgIGxvZyhHZXJhZXRlTmFtZSArICIgQmF0dGVyeUxvd0JhdDogIiArIEJhdHRlcnlMb3dCYXQpOw0KICAgIA0KICAgIGlmIChCYXR0ZXJ5TG93QmF0ICE9IG51bGwpew0KICAgICAgICAvL0hvbWVtYXRpYyBHZXLDpHRlDQogICAgICAgIA0KICAgICAgICBpZiAoQmF0dGVyeUxvd0JhdCA9PSB0cnVlKXsNCiAgICAgICAgICAgIHNlbmRNZXNzYWdlID0gR2VyYWV0ZU5hbWUgKyBNZXNzYWdlOw0KICAgICAgICAgICAgYmF0dGVySXNMb3cgPSBCYXR0ZXJ5TG93QmF0Ow0KICAgICAgICAgICAgbmV3QmF0dGVyeVZhbHVlID0gQmF0dGVyeUxvd0JhdDsNCiAgICAgICAgICAgIGJhdHRlcnlTdGF0ZW5hbWUgPSBOYW1lU3RhdGVMb3dfQmF0Ow0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgLy9hbmRlcmUgR2Vyw6R0ZQ0KICAgICAgICBpZiAoIEJhdHRlcnlTdGF0dXNJblByb3plbnQgPD0gTG93QmF0dGVyeSkgew0KICAgICAgICAgICAgc2VuZE1lc3NhZ2UgPSBHZXJhZXRlTmFtZSArIE1lc3NhZ2UgKyAnICcgKyBCYXR0ZXJ5U3RhdHVzSW5Qcm96ZW50ICsgJyUnOw0KICAgICAgICAgICAgYmF0dGVySXNMb3cgPSB0cnVlOw0KICAgICAgICAgICAgbmV3QmF0dGVyeVZhbHVlID0gQmF0dGVyeVN0YXR1c0luUHJvemVudDsNCiAgICAgICAgICAgIGJhdHRlcnlTdGF0ZW5hbWUgPSBOYW1lU3RhdGVCYXR0ZXJ5Ow0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIE5hY2hyaWNodCBzZW5kZW4gJiBEYXRlbnB1bmt0IHNjaHJlaWJlbiB3ZW5uIEJhdHRlcmllIGxlZXIgaXN0DQogICAgaWYgKGJhdHRlcklzTG93KSB7DQogICAgICAgIC8vRGF0ZW5wdW5rdCBzY2hyZWliZW4NCiAgICAgICAgY3JlYXRlU3RhdGUoRFBQYXRoQ2hlY2tCYXR0ZXJ5ICsgJy4nICsgbmV3QmF0dGVyeVN0YXR1c1tpXSwNCiAgICAgICAgICAgICcnLCANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZWFkOiB0cnVlLCANCiAgICAgICAgICAgICAgICB3cml0ZTogdHJ1ZSwNCiAgICAgICAgICAgICAgICBuYW1lOiBHZXJhZXRlTmFtZSwNCiAgICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIiwNCiAgICAgICAgICAgICAgICByb2xlOiAnJywNCiAgICAgICAgICAgICAgICBkZWY6IDANCiAgICAgICAgICAgIH0NCiAgICAgICAgKTsNCiAgICAgICAgDQogICAgICAgIGNyZWF0ZVN0YXRlKERQUGF0aENoZWNrQmF0dGVyeSArICcuJyArIG5ld0JhdHRlcnlTdGF0dXNbaV0gKyAiLiIgKyBiYXR0ZXJ5U3RhdGVuYW1lLA0KICAgICAgICAgICAgbmV3QmF0dGVyeVZhbHVlLCANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZWFkOiB0cnVlLCANCiAgICAgICAgICAgICAgICB3cml0ZTogdHJ1ZSwNCiAgICAgICAgICAgICAgICBuYW1lOiAnQmF0dGVyeScsDQogICAgICAgICAgICAgICAgdHlwZTogInN0cmluZyIsDQogICAgICAgICAgICAgICAgcm9sZTogJ2JhdHRlcnknLA0KICAgICAgICAgICAgICAgIGRlZjogMA0KICAgICAgICAgICAgfQ0KICAgICAgICApOw0KICAgICAgICANCiAgICAgICAgc2VuZFRvKFNlbmRUb0luc3RhbmNlLCBTZW5kVG9JbnN0YW5jZUNvbW1hbmQsIHsNCiAgICAgICAgICAgIHRleHQ6IHNlbmRNZXNzYWdlDQogICAgICAgIH0pOw0KICAgIH0NCn0NCg==</field>
    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
  </block>
</xml>

Nach dem Import sollte das Blockly wie folgt aussehen

Blockly CheckBattery

Das Blockly prüft alle Geräte die in der Funktion „enum.functions.checkbattery“ hinterlegt sind. Ist LOW_BAT (Homematic) gleich true oder battery <=30 (zum Beispiel ZigBee), wird per Telegram eine Nachricht versendet.

Zusätzlich wird ein Datenpunkt angelegt in dem das Gerät mit einer schwachen Batterie gespeichert ist. Diese Liste wird vor jedem Lauf gelöscht. Somit sind die Daten darin immer aktuell.

In meinem Fall läuft das Script immer um 00:00 Uhr.

Wie Ihr seht, können statt Telegram auch andere Empfänger festgelegt werden. Auch der Pfad für die Datenpunkte ist dynamisch.

4 Gedanken zu „Im ioBroker den Batterie Status von Geräten abfragen

  1. burkhard

    Moin, die Zigbee-Geräte funktionieren. Aber HomematicIP sagen alle Batterie leer obwohl lowBat=false. Habe auch versucht im NamestateLowBat von LOW_BAT auf lowBat zu wechseln, geht aber trotzdem nicht. Wäre schön wenn mir da jemand, am besten der Autor, weiterhelfen könnte. Aber das Zigbee funktioniert ist schon mal SUPER.

  2. burkhard

    Klappt ja alles ganz gut, aber würde mich interessieren ob man die warnungen abschalten kann oder ich noch etwas verkehrt mache?
    Heute 01:01 warn javascript.0 [31 Einträge] at processTimers (internal/timers.js:497:7)
    Heute 01:01 warn javascript.0 [31 Einträge] at listOnTimeout (internal/timers.js:554:17)
    Heute 01:01 warn javascript.0 [31 Einträge] at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/schedule.js:510:7)
    Heute 01:01 warn javascript.0 [31 Einträge] at /opt/iobroker/node_modules/node-schedule/lib/schedule.js:552:11
    Heute 01:01 warn javascript.0 [31 Einträge] at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/schedule.js:173:10)
    Heute 01:01 warn javascript.0 [31 Einträge] at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1297:34)
    Heute 01:01 warn javascript.0 [31 Einträge] at Object. (script.js.common.Batterien:96:9)
    Heute 01:01 warn javascript.0 [12 Einträge] at BatteryCheck (script.js.common.Batterien:31:38)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A1BE99881E2.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A1BE99881AA.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A1BE99881A9.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A1BE9988193.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A1BE998815E.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A1BE9987F1A.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A00000DA49A191B0.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A00000DA49A18AE0.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A00000DA49A18AAF.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A00000DA49A18A8F.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A00000DA49A18A2E.battery“ not found (3)
    Heute 01:01 warn javascript.0 getState „hmip.0.devices.3014F711A0000A9BE993B61A.battery“ not found (3)
    Heute 01:01 warn javascript.0 [19 Einträge] at BatteryCheck (script.js.common.Batterien:32:29)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.57.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.54.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.51.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.49.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.48.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.46.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.44.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.43.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.40.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.36.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.35.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.34.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.3.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.26.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.2.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.15.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.12.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.11.channels.0.lowBat“ not found (3)
    Heute 01:01 warn javascript.0 getState „deconz.0.Sensors.37.channels.0.lowBat“ not found (3)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.