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.
  • M MCU

    @ck_coke

    const regex = /"total_power":(-?\d+(\.\d+)?)/gm;     /* , entfernt */
    ....
    let m;
    m = regex.exec(str)  /* m ist ja "total_power":-43.36 */
    P = m.split(':')[1]
    ....
    
    C Offline
    C Offline
    ck_coke
    schrieb am zuletzt editiert von ck_coke
    #4

    @mcu

    Error in callback: TypeError: m.split is not a function
    
    M F 2 Antworten Letzte Antwort
    0
    • 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

                        698

                        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