NEWS
Skript zur Auswertung der Batterien unter 25% bei Zigbee.
-
Hey Leute,
da man ja viele Leute auch Zigbee Geräte mit Batterien nutzen habe ich hier ein kleines Skript das Alle Geräte mit Batterien untersucht und durchzählt wieviele Geräte <25% Rest haben.
Dies wird dann unter userdata.0.zigbee in zwei Datenpunkten dargestellt. Einmal die Anzahl der Geräte und zweitens die IEEE Adresse der Geräte. Damit kann man dann mails, telegram oder whatsapp triggern.Die Datenpunkte unter userdata werden selbst angelegt sofern nicht vorhanden. Falls jemand das benötigt
Dieses Skript ist für Zigbee2MQTT
Edit: Das Skript wir jeden Tag um 10 Uhr ausgeführt damit es die Meldungen Tags gibtconst mqttPrefix = 'zigbee2mqtt.0'; // Dein Prefix const zigbeeFolder = '0_userdata.0.zigbee'; // Subfolder function checkAllBatteries() { // Folder anlegen createState(zigbeeFolder, {name: 'Zigbee Batterie-Status', type: 'folder', read: true, write: false}); // States anlegen createState(zigbeeFolder + '.battery_low_count', {name: 'Anzahl niedriger Batterien (<25%)', type: 'number', read: true, write: false, role: 'value'}); createState(zigbeeFolder + '.battery_low_names', {name: 'Niedrige Batterien-Namen (<25%)', type: 'string', read: true, write: false, role: 'text'}); let lowBatteries = []; $(mqttPrefix + '.*.battery').each(function(id) { let batState = getState(id); if (batState && batState.val !== null && !isNaN(batState.val) && batState.val < 25) { // FIX: isNaN let devicePath = id.substring(0, id.lastIndexOf('.battery')); let friendlyState = getState(devicePath + '.friendly_name'); let deviceName = friendlyState ? (friendlyState.val || devicePath.split('.').pop()) : devicePath.split('.').pop(); lowBatteries.push(`${deviceName}: ${Math.round(batState.val)}%`); } }); let count = lowBatteries.length; let names = lowBatteries.length > 0 ? lowBatteries.join(', ') : 'Keine'; setState(zigbeeFolder + '.battery_low_count', {val: count, ack: true}); setState(zigbeeFolder + '.battery_low_names', {val: names, ack: true}); log(`${count} Batterie(s) <25%: ${names}`, count > 0 ? 'warn' : 'info'); } // Täglich 10:00 Uhr schedule('0 10 * * *', checkAllBatteries); // Sofort testen checkAllBatteries();Gruß
Daniel -
Gibt's einen Adapter dafür:
https://github.com/iobroker-community-adapters/ioBroker.device-watcherKlar braucht der mehr Speicher als ein Script aber der Adapter ist trotzdem top.
-
Alter wenn ich das gewusst hätte. Aber das schreiben der Skripte ist ja mittlerweile relativ einfach. Fleißarbeit "digital machen lassen" und feinarbeit manuell.
Hätte ich mir echt sparen können. Denn ich habe nach Batteriestatus und Zigbee gesucht und auf die schnelle nichts passendes gefunden, daher ein bisschen Code gemacht.