Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Json-Tabelle mit Stromverbrauchswerten erstellen

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Json-Tabelle mit Stromverbrauchswerten erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      WolfgangFB @ManfredHi last edited by

      @manfredh-1

      Ich lasse mir so eine Tabelle erzeugen. Ich kann sogar noch wählen, ob ich alle Werte oder nur die größer 10W oder größer 50W (beliebig einstellbar) angezeigt werden.
      Das ganze sieht bei mir so aus: (Einstellung > 10W). Ich sehe gerade dass da noch ein Bug drinnen ist weil die Wasseruhr nicht in Liter und m³ sondern in kWh angezeigt wird 🙂

      stromtabelle.jpg

      Ich mache allerdings keine json Tabelle sondern eine echte HTML Tabelle die ich dann einfach mit einem Basic String Widget in vis anzeigen lasse. Die Tabelle wird aktualisiert sobald irgend ein Stromzähler einen neuen Wert liefert.

      Das ganze ist allerdings in echtem Javaskript geschrieben. Auf Wunsch kann ich das gerne hier veröffentlichen.

      1 Reply Last reply Reply Quote 0
      • C
        Chris83 0 @liv-in-sky last edited by

        @liv-in-sky said in Json-Tabelle mit Stromverbrauchswerten erstellen:

        @manfredh-1

        evtl damit https://forum.iobroker.net/topic/48130/howto-schnell-erstellte-html-tabelle-für-vis

        dort muss halt immer alles von hand eingetragen werden

        Hi, bisher habe ich mir auch damit beholfen. Leider will man immer mehr Daten und jetzt ist es passiert. Scheinbar gibt es ein "Bindings-Limit" von max. 50 pro Widget. Jetzt könnte man das auch unschön auf mehrere Widget verteilen, aber ich hätte es gerne gleich richtig gemacht. Deine (@liv-in-sky ) ganzen Scripts habe ich mir auch schon angeschaut und ausprobiert, allerdings komme ich nicht wirklich damit klar.

        Könnte möglicherweise jemand ein Blockly Beispiel anhand von 1-2 Geräten teilen, deren Werte dann in einen JSON Datenpunkt geschrieben werden?
        Z.B. habe ich einige Shellys von denen ich gerne wüsste, ob
        ein/aus {shelly.0.SHPLG-S#D6C0A8#1.Relay0.Switch}
        power {shelly.0.SHPLG-S#D6C0A8#1.Relay0.Power}
        consumption {shelly.0.SHPLG-S#D6C0A8#1.Relay0.Energy}
        bzw.
        consumption aus {0_userdata.0.Shelly.TV-Schlafzimmer}

        Ich suche suche suche, aber irgendwie finde ich in der Richtung nichts wirklich oder verstehe es schlicht nicht.

        Wäre nett, wenn hier jemand helfen könnte

        BananaJoe 1 Reply Last reply Reply Quote 0
        • BananaJoe
          BananaJoe Most Active @Chris83 0 last edited by

          @chris83-0 https://forum.iobroker.net/topic/56195/stromverbrauch-messen-und-dann-optimieren/33?_=1663969442428
          Ein Beitrag da drüber ist ein Beispielbild von meiner Tabelle

          Also Ich erzeuge eine JSON per Skript und lasse mir es per JSON Table Widget anzeigen

          C 1 Reply Last reply Reply Quote 1
          • C
            Chris83 0 @BananaJoe last edited by Chris83 0

            @bananajoe Erstmal vielen Dank!
            Nutze auch sourceanalytix und dachte, die Anpassung sollte erstmal einfach sein. Irgendwie spammt er mir den Log mit Warnings voll und im JSON Widget zeigt er lediglich "Stromzähler" ohne Werte an.
            Habe den Datenpunkt entsprechend als JSON angelegt, die ganzen SourceDatapoints "deaktiviert" und den DP für den Zählerstand entsprechend angepasst. Mit dem L1-3 kann ich allerdings nicht anfangen. Keine Ahnung was das bedeuten soll.
            Dann habe ich bei Zeile 146 noch die "Phase" auskommentiert und die übrigen Werte unter "Stadtwerke" entsprechend angepasst. -> Da ja nur für Stadtwerke ein DP angegeben ist, sollte der Rest ja egal sein?!

            Könntest du mir hier evtl. Starthilfe geben?

            EDIT: Ich glaube ich habs...Die Daten wurden in den DP als JSON geschrieben und nun muss ich am Widget basteln...Zumindest gibt es schonmal Daten 🙂
            Problem war der DP in Zeile 24. So klappt es bei mir:

                [ "Stromzähler", "Stadtwerke", "L1", "sourceanalytix.0.smartmeter__0__1-0:1_8_0__255__value" ],
            
            // Changelog:
            // ----------
            // 08.07.2002   Erste Version
             
             
            // Beschreibung:
            // -------------
            // Dem Skript wir wird ein Array übergeben mit Datenpunkten von Geräten die den Stromverbrauch messen
            // Daraus wird eine JSON Tabelle aufbereitet mit Werten direkt von den Geräten + den Daten vom Source-Analytics Adapter
            // Die JSON-Tabelle kann dann per Widget in VIS dargestellt werden, ist scroll- und sortierbar, die Reihenfolge der Spalten lässt sich ändern oder ausblenden
             
            // Setup:
            // ------
             
             
            // Zieldatenpunkt
            const s_TargetDatapoint = "0_userdata.0.Verbrauch.VIS.StromverbrauchJSON";
             
            // [ Anzeigename, Datenpunkt, "Phase L1, L2 oder L3", "sourceanalytix Datenpunkt" ],
             
            let a_SourceDatapoints = [
             //   [ "Stromzähler 3EM", "3EM", "L1", "sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh" ],
             //   [ "Stromzähler", "Stadtwerke", "L1", "sourceanalytix.0.mqtt__0__esp32__esp32strom__zaehlerstand" ],
                [ "Stromzähler", "Stadtwerke", "sourceanalytix.0.smartmeter__0__1-0:1_8_0__255__value.cumulativeReading" ],
             //   [ "Handtuchtrocker", "0_userdata.0.tasmota.Blitzwolf099-Handtuchtrocker", "L1", "" ],
             //   [ "Weihnachten Schlafzimmer", "0_userdata.0.tasmota.Blitzwolf180-Weihnachten-Schlafzimmer", "L1", ""],
             //   [ "Lötstation Arbeitszimmer", "0_userdata.0.tasmota.Blitzwolf182-Loetstation", "L1", ""],
             //   [ "Brotbackautomat", "0_userdata.0.tasmota.Gosund186-Brotbackautomat", "L1", "" ],
             //   [ "Backofen", "0_userdata.0.shellies.EM181", "L1", "" ],
             //   [ "Datenschrank", "0_userdata.0.tasmota.Gosund187-Datenschrank", "L1", "" ],
             //   [ "Drucker", "0_userdata.0.tasmota.Gosund188-Drucker", "L1", "" ],
             //   [ "USB-5fach", "0_userdata.0.tasmota.Gosund190-Datenschrank-USB-5fach", "L1", "" ],
             //   [ "Kühlbox", "0_userdata.0.tasmota.Gosund191-Kuehlbox", "L1", "" ],
             //   [ "Fritz!Boxen", "0_userdata.0.tasmota.Plug101", "L1", "" ],
             //   [ "Lautsprecher PC", "0_userdata.0.tasmota.Nous078", "L1", "" ],
             //   [ "Tablett Keller", "0_userdata.0.tasmota.Nous093-WinPAD", "L1", "" ],
             //   [ "PoE Switch", "0_userdata.0.tasmota.Nous095-PoE-Switch", "L1", "" ],
             //   [ "Heizung", "0_userdata.0.tasmota.Nous096-Heizung", "L1", "" ],
             //   [ "BareMetal Server", "0_userdata.0.tasmota.Nous097-DCNEW", "L1", "" ],
             //   [ "Maschine", "0_userdata.0.tasmota.Nous196", "L1", "" ],
             //   [ "Garten + Terrasse", "0_userdata.0.tasmota.PM071-Garten-2F16", "L1", "" ],
             //   [ "Reinigungs steckdosen EG", "0_userdata.0.tasmota.PM072-Steck-2F7", "L1", "" ],
             //   [ "Heizungsraum", "0_userdata.0.tasmota.PM073-HeizSteck-1F5", "L1", "" ],
             //   [ "Treppenhaus 1", "0_userdata.0.tasmota.PM074-Treppe1-1F7", "L1", "" ],
             //   [ "Treppenhaus 2", "0_userdata.0.tasmota.PM075-Treppe2-1F8", "L1", "" ],
             //   [ "Kellerausgang + Verteiler", "0_userdata.0.tasmota.PM076-Ausgang-1F17", "L1", "" ],
             //   [ "Yasmin", "0_userdata.0.tasmota.PM110-Yasmin-1F13", "L1", "" ],
             //   [ "Lasse", "0_userdata.0.tasmota.PM112-Lasse-2F11", "L1", "" ],
             //   [ "Kühlschrank", "0_userdata.0.tasmota.PM116-Kuehlsch-2F5", "L1", "" ],
             //   [ "Schlafzimmer", "0_userdata.0.tasmota.PM117-Schlaf-1F14", "L1", "" ],
             //   [ "Spielzimmer", "0_userdata.0.tasmota.PM120-Spiel-2F13", "L1", "" ],
             //   [ "Weihnachten 1", "0_userdata.0.tasmota.PM122-Weihn-1F16", "L1", "" ],
             //   [ "Wohnzimmer", "0_userdata.0.tasmota.PM125-WoZi-2F9", "L1", "" ],
             //   [ "Weihnachten 2", "0_userdata.0.tasmota.PM126-Weihn-2F15", "L1", "" ],
             //   [ "Garage", "0_userdata.0.tasmota.PM130-Garage-1F2", "L1", "" ],
             //   [ "Spühlmaschine", "0_userdata.0.tasmota.PM131-Spuelma-2F2", "L1", "" ],
             //   [ "Küche", "0_userdata.0.tasmota.PM135-Kueche-1F10", "L1", "" ],
             //   [ "Außen vorne", "0_userdata.0.tasmota.PM145-Aussen-1F15", "L1", "" ],
             //   [ "Büro", "0_userdata.0.tasmota.PM208-Buero-2F17", "L1", "" ],
             //   [ "Trockner", "0_userdata.0.tasmota.Trockner169", "L1", "" ],
             //   [ "Waschmaschine", "0_userdata.0.tasmota.Waschmaschine168", "L1", "" ]    
            ];
            // ####################################################################################################################################################
            // http://www.network-science.de/ascii/ Font: big
            // __      __        _       _     _            
            // \ \    / /       (_)     | |   | |           
            //  \ \  / /_ _ _ __ _  __ _| |__ | | ___ _ __  
            //   \ \/ / _` | '__| |/ _` | '_ \| |/ _ \ '_ \ 
            //    \  / (_| | |  | | (_| | |_) | |  __/ | | |
            //     \/ \__,_|_|  |_|\__,_|_.__/|_|\___|_| |_|
            // ####################################################################################################################################################
            // ####################################################################################################################################################
            // Logging aktivieren für das Debuggen in die JavaScript-Console und in das ioBroker Log (true oder false):
            const b_logging = false;
            // und der erste Log-Eintrag
            DebugWarning("Startup: Setze Variablen ...");
            {1}
            // Stromkosten pro kWh für Tageskosten
            const i_costs = 0.3;
            {1}
            var s_JSON = "[";
            {1}
            // ####################################################################################################################################################
            // ####################################################################################################################################################
            //  ______           _    _   _                        
            // |  ____|         | |  | | (_)                       
            // | |__ _   _ _ __ | | _| |_ _  ___  _ __   ___ _ __  
            // |  __| | | | '_ \| |/ / __| |/ _ \| '_ \ / _ \ '_ \ 
            // | |  | |_| | | | |   <| |_| | (_) | | | |  __/ | | |
            // |_|   \__,_|_| |_|_|\_\\__|_|\___/|_| |_|\___|_| |_|
            // ####################################################################################################################################################
            // ####################################################################################################################################################
            // DebugWarning gibt in der Console eine Warnmeldung aus wenn b_logging auf true steht
            /* accepts parameters
             * s_debugmessage = Print this text to console via warn
             */
            function DebugWarning(s_debugmessage) {
                if (b_logging == true) {
                    console.warn(s_debugmessage);
                }
            }
            {1}
            // ####################################################################################################################################################
            // Ersetzt alle Vorkommen eines Zeichens, nicht nur das erste
            function ReplaceAll(string, search, replace) {
              return string.split(search).join(replace);
            }
             
            // ####################################################################################################################################################
            // Rundet die übergebende Zahl auf 2 Nachkommastellen
            // Quelle: https://www.delftstack.com/de/howto/javascript/javascript-round-to-2-decimal-places/
            function RoundToTwo(i_number) {
                return + ( Math.round(i_number + "e+2")  + "e-2" );
            }
            {1}
            {1}
            // ####################################################################################################################################################
            function CreateJSON() {
                s_JSON = "["
                for (var i = 0; i < a_SourceDatapoints.length; i++) {
                    let s_currentName = a_SourceDatapoints[i][0];
                    let s_currentDevice = a_SourceDatapoints[i][1];
                    let s_currentPhase = a_SourceDatapoints[i][2];
                    let s_currentSourceAnalytix = "";
                    if ( a_SourceDatapoints[i][3] === '' ) {
                        s_currentSourceAnalytix = "sourceanalytix.0." + ReplaceAll(a_SourceDatapoints[i][1], ".", "__") + "__Energy-Total";
                    } else {
                        s_currentSourceAnalytix = a_SourceDatapoints[i][3];
                    };
                    DebugWarning("s_currentName .........: " + s_currentName);
                    DebugWarning("s_currentDevice .......: " + s_currentDevice);
                    DebugWarning("s_currentPhase: .......: " + s_currentPhase);
                    DebugWarning("s_currentSourceAnalytix: " + s_currentSourceAnalytix);
                    s_JSON = s_JSON + "{";
                    if ( s_currentDevice == '3EM') {
                        s_JSON = s_JSON + '"name":"<p style=\\"color:red;\\">' + s_currentName + '</p>",'
                        // s_JSON = s_JSON + '"name":"' + s_currentName + '",'
                        s_JSON = s_JSON + '"phase":"' + s_currentPhase + '",'
                        s_JSON = s_JSON + '"power-W":' + getState( "0_userdata.0.shellies.3EM-Stromzaehler.Total-Power" ).val + ','
                        s_JSON = s_JSON + '"today-kWh":' + getState( "0_userdata.0.Verbrauch.Haus.Energy-Today" ).val + ','
                        s_JSON = s_JSON + '"today-costs-euro":' + getState( "0_userdata.0.Verbrauch.Haus.Kosten-Today" ).val + ','
                        s_JSON = s_JSON + '"yesterday-kWh":' + getState( "0_userdata.0.Verbrauch.Haus.Energy-Yesterday" ).val + ','
                    } else if ( s_currentDevice == 'Stadtwerke' ) {
                        s_JSON = s_JSON + '"name":"<p style=\\"color:red;\\">' + s_currentName + '</p>",'
                        // s_JSON = s_JSON + '"name":"' + s_currentName + '",'
                       // s_JSON = s_JSON + '"phase":"' + s_currentPhase + '",'
                        s_JSON = s_JSON + '"power-W":' + getState( "smartmeter.0.1-0:16_7_0__255.value" ).val + ','
                        s_JSON = s_JSON + '"today-kWh":' + getState( "sourceanalytix.0.smartmeter__0__1-0:1_8_0__255__value.currentYear.consumed.01_currentDay" ).val + ','
                        s_JSON = s_JSON + '"today-costs-euro":' + getState( "sourceanalytix.0.smartmeter__0__1-0:1_8_0__255__value.currentYear.costs.01_currentDay" ).val + ','
                        s_JSON = s_JSON + '"yesterday-kWh":' + getState( "sourceanalytix.0.smartmeter__0__1-0:1_8_0__255__value.currentYear.consumed.01_previousDay" ).val + ','
                    } else {
                        if ( s_currentName == 'Datenschrank') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:#4444FF;\\">' + s_currentName + '</p>",'
                            //s_JSON = s_JSON + '"name":"' + s_currentName + '",'
                        } else if ( s_currentName == 'PoE Switch') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:lightblue;\\">' + s_currentName + '</p>",'
                        } else if ( s_currentName == 'Fritz!Boxen') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:lightblue;\\">' + s_currentName + '</p>",'
                        } else if ( s_currentName == 'BareMetal Server') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:lightblue;\\">' + s_currentName + '</p>",'
                        } else if ( s_currentName == 'USB-5fach') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:lightblue;\\">' + s_currentName + '</p>",'
                        } else if ( s_currentName == 'USB-5fach') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:lightblue;\\">' + s_currentName + '</p>",'
                        } else {
                            s_JSON = s_JSON + '"name":"' + s_currentName + '",'
                        }
                        s_JSON = s_JSON + '"phase":"' + s_currentPhase + '",'
                        s_JSON = s_JSON + '"power-W":' + getState( s_currentDevice + ".Energy-Power" ).val + ','
             
                        s_JSON = s_JSON + '"today-kWh":' + getState( s_currentDevice + ".Energy-Today" ).val + ','
                        s_JSON = s_JSON + '"today-costs-euro":' + ( getState( s_currentDevice + ".Energy-Today" ).val * i_costs ) + ','
             
                        s_JSON = s_JSON + '"yesterday-kWh":' + getState( s_currentDevice + ".Energy-Yesterday" ).val + ','
                    }
                    s_JSON = s_JSON + '"yesterday-costs":' + getState( s_currentSourceAnalytix + ".currentYear.costs.01_previousDay" ).val + ','
             
                    s_JSON = s_JSON + '"currentWeek-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.02_currentWeek" ).val + ','
                    s_JSON = s_JSON + '"currentWeek-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.02_currentWeek" ).val + ','
             
                    s_JSON = s_JSON + '"currentMonth-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.03_currentMonth" ).val + ','
                    s_JSON = s_JSON + '"currentMonth-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.03_currentMonth" ).val + ','
             
                    s_JSON = s_JSON + '"previousMonth-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.03_previousMonth" ).val + ','
                    s_JSON = s_JSON + '"previousMonth-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.03_previousMonth" ).val + ','
             
                    s_JSON = s_JSON + '"currentQuarter-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.04_currentQuarter" ).val + ','
                    s_JSON = s_JSON + '"currentQuarter-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.04_currentQuarter" ).val + ','
             
                    s_JSON = s_JSON + '"previousQuarter-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.04_previousQuarter" ).val + ','
                    s_JSON = s_JSON + '"previousQuarter-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.04_previousQuarter" ).val + ','
             
                    s_JSON = s_JSON + '"currentYear-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.05_currentYear" ).val + ','
                    s_JSON = s_JSON + '"currentYear-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.05_currentYear" ).val + ','
             
                    s_JSON = s_JSON + '"previousYear-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.05_previousYear" ).val + ','
                    s_JSON = s_JSON + '"previousYear-cost":' + getState( s_currentSourceAnalytix + ".currentYear.costs.05_previousYear" ).val + ','
             
                    s_JSON = s_JSON.replace(/,\s*$/, ""); // letztes Komma entfernen falls vorhanden
                    s_JSON = s_JSON + "},";
                }
                // letztes Komma entfernen https://stackoverflow.com/questions/17720264/remove-last-comma-from-a-string
                s_JSON = s_JSON.replace(/,\s*$/, "");
                s_JSON = s_JSON + "]";
                DebugWarning(s_JSON);
                setState(s_TargetDatapoint , s_JSON, true);
            }
             
            // ####################################################################################################################################################
            // ####################################################################################################################################################
            //   _____ _             _               
            //  / ____| |           | |              
            // | (___ | |_ __ _ _ __| |_ _   _ _ __  
            //  \___ \| __/ _` | '__| __| | | | '_ \ 
            //  ____) | || (_| | |  | |_| |_| | |_) |
            // |_____/ \__\__,_|_|   \__|\__,_| .__/ 
            //                                | |    
            //                                |_|    
            // ####################################################################################################################################################
            // ####################################################################################################################################################
             
            DebugWarning("Anzahl Datenpunkte: " + a_SourceDatapoints.length);
            // Beim Start einmal alle Daten erstellen
             
            CreateJSON();
             
             
            // ####################################################################################################################################################
            // ####################################################################################################################################################
            //   _____       _                   _       _   _                 
            //  / ____|     | |                 (_)     | | (_)                
            // | (___  _   _| |__  ___  ___ _ __ _ _ __ | |_ _  ___  _ __  ___ 
            //  \___ \| | | | '_ \/ __|/ __| '__| | '_ \| __| |/ _ \| '_ \/ __|
            //  ____) | |_| | |_) \__ \ (__| |  | | |_) | |_| | (_) | | | \__ \
            // |_____/ \__,_|_.__/|___/\___|_|  |_| .__/ \__|_|\___/|_| |_|___/
            //                                    | |                          
            //                                    |_|                          
            // ####################################################################################################################################################
            // ####################################################################################################################################################
             
             
             
             
            // ####################################################################################################################################################
            // ####################################################################################################################################################
            //   _____      _              _       _      
            //  / ____|    | |            | |     | |     
            // | (___   ___| |__   ___  __| |_   _| | ___ 
            //  \___ \ / __| '_ \ / _ \/ _` | | | | |/ _ \
            //  ____) | (__| | | |  __/ (_| | |_| | |  __/
            // |_____/ \___|_| |_|\___|\__,_|\__,_|_|\___|
            // ####################################################################################################################################################
            {1}
            // alle 15 Sekunden
            schedule("*/15 * * * * *", async function () {
                CreateJSON();
            });
            {1}
            {1}
            
            

            Log:

            
            javascript.0
            2022-09-24 19:37:12.329	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.328	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.327	warn	at CreateJSON (script.js.common.JSON_Erzeugen:197:52)
            
            javascript.0
            2022-09-24 19:37:12.321	warn	getState "undefined.currentYear.costs.05_previousYear" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.320	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.319	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.318	warn	at CreateJSON (script.js.common.JSON_Erzeugen:196:51)
            
            javascript.0
            2022-09-24 19:37:12.313	warn	getState "undefined.currentYear.consumed.05_previousYear" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.313	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.312	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.311	warn	at CreateJSON (script.js.common.JSON_Erzeugen:194:51)
            
            javascript.0
            2022-09-24 19:37:12.308	warn	getState "undefined.currentYear.costs.05_currentYear" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.308	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.308	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.307	warn	at CreateJSON (script.js.common.JSON_Erzeugen:193:50)
            
            javascript.0
            2022-09-24 19:37:12.299	warn	getState "undefined.currentYear.consumed.05_currentYear" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.298	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.298	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.297	warn	at CreateJSON (script.js.common.JSON_Erzeugen:191:55)
            
            javascript.0
            2022-09-24 19:37:12.295	warn	getState "undefined.currentYear.costs.04_previousQuarter" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.295	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.294	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.294	warn	at CreateJSON (script.js.common.JSON_Erzeugen:190:54)
            
            javascript.0
            2022-09-24 19:37:12.291	warn	getState "undefined.currentYear.consumed.04_previousQuarter" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.291	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.290	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.290	warn	at CreateJSON (script.js.common.JSON_Erzeugen:188:54)
            
            javascript.0
            2022-09-24 19:37:12.288	warn	getState "undefined.currentYear.costs.04_currentQuarter" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.287	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.287	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.286	warn	at CreateJSON (script.js.common.JSON_Erzeugen:187:53)
            
            javascript.0
            2022-09-24 19:37:12.284	warn	getState "undefined.currentYear.consumed.04_currentQuarter" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.283	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.283	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.282	warn	at CreateJSON (script.js.common.JSON_Erzeugen:185:53)
            
            javascript.0
            2022-09-24 19:37:12.280	warn	getState "undefined.currentYear.costs.03_previousMonth" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.280	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.279	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.278	warn	at CreateJSON (script.js.common.JSON_Erzeugen:184:52)
            
            javascript.0
            2022-09-24 19:37:12.276	warn	getState "undefined.currentYear.consumed.03_previousMonth" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.276	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.275	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.269	warn	at CreateJSON (script.js.common.JSON_Erzeugen:182:52)
            
            javascript.0
            2022-09-24 19:37:12.267	warn	getState "undefined.currentYear.costs.03_currentMonth" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.266	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.266	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.265	warn	at CreateJSON (script.js.common.JSON_Erzeugen:181:51)
            
            javascript.0
            2022-09-24 19:37:12.263	warn	getState "undefined.currentYear.consumed.03_currentMonth" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.263	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.262	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.261	warn	at CreateJSON (script.js.common.JSON_Erzeugen:179:51)
            
            javascript.0
            2022-09-24 19:37:12.259	warn	getState "undefined.currentYear.costs.02_currentWeek" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.259	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.258	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.258	warn	at CreateJSON (script.js.common.JSON_Erzeugen:178:50)
            
            javascript.0
            2022-09-24 19:37:12.255	warn	getState "undefined.currentYear.consumed.02_currentWeek" not found (3)
            
            javascript.0
            2022-09-24 19:37:12.251	warn	at script.js.common.JSON_Erzeugen:261:3
            
            javascript.0
            2022-09-24 19:37:12.251	warn	at script.js.common.JSON_Erzeugen:225:1
            
            javascript.0
            2022-09-24 19:37:12.250	warn	at CreateJSON (script.js.common.JSON_Erzeugen:176:50)
            
            javascript.0
            2022-09-24 19:37:12.248	warn	getState "undefined.currentYear.costs.01_previousDay" not found (3)
            
            BananaJoe 1 Reply Last reply Reply Quote 0
            • BananaJoe
              BananaJoe Most Active @Chris83 0 last edited by

              @chris83-0

              Wie im verlinkten Beitrag geschrieben hatte ich mal vor / hab noch vor die Phasen L1 bis L3 da einzubauen / zu pflegen. Hab ich aber noch nicht, deshalb habe ich erst einmal überall nur L1 reingeschrieben.

              wie in Zeile 19 beschrieben erwartet er

              Anzeigename - Datenpunkt Tasmota - Phase - Datenpunkt von SourceAnalytix

              Für den Stromzähler 3EM und Stadtwerke sowie meinen Datenschrank hatte ich Sonderlocken gebaut.
              Zeile 135 bis 164 behandeln nur diese Sonderlocken, ab 166 werden die normalen Fälle bearbeitet.

              Aus dem Datenpunkt Tasmota holt er sich den aktuellen Verbrauch .Energy-Power in dem er das an den Pfad einfach anhängt. Dito dann den Tagesverbrauch und dessen kosten in Euro sowie den Verbrauch vom Vortag. Tagesverbrauch, Kosten und Vortag könnte man sich aber auch schon aus den Source-Analytix Datenpunkten holen.
              Die Daten holt er sich ab Zeile 176.
              Wo die dort zu finden sind ist in Zeile 124 bis 129 definiert - entweder wurde ein Pfad angegeben oder er versucht sich den per Suchen und Ersetzen selbst zu bauen.

              Wenn du mal deinen Quelldatenpunkt mit der aktuellen Leistung (den ganzen Ordner/alle Datenpunkte) und den dazu gehörigen SourceAnalytix-Datenpunkt posten könntest, könnte ich das sicherlich schnell anpassen. Ich würde es wohl so umstricken das man den Quell-Datenpunkt mit dem aktuellen Verbrauch + den SourceAnalytix Datenpunkt dazu angeben muss.

              Das Skript ist wie gesagt für meinen persönlichen Einsatz geschrieben worden, auf meine Umgebung zugeschnitten.
              Die Sonderlocken dienen vor allem dazu bestimmte Zeilen einzufärben oder sich die Werte von woanders zu holen.

              C 1 Reply Last reply Reply Quote 0
              • C
                Chris83 0 @BananaJoe last edited by Chris83 0

                @bananajoe

                Okay, habe dein Script etwas geändert und entsprechend auf meine DP angepasst. SourceAnalytics möchte ich erstmal komplett aus dem Spiel lassen. Mal abgesehen von den Warnings funktioniert das auch wunderbar.
                Nur sobald ich die Zeile 119 auskommentiere, funktioniert der 15-Sekunden Trigger nicht mehr. Hast du da eine Idee?
                Bei dem Block zwischen Zeile 72-81 habe ich versucht, nicht auf 2 Stellen, sondern auf eine Ganzzahl zu runden. Leider ohne irgendeine Auswirkung.
                Hier sollte Bspw. der Wert von Zeile 104 vom DP {javascript.0.ShellyVerbrauch.SHPLG-S#D971E5#1.Relay0.dieser_monat} der gerade "14422.42" entspricht gerundet werden. - Falls du auch hierzu einen Tipp hättest?

                EDIT: Das mit dem Timer und den Warnings hab ich geschafft 🙂

                Im Ergebnis schaut das inzwischen wie folgt aus und lässt sich über die Spalten sortieren:
                Screenshot 2022-09-25 104126.png

                // Changelog:
                // ----------
                // 08.07.2002   Erste Version
                 
                 
                // Beschreibung:
                // -------------
                // Dem Skript wir wird ein Array übergeben mit Datenpunkten von Geräten die den Stromverbrauch messen
                // Daraus wird eine JSON Tabelle aufbereitet mit Werten direkt von den Geräten + den Daten vom Source-Analytics Adapter
                // Die JSON-Tabelle kann dann per Widget in VIS dargestellt werden, ist scroll- und sortierbar, die Reihenfolge der Spalten lässt sich ändern oder ausblenden
                 
                // Setup:
                // ------
                 
                 
                // Zieldatenpunkt
                const s_TargetDatapoint = "0_userdata.0.Verbrauch.VIS.StromverbrauchJSON";
                 
                // [ Anzeigename, Datenpunkt, "Phase L1, L2 oder L3", "sourceanalytix Datenpunkt" ],
                // [ Anzeigename, Datenpunkt],
                 
                let a_SourceDatapoints = [
                    [ "Schreibtisch",       "javascript.0.ShellyVerbrauch.SHPLG-S#D971E5#1"],
                    [ "TV-Schlafzimmer",    "javascript.0.ShellyVerbrauch.SHPLG-S#D6C0A8#1"],
                ];
                // ####################################################################################################################################################
                // http://www.network-science.de/ascii/ Font: big
                // __      __        _       _     _            
                // \ \    / /       (_)     | |   | |           
                //  \ \  / /_ _ _ __ _  __ _| |__ | | ___ _ __  
                //   \ \/ / _` | '__| |/ _` | '_ \| |/ _ \ '_ \ 
                //    \  / (_| | |  | | (_| | |_) | |  __/ | | |
                //     \/ \__,_|_|  |_|\__,_|_.__/|_|\___|_| |_|
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                // Logging aktivieren für das Debuggen in die JavaScript-Console und in das ioBroker Log (true oder false):
                const b_logging = false;
                // und der erste Log-Eintrag
                DebugWarning("Startup: Setze Variablen ...");
                {1}
                // Stromkosten pro kWh für Tageskosten
                const i_costs = 0.3;
                {1}
                var s_JSON = "[";
                {1}
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                //  ______           _    _   _                        
                // |  ____|         | |  | | (_)                       
                // | |__ _   _ _ __ | | _| |_ _  ___  _ __   ___ _ __  
                // |  __| | | | '_ \| |/ / __| |/ _ \| '_ \ / _ \ '_ \ 
                // | |  | |_| | | | |   <| |_| | (_) | | | |  __/ | | |
                // |_|   \__,_|_| |_|_|\_\\__|_|\___/|_| |_|\___|_| |_|
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                // DebugWarning gibt in der Console eine Warnmeldung aus wenn b_logging auf true steht
                /* accepts parameters
                 * s_debugmessage = Print this text to console via warn
                 */
                function DebugWarning(s_debugmessage) {
                    if (b_logging == true) {
                        console.warn(s_debugmessage);
                    }
                }
                {1}
                // ####################################################################################################################################################
                // Ersetzt alle Vorkommen eines Zeichens, nicht nur das erste
                function ReplaceAll(string, search, replace) {
                  return string.split(search).join(replace);
                }
                 
                // ####################################################################################################################################################
                // Rundet die übergebende Zahl auf 2 Nachkommastellen
                // Quelle: https://www.delftstack.com/de/howto/javascript/javascript-round-to-2-decimal-places/
                function RoundToFull(i_number) {
                //    //return + ( Math.round(i_number + "e+2")  + "e-2" );
                    return + ( Math.round(i_number));
                }
                {1}
                {1}
                // ####################################################################################################################################################
                function CreateJSON() {
                    s_JSON = "["
                    for (var i = 0; i < a_SourceDatapoints.length; i++) {
                        let s_currentName = a_SourceDatapoints[i][0];
                        let s_currentDevice = a_SourceDatapoints[i][1];
                        let s_currentPhase = a_SourceDatapoints[i][2];
                        let s_currentSourceAnalytix = "";
                        if ( a_SourceDatapoints[i][3] === '' ) {
                            s_currentSourceAnalytix = "sourceanalytix.0." + ReplaceAll(a_SourceDatapoints[i][1], ".", "__") + "__Energy-Total";
                        } else {
                            s_currentSourceAnalytix = a_SourceDatapoints[i][3];
                        };
                        DebugWarning("s_currentName .........: " + s_currentName);
                        DebugWarning("s_currentDevice .......: " + s_currentDevice);
                        DebugWarning("s_currentPhase: .......: " + s_currentPhase);
                        DebugWarning("s_currentSourceAnalytix: " + s_currentSourceAnalytix);
                        s_JSON = s_JSON + "{";
                
                        
                        if ( s_currentName == 'Schreibtisch') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:red;\\">' + s_currentName + '</p>",'
                            s_JSON = s_JSON + '"Power":' + getState( "shelly.0.SHPLG-S#D971E5#1.Relay0.Power" ).val + ','
                            s_JSON = s_JSON + '"Verbrauch":' + getState( "javascript.0.ShellyVerbrauch.SHPLG-S#D971E5#1.Relay0.dieser_monat" ).val + ','
                            s_JSON = s_JSON + '"Kosten":' + getState( "javascript.0.variables.Schreibtisch_in_EUR" ).val+ ','
                            s_JSON = s_JSON + '"Status":' + getState( "shelly.0.SHPLG-S#D971E5#1.Relay0.Switch" ).val + ','
                            
                
                        }else if ( s_currentName == 'TV-Schlafzimmer') {
                            s_JSON = s_JSON + '"name":"<p style=\\"color:red;\\">' + s_currentName + '</p>",'
                            s_JSON = s_JSON + '"Power":' + getState( "shelly.0.SHPLG-S#D6C0A8#1.Relay0.Power" ).val + ','
                            s_JSON = s_JSON + '"Verbrauch":' + getState( "javascript.0.ShellyVerbrauch.SHPLG-S#D6C0A8#1.Relay0.dieser_monat" ).val + ','
                            s_JSON = s_JSON + '"Kosten":' + getState( "javascript.0.variables.TV-Schlafzimmer_in_EUR" ).val+ ','
                            s_JSON = s_JSON + '"Status":' + getState( "shelly.0.SHPLG-S#D6C0A8#1.Relay0.Switch" ).val + ','       
                
                
                
                        }
                        s_JSON = s_JSON + '"currentMonth-kWh":' + getState( s_currentSourceAnalytix + ".currentYear.consumed.03_currentMonth" ).val + ','
                        s_JSON = s_JSON.replace(/,\s*$/, ""); // letztes Komma entfernen falls vorhanden
                        s_JSON = s_JSON + "},";
                    }
                    // letztes Komma entfernen https://stackoverflow.com/questions/17720264/remove-last-comma-from-a-string
                    s_JSON = s_JSON.replace(/,\s*$/, "");
                    s_JSON = s_JSON + "]";
                    DebugWarning(s_JSON);
                    setState(s_TargetDatapoint , s_JSON, true);
                }
                 
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                //   _____ _             _               
                //  / ____| |           | |              
                // | (___ | |_ __ _ _ __| |_ _   _ _ __  
                //  \___ \| __/ _` | '__| __| | | | '_ \ 
                //  ____) | || (_| | |  | |_| |_| | |_) |
                // |_____/ \__\__,_|_|   \__|\__,_| .__/ 
                //                                | |    
                //                                |_|    
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                 
                DebugWarning("Anzahl Datenpunkte: " + a_SourceDatapoints.length);
                // Beim Start einmal alle Daten erstellen
                 
                CreateJSON();
                 
                 
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                //   _____       _                   _       _   _                 
                //  / ____|     | |                 (_)     | | (_)                
                // | (___  _   _| |__  ___  ___ _ __ _ _ __ | |_ _  ___  _ __  ___ 
                //  \___ \| | | | '_ \/ __|/ __| '__| | '_ \| __| |/ _ \| '_ \/ __|
                //  ____) | |_| | |_) \__ \ (__| |  | | |_) | |_| | (_) | | | \__ \
                // |_____/ \__,_|_.__/|___/\___|_|  |_| .__/ \__|_|\___/|_| |_|___/
                //                                    | |                          
                //                                    |_|                          
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                 
                 
                 
                 
                // ####################################################################################################################################################
                // ####################################################################################################################################################
                //   _____      _              _       _      
                //  / ____|    | |            | |     | |     
                // | (___   ___| |__   ___  __| |_   _| | ___ 
                //  \___ \ / __| '_ \ / _ \/ _` | | | | |/ _ \
                //  ____) | (__| | | |  __/ (_| | |_| | |  __/
                // |_____/ \___|_| |_|\___|\__,_|\__,_|_|\___|
                // ####################################################################################################################################################
                {1}
                // alle 15 Sekunden
                schedule("*/15 * * * * *", async function () {
                    CreateJSON();
                });
                {1}
                {1}
                
                
                BananaJoe 1 Reply Last reply Reply Quote 0
                • BananaJoe
                  BananaJoe Most Active @Chris83 0 last edited by

                  @chris83-0 Zeile 103:

                  s_JSON = s_JSON + '"Power":' + Math.round(getState( "shelly.0.SHPLG-S#D971E5#1.Relay0.Power" ).val) + ','
                  

                  mal testen, sollte auf Ganzzahl runden

                  Im Prinzip hats du das in Zeile 77 schon versucht - das + ist zuviel (und einmal äußere Klammern) ... und ich nutze die Funktion inzwischen gar nicht mehr, kann also raus.

                  C 1 Reply Last reply Reply Quote 1
                  • C
                    Chris83 0 @BananaJoe last edited by

                    @bananajoe
                    1000 Dank!!! Das hat auf Anhieb funktioniert.

                    Versuche gerade noch den Wert von "Status" Zeile 6 (bei den Shellys false/true, bei anderen ON/OFF usw.) auf ein entsprechendes Icon (Zeile7) oder wenigstens eine einheitliche Schreibweise abzuändern. Hättest du dazu noch eine Idee?
                    Hoffe dann bin ich auch durch, mit meiner Fragerei.

                            if ( s_currentName == 'Schreibtisch') {
                                s_JSON = s_JSON + '"name":"' + s_currentName + '",'
                                s_JSON = s_JSON + '"Power":' + Math.round(getState( "shelly.0.SHPLG-S#D971E5#1.Relay0.Power" ).val) + ','
                                s_JSON = s_JSON + '"Verbrauch":' + Math.round(getState( "javascript.0.ShellyVerbrauch.SHPLG-S#D971E5#1.Relay0.dieser_monat" ).val) +','
                                s_JSON = s_JSON + '"Kosten":' + getState( "javascript.0.variables.Schreibtisch_in_EUR" ).val+ ','
                                s_JSON = s_JSON + '"Status":' + getState( "shelly.0.SHPLG-S#D971E5#1.Relay0.Switch" ).val + ','
                            if (getState('shelly.0.SHPLG-S#D971E5#1.Relay0.Switch').val==false) {Status="❌"} else{Status="✅"}
                    
                    BananaJoe 1 Reply Last reply Reply Quote 0
                    • BananaJoe
                      BananaJoe Most Active @Chris83 0 last edited by

                      @chris83-0 Zeile 7 Probiere mal

                      if (!getState('shelly.0.SHPLG-S#D971E5#1.Relay0.Switch').val) {Status="❌"} else {Status="✅"}
                      

                      oder - dein original abgewandelt:

                      if (getState('shelly.0.SHPLG-S#D971E5#1.Relay0.Switch').val == false) {Status="❌"} else{Status="✅"}
                      

                      also mit Leerzeichen, ich meine die könnten wichtig sein.
                      Zeile 7 gehört dann natürlich vor Zeile 6 in der du dann nicht den Wert ausliest sondern Status nimmst

                      C 1 Reply Last reply Reply Quote 1
                      • C
                        Chris83 0 @BananaJoe last edited by

                        @bananajoe sagte in Json-Tabelle mit Stromverbrauchswerten erstellen:

                        if (getState('shelly.0.SHPLG-S#D971E5#1.Relay0.Switch').val == false) {Status="❌"} else{Status="✅"}

                        Nochmals vielen Dank! Es funktioniert.
                        Habe mich für die Variante mit der Abfrage "val == false" entschieden, weil ja noch Geräte dazukommen, die hier den Status ON/OFF haben.

                                 if (getState('shelly.0.SHPLG-S#D971E5#1.Relay0.Switch').val == false) {Status="❌"} else{Status="✅"}
                                    s_JSON = s_JSON + '"Status":"' + Status + '",'
                        
                        W 1 Reply Last reply Reply Quote 0
                        • W
                          woupi @Chris83 0 last edited by

                          @BananaJoe

                          ich habe gerade, auf der suche nach sowas, deine Skript gefunden.
                          Was ich suche ist etwas um meine ganzen Zählerstände und Verbräuche in VIS darzustellen.

                          Wenn ich alles richtig verstanden habe ist dein Skript passen.

                          Erstmal möchte ich mich aber dafür bedanken, dass du deine Arbeit hier zur Verfügung gestellt hast. Ich habe nur eine grobe Vorstellung davon, wieviel Arbeit das gewesen ist.

                          Danke

                          Dann habe ich allerdings auch eine Frage.
                          Ich möchte erstmal verstehen, was das Skript macht und dafür nur einen einzigen Zähler einbinden.
                          Ich scheitere gerade an sourceanalytix, genauer an dem Datenpunkt.

                          sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh (ist von Dir)
                          

                          Ich habe 2 Smartmeter und dafür zwei smartmeter Adapter installiert.
                          Diese geben wir Tages, Wochen, Monats und ich meine Jahreswerte an, aber kein Total.

                          Ich weiß nicht welchen Datenpunkt ich bei sourceanalytix nehmen muss.

                          Weißt du das zufällig?

                          BananaJoe 1 Reply Last reply Reply Quote 0
                          • BananaJoe
                            BananaJoe Most Active @woupi last edited by

                            @woupi mein skript sucht sich den pfad sogar selbst wenn man nichts angibt.

                            Ansonsten einfach im Objekt-Explorer durch die sourceanalytix.0.x Datenpunkte blättern

                            W 1 Reply Last reply Reply Quote 0
                            • W
                              woupi @BananaJoe last edited by

                              @bananajoe

                              Erstmal Danke für die Antwort.

                              Das heisst ich gebe da einfach Garnichts an, und das skript sucht sich die punkte selber, das ist ja super.

                              Das mit durch dem ordner suchen war mir klar, ich dachte das hätte ich auch verständlich geschrieben, aber offensichtlich nicht. Nur da gibt es eben kein Total.

                              Das hier ist ein Zähler:
                              c466bc16-ea63-4fc6-9781-b28f0cae0af5-image.png

                              Und das was sourceanalytix daraus macht:
                              5646736d-984f-48fd-aed9-8e63a7ced37b-image.png

                              Und egal welchen Ordner ich aufmache, Total ist da nicht dabei. Laut Ordnerstruktur aber auch klar (moths, weeks)

                              BananaJoe 1 Reply Last reply Reply Quote 0
                              • BananaJoe
                                BananaJoe Most Active @woupi last edited by BananaJoe

                                @woupi also bei mir z.B. dort:

                                ef69fa4e-9949-49c5-aae3-53ad8dc0a99b-image.png

                                und das sind die Einstellungen am Datenpunkt / Objekt:
                                5e8bcc28-fb21-440e-ab84-7825a4bcb241-image.png

                                Gesetzt habe ich das ganze auf den kWh-Zähler meines Tasmotagerätes

                                Wie lange ist das denn für deinen Datenpunkt schon aktiviert?

                                W 1 Reply Last reply Reply Quote 1
                                • W
                                  woupi @BananaJoe last edited by

                                  @bananajoe sagte in Json-Tabelle mit Stromverbrauchswerten erstellen:

                                  Wie lange ist das denn für deinen Datenpunkt schon aktiviert?

                                  Erstmal, vielen Dank für deine Mühen und die Einstellungen in sourceanalytix.

                                  Was ich noch nicht ganz verstanden habe ist:
                                  Hast du auf dem Zählerstand oder auf die aktuelle Leistung
                                  sourceanalytix aktiviert.

                                  Die smartmeter übergeben de aktuellen Zählerstand und nach Eingabe von PIN und Freigabe von Inf, auch die aktuelle Leistung.

                                  Bei dem Zählerstand hatte ich irgendwelche nicht nachvollziehbare Werte, die nichts mit den tatsächlich verbrauchten Werte zu tun hatten.

                                  Darum habe ich heute morgen das auch wieder deaktiviert und dafür bei der aktuellen Leistung aktiviert. Dauert jetzt natürlich erstmal was, bevor da was ankommt.

                                  Es läuft bei mir gerade erst seit gestern und ich habe ja auch nochmal die Datenpunkte gelöscht.

                                  BananaJoe 1 Reply Last reply Reply Quote 0
                                  • BananaJoe
                                    BananaJoe Most Active @woupi last edited by

                                    @woupi sagte in Json-Tabelle mit Stromverbrauchswerten erstellen:

                                    Zählerstand

                                    habe ich verwendet für SourceAnalytix.
                                    aktuelle Leistung zeichne ich mit dem SQL-Adapter auf um in eCharts da schöne Grafiken zu haben.

                                    W 1 Reply Last reply Reply Quote 0
                                    • W
                                      woupi @BananaJoe last edited by

                                      @bananajoe sagte in Json-Tabelle mit Stromverbrauchswerten erstellen:

                                      @woupi sagte in Json-Tabelle mit Stromverbrauchswerten erstellen:

                                      Zählerstand

                                      habe ich verwendet für SourceAnalytix.

                                      Danke, ich habe jetzt nochmal alle Datenpunkte in sourceanalytix gelöscht. Dann Zählerstand mit deinen Einstellungen neu aktiviert und den Adapter neu gestartet.
                                      Außerdem habe ich alle Daten aus meiner Excel Tabelle (monatlich schreibe ich die auf) mit eingetragen.
                                      Für den aktuellen Monat habe ich den aktuellen Zählerstand minus die täglichen Verbräuche (Netzbezug) aus dem sunny portal (PV) gerechnet und auch eingetragen.

                                      Zack und schon stehen da auch Werte, die passen können.

                                      Danke.

                                      Ich gehe jetzt erstmal wieder arbeiten und werde heute Abend, wenn ich wieder zu Hause bin, nochmal dein skript versuchen.

                                      Ich würde mich freuen, wenn ich dann, falls ich nicht klar komme, dich nochmal um Hilfe Fragen dürfte.
                                      Aber natürlich nur wenn es bei dir geht. Ich schreibe und du antwortest wann immer du kannst.

                                      Das wäre total Nett.

                                      Und ich weiß, dass ist schon fast dreist, da du ja schon deine Arbeit hier zur Verfügung stellst.

                                      Also nochmal ganz lieben Dank und falls wir wir nichts mehr von einander hören, schöne Weinachtstage, auch an alle die andern die hier eventuell gerade mitlesen und bleibt Gesund.

                                      Sascha

                                      1 Reply Last reply Reply Quote 0
                                      • W
                                        woupi last edited by

                                        @woupi
                                        Guten Morgen,

                                        ich habe gestern Abend 4 Datenpunkte in sourceanalytix aktiviert. Die Daten sind auch jetzt da.

                                        Heute Morgen habe ich das Skript im Kopf angepast.
                                        Ganz offensichtlich reicht das nicht, es kommen jede Menge Fehler.

                                        Leider habe ich überhaupt keine Ahnung von Javascript und bin froh, dass ich mittlerweile mit blockly einigermaßen zurecht komme. Darum würde ich mich über Hilfe sehr freuen.

                                        Hier mal exemplarisch ein Datenpunkt:
                                        c6f290d6-d9fa-420a-8a29-f57d2a9a6a4d-image.png

                                        {
                                          "type": "state",
                                          "common": {
                                            "name": "Zh 180 Bezug",
                                            "type": "number",
                                            "read": true,
                                            "unit": "kWh",
                                            "role": "value",
                                            "write": false,
                                            "custom": {
                                              "influxdb.1": {
                                                "enabled": true,
                                                "storageType": "",
                                                "aliasId": "Strom_Bezug",
                                                "debounceTime": 0,
                                                "blockTime": 0,
                                                "changesOnly": true,
                                                "changesRelogInterval": 0,
                                                "changesMinDelta": 0,
                                                "ignoreBelowNumber": "",
                                                "disableSkippedValueLogging": false,
                                                "enableDebugLogs": false,
                                                "debounce": 1000
                                              },
                                              "sourceanalytix.0": {
                                                "enabled": true,
                                                "selectedUnit": "kWh",
                                                "deviceResetLogicEnabled": false,
                                                "threshold": 1,
                                                "start_day": 11540.816,
                                                "start_week": 11448.71,
                                                "start_month": 11072,
                                                "start_quarter": 10138,
                                                "start_year": 8207,
                                                "alias": "Netzbezug",
                                                "selectedPrice": "Strom",
                                                "costs": true,
                                                "basicRate": true,
                                                "consumption": true,
                                                "meter_values": true,
                                                "valueAtDeviceReset": 0,
                                                "valueAtDeviceInit": null,
                                                "cumulativeValue": 11540.816
                                              }
                                            }
                                          },
                                          "native": {
                                            "id": "1-0:1_8_0__255.value"
                                          },
                                          "_id": "smartmeter.1.1-0:1_8_0__255.value",
                                          "acl": {
                                            "object": 1636,
                                            "state": 1636,
                                            "owner": "system.user.admin",
                                            "ownerGroup": "system.group.administrator"
                                          },
                                          "from": "system.adapter.sourceanalytix.0",
                                          "user": "system.user.admin",
                                          "ts": 1703372400336
                                        }
                                        

                                        eb9c8f66-ef18-4f68-a365-f3fe4bbd79c9-image.png

                                        c94dd47f-56e4-48b0-a485-247073392d4d-image.png

                                        Den log packe ich in einen neuen Post, da sonst zu lang.
                                        Ich möchte nichts kürzen, da ich nicht weiß was wichtig und was unwichtig ist. Sorry

                                        Ich hoffe ich habe alles, was benötigt wird um mir zu Helfen.

                                        Vielen Dank und schöne Weihnachten.

                                        W BananaJoe 2 Replies Last reply Reply Quote 0
                                        • W
                                          woupi @woupi last edited by woupi

                                          Es sind zwar nur ca. 2min gewesen, aber es ist trotzdem zuviel, also doch leider gekürzt:

                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	script.js.Verbrauch.VIS_Verbrauchsdaten: [{"name":"Netzbezug","phase":"L1","power-W":null,"today-kWh":null,"today-costs-euro":0,"yesterday-kWh":null,"yesterday-costs":null,"currentWeek-kWh":null,"currentWeek-cost":null,"currentMonth-kWh":null,"currentMonth-cost":null,"previousMonth-kWh":null,"previousMonth-cost":null,"currentQuarter-kWh":null,"currentQuarter-cost":null,"previousQuarter-kWh":null,"previousQuarter-cost":null,"currentYear-kWh":null,"currentYear-cost":null,"previousYear-kWh":null,"previousYear-cost":null},{"name":"Einspeisung","phase":"L1","power-W":null,"today-kWh":null,"today-costs-euro":0,"yesterday-kWh":null,"yesterday-costs":null,"currentWeek-kWh":null,"currentWeek-cost":null,"currentMonth-kWh":null,"currentMonth-cost":null,"previousMonth-kWh":null,"previousMonth-cost":null,"currentQuarter-kWh":null,"currentQuarter-cost":null,"previousQuarter-kWh":null,"previousQuarter-cost":null,"currentYear-kWh":null,"currentYear-cost":null,"previousYear-kWh":null,"previousYear-cost":null},{"name":"WP Strom","phase":"L1","power-W":null,"today-kWh":null,"today-costs-euro":0,"yesterday-kWh":null,"yesterday-costs":null,"currentWeek-kWh":null,"currentWeek-cost":null,"currentMonth-kWh":null,"currentMonth-cost":null,"previousMonth-kWh":null,"previousMonth-cost":null,"currentQuarter-kWh":null,"currentQuarter-cost":null,"previousQuarter-kWh":null,"previousQuarter-cost":null,"currentYear-kWh":null,"currentYear-cost":null,"previousYear-kWh":null,"previousYear-cost":null},{"name":"WP Heizstab","phase":"L1","power-W":null,"today-kWh":null,"today-costs-euro":0,"yesterday-kWh":null,"yesterday-costs":null,"currentWeek-kWh":null,"currentWeek-cost":null,"currentMonth-kWh":null,"currentMonth-cost":null,"previousMonth-kWh":null,"previousMonth-cost":null,"currentQuarter-kWh":null,"currentQuarter-cost":null,"previousQuarter-kWh":null,"previousQuarter-cost":null,"currentYear-kWh":null,"currentYear-cost":null,"previousYear-kWh":null,"previousYear-cost":null}]
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.105	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:163:52)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.costs.05_previousYear" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:162:51)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.consumed.05_previousYear" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.104	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:160:51)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.costs.05_currentYear" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.103	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:159:50)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.consumed.05_currentYear" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.102	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:157:55)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.costs.04_previousQuarter" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.101	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:156:54)
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.consumed.04_previousQuarter" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.099	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          javascript.1
                                          2023-12-24 07:46:30.098	warn	at Object.<anonymous> (script.js.Verbrauch.VIS_Verbrauchsdaten:222:5)
                                          javascript.1
                                          2023-12-24 07:46:30.098	warn	at CreateJSON (script.js.Verbrauch.VIS_Verbrauchsdaten:154:54)
                                          javascript.1
                                          2023-12-24 07:46:30.097	warn	getState "sourceanalytix.0.modbus__2__inputRegisters__1__30343_Total_activ_energy__Energy-Total.currentYear.costs.04_currentQuarter" not found (3)
                                          javascript.1
                                          2023-12-24 07:46:30.096	warn	at processTimers (node:internal/timers:512:7)
                                          javascript.1
                                          2023-12-24 07:46:30.096	warn	at listOnTimeout (node:internal/timers:569:17)
                                          javascript.1
                                          2023-12-24 07:46:30.096	warn	at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
                                          javascript.1
                                          2023-12-24 07:46:30.096	warn	at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
                                          javascript.1
                                          2023-12-24 07:46:30.094	warn	at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
                                          javascript.1
                                          2023-12-24 07:46:30.093	warn	at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1617:34)
                                          

                                          Wenn mehr benötigt wird, werde ich den Rest in einzel Post packen. Aber eventuell reicht das ja schon um zu sagen was ich falsch mache.

                                          1 Reply Last reply Reply Quote 0
                                          • BananaJoe
                                            BananaJoe Most Active @woupi last edited by

                                            @woupi dein Array ist ungültig, entferne mal in Zeile 25 das , am Ende, Zeile 28 schließt es dann ab. Wegen dem Komma erwartet er eine weitere Zeile die nicht kommt

                                            W 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            1.0k
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            8
                                            31
                                            2846
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo