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. Skripten / Logik
  4. Regex liefert falschen Wert

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Regex liefert falschen Wert

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 5 Kommentatoren 1.1k Aufrufe 3 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.
  • C ck_coke

    @mcu

    Error in callback: TypeError: m.split is not a function
    
    M Online
    M Online
    MCU
    schrieb am zuletzt editiert von
    #5

    @ck_coke Dann muss man vorher noch aus m einen String machen.

    m = String(m)
    P= m.split ......
    

    NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
    Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

    1 Antwort Letzte Antwort
    0
    • C ck_coke

      @mcu

      Error in callback: TypeError: m.split is not a function
      
      F Offline
      F Offline
      fastfoot
      schrieb am zuletzt editiert von
      #6

      @ck_coke

      let m;
      if ((m = regex.exec(str)) != null)
          log('Leistung: ' + m[1])
      

      iobroker läuft unter Docker auf QNAP TS-451+
      SkriptRecovery: https://forum.iobroker.net/post/930558

      1 Antwort Letzte Antwort
      0
      • C ck_coke

        Hallo zusammen,

        ich habe ein paar (Anfänger)-Schwierigkeiten mit einer Regex und könnte etwas Hilfe gebrauchen.

        Folgendes ist das Ergebnis:

        javascript.0	22:24:00.130	info	script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Found match, group 0: "total_power":-43.36,
        javascript.0	22:24:00.130	info	script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Found match, group 1: -43.36
        javascript.0	22:24:00.130	info	script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Found match, group 2: .36
        javascript.0	22:24:00.130	info	script.js.common.Balkonkraftwerk_Shelly_Cloud_API: {"isok":true,"data":{"online":true,"device_status":{"has_update":false,"fs_free":155118,"unixtime":1725530007,"emeter_n":{"current":0,"ixsum":0.9,"mismatch":false,"is_valid":false},"wifi_sta":{"connected":true,"ssid":"....","ip":"192.168.178.52","rssi":-72},"total_power":-43.36,"ct_calst":0,"relays":[{"ison":true,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"cloud"}],"v_data":1,"uptime":885115,"fs_size":233681,"_updated":"2024-09-05 20:16:00","cloud":{"enabled":true,"connected":true},"fs_mounted":true,"ram_free":32500,"actions_stats":{"skipped":0},"emeters":[{"power":-9.73,"pf":-0.1,"current":0.44,"voltage":233.55,"is_valid":true,"total":0,"total_returned":7844.1},{"power":-33.63,"pf":-0.62,"current":0.23,"voltage":235.21,"is_valid":true,"total":2419,"total_returned":28747.5},{"power":0,"pf":0,"current":0.44,"voltage":234.18,"is_valid":true,"total":10489.3,"total_returned":0.1}],"mac":"483FDAC3902E","mqtt":{"connected":false},"cfg_changed_cnt":0,"serial":62007,"getinfo":{"fw_info":{"device":"shellyem3-483FDAC3902E","fw":"20230913-114244/v1.14.0-gcb84623"}},"time":"22:16","update":{"status":"idle","has_update":false,"new_version":"20230913-114244/v1.14.0-gcb84623","old_version":"20230913-114244/v1.14.0-gcb84623","beta_version":"20231107-165007/v1.14.1-rc1-g0617c15"},"ram_total":49920}}} - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1500 100 1383 100 117 15896 1344 --:--:-- --:--:-- --:--:-- 17441
        javascript.0	22:24:00.130	info	script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Leistung: 3
        

        So habe ich mir das Ganze zusammengebastelt:

        schedule("*/1 * * * *", function () {
        
            exec('curl -X POST https://shelly-89-eu.shelly.cloud/device/status -d "id=483fdac3902e&auth_key=MjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B8........."',
        
        		function (error, stdout, stderr) {
        
                    const regex = /"total_power":(-?\d+(\.\d+)?),/gm;
        
                    const str = stdout;
        
                    let m;
        
                    while ((m = regex.exec(str)) !== null) {
        
                        // This is necessary to avoid infinite loops with zero-width matches
        
                        if (m.index === regex.lastIndex) {
        
                            regex.lastIndex++;
        
                        }
        
                        // The result can be accessed through the `m`-variable.
        
                        m.forEach((match, groupIndex) => {
        
                            console.log(`Found match, group ${groupIndex}: ${match}`);
                                if (groupIndex=1) {
        
                    P = match[1] // im match stehen die aktuelle parser ergebnisse ich brauch aber nur das der gruppe 1
        
                    }               
        
                        });
        
                        
        
                    }
        
                    log(stdout + " - " + stderr);
                    console.log('Leistung: ' + P);
                });
        
        });
        
        

        Die regex scheint wie man sieht zu funktionieren nur wird nicht das richtige verwendet.
        Ich hätte gerne group 1 als "Ergebnis". Wie bekomme ich das hin?

        haus-automatisierungH Online
        haus-automatisierungH Online
        haus-automatisierung
        Developer Most Active
        schrieb am zuletzt editiert von
        #7

        @ck_coke sagte in Regex liefert falschen Wert:

        ich habe ein paar (Anfänger)-Schwierigkeiten mit einer Regex

        Warum überhaupt JSON-Strings mit einem regex auseinander nehmen?!

        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
        📚 Meine inoffizielle ioBroker Dokumentation

        haus-automatisierungH 1 Antwort Letzte Antwort
        0
        • haus-automatisierungH haus-automatisierung

          @ck_coke sagte in Regex liefert falschen Wert:

          ich habe ein paar (Anfänger)-Schwierigkeiten mit einer Regex

          Warum überhaupt JSON-Strings mit einem regex auseinander nehmen?!

          haus-automatisierungH Online
          haus-automatisierungH Online
          haus-automatisierung
          Developer Most Active
          schrieb am zuletzt editiert von haus-automatisierung
          #8

          Hier mal ein Beispiel-Script. Ohne exec, curl und regex :)

          const server = 'https://shelly-67-eu.shelly.cloud';
          const authKey = 'MTk3YjZhdWlkE6CD....';
          const deviceId = 'b0b21c18d700';
          
          httpPost(`${server}/device/status`,
              {
                  id: deviceId,
                  auth_key: authKey,
              },
              (error, response) => {
                  if (!error) {
                      try {
                          const obj = JSON.parse(response.data);
          
                          // Daten extrahieren
          
                      } catch (e) {
                          console.error(e);
                      }
                  } else {
                      console.error(error);
                  }
              }
          );
          
          

          Du suchst ja scheinbar: obj.data.device_status.total_power.

          🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
          🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
          📚 Meine inoffizielle ioBroker Dokumentation

          C 1 Antwort Letzte Antwort
          2
          • haus-automatisierungH haus-automatisierung

            Hier mal ein Beispiel-Script. Ohne exec, curl und regex :)

            const server = 'https://shelly-67-eu.shelly.cloud';
            const authKey = 'MTk3YjZhdWlkE6CD....';
            const deviceId = 'b0b21c18d700';
            
            httpPost(`${server}/device/status`,
                {
                    id: deviceId,
                    auth_key: authKey,
                },
                (error, response) => {
                    if (!error) {
                        try {
                            const obj = JSON.parse(response.data);
            
                            // Daten extrahieren
            
                        } catch (e) {
                            console.error(e);
                        }
                    } else {
                        console.error(error);
                    }
                }
            );
            
            

            Du suchst ja scheinbar: obj.data.device_status.total_power.

            C Offline
            C Offline
            ck_coke
            schrieb am zuletzt editiert von
            #9

            @haus-automatisierung

            Vielen Dank! So ist es natürlich noch besser gelöst.

            C 1 Antwort Letzte Antwort
            0
            • C ck_coke

              @haus-automatisierung

              Vielen Dank! So ist es natürlich noch besser gelöst.

              C Offline
              C Offline
              ck_coke
              schrieb am zuletzt editiert von ck_coke
              #10

              Jetzt habe ich das Problem, dass es bei einem Gerät funktioniert und bei einem anderen

              {"ack":true}
              

              als Wert gesetzt wird.

              So sieht das Skript aus:

              schedule("*/10 * * * * *", function () {
              
              
              const server = 'https://shelly-89-eu.shelly.cloud';
              const authKey = 'XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2';
              const deviceId = 'a0a3b3e7d67c';
               
              httpPost(`${server}/device/status`,
                  {
                      id: deviceId,
                      auth_key: authKey,
                  },
                  (error, response) => {
                      if (!error) {
                          try {
                              const obj = JSON.parse(response.data);
               
                              // Daten extrahieren
              
                              console.log(obj.data);
                              
                                         setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true);
              
              
               
                          } catch (e) {
                              console.error(e);
                          }
                      } else {
                          console.error(error);
                      }
                  }
              );
               
              });
              
              
              
              

              Folgendes bekomme ich im Log angezeigt:

              javascript.0
              	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: setForeignState(id=0_userdata.0.Leistung-Entladen, state={"val":{"ack":true},"ack":true,"ts":1725906880074,"q":0,"from":"system.adapter.javascript.0","lc":1725906880074,"c":"script.js.common.Balkonkraftwerk.Skript_1"})
              javascript.0
              	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: { online: true, device_status: { sys: { available_updates: [Object], mac: 'A0A3B3E7D67C', restart_required: false, time: '11:48', unixtime: 1725788939, uptime: 3, ram_size: 246876, ram_free: 134944, fs_size: 458752, fs_free: 122880, cfg_rev: 19, kvs_rev: 0, schedule_rev: 10, webhook_rev: 0, reset_reason: 1 }, ts: 1725906873.77, plugs_ui: {}, id: 'a0a3b3e7d67c', code: 'SNPL-00112EU', ws: { connected: false }, wifi: { sta_ip: '192.168.33.67', status: 'got ip', ssid: 'ShellyPlusPlugS-E465B8B3A57C', rssi: -29, ap_client_count: 0 }, mqtt: { connected: false }, serial: 3566, ffs: { ts: 0 }, 'switch:0': { id: 0, current: 0.021, source: 'SHC', output: true, apower: 0, voltage: 232.9, aenergy: [Object], temperature: [Object] }, cloud: { connected: true }, _updated: '2024-09-09 18:34:34', ble: {} } }
              javascript.0
              	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: httpPost(url=https://shelly-89-eu.shelly.cloud/device/status, responseTime=66ms)
              javascript.0
              	2024-09-09 20:34:40.007	info	script.js.common.Balkonkraftwerk.Skript_1: httpPost(config={"method":"post","url":"https://shelly-89-eu.shelly.cloud/device/status","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"},"data":{"id":"a0a3b3e7d67c","auth_key":"XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2"}}, data=[object Object])
              ```z
              haus-automatisierungH 1 Antwort Letzte Antwort
              0
              • C ck_coke

                Jetzt habe ich das Problem, dass es bei einem Gerät funktioniert und bei einem anderen

                {"ack":true}
                

                als Wert gesetzt wird.

                So sieht das Skript aus:

                schedule("*/10 * * * * *", function () {
                
                
                const server = 'https://shelly-89-eu.shelly.cloud';
                const authKey = 'XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2';
                const deviceId = 'a0a3b3e7d67c';
                 
                httpPost(`${server}/device/status`,
                    {
                        id: deviceId,
                        auth_key: authKey,
                    },
                    (error, response) => {
                        if (!error) {
                            try {
                                const obj = JSON.parse(response.data);
                 
                                // Daten extrahieren
                
                                console.log(obj.data);
                                
                                           setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true);
                
                
                 
                            } catch (e) {
                                console.error(e);
                            }
                        } else {
                            console.error(error);
                        }
                    }
                );
                 
                });
                
                
                
                

                Folgendes bekomme ich im Log angezeigt:

                javascript.0
                	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: setForeignState(id=0_userdata.0.Leistung-Entladen, state={"val":{"ack":true},"ack":true,"ts":1725906880074,"q":0,"from":"system.adapter.javascript.0","lc":1725906880074,"c":"script.js.common.Balkonkraftwerk.Skript_1"})
                javascript.0
                	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: { online: true, device_status: { sys: { available_updates: [Object], mac: 'A0A3B3E7D67C', restart_required: false, time: '11:48', unixtime: 1725788939, uptime: 3, ram_size: 246876, ram_free: 134944, fs_size: 458752, fs_free: 122880, cfg_rev: 19, kvs_rev: 0, schedule_rev: 10, webhook_rev: 0, reset_reason: 1 }, ts: 1725906873.77, plugs_ui: {}, id: 'a0a3b3e7d67c', code: 'SNPL-00112EU', ws: { connected: false }, wifi: { sta_ip: '192.168.33.67', status: 'got ip', ssid: 'ShellyPlusPlugS-E465B8B3A57C', rssi: -29, ap_client_count: 0 }, mqtt: { connected: false }, serial: 3566, ffs: { ts: 0 }, 'switch:0': { id: 0, current: 0.021, source: 'SHC', output: true, apower: 0, voltage: 232.9, aenergy: [Object], temperature: [Object] }, cloud: { connected: true }, _updated: '2024-09-09 18:34:34', ble: {} } }
                javascript.0
                	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: httpPost(url=https://shelly-89-eu.shelly.cloud/device/status, responseTime=66ms)
                javascript.0
                	2024-09-09 20:34:40.007	info	script.js.common.Balkonkraftwerk.Skript_1: httpPost(config={"method":"post","url":"https://shelly-89-eu.shelly.cloud/device/status","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"},"data":{"id":"a0a3b3e7d67c","auth_key":"XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2"}}, data=[object Object])
                ```z
                haus-automatisierungH Online
                haus-automatisierungH Online
                haus-automatisierung
                Developer Most Active
                schrieb am zuletzt editiert von
                #11

                @ck_coke In deinem Scripts sind Klammerfehler. Das kann so gar nicht klappen. Da fehlt etwas.

                voltage, true);

                🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                📚 Meine inoffizielle ioBroker Dokumentation

                1 Antwort Letzte Antwort
                0
                • C Offline
                  C Offline
                  ck_coke
                  schrieb am zuletzt editiert von
                  #12

                  @haus-automatisierung

                  Das ist wohl beim hier ins Forum kopieren passiert.

                  Die Zeile sieht so aus:

                                             setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true);
                  
                  
                  1 Antwort Letzte Antwort
                  0
                  • C Offline
                    C Offline
                    ck_coke
                    schrieb am zuletzt editiert von
                    #13

                    Kann es daran liegen das der Datenpunkt hinter switch:0, also eine Ebene tiefer liegt?

                    Zumindest habe ich das nach Internetrechersche in anderen Foren so gesehen.

                    haus-automatisierungH 1 Antwort Letzte Antwort
                    0
                    • C ck_coke

                      Kann es daran liegen das der Datenpunkt hinter switch:0, also eine Ebene tiefer liegt?

                      Zumindest habe ich das nach Internetrechersche in anderen Foren so gesehen.

                      haus-automatisierungH Online
                      haus-automatisierungH Online
                      haus-automatisierung
                      Developer Most Active
                      schrieb am zuletzt editiert von haus-automatisierung
                      #14

                      @ck_coke sagte in Regex liefert falschen Wert:

                      Zumindest habe ich das nach Internetrechersche in anderen Foren so gesehen.

                      Ich hab das Thema JSON vs. Objekt in zig kostenlosen Inhalten super ausführlich erklärt.

                      Du musst schon den kompletten Pfad angeben. Im Falle von switch:0 muss das dann aber in eckige Klammern und kann nicht mit der einfachen Punkt-Notation erreicht werden.

                      obj.data.device_status['switch:0'].voltage

                      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                      📚 Meine inoffizielle ioBroker Dokumentation

                      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

                      696

                      Online

                      32.6k

                      Benutzer

                      82.1k

                      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