Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Auslesen aus io Broker und visualisieren über Chart.js

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Auslesen aus io Broker und visualisieren über Chart.js

Scheduled Pinned Locked Moved JavaScript
1 Posts 1 Posters 343 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    ehome
    wrote on last edited by
    #1

    Hallo,
    eine Frage an die Java-Script-Kundigen... hat zwar nur indirekt was mit IOBroker zu tun aber ich frage mal trotzdem...

    Ich möchte gerne mit Chart.js Werte aus dem IO Broker visualisieren.

    Dafür habe ich mir in iobroker ein Skript gebaut, welches die DB abfragt und das Ergebnis dann in einen Datenpunkt schreibt. - Das funktioniert auch

    /*
    
    Auswertung Gasverbrauch seit Beginn der Aufzeichnungen
    
    */
    
    const logging=true;
    const path = 'Auswertungen.0.';
    const id_gas_gesamt=path+'Gas.Gesamtverbrauch';
    const name_gas_gesamt='Gesamtverbrauch seit Anfang Erfassung';
    
    objektErstellen(id_gas_gesamt,name_gas_gesamt);
    
    // Alle Werte seit Anfang der Aufzeichnungen
    
    /* 
    const myQuery='SELECT \
                 (YEAR(FROM_UNIXTIME(SUBSTRING(ts, 1, 10)))) AS Jahr,\
                (MONTH(FROM_UNIXTIME(SUBSTRING(ts, 1, 10)))) AS Monat,\
                  ROUND(MAX(val) - MIN(val), 0) AS Verbrauch\
                 FROM\
                   iobroker.ts_number\
                 WHERE YEAR(FROM_UNIXTIME(SUBSTRING(ts, 1, 10)))=2019 and\
                  id = (SELECT id FROM iobroker.datapoints WHERE name = "Versorgung.0.Gas.Zaehlerstand")\
                 GROUP BY YEAR(FROM_UNIXTIME(SUBSTRING(ts, 1, 10))) , \
                          MONTH(FROM_UNIXTIME(SUBSTRING(ts, 1, 10))) \
                       order by ts';
    */ 
    
    // Fuer den Anfang erst mal nur ein Jahr
    
    const myQuery='SELECT \
                (MONTH(FROM_UNIXTIME(SUBSTRING(ts, 1, 10)))) AS Monat,\
                  ROUND(MAX(val) - MIN(val), 0) AS Verbrauch\
                 FROM\
                   iobroker.ts_number\
                 WHERE YEAR(FROM_UNIXTIME(SUBSTRING(ts, 1, 10)))=2019 and \
                  id = (SELECT id FROM iobroker.datapoints WHERE name = "Versorgung.0.Gas.Zaehlerstand")\
                 GROUP BY YEAR(FROM_UNIXTIME(SUBSTRING(ts, 1, 10))) , \
                          MONTH(FROM_UNIXTIME(SUBSTRING(ts, 1, 10))) \
                       order by ts';
    
    mysqlAbfrage(myQuery,id_gas_gesamt);
    
    function mysqlAbfrage (myQuery,id) {
        var ergebnis;
        tolog(logging,"mysqlAbfrage :  "+myQuery);
        sendTo('sql.0', 'query', myQuery, function (result) {
            if (result.error) {
                tolog(logging,"ERROR IN QUery: "+result.error); 
            } else {
                ergebnis=JSON.stringify(result.result);
                tolog(logging," TypeOf:"+typeof(ergebnis));
                setState(id,ergebnis);
                
                //tolog(logging,"mysqlAbfrage val: "+ergebnis);
            }
        });
    }
    
    
    function objektErstellen (id,name){
       var obj = {};
       obj.type = 'state';
       obj.common = {};
       obj.common.name = name;
       obj.common.type = 'string';
       obj.common.read = true;
       obj.common.write = true;
       obj.common.def = true;
    
       setzeObject(id, obj);
    } 
    
    function setzeObject(id, obj) {
       log("ID: "+id);
       //if(getObject(path + idDev + '.status')) return;
       
       
       if (getObject(id)) {
                log("Objekt: "+id+" existiert lege es nicht erneut an");
        } else {
            log("Objekt: "+id+" existiert nicht, lege es an");
            setObject(id, obj, function(err) {
                if(err) log('Cannot write object: ' + err);
                else setState(id, obj.common.def);
            }); 
        }
        
    }
    
    
    

    Das geht auch sauber, wenn ich die Werte abrufe bekomme ich folgendes:

    curl http://d-iobroker.fritz.box:8087/get/Auswertungen.0.Gas.Gesamtverbrauch | jq
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   790  100   790    0     0  98750      0 --:--:-- --:--:-- --:--:-- 98750
    {
      "val": "[{\"Monat\":1,\"Verbrauch\":912},{\"Monat\":2,\"Verbrauch\":1238},{\"Monat\":3,\"Verbrauch\":603},{\"Monat\":4,\"Verbrauch\":354},{\"Monat\":5,\"Verbrauch\":292},{\"Monat\":6,\"Verbrauch\":72},{\"Monat\":7,\"Verbrauch\":68},{\"Monat\":8,\"Verbrauch\":65},{\"Monat\":9,\"Verbrauch\":143},{\"Monat\":10,\"Verbrauch\":350},{\"Monat\":11,\"Verbrauch\":675},{\"Monat\":12,\"Verbrauch\":726}]",
      "ack": false,
      "ts": 1589463029568,
      "q": 0,
      "from": "system.adapter.javascript.11",
      "user": "system.user.admin",
      "lc": 1589465646460,
      "type": "state",
      "common": {
        "name": "Gesamtverbrauch seit Anfang Erfassung",
        "type": "string",
        "read": true,
        "write": true,
        "def": true
      },
      "_id": "Auswertungen.0.Gas.Gesamtverbrauch",
      "acl": {
        "object": 1636,
        "state": 1636,
        "owner": "system.user.admin",
        "ownerGroup": "system.group.administrator"
      }
    }
    

    Wenn ich nun in der Webseite versuche, das JSON auszuwerten, bekomme ich die Wertepaare nicht zugeordnet, soll heißen, die Monate in ein Array und die Werte in ein Aarry. Hier die Funktion in der html-Seite

    async function getData2() {
             const api_url=`http://d-iobroker.fritz.box:8087/get/Auswertungen.0.Gas.Gesamtverbrauch`;
             const response = await fetch(api_url);
             const json = await response.json();
             console.log(typeof(response));
             //xlabels=json.val.Monat;
             //ylabels=json.datapoints.Verbrauch;
             console.log(json);
             console.log(json.val);
             console.log(json.val.Monat);
             console.log(json.val.Verbrauch);
          }
    

    Irgendwie steh ich da wie der Ochs vor'm Berg .....
    In der Java-Script Konsole von Chrome steht für die letzten beiden Ausgaben jeweils "undefined".
    Wenn ich "xlabels" auskommentiere, kommt in der Chrome-Konsole: Unhandled Promise Rejection: TypeError: Attempted to assign to readonly property. "Unhandled
    Jemand eine Idee wie ich die Zuweisung machen muss/kann??

    1 Reply Last reply
    0
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    Support us

    ioBroker
    Community Adapters
    Donate

    481

    Online

    32.6k

    Users

    82.3k

    Topics

    1.3m

    Posts
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Login

    • Don't have an account? Register

    • Login or register to search.
    • First post
      Last post
    0
    • Home
    • Recent
    • Tags
    • Unread 0
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe