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. [Gelöst] Wie eine Json Tabelle um einen String ergänzen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

[Gelöst] Wie eine Json Tabelle um einen String ergänzen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 1.5k Aufrufe
  • Ä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.
  • PeoplesP Offline
    PeoplesP Offline
    Peoples
    schrieb am zuletzt editiert von
    #1

    Hi Leute,

    ich möchte die tägliche Regenmenge meiner Wetterstation in eine Tabelle schreiben welche zyklisch jeden Tag um das aktuelle Datum ergänzt wird.

    Ich habe in einem anderen Beitrag ein Script gefunden das ich für meine Wünsche benutzen kann um die Tabelle zu erstellen. Jedoch schaffe ich es nicht die bereits vorhandenen Werte einzulesen und diese dann um den aktuellen Tag zu ergänzen.

    Hier mal das Script:

    ! ```
    var logging = false; // Logging on/off var instanz = 'javascript.0'; instanz = instanz + '.'; // // var pfad0 = 'Wetterstation'; pfad0 = pfad0 + '.'; // Pfad ! // ----------------------------------------------------------------------------- // Objekte // ----------------------------------------------------------------------------- // Datenpunkt createState(pfad0 + 'Regen_Historie', {def:'', type: 'string', name: 'Regen_Historie als JSON Objekt'}); ! function strToJson(str) { str = str.split(/\d:Datum:| Regenmenge:/); tabelle = []; ! for (i=1; i<=str.length-1; i=i+2) { //log(str[i] + " . " + str[i+1]); tabelle.push({ "Nr" : Math.floor((i+2)/2), "Datum" : str[i], "Regenmenge": str[i+1], }); } return JSON.stringify(tabelle); } ! function main() { var str = "1:Datum:11.08.2017 Regenmenge:6.79mm 2:Datum:12.08.2017 Regenmenge:10.62mm"; setState(pfad0 + 'Regen_Historie',strToJson(str)); } ! main();
    ! Kann mir einer von euch sagen wie ich den Datenpunkt einlesen muss um Ihn bspw. um "Datum:11.09.2017 Regenmenge:6.79mm" als dritten Wert zu erweitern?
    ! Hoffe ich habe mich verständlich ausgedrückt
    ! Gruß
    ! Peoples[/i][/i]

    Ich beantworte keine Fragen zu Themen via PN

    1 Antwort Letzte Antwort
    0
    • D Offline
      D Offline
      dwm
      schrieb am zuletzt editiert von
      #2

      …

      Du erzeugst mit strToJson einen (EINEN) neuen Eintrag.

      Hol einfach vorher die Tabelle mit getState(), dann parsen (JSON.parse), dann push, dann mit setState zurückschreiben.

      Warum ich das jetzt nicht genauer ausformuliere ist, weil ich's für keine gute Idee halte :)

      Das Ding wird immer größer und größer ...

      Warum aktivierst Du nicht einfach den History Adapter auf dem Datenpunkt und schreibst einfach den letzten Eintrag (von mir aus auch als JSON)?? ... das ganze Anhängen und Verwalten macht dann der History Adapter.

      1 Antwort Letzte Antwort
      0
      • PeoplesP Offline
        PeoplesP Offline
        Peoples
        schrieb am zuletzt editiert von
        #3

        Zum einen fehlt mir da die Verständniss hab da schon einige Male rumgespielt aber wirklich ein brauchbares Ergebnis kam nie raus.

        Zum anderen möchte ich diesen Wert "nur" einmal um 23:59Uhr loggen und das kann man wie ich es verstanden habe nicht einstellen oder?

        Ich beantworte keine Fragen zu Themen via PN

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @peoples:

          möchte ich diesen Wert "nur" einmal um 23:59Uhr loggen und das kann man wie ich es verstanden habe nicht einstellen oder? `
          Doch, das macht man mit https://github.com/ioBroker/ioBroker.javascript#schedule.

          var logging = false;               // Logging on/off
          var pfad0 =   'Wetterstation.';        // Pfad
          
          // Datenpunkt
          createState(pfad0 + 'Regen_Historie', {def:'', type: 'string', name: 'Regen_Historie als JSON Objekt'});
          
          function strToJson(str) {
              var json = getState(pfad0 + 'Regen_Historie').val;
              var tabelle = [];
              if(json != "") tabelle = JSON.parse(json);
              tabelle.push(str);
              return JSON.stringify(tabelle);
          }    
          
          function logRegen() {
              var str = 'Datum: ' + formatDate(new Date(), 'DD.MM.YYYY') + ' Regenmenge: ' + getState('ID des DP mit täglicher Regenmenge').val + ' mm';
              setState(pfad0 + 'Regen_Historie', strToJson(str));
          }
          
          schedule('59 23 * * *', logRegen);
          

          @peoples:

          möchte die tägliche Regenmenge meiner Wetterstation `
          Dann musst Du eine Datenpunkt mit dem Wert für die tägliche Regenmenge haben. Wo wird der Wert eingelesen ?

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • PeoplesP Offline
            PeoplesP Offline
            Peoples
            schrieb am zuletzt editiert von
            #5

            Das war genau die Lösung!

            Der Datenpunkt kommt von der HM-Wetterstation:

            function logRegen() {
                var str = 'Datum: ' + formatDate(new Date(), 'DD.MM.YYYY') + ' Regenmenge: ' + getState("hm-rpc.0.xxxxxxxxx.1.RAIN_COUNTER").val + ' mm';
                setState(pfad0 + 'Regen_Historie', strToJson(str));
                log('durchlauf');
            }
            

            Tausend Dank!

            Peoples

            Ich beantworte keine Fragen zu Themen via PN

            1 Antwort Letzte Antwort
            0
            • PeoplesP Offline
              PeoplesP Offline
              Peoples
              schrieb am zuletzt editiert von
              #6

              Der Vollständigkeit halber hier nochmal das ganze Script, da es noch einen Fehler hatte falls es doch jemand mal braucht.

              // Regenmenge in Variable schreiben
              function strToJson(str) {
                  str = str.split(/Datum:| Regenmenge:/);
                  var json = getState(pfad0 + 'Regen_Historie').val;
                  var tabelle = [];
                  if(json !== "") tabelle = JSON.parse(json);
                  tabelle.push({ 
                          "Datum" : str[1],
                          "Regenmenge": str[2],
                  });
                  return JSON.stringify(tabelle);
              }   
              
              function logRegen(regenmenge) {
                  var datum = new Date();
                  var str = 'Datum: ' + formatDate(new Date().setDate(new Date().getDate()-1), 'DD.MM.YYYY') + ' Regenmenge: ' + regenmenge + ' l/qm';
                  setState(pfad0 + 'Regen_Historie', strToJson(str));
                  log('durchlauf');
              }
              
              on("hm-rega.0.xxxx"/*${sysVarRainYesterday}*/, function (dp) {
                 logRegen(dp.state.val);
              });
              

              Gruß

              Steffen

              Ich beantworte keine Fragen zu Themen via PN

              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

              319

              Online

              32.6k

              Benutzer

              82.3k

              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