NEWS

[Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe

  • Developer

    Generisches Script um die Batteriestände beliebig vieler Geräte, auch mit unterschiedlichen Spannungen und LowLimit, zu überwachen

    Features

    • Kann beliebig viele Geräte überwachen welche einen Datenpunkt mit der Batteriespannung, eine Prozentangabe oder zumindest Lowbat zur Verfügung stellen.
    • Es können simultan Geräte mit unterschiedlichen Spannungen überwacht werden, z.B. 1,5V und 3V, auch Geräte welche nur LowBat true/false bereitstellen können berücksichtigt werden ebenso wie Prozentwerte in zwei Varianten.
    • Möglichkeit eine Meldung/Ansage via Log/Mail/Alexa/Telegram bei unterschreiten einer einstellbaren Limitspannung auszugeben.
    • permanente Anzeige des Gerätes mit der niedrigsten Spannung (außer Lowbat, da hier die Info nicht verfügbar ist).
    • Kleines Set aus vordefinierten Standart Vis Widgets (Basic-String, Basic-Bool, Html) zur leichteren Integration, bzw. als Beispiel für eigene Vis Projekte.
    • Einfache, dynamisch erstellte Html Übersichtstabelle mit einstellmöglichkeit welche Spalten angezeigt werden sollen
    • Nach Installation keine Skriptänderungen mehr nötig um neue Geräte hinzuzufügen.

    Genaueres beim Projekt auf Git

    widgetstut6a.png

  • Developer

    bei Datenpunkte ohne Unit also % z.B. bei Hue Geräten die haben die anzeige von 0 bis 100 % allerdings ohne Unit Angabe.
    Screenshot_65.png

    und in der json schaut es dann so aus
    Screenshot_66.png

    [ U Ist ] ist bei 100.00V obwohl auf 3V eingestellt ist
    kannst du das noch einbauen?

  • Developer

    @Issi sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    [ U Ist ] ist bei 100.00V obwohl auf 3V eingestellt ist
    kannst du das noch einbauen?

    Imho kann mein Skript nix dafür wenn Adapter die Datenpunkte nicht korrekt setzten, was es erkennt ist soweit richtig. Es ist keine boolsche Angabe, es ist keine % Angabe, also ist es ne Spannungsangabe. Ich kann nicht einfach sagen das ist jetzt ne % Angabe, dann würde es bei allen Geräten welche tatsächlich Spannung liefern nicht mehr funktionieren, an irgendwas muß ich die Erkennung ja festmachen. Klar, man könnte jetzt so Krücken einbauen, wie, wenn die erkannte Spannung mehr als doppelt soviel als die Batteriennenspannung ist, dann ist es %, aber sowas kann einem in anderen Fällen wieder auf die Füße fallen, sprich, nein, ich werde das nicht einbauen.

    Kurzfristiger Workaround für Dich, ändere die Raw vom Datenpunkt und setzt eine Unit Angabe dazu.
    Also nach "type": "number", eine neue Zeile und dort ein "unit": "%", einfügen.

    An sich ist das aber imho ein Adapterissue und wenn Du mir sagst welcher Adapter das genau ist, werd ich das aufmachen.

  • Developer Most Active Administrators

    @Issi sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    bei Datenpunkte ohne Unit also % z.B. bei Hue Geräten die haben die anzeige von 0 bis 100 % allerdings ohne Unit Angabe.
    Screenshot_65.png

    und in der json schaut es dann so aus
    Screenshot_66.png

    [ U Ist ] ist bei 100.00V obwohl auf 3V eingestellt ist
    kannst du das noch einbauen?

    zeig mal so nene Datenpunkt in raw format, hört sich fuer mich eher an als das der Datenpunkt sich nicht an de adapter rollen Struktur hellt und deswegen Problemen macht.

    https://github.com/ioBroker/ioBroker/blob/master/doc/STATE_ROLES.md

  • Developer

    @Dutchman
    hier die raw von einem der Datenpunkte

    {
      "from": "system.adapter.hue.0",
      "user": "system.user.admin",
      "ts": 1569934397829,
      "common": {
        "name": "Flur Sensor.battery",
        "type": "number",
        "role": "config",
        "read": true,
        "write": true
      },
      "native": {
        "id": "65"
      },
      "acl": {
        "object": 1636,
        "owner": "system.user.admin",
        "ownerGroup": "system.group.administrator",
        "state": 1636
      },
      "_id": "hue.0.Flur_Sensor.battery",
      "type": "state"
    }
    

    Screenshot_67.png

  • Developer Most Active Administrators

    @Issi sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    "role": "config",

    hamja, lange rede kurzer sind dieser Datenpunkt ist mist und darf nicht so existieren.
    Es gibt keinen "config" fuer battery zustände :

    * value.battery - battery level
    * indicator.lowbat - true if low battery
    * indicator.maintenance - indicates system warnings/errors, alarms, service messages, battery empty or stuff like that
    

    Dies sind die einzig offiziell validen Manieren um zustände einer batterie zu registrieren : https://github.com/ioBroker/ioBroker/blob/master/doc/STATE_ROLES.md

    Ergo : Der adapter sollte gefixt werden, diese state mit type config gibt es nicht

    Battery lehr ist entweder indicator.lowbat auf true, oder value.battery < xxx

    Ich würde da nix im script machen sonder das problem bei der wurzel lösen.

    Alles anderen währe ein workaround um einen anderen Fehler zu verstuschen.

    Cheers,

    Dutch

  • Developer


  • Hallo,

    erst einmal vielen Dank super script!
    Ich habe ein kleines Problem und zwar zeigt das script bei den homematic Fensterkontakten (z.B. Gäste WC) den falschen Wert an. Soweit ich es sehen kann gibt der Sensor keine Spannungslevel sondern nur true or flase. So wie ich das script verstanden habe sollte es aber auch diese Sensoren anzeigen als voll oder leer. Verstehe aber aktuell nicht was ich falsch mache.

    Parameter habe ich wie folgt definiert:
    b849eb1b-c7b4-4999-aa2a-ec0c6bf6c243-image.png

    Das script erkennt die Sensoren auch beide LOWBAT haben der Wert "false" aber das sript zeigt den Wert Val=0.
    76925662-cf6b-4102-8eec-8f62009b18c2-image.png

    Die Vis Ausgabe zeigt dem entsprechend auch das die Batterie leer ist:
    7df05c8b-3607-46c9-ad82-b642e091a609-image.png

    Hat jemand eine Idee, habe ich den Parameter falsch definiert?

  • Developer

    @gogohome sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    Hat jemand eine Idee, habe ich den Parameter falsch definiert?

    Nein, alles gut bei Dir. War n Bug, den hatte ich schon vor paar Tagen gefixt nur noch nicht hochgeladen weil ich noch was anderes machen wollte. Hab jetzt mal den Zwischenstand als 1.5.2 hochgeladen. Gugg mal obs jetzt passt und bitte nochmal Feedback.


  • Danke für den schnellen fix, sieht soweit gut aus. Konnte aber bisher nur den "false" Fall testen, mal sehen ob ich noch eine leere Batterie finde um dem true case zu prüfen. Werde am Wochenende mal die anderen Sensoren einbinden und berichten.

    Gruß

  • Developer

    @gogohome sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    Konnte aber bisher nur den "false" Fall testen,

    Das klappt im true Fall auch, ich hab mir ja für alle Varianten hier virtuelle Batterien angelegt wo ich die Werte einfach reinschreibe. Gibt noch nen kleinen Bug bei der Lastmessage (wird in bestimmten Fällen nicht gelöscht) aber das is morgen dann auch gefixt.


  • Hallo Pittini,

    ich wollte heute mal dein Bat.Script ausprobieren.

    Bekommen folgende Fehler:

    javascript.0	2020-04-18 21:47:16.205	error	(7021) at process._tickCallback (internal/process/next_tick.js:68:7)
    javascript.0	2020-04-18 21:47:16.204	error	(7021) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49)
    javascript.0	2020-04-18 21:47:16.204	error	(7021) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
    javascript.0	2020-04-18 21:47:16.204	error	(7021) at client.(anonymous function) (/opt/iobroker/node_modules/iobroker.objects-redis/index.js:1:83661)
    javascript.0	2020-04-18 21:47:16.203	error	(7021) at /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1964:42
    javascript.0	2020-04-18 21:47:16.203	error	(7021) at Object.<anonymous> (script.js.common.Batterienauswertung:82:13)
    javascript.0	2020-04-18 21:47:16.202	error	(7021) at main (script.js.common.Batterienauswertung:187:5)
    javascript.0	2020-04-18 21:47:16.202	error	(7021) at CheckNextLowBatt (script.js.common.Batterienauswertung:224:116)
    javascript.0	2020-04-18 21:47:16.202	error	(7021) at GetRoom (script.js.common.Batterienauswertung:281:17)
    javascript.0	2020-04-18 21:47:16.201	error	(7021) Error in callback: TypeError: Cannot read property 'replace' of undefined
    

    Was mache ich falsch?

    Danke und Grüße

  • Developer

    @Saschag sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    Was mache ich falsch?

    Mach mal nen Screenshot von irgendeinem Batteriedatenpunkt wo Du die Funktion gesetzt hast. Also den aufgeklappten Channel.
    Und zeig mal Deine Einstellungen im Skript.


  • @Pittini

    ich war zu schnell 😞

    habe dem falschen HM-Gerät das Gewerk "Aufzählung" zugeteilt 😥

    Sorry und trotzdem vielen Dank!!!!!


  • @Pittini
    Hi,

    Danke für das Script und drumherum. Ich erhalte beim Start des Scripts allerdings eine Fehlermeldung:

    javascript.0	2020-04-26 13:32:16.493	error	(29690) at process._tickCallback (internal/process/next_tick.js:68:7)
    javascript.0	2020-04-26 13:32:16.493	error	(29690) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49)
    javascript.0	2020-04-26 13:32:16.492	error	(29690) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
    javascript.0	2020-04-26 13:32:16.492	error	(29690) at (anonymous function).(anonymous function) (/opt/iobroker/node_modules/iobroker.objects-redis/index.js:17:71697)
    javascript.0	2020-04-26 13:32:16.492	error	(29690) at /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1964:42
    javascript.0	2020-04-26 13:32:16.492	error	(29690) at Object.<anonymous> (script.js.common.BatterieUeberwachung:82:13)
    javascript.0	2020-04-26 13:32:16.492	error	(29690) at main (script.js.common.BatterieUeberwachung:188:5)
    javascript.0	2020-04-26 13:32:16.492	error	(29690) at MakeTable (script.js.common.BatterieUeberwachung:371:81)
    javascript.0	2020-04-26 13:32:16.492	error	(29690) Error in callback: TypeError: Cannot read property 'toFixed' of undefined
    javascript.0	2020-04-26 13:32:16.490	info	(29690) script.js.common.BatterieUeberwachung: Reaching Mytable
    

    Was hat es mit dem 'toFixed' auf sich, und wie kann ich das beheben?

    Die Datenpunkte werden alle korrekt aufgebaut und auch gefüllt, nur die OverviewTable bleibt leer.

    Gruss, Jürgen

  • Developer

    @Wildbill sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    Was hat es mit dem 'toFixed' auf sich, und wie kann ich das beheben?
    Die Datenpunkte werden alle korrekt aufgebaut und auch gefüllt, nur die OverviewTable bleibt leer.

    toFixed macht aus ner Nummer nen String mit ner bestimmten Zahl Nachkommastellen. Das ist nicht das Problem, sondern das Wörtchen undefined danach. Da hast Du vermutlich irgendwas falsch konfiguriert, wenn an der Stelle ein Fehler im Skript wäre, würde es bei niemanden funktionieren.
    Zeig mal Deine Skripteinstellungen und einen Datenpunkt aus der Objektliste wo ich sehen kann wie Du die Funktionszuweisung gemacht hast. Und das komplette log das das Skript ausgibt.


  • Hi,

    hier mal das Log:

    Kann es sein, dass es Probleme gibt, wenn einem Datenpunkt zwei Räume oder Funktionen zugeordnet sind? Von FHEM habe ich ein paar Geräte, die haben einmal iobroker und dann eben den Raum selbst als Raum. in FHEM werden so die Datenpunkte markiert, die zu iobroker gehen sollen.
    Ebenfalls habe ich ein paar Datenpunkte, die zwei Funktionen zugewiesen haben, einmal den neuen fürs Script und einen anderen. Und ein Raum heisst "Hinterer Raum" ohne die ". Kann das Leerzeichen hier Probleme machen?

    86f1291f-9c3b-42c7-9f84-347701834e10-grafik.png

    7a81199a-f938-44c4-9bd0-8cf8e5008c64-grafik.png

    Gruss, Jürgen


  • @Pittini
    Ich habe mal bei allen Geräte bis auf je eines aus jedem Spannungsbereich wieder die Funktion BatterieSpannung_XXXX entfernt und dabei darauf geachtet, dass bei Raum und Funktion je nur eines steht und schon läuft es. Werde nun mal die "fragwürdigen" Geräte nach und nach zuordnen und sehe ja dann, bei welchem es hakt. Gebe dann Bescheid.

    Blöd nur, dass ich anscheinend wirklich jedes Mal den javascript-Adapter neu starten muss, damit er die Änderungen erkennt...

    Gruss, Jürgen

  • Developer

    @Wildbill sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

    Kann es sein, dass es Probleme gibt, wenn einem Datenpunkt zwei Räume oder Funktionen zugeordnet sind? Von FHEM habe ich ein paar Geräte, die haben einmal iobroker und dann eben den Raum selbst als Raum. in FHEM werden so die Datenpunkte markiert, die zu iobroker gehen sollen.

    Zwei Räume sind eigentlich nicht vorgesehen weil von der Logik her ein Gerät nur in einem Raum sein kann, das wär auch nicht zuzuordnen, woher soll das Skript wissen welchen Raum es jetzt melden soll? Sollte es trotzdem zwei Räume geben wird der erste Raum der Aufzählung genommen.

    Ebenfalls habe ich ein paar Datenpunkte, die zwei Funktionen zugewiesen haben, einmal den neuen fürs Script und einen anderen.

    Mehrere Funktionen sind möglich und vorgesehen. Das Skript sucht sich "seine" Funktion da raus.

    Und ein Raum heisst "Hinterer Raum" ohne die ". Kann das Leerzeichen hier Probleme machen?

    Ich vermeide es grundsätzlich bei iwelchen Bezeichnungen die keine reinen Bezeichnungstexte sind, Leerstellen oder Umlaute zu verwenden, ich verwende da immer _ und für Umlaut ae usw, deswegen kann ich Dir das nicht sicher sagen. Das Skript wandelt sowas sogar bei Ausgaben in "schöne" Texte um, Vermutlich gehts weil sonst schon andere gejammert hätten, aber ohne Garantie.


  • @Pittini
    Ich habe mal getestet. Es liegt wohl nicht daran, dass die Datenpunkte in FHEM zwei Räume haben, sondern an den Datenpunkten an sich. Ich habe bei einem den Raum "iobroker" entfernt. Wenn ich ihn weglassen startet das Skript ganz normal, wenn ihm die Funktion BatterieSpannung_30 zuweise, kommt es gleich zu obiger Fehlermeldung. So sieht der Datenpunkt aus, wie er aus dem FHEM-Adapter kommt:

    940a980c-c600-4f3b-946c-fc17d81a595a-grafik.png

    Gruss, Jürgen

    EDIT: Kann es sein, dass sich das Script daran stört, dass der Datenpunkt als Wert ok hat?

Suggested Topics

1.9k
Online

34.9k
Users

40.9k
Topics

561.4k
Posts