NEWS

Json aus Rest Api URL von Solaranalge


  • @lutzer
    JSON (String) muss erst in ein Objekt gewandelt werden (Zeile 49), um auf die Eigenschaften zugreifen zu können.

            myJson = JSON.parse(json);
    

  • @paul53 said in Json aus Rest Api URL von Solaranalge:

        myJson = JSON.parse(json);
    

    OK hab ich getausch, klappt leider noch nicht.

    Hier das Log

    11:08:05.526	error	javascript.0 script.js.xxx.json91: SyntaxError: Unexpected token o in JSON at position 1
    11:08:05.526	error	javascript.0 at script.js.xxx.json91:49:28
    11:08:05.526	error	javascript.0 at Request._callback (script.js.xxx.json91:37:13)
    

    Wenn ich folgendes verwende bekomme ich auch Daten:

    log("powerACOut: " + myJson[0].powerACOut,"info");
    an Stelle von
    log("powerACOut: " + myJson.powerACOut,"info");
    

    Das müsste es ja sein, steht auch kein Fehler in der Log (außer wenn ich jetzt " myJson = JSON.parse(json);" verwende.

    11:17:14.485	info	javascript.0 Start javascript script.js.xxx.json91
    11:17:14.485	info	javascript.0 script.js.xxx.json91: registered 0 subscriptions and 1 schedule
    11:17:15.058	info	javascript.0 script.js.xxx.json91: powerACOut: 1252.3125999999997
    11:17:15.058	info	javascript.0 script.js.xxx.json91: powerConsumed: 780
    

  • @lutzer sagte:

    steht auch kein Fehler in der Log (außer wenn ich jetzt " myJson = JSON.parse(json);" verwende.

    Dann ist es kein JSON, sondern bereits ein Objekt. Sehe gerade: Das Parsen passiert bereits in der Funktion readJson().

    Zeilen 52, 53 müssten dann so funktionieren:

                 setState(idpowerACOut, parseInt(myJson[0].powerACOut));
                 setState(idpowerConsumed, parseFloat(myJson[1].powerConsumed));
    

  • @paul53 said in Json aus Rest Api URL von Solaranalge:

    Ja genau so klappt es DANKE.

    Ich habe da noch einen wieteren Link der etwas mehr verschachtelt ist.
    Irgendwie komme ich da mit "[4]" nicht weiter:
    Ich möchte die "282" haben:

    {
        "result": {
             "items": [
                {
                "tagValues": {
                    "PowerIn": {
                    "tagName": "PowerIn",
                    "guid": "urn:solarwatt:myreserve:pm:xxxxxxxx",
                    "value": 282
                    },
    
                log("PowerIn: " + myJson[4].PowerIn,"info");
                setState(idDPowerIn ,parseInt(myJson[4].PowerIn));
    

    Der Pfad im Browser sagt: result.items[0].tagValues.PowerIn.value


  • @lutzer sagte:

    Der Pfad im Browser sagt: result.items[0].tagValues.PowerIn.value

    Enthält myJson schon das Objekt oder JSON ? Für das Objekt sollte es so funktionieren:

    myJson.result.items[0].tagValues.PowerIn.value
    

    parseInt() ist nicht erforderlich, denn es ist bereits eine Zahl.


  • Alles Gut habe mich in der Funktion vertan.
    ES geht genau so.
    Vielen Dank!

    Sehr cool das man den phat aus dem Browser nehmen kann.


  • Ich hab da heute Morgen ein neues Problem bekommen.
    Diese Nacht wurde die Firmware vom Energymanager geupdatet und die Struktur der Json verändert.

    Kann man das irgendwie anders abfangen, durch suchen oder ähnliches?

    //alt:
                setState(idDPowerSelfSupplied ,myJson.result.items[1].tagValues.PowerSelfSupplied.value);
                log("PowerConsumedFromStorage: " + myJson.result.items[1].tagValues.PowerConsumedFromStorage.value,"info");
    //neu:
                setState(idDPowerSelfSupplied ,myJson.result.items[5].tagValues.PowerSelfSupplied.value);
                log("PowerConsumedFromStorage: " + myJson.result.items[5].tagValues.PowerConsumedFromStorage.value,"info");
    

    Was unschön ist das manche Bezeichnungen sich etwas gleichen:

    "StateOfCharge": //gesucht
    "StateOfChargeReactivateDischarging": //nicht gesucht
    "StateOfChargeMinimum": //nicht gesucht
    "StateOfChargeShutDownLimit": //nicht gesucht
    

  • @lutzer sagte:

    abfangen, durch suchen oder ähnliches?

    var arr = myJson.result.items;
    
    for(let i = 0; i < arr.length; i++) {
        if(arr[i].tagValues) {
            let tags = arr[i].tagValues;
            if(tags.PowerSelfSupplied) {
                log(tags.PowerSelfSupplied.value);
            }
            if(tags.PowerConsumedFromStorage) {
                log(tags.PowerConsumedFromStorage.value);
            }
        }
    }
    

  • Könntest du mir bitte helfen wo ich die Schleife einbauen muss?
    Ich denke ich habe es gefunden. Aber wenn du noch mal drüber schauen würdest wär ich dankbar.

    Hier der aktuelle Code:

    //...Teil der Funktion
        readJson(urlDevices, function(err,json) {
            if(!err) {       
                myJson = json;
            var arr = myJson.result.items;
                for(let i = 0; i < arr.length; i++) {
                    if(arr[i].tagValues) {
                        let tags = arr[i].tagValues;
                          if(tags.PowerIn) {
                            log(tags.PowerIn.value);
                            setState(idDPowerIn ,tags.PowerIn.value);
                        }                  
                        if(tags.PowerSelfSupplied) {
                            log(tags.PowerSelfSupplied.value);
                            setState(idDPowerSelfSupplied ,tags.PowerSelfSupplied.value);
                        }
    //...usw
    
    //der alte Code
    var urlValues = 'http://192.168.xxx.xxx/rest/kiwigrid/eps/powerValues';
    var urlDevices = 'http://192.168.xxx.xxx/rest/kiwigrid/wizard/devices';
    var path = "solarwatt.";
    
    var request = require("request");
    var myJson = {};
    
    //Values
    var idpowerACOut = path + "powerACOut";
    var idpowerConsumed = path + "powerConsumed";
    var idpowerProduced = path + "powerProduced";
    var idpowerIn = path + "powerIn";
    var idpowerOut = path + "powerOut";
    
    createState(idpowerACOut, 0, { name: 'powerACOut aus', desc: 'xxxx', type: 'number', role: 'value'});
    createState(idpowerConsumed, 0, { name: 'Gesamtverbrauch', desc: 'xxxx', type: 'number', role: 'value'});
    createState(idpowerProduced, 0, { name: 'powerProduced', desc: 'xxxx', type: 'number', role: 'value'});
    createState(idpowerIn, 0, { name: 'powerIn', desc: 'xxxx', type: 'number', role: 'value'});
    createState(idpowerOut, 0, { name: 'powerOut', desc: 'xxxx', type: 'number', role: 'value'});
    
    //Devices
    var idDPowerIn = path + "PowerInD";
    var idDPowerSelfSupplied = path + "PowerSelfSupplied";
    var idDPowerConsumedFromStorage = path + "PowerConsumedFromStorage";
    var idDStateOfCharge = path + "StateOfCharge";
    var idDPowerConsumedFromGrid = path + "PowerConsumedFromGrid";
    var idDPowerBuffered = path + "PowerBuffered";
    var idDPowerConsumedFromProducers = path + "PowerConsumedFromProducers";
    
    createState(idDPowerSelfSupplied, 0, { name: 'Eigenverbrauch', desc: 'xxxx', type: 'number', role: 'value' });
    createState(idDPowerIn, 0, { name: 'Stromzukauf', desc: 'xxxx', type: 'number', role: 'value' });
    createState(idDPowerConsumedFromStorage, 0, { name: 'Batterieversorgung', desc: 'xxxx', type: 'number', role: 'value' });
    createState(idDStateOfCharge, 0, { name: 'Ladestand', desc: 'xxxx', type: 'number', role: 'value' });
    createState(idDPowerConsumedFromGrid, 0, { name: 'Netzbezug', desc: 'xxxx', type: 'number', role: 'value' });
    createState(idDPowerBuffered, 0, { name: 'Batterieaufladung', desc: 'xxxx', type: 'number', role: 'value' });
    createState(idDPowerConsumedFromProducers, 0, { name: 'Eigenverbrauch', desc: 'xxxx', type: 'number', role: 'value' });
    
    
    function parseJson(text) {
        if (text === "") return {};
        try { json = JSON.parse(text); } 
        catch (ex) { json = {};}
        if(!json) json = {};
        return json; }
    
    function readJson(url, callback) {
        request(url, function (err, state, body){
            if (body) {
                var json = parseJson(body);
                callback(null, json);
            } else { var error = "(" + err + ") ERROR bei Abfrage von: " + url; log(error, "warn"); callback(error, null);}
                });}
    
    
    function main() {
        readJson(urlValues, function(err,json) {
            if(!err) {        
                 myJson = json;
                log("powerACOut: " + myJson[0].powerACOut,"info");
                log("powerConsumed: " + myJson[1].powerConsumed,"info");
                log("powerProduced: " + myJson[1].powerProduced,"info");
                log("powerIn: " + myJson[1].powerIn,"info");
                log("powerOut: " + myJson[1].powerOut,"info");
                setState(idpowerACOut ,parseInt(myJson[0].powerACOut));
                setState(idpowerConsumed ,parseInt(myJson[1].powerConsumed));
                setState(idpowerProduced ,parseInt(myJson[1].powerProduced));
                setState(idpowerIn ,parseInt(myJson[1].powerIn));
                setState(idpowerOut ,parseInt(myJson[1].powerOut));
            } else {
            log("Error reading JSON from solarwatt. No data!","warn");
            myJson = {};
            }
    });
        readJson(urlDevices, function(err,json) {
            if(!err) {       
                myJson = json;
                log("PowerIn: " + myJson.result.items[2].tagValues.PowerIn.value,"info");
                setState(idDPowerIn ,myJson.result.items[2].tagValues.PowerIn.value);
                log("PowerSelfSupplied: " + myJson.result.items[5].tagValues.PowerSelfSupplied.value,"info");
                setState(idDPowerSelfSupplied ,myJson.result.items[5].tagValues.PowerSelfSupplied.value);
                log("PowerConsumedFromStorage: " + myJson.result.items[5].tagValues.PowerConsumedFromStorage.value,"info");
                setState(idDPowerConsumedFromStorage ,myJson.result.items[5].tagValues.PowerConsumedFromStorage.value);
                log("StateOfCharge: " + myJson.result.items[10].tagValues.StateOfCharge.value,"info");
                setState(idDStateOfCharge ,myJson.result.items[10].tagValues.StateOfCharge.value);
                log("PowerConsumedFromGrid: " + myJson.result.items[5].tagValues.PowerConsumedFromGrid.value,"info");
                setState(idDPowerConsumedFromGrid ,myJson.result.items[5].tagValues.PowerConsumedFromGrid.value);
                log("PowerBuffered: " + myJson.result.items[5].tagValues.PowerBuffered.value,"info");
                setState(idDPowerBuffered ,myJson.result.items[5].tagValues.PowerBuffered.value);
                log("PowerConsumedFromProducers: " + myJson.result.items[5].tagValues.PowerConsumedFromProducers.value,"info");
                setState(idDPowerConsumedFromProducers ,myJson.result.items[5].tagValues.PowerConsumedFromProducers.value);
            } else {
            log("Error reading JSON from solarwatt. No data!","warn");
            myJson = {};
            }
    });
    }
    
  • Banned

    This post is deleted!

Suggested Topics

  • 3
  • 7
  • 20
  • 3
  • 12
  • 3
  • 2
  • 12

746
Online

38.4k
Users

43.9k
Topics

613.2k
Posts