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]JSON parsen, bräuchte Hilfe

NEWS

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

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

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

[gelöst]JSON parsen, bräuchte Hilfe

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
31 Beiträge 9 Kommentatoren 10.7k 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.
  • ThisoftT Offline
    ThisoftT Offline
    Thisoft
    schrieb am zuletzt editiert von
    #12

    Na seht ihr was aus einem Vorschlag im Halbschlaf alles werden kann ;) Da sieht man dass Javascript nur meine 5. Fremdsprache ist - ohne zu testen gerade da viele solche Fehlerchen rein…

    Aber Deine Objektdefinition ist - auch wenn es jetzt funktioniert - sagen wir mal suboptimal. Ich würde den Wert der Temperatur jedenfalls nicht einfach in einen DP mit der Bezeichnung "3dDrucker" schreiben sondern die Struktur des DP an die der Daten die vom Drucker kommen "anlehnen". Das mag aber noch als persönliche Geschmackssache durchgehen - ist nur ein Hinweis.

    Was du aber auf keinen Fall machen solltest ist die Typdeklaration des Datenpunkts zu "vermatschen". So wie du den jetzt anlegst (createState('javascript.1.3dDrucker', ""); ist der Typ zwar überhaupt nicht deklariert, wird also vermutlich "variabel" und dann gibst du als Defaultwert auch noch einen String an (""), also zumindest der Datentyp 'number' sollte für einen Zahlenwert schon definiert sein und als Default wenigstens 0.

    Das mag zwar so wie du das jetzt hast funktionieren und für den Moment auch keine Probleme machen, aber erstens ist es programmiertechnischer 'Murks' und zweitens wird es dir schmerzlich auf die Füße fallen wenn du die Daten mal historisieren und vielleicht in einem Diagramm auswerten willst.

    Aber ist nur ein Hinweis - ich mache auch manchmal gerne selbst die Fehler um dann aus Schmerzen zu lernen ;)

    22 HM-Geräte; PivCCU2 auf RasPi

    ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

    1 Antwort Letzte Antwort
    0
    • coyoteC Offline
      coyoteC Offline
      coyote
      Most Active
      schrieb am zuletzt editiert von
      #13

      > Aber Deine Objektdefinition ist - auch wenn es jetzt funktioniert - sagen wir mal suboptimal

      Das war alles nur mal zum testen ob es überhaupt funktioniert. Natürlich habe ich jetzt eine Struktur drin z.B. für Extruder, Bett usw. und auch für 2 Drucker. Wie gesagt, der Datenpunkt war nur zum testen, deshalb lief es auch in der zweiten Javascript Instanz.

      1 Antwort Letzte Antwort
      0
      • ThisoftT Offline
        ThisoftT Offline
        Thisoft
        schrieb am zuletzt editiert von
        #14

        Na dann ist ja alles Bestens :P

        22 HM-Geräte; PivCCU2 auf RasPi

        ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

        1 Antwort Letzte Antwort
        0
        • A Offline
          A Offline
          andyb
          schrieb am zuletzt editiert von
          #15

          Ich hoffe das Skript gibt es dann hier [emoji847]

          Oder gar einen Repetier Adapter [emoji6]

          1 Antwort Letzte Antwort
          0
          • coyoteC Offline
            coyoteC Offline
            coyote
            Most Active
            schrieb am zuletzt editiert von
            #16

            Script kann ich mal posten wenn ich es fertig hab, da sollen noch paar mehr Sachen rein.

            Adapter wäre cool, bin ich aber leider der falsche Ansprechpartner für, da hab ich zu wenig Kenntnisse mit Javascript.

            1 Antwort Letzte Antwort
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              schrieb am zuletzt editiert von
              #17

              Json parse geht mit dem Systeminfo Adapter andere dafür sind nicht geplant.

              Also entweder den oder JavaScript

              –-----------------------

              Send from mobile device

              Das schöne ios hat Auto Korrektur zum k****

              Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

              1 Antwort Letzte Antwort
              0
              • coyoteC Offline
                coyoteC Offline
                coyote
                Most Active
                schrieb am zuletzt editiert von
                #18

                @Dutchman:

                Json parse geht mit dem Systeminfo Adapter andere dafür sind nicht geplant.

                Also entweder den oder JavaScript `

                Nee, er meinte ja einen extra Adapter für die Repetier Server Software für den 3d Drucker

                1 Antwort Letzte Antwort
                0
                • coyoteC Offline
                  coyoteC Offline
                  coyote
                  Most Active
                  schrieb am zuletzt editiert von
                  #19

                  Hey,

                  leider muss ich nochmal nachfragen, da ich jetzt noch ein zweites JSON hab, bei dem ich Zeit und Status in Prozent lesen könnte. Funktioniert nur nicht so wie ich dachte.

                  [{"active":true,"analysed":1,"done":0.26915197043345518,"job":"Halter_rechts.","jobid":4,"linesSend":67,"name":"AM8","ofLayer":146,"online":1,"pauseState":0,"paused":false,"printTime":4266.7126891287853,"printedTimeComp":412.82550469314651,"slug":"AM8","start":1515704149,"totalLines":24893}]
                  

                  Das ist das JSON und ich brauche "done", "printTime" und "printedTimeComp". Ok, dachte ich mir dann müsste "done" ja "body.done" sein, stimmt aber anscheinend nicht, der Datenpunkt wird nicht gefüllt. Leider verstehe ich nicht warum. Helft mir bitte mal auf die Sprünge.

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

                    @coyote:

                    dachte ich mir dann müsste "done" ja "body.done" sein `

                    body[0].done
                    

                    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
                    • coyoteC Offline
                      coyoteC Offline
                      coyote
                      Most Active
                      schrieb am zuletzt editiert von
                      #21

                      Danke paul53, ich wusste irgendwo kommt die [0] hin, nur war mir nicht klar dass sie an "body" kommt. Wieder ein Stück dazu gelernt.

                      1 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        andyb
                        schrieb am zuletzt editiert von
                        #22

                        @coyote:

                        Script kann ich mal posten wenn ich es fertig hab, da sollen noch paar mehr Sachen rein.

                        Adapter wäre cool, bin ich aber leider der falsche Ansprechpartner für, da hab ich zu wenig Kenntnisse mit Javascript. ` Läuft das Skript und willst du es veröffentlichen?

                        Seit diesem WE läuft mein repetiersever [emoji16]

                        1 Antwort Letzte Antwort
                        0
                        • L Offline
                          L Offline
                          ludino
                          schrieb am zuletzt editiert von
                          #23

                          Da wäre auch sehr intressiert dran.

                          Am liebsten sogar ein Adapter.

                          1 Antwort Letzte Antwort
                          0
                          • J Offline
                            J Offline
                            Jan007
                            schrieb am zuletzt editiert von
                            #24

                            Würde mich auch sehr darüber freuen :D :D :D

                            1 Antwort Letzte Antwort
                            0
                            • L Offline
                              L Offline
                              ludino
                              schrieb am zuletzt editiert von
                              #25

                              Da der Themen Owner sich nicht meldet vielleicht kann uns ja ein Experte mal erklären wie wir/ich vorgen muss damit das funktioniert!

                              Lieb Guck

                              1 Antwort Letzte Antwort
                              0
                              • L Offline
                                L Offline
                                ludino
                                schrieb am zuletzt editiert von
                                #26

                                Keiner da der etwas hilfe geben kann?

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

                                  @ludino:

                                  damit das funktioniert! `
                                  Damit was funktioniert ? Habe gerade meine Glaskugel verlegt.

                                  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
                                  • L Offline
                                    L Offline
                                    ludino
                                    schrieb am zuletzt editiert von
                                    #28

                                    Zu erklärung,

                                    wir/ich haben einen Repetier server am laufen, diesen möchten wir gerne mit in IObroker bringen. der Themen Owner hat ein Script dafür geschrieben.

                                    Leider meldet er sich nicht mehr, um mal diesen Script zu veröffentlichen.

                                    Wie muss ich vorgehen damit ich so ein script schreiben kann? Ich will es gerne lernen!

                                    1 Antwort Letzte Antwort
                                    0
                                    • HomoranH Nicht stören
                                      HomoranH Nicht stören
                                      Homoran
                                      Global Moderator Administrators
                                      schrieb am zuletzt editiert von
                                      #29

                                      Ich (als JS-Legastheniker) würde den Parser-Adapter dazu verwenden.

                                      Habe gestern auch schon etwas mit dem Code, der anfangs gepostet wurde versucht, sah recht nett aus.

                                      Ich bräuchte nur wesentlich mehr Informationen.

                                      Wie sieht bei dir eine solche Antwort aus?

                                      • hier bitte den Code

                                      Welche Daten willst du haben?

                                      • bitte anhend der Antwort mit den dort enthaltenen Werten.

                                      Gruß

                                      Rainer

                                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                      1 Antwort Letzte Antwort
                                      0
                                      • L Offline
                                        L Offline
                                        ludino
                                        schrieb am zuletzt editiert von
                                        #30

                                        @Homoran:

                                        Ich (als JS-Legastheniker) würde den Parser-Adapter dazu verwenden.

                                        Habe gestern auch schon etwas mit dem Code, der anfangs gepostet wurde versucht, sah recht nett aus.

                                        Ich bräuchte nur wesentlich mehr Informationen.

                                        Wie sieht bei dir eine solche Antwort aus?

                                        • hier bitte den Code

                                        Welche Daten willst du haben?

                                        • bitte anhend der Antwort mit den dort enthaltenen Werten.

                                        Gruß

                                        Rainer `

                                        Ich werde mir darüber gedanken machen und mich melden, Erst mal muss ich rausfinden wie der Code aussehen muss mit der Antwort das hatte ich schonmal gehabt…..! Naja

                                        1 Antwort Letzte Antwort
                                        0
                                        • coyoteC Offline
                                          coyoteC Offline
                                          coyote
                                          Most Active
                                          schrieb am zuletzt editiert von
                                          #31

                                          Sorry dass ich hier nicht mehr weiter geantwortet habe, hatte das Thema nicht mehr richtig auf dem Schirm.

                                          Ich poste mein Script mal, aber ich sage gleich mal dazu, ich bin nicht der große Scripter. Ist mehr so etwas zusammengewürfelt und rumprobiert.

                                          Es zeigt das an was ich wollte und mehr habe ich da auch nicht mehr gemacht. Da ist definitv noch einiges mehr rauszuholen und bestimmt noch vieles zu verbessern. Vllt kann sogar jemand einen Adapter draus machen.

                                          Es müssen 2 URL's im Parser Adapter eingetragen werden, für die Statelist und Printerlist mit eurem API-Key:

                                          Das Script ist für meine 2 Drucker, einmal den AM8 und einmal den NoName.

                                          Die ganzen Bezeichnungen sind auch noch nicht wirklich "sauber", wenn ich Zeit habe werde ich mich da nochmal ran setzen.

                                          536_repetier_li.jpg

                                          http://192.168.XXX.XXX:3344/printer/api … XXXXXXXXXX

                                          http://192.168.XXX.XXX:3344/printer/api ... XXXXXXXXXX

                                          var idJson = "parser.0.drucker";
                                          var idJson2 = "parser.0.druckerlist";
                                          var am8tempakt = "javascript.0.3dDrucker.AM8.Extruder.TempAkt"/*javascript.0.3dDrucker.AM8.Extruder.TempAkt*/;
                                          var am8tempset = "javascript.0.3dDrucker.AM8.Extruder.TempSet";
                                          var am8tempbettakt = "javascript.0.3dDrucker.AM8.Bett.TempAkt";
                                          var am8tempbettset = "javascript.0.3dDrucker.AM8.Bett.TempSet";
                                          var nntempakt = "javascript.0.3dDrucker.NoName.Extruder.TempAkt";
                                          var nntempset = "javascript.0.3dDrucker.NoName.Extruder.TempSet";
                                          var nntempbettakt = "javascript.0.3dDrucker.NoName.Bett.TempAkt";
                                          var nntempbettset = "javascript.0.3dDrucker.NoName.Bett.TempSet";
                                          var nnjob = "javascript.0.3dDrucker.NoName.Druckteil";
                                          var nnprinttime = "javascript.0.3dDrucker.NoName.Druckzeit";
                                          var nnprinttimecomp ="javascript.0.3dDrucker.NoName.Restzeit";
                                          var nndone ="javascript.0.3dDrucker.NoName.Prozent";
                                          var am8job = "javascript.0.3dDrucker.AM8.Druckteil";
                                          var am8printtime = "javascript.0.3dDrucker.AM8.Druckzeit";
                                          var am8printtimecomp ="javascript.0.3dDrucker.AM8.Restzeit";
                                          var am8done ="javascript.0.3dDrucker.AM8.Prozent";
                                          
                                          createState(am8tempakt, {name: "T1", unit: "°C"});
                                          createState(am8tempset, {name: "T2", unit: "°C"});
                                          createState(am8tempbettakt, {name: "T3", unit: "°C"});
                                          createState(am8tempbettset, {name: "T4", unit: "°C"});
                                          createState(nntempakt, {name: "T5", unit: "°C"});
                                          createState(nntempset, {name: "T6", unit: "°C"});
                                          createState(nntempbettakt, {name: "T7", unit: "°C"});
                                          createState(nntempbettset, {name: "T8", unit: "°C"});
                                          createState(nnjob, {name: "J"});
                                          createState(nnprinttime, {name: "T9"});
                                          createState(nnprinttimecomp, {name: "T10"});
                                          createState(nndone,{name: "Done"});
                                          createState(am8job, {name: "J1"});
                                          createState(am8printtime, {name: "T11"});
                                          createState(am8printtimecomp, {name: "T12"});
                                          createState(am8done,{name: "Done1"});
                                          
                                          function werteAuslesen(jsonStr) {
                                              var myJson = JSON.parse(jsonStr);
                                              var T1 = myJson.AM8.extruder[0].tempRead;
                                              var T2 = myJson.AM8.extruder[0].tempSet;
                                              var T3 = myJson.AM8.heatedBeds[0].tempRead;
                                              var T4 = myJson.AM8.heatedBeds[0].tempSet;
                                          
                                              var T5 = myJson.NoName.extruder[0].tempRead;
                                              var T6 = myJson.NoName.extruder[0].tempSet;
                                              var T7 = myJson.NoName.heatedBeds[0].tempRead;
                                              var T8 = myJson.NoName.heatedBeds[0].tempSet;
                                          
                                              setState(am8tempakt, T1.toFixed(2)); 
                                              setState(am8tempset, T2.toFixed(2));
                                              setState(am8tempbettakt, T3.toFixed(2)); 
                                              setState(am8tempbettset, T4.toFixed(2));
                                          
                                              setState(nntempakt, T5.toFixed(2)); 
                                              setState(nntempset, T6.toFixed(2));
                                              setState(nntempbettakt, T7.toFixed(2)); 
                                              setState(nntempbettset, T8.toFixed(2));
                                          
                                          }
                                          
                                          function werteAuslesen2(jsonStr) {
                                              var myJson2 = JSON.parse(jsonStr);
                                              var J1 = myJson2[0].job;
                                              var T11 = Math.round (1 * myJson2[0].printTime /60);          // Gesamtzeit AM8
                                              var T12 = Math.round (1 * myJson2[0].printedTimeComp /60) ;   // Gedruckte Zeit AM8
                                              var T13 = (T11-T12);                                          // Restzeit AM8
                                              var Done1 =  myJson2[0].done;
                                              var J = myJson2[1].job;
                                              var T9 = Math.round (1 * myJson2[1].printTime /60) ;          // Gesamtzeit NN
                                              var T10 = Math.round (1 * myJson2[1].printedTimeComp /60) ;   // Gedruckte Zeit NN
                                              var T14 = (T9-T10);                                           // Restzeit NN
                                              var Done = myJson2[1].done;
                                          
                                              setState(nnjob, J); 
                                              setState(nnprinttime, T9 + " min");
                                              setState(nnprinttimecomp, T14 + " min");
                                              if (getState("javascript.0.3dDrucker.NoName.Druckteil"/*J*/).val != "none"){
                                              setState(nndone, Done.toFixed(2) + " %");
                                          }
                                          
                                              setState(am8job, J1); 
                                              setState(am8printtime, T11 + " min");
                                              setState(am8printtimecomp, T13 + " min");
                                              if (getState("javascript.0.3dDrucker.AM8.Druckteil"/*J1*/).val != "none"){
                                              setState(am8done, Done1.toFixed(2) + " %");
                                          } 
                                          }
                                          
                                          on({id:idJson,change:'ne'}, function (obj) {
                                              werteAuslesen(obj.state.val);
                                          });
                                          
                                          on({id:idJson2,change:'ne'}, function (obj) {
                                              werteAuslesen2(obj.state.val);
                                          });
                                          
                                          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

                                          815

                                          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