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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Json-Tabelle mit Stromverbrauchswerten erstellen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Json-Tabelle mit Stromverbrauchswerten erstellen

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
31 Beiträge 8 Kommentatoren 4.2k Aufrufe 7 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    ManfredHi
    schrieb am zuletzt editiert von
    #1

    Hallo.
    Ich möchte gern in einer Tabelle in der VIS den aktuellen Stromverbrauch verschiedener Steckdosen anzeigen lassen.
    dargestellt werden sollte in einer Spalte der Name des Gerätes (bzw. der Steckdose), in der zweiten Spalte der aktuelle Stromverbrauch (Watt) und in der dritten Spalte dann der Wert für den aktuellen Tag (aus SourceAnlaytix).
    Die Tabelle sollte dann so aussehen:
    Name der Dose - aktueller Verbrauch - Tagesverbrauch

    Ich habe irgendwie keinen Schimmer wie ich das lösen kann und ob das überhaupt möglich ist.

    Vielleicht kann mir hier bitte jemand helfen, wenn mit Script, dann wenn möglich mit Blockly. DANKE!

    NegaleinN sigi234S liv-in-skyL W 4 Antworten Letzte Antwort
    0
    • M ManfredHi

      Hallo.
      Ich möchte gern in einer Tabelle in der VIS den aktuellen Stromverbrauch verschiedener Steckdosen anzeigen lassen.
      dargestellt werden sollte in einer Spalte der Name des Gerätes (bzw. der Steckdose), in der zweiten Spalte der aktuelle Stromverbrauch (Watt) und in der dritten Spalte dann der Wert für den aktuellen Tag (aus SourceAnlaytix).
      Die Tabelle sollte dann so aussehen:
      Name der Dose - aktueller Verbrauch - Tagesverbrauch

      Ich habe irgendwie keinen Schimmer wie ich das lösen kann und ob das überhaupt möglich ist.

      Vielleicht kann mir hier bitte jemand helfen, wenn mit Script, dann wenn möglich mit Blockly. DANKE!

      NegaleinN Offline
      NegaleinN Offline
      Negalein
      Global Moderator
      schrieb am zuletzt editiert von
      #2

      @manfredh-1 sagte in Json-Tabelle mit Stromverbrauchswerten erstellen:

      Vielleicht kann mir hier bitte jemand helfen, wenn mit Script, dann wenn möglich mit Blockly. DANKE!

      da kann dir event. @liv-in-sky weiterhelfen.
      Er hat bereits mehrfach solche Tabellen erstellt.

      ° Node.js: 20.17.0 NPM: 10.8.2
      ° Proxmox, Ubuntu 22.04.3 LTS
      ° Fixer ---> iob fix

      1 Antwort Letzte Antwort
      0
      • M ManfredHi

        Hallo.
        Ich möchte gern in einer Tabelle in der VIS den aktuellen Stromverbrauch verschiedener Steckdosen anzeigen lassen.
        dargestellt werden sollte in einer Spalte der Name des Gerätes (bzw. der Steckdose), in der zweiten Spalte der aktuelle Stromverbrauch (Watt) und in der dritten Spalte dann der Wert für den aktuellen Tag (aus SourceAnlaytix).
        Die Tabelle sollte dann so aussehen:
        Name der Dose - aktueller Verbrauch - Tagesverbrauch

        Ich habe irgendwie keinen Schimmer wie ich das lösen kann und ob das überhaupt möglich ist.

        Vielleicht kann mir hier bitte jemand helfen, wenn mit Script, dann wenn möglich mit Blockly. DANKE!

        sigi234S Online
        sigi234S Online
        sigi234
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #3

        @manfredh-1

        https://forum.iobroker.net/topic/28021/html-table-für-vis-oder-iqontrol-js-und-blockly

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          ManfredHi
          schrieb am zuletzt editiert von
          #4

          @sigi234
          Ok. Danke. hab ich mir grad angeschaut. bin aber dabei komplett ausgestiegen, weil ich nicht mal weiss welche 2 Datenpunkte ich da genau anlegen muss, weder wie sie heißen noch wo sie genau angelegt werden müssen.
          Irgendwie ist heute scheinbar nicht meint tag. :(

          1 Antwort Letzte Antwort
          0
          • M ManfredHi

            Hallo.
            Ich möchte gern in einer Tabelle in der VIS den aktuellen Stromverbrauch verschiedener Steckdosen anzeigen lassen.
            dargestellt werden sollte in einer Spalte der Name des Gerätes (bzw. der Steckdose), in der zweiten Spalte der aktuelle Stromverbrauch (Watt) und in der dritten Spalte dann der Wert für den aktuellen Tag (aus SourceAnlaytix).
            Die Tabelle sollte dann so aussehen:
            Name der Dose - aktueller Verbrauch - Tagesverbrauch

            Ich habe irgendwie keinen Schimmer wie ich das lösen kann und ob das überhaupt möglich ist.

            Vielleicht kann mir hier bitte jemand helfen, wenn mit Script, dann wenn möglich mit Blockly. DANKE!

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von
            #5

            @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

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            C 1 Antwort Letzte Antwort
            0
            • M ManfredHi

              Hallo.
              Ich möchte gern in einer Tabelle in der VIS den aktuellen Stromverbrauch verschiedener Steckdosen anzeigen lassen.
              dargestellt werden sollte in einer Spalte der Name des Gerätes (bzw. der Steckdose), in der zweiten Spalte der aktuelle Stromverbrauch (Watt) und in der dritten Spalte dann der Wert für den aktuellen Tag (aus SourceAnlaytix).
              Die Tabelle sollte dann so aussehen:
              Name der Dose - aktueller Verbrauch - Tagesverbrauch

              Ich habe irgendwie keinen Schimmer wie ich das lösen kann und ob das überhaupt möglich ist.

              Vielleicht kann mir hier bitte jemand helfen, wenn mit Script, dann wenn möglich mit Blockly. DANKE!

              W Offline
              W Offline
              WolfgangFB
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0
              • liv-in-skyL liv-in-sky

                @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

                C Offline
                C Offline
                Chris83 0
                schrieb am zuletzt editiert von
                #7

                @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

                BananaJoeB 1 Antwort Letzte Antwort
                0
                • C Chris83 0

                  @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

                  BananaJoeB Online
                  BananaJoeB Online
                  BananaJoe
                  Most Active
                  schrieb am zuletzt editiert von
                  #8

                  @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

                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                  C 1 Antwort Letzte Antwort
                  1
                  • BananaJoeB BananaJoe

                    @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 Offline
                    C Offline
                    Chris83 0
                    schrieb am zuletzt editiert von Chris83 0
                    #9

                    @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)
                    
                    BananaJoeB 1 Antwort Letzte Antwort
                    0
                    • C 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)
                      
                      BananaJoeB Online
                      BananaJoeB Online
                      BananaJoe
                      Most Active
                      schrieb am zuletzt editiert von
                      #10

                      @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.

                      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                      C 1 Antwort Letzte Antwort
                      0
                      • BananaJoeB BananaJoe

                        @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 Offline
                        C Offline
                        Chris83 0
                        schrieb am zuletzt editiert von Chris83 0
                        #11

                        @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}
                        
                        
                        BananaJoeB 1 Antwort Letzte Antwort
                        0
                        • C 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}
                          
                          
                          BananaJoeB Online
                          BananaJoeB Online
                          BananaJoe
                          Most Active
                          schrieb am zuletzt editiert von
                          #12

                          @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.

                          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                          C 1 Antwort Letzte Antwort
                          1
                          • BananaJoeB BananaJoe

                            @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 Offline
                            C Offline
                            Chris83 0
                            schrieb am zuletzt editiert von
                            #13

                            @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="✅"}
                            
                            BananaJoeB 1 Antwort Letzte Antwort
                            0
                            • C Chris83 0

                              @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="✅"}
                              
                              BananaJoeB Online
                              BananaJoeB Online
                              BananaJoe
                              Most Active
                              schrieb am zuletzt editiert von
                              #14

                              @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

                              ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                              C 1 Antwort Letzte Antwort
                              1
                              • BananaJoeB BananaJoe

                                @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 Offline
                                C Offline
                                Chris83 0
                                schrieb am zuletzt editiert von
                                #15

                                @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 Antwort Letzte Antwort
                                0
                                • C Chris83 0

                                  @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 Offline
                                  W Offline
                                  woupi
                                  schrieb am zuletzt editiert von
                                  #16

                                  @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?

                                  NUC10i3, Proxmox, VM Ubuntu iobroker, lxc ubuntu influxdb, grafana, lxc ubuntu SAE, lxc ubuntu MotionEye, WP Panasonic Jeisha 5kW mit Heishamon, Shelly 2.5 und 2pm Rolladensteuerung, OpenWB Wallbox

                                  BananaJoeB 1 Antwort Letzte Antwort
                                  0
                                  • W woupi

                                    @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?

                                    BananaJoeB Online
                                    BananaJoeB Online
                                    BananaJoe
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #17

                                    @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

                                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                    W 1 Antwort Letzte Antwort
                                    0
                                    • BananaJoeB BananaJoe

                                      @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 Offline
                                      W Offline
                                      woupi
                                      schrieb am zuletzt editiert von
                                      #18

                                      @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)

                                      NUC10i3, Proxmox, VM Ubuntu iobroker, lxc ubuntu influxdb, grafana, lxc ubuntu SAE, lxc ubuntu MotionEye, WP Panasonic Jeisha 5kW mit Heishamon, Shelly 2.5 und 2pm Rolladensteuerung, OpenWB Wallbox

                                      BananaJoeB 1 Antwort Letzte Antwort
                                      0
                                      • W woupi

                                        @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)

                                        BananaJoeB Online
                                        BananaJoeB Online
                                        BananaJoe
                                        Most Active
                                        schrieb am zuletzt editiert von BananaJoe
                                        #19

                                        @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?

                                        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                        W 1 Antwort Letzte Antwort
                                        1
                                        • BananaJoeB 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 Offline
                                          W Offline
                                          woupi
                                          schrieb am zuletzt editiert von
                                          #20

                                          @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.

                                          NUC10i3, Proxmox, VM Ubuntu iobroker, lxc ubuntu influxdb, grafana, lxc ubuntu SAE, lxc ubuntu MotionEye, WP Panasonic Jeisha 5kW mit Heishamon, Shelly 2.5 und 2pm Rolladensteuerung, OpenWB Wallbox

                                          BananaJoeB 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          905

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe