Homey Systemlast auslesen

Kleine Ergänzung: Ausgabe der App-Speichernutzung an HomeAssistant…

Ich wollte neben der Systemlast auch die Speichernutzung im HA-Dashboard haben - vor allem um zu prüfen, dass meine App sauber ohne Speicherleaks läuft.
Wer das auch machen möchte, kann dieses Beispiel übernehmen. Ich hatte ein paar Schwierigkeiten mit der AppListe in HA, deshalb ist das ggf. auch hilfreich für andere MQTT-Importe von JSON-Listen in HA.

1) HomeyScript:

// Ausgabe von SystemMemory-Inhalten als Flow-Tags
mem = await Homey.system.getMemoryInfo( );
var array = [];
var used = 0;
var free = 0;
var total = 0;
var json_dict;
for(var i in mem.types)
    array.push(mem.types [i]);
array = array.sort((a, b) => {
  return (a.size > b.size) ? -1 : 1;
});
json_dict = "{";
for(var i in array){
    used += array[i].size;
    array[i].size = Math.round(array[i].size /1000 /10)/100; 
    json_dict += '"'+array[i].name+'":"'+array[i].size+'"';
    if ( i<array.length-1)
      json_dict+=",";
}
json_dict += "}";
free = ( mem.total - used ) / 1000 / 1000;
used = used / 1000 / 1000;
total = mem.total / 1000 / 1000;
//console.log(JSON.stringify(array));
//console.log(array);
//console.log("Memory total: "+total.toFixed(2));
//console.log("Summe Apps: "+used.toFixed(2));
//console.log("Frei: "+free.toFixed(2));
//console.log(json_dict);
await tag("memoryTotal",  Math.round(total *100)/100 );
await tag("memoryUsed",  Math.round(used *100)/100 );
await tag("memoryFree",  Math.round(free *100)/100 );
await tag("memoryAppList",  json_dict );
return true;

Falls nach dem Kopieren Fehler in HomeyScript angezeigt werden, dann prüft bitte, ob die Anführungszeichen korrekt sind.
Das Script liest die Homey-Speicherdaten und gibt 3 Werte direkt aus (gesamt, genutzt, frei). Ich rechne auf MB mit Faktor 1000, weil das den Angaben in der HomeyApp entspricht.

Zusätzlich werden die Apps ausgelesen und in ein JSON-Dictionary konvertiert:
{“Homey”:“132.5”,“Andere”:“35.28”,“MQTT Hub”:“33.4”,…}
Das ist die Variante, die direkt als MQTT-Topic in HA importiert werden kann.

2. Übertragung per MQTT:
Auslesen und Senden an HA erfolgt per Flow:

3. MQTT-Sensor in HA:
In HA werden die Inhalte per MQTT-Sensor übernommen:

- platform: mqtt
  name: homeySystemMemoryTotal
  state_topic: 'homey_publish/SystemMemoryTotal'
  value_template: >-
    {{ value | float  }}
  force_update: true
  unit_of_measurement: "MB"
- platform: mqtt
  name: homeySystemMemoryUsed
  state_topic: 'homey_publish/SystemMemoryUsed'
  value_template: >-
    {{ value | float  }}
  force_update: true
  unit_of_measurement: "MB"
- platform: mqtt
  name: homeySystemMemoryFree
  state_topic: 'homey_publish/SystemMemoryFree'
  value_template: >-
    {{ value | float  }}
  force_update: true
  unit_of_measurement: "MB"
- platform: mqtt
  name: homeySystemMemoryAppList
  state_topic: 'homey_publish/SystemMemoryUsed'
  json_attributes_topic: 'homey_publish/SystemMemoryAppList'
  #json_attributes_template: '{{ value_json }}'
  value_template: '{{ value_json }}'

Die App-Liste wird als Attribute-Liste übernommen:
json_attributes_topic: ‘homey_publish/SystemMemoryAppList’

4. Anzeige in Dashboard:
Für die Anzeige verwende ich eine Chart-Komponente sowie die HACS-Komponente entity-attributes-card

Lovelace:

type: 'custom:entity-attributes-card'
title: false
heading_name: Apps
heading_state: MB
filter:
  include:
    - key: sensor.homeysystemmemoryapplist.*
  exclude:
    - key: sensor.homeysystemmemoryapplist.friendly_name

Das sieht das wie folgt aus:
grafik

grafik

3 Likes