Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. [gelöst]Parser Adapter Refusol Inverter - der richtige Weg?

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.8k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    746

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

[gelöst]Parser Adapter Refusol Inverter - der richtige Weg?

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
parser adapterrefusol
14 Beiträge 3 Kommentatoren 782 Aufrufe 2 Beobachtet
  • Ä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.
  • A Offline
    A Offline
    Aiouh
    schrieb am zuletzt editiert von Aiouh
    #1

    Hallo, ich versuche Leistungsdaten von meinem Solar Inverter zu bekommen. Angeblich kann er ModBus TCP, aber der Hersteller bzw. die Nachfolge Service Organisation gibt auf Nachfrage zum Protokoll keine Unterstützung.
    Nun dachte ich wieder mal an den Parser Adapter der mir schon ein paar mal weitergeholfen hat. Manchmal war ich auch auf dem Holzweg, habe aber dank der Unterstützung hier dann den richtigen Weg gefunden.

    Hier komme ich nun gar nicht weiter, daher die Frage ob ich diese Seite überhaupt parsen kann. Für mich sieht das (als Laie mit gefährlichem Halbwissen) nicht danach aus.

    Bin wie immer dankbar für jeden Tip wie ich hier weiterkomme.

    4ea88e89-6f9a-4e3e-86f6-8fd459ff3224-image.png

    
    <!DOCTYPE html>
    <html>
      <head>
        <title>Inverter Webinterface</title>
        <script src="gen.title.js"></script>
        <meta http-equiv="refresh" content="10" >
        <link rel="stylesheet" type="text/css" href="style.css">
        <script src="script.chart.min.js" type="text/javascript"></script>
      </head>
      <body>
        <div id='cssmenu'>
          <ul>
            <li><a href='page.main.html'><span>Home</span></a></li>
            <li><a href='page.events.html'><span>Events</span></a></li>
            <li class='active'><a href='page.measurements.html'><span>Measurements</span></a></li>
            <li><a href='page.yield.day.html'><span>Yield Day</span></a></li>
            <li><a href='page.yield.month.html'><span>Yield Month</span></a></li>
            <li><a href='page.yield.year.html'><span>Yield Year</span></a></li>
            <li><a href='page.yield.total.html'><span>Yield Total</span></a></li>
            <li><a href='page.info.html'><span>Info</span></a></li>
            <li class='last'><a href="javascript:window.print()"><span>Print</span></a></li>
          </ul>
        </div>
        <div align="center">
          <h1><img src="gen.logo.bmp" width="124" height="56" hspace="20" style="vertical-align:middle" alt="Producer Logo">Measurements</h1>
          <script src="gen.measurements.table.js"></script>
        </div>
      </body>
      <noscript>
        <div id="pgm-no-js-text">
          <p>JavaScript is required to access this website.</p>
          <p>Please enable JavaScript or use a browser that supports JavaScript.</p>
        </div>
      </noscript>
    </html>
    
    HomoranH 1 Antwort Letzte Antwort
    0
    • A Aiouh

      Hallo, ich versuche Leistungsdaten von meinem Solar Inverter zu bekommen. Angeblich kann er ModBus TCP, aber der Hersteller bzw. die Nachfolge Service Organisation gibt auf Nachfrage zum Protokoll keine Unterstützung.
      Nun dachte ich wieder mal an den Parser Adapter der mir schon ein paar mal weitergeholfen hat. Manchmal war ich auch auf dem Holzweg, habe aber dank der Unterstützung hier dann den richtigen Weg gefunden.

      Hier komme ich nun gar nicht weiter, daher die Frage ob ich diese Seite überhaupt parsen kann. Für mich sieht das (als Laie mit gefährlichem Halbwissen) nicht danach aus.

      Bin wie immer dankbar für jeden Tip wie ich hier weiterkomme.

      4ea88e89-6f9a-4e3e-86f6-8fd459ff3224-image.png

      
      <!DOCTYPE html>
      <html>
        <head>
          <title>Inverter Webinterface</title>
          <script src="gen.title.js"></script>
          <meta http-equiv="refresh" content="10" >
          <link rel="stylesheet" type="text/css" href="style.css">
          <script src="script.chart.min.js" type="text/javascript"></script>
        </head>
        <body>
          <div id='cssmenu'>
            <ul>
              <li><a href='page.main.html'><span>Home</span></a></li>
              <li><a href='page.events.html'><span>Events</span></a></li>
              <li class='active'><a href='page.measurements.html'><span>Measurements</span></a></li>
              <li><a href='page.yield.day.html'><span>Yield Day</span></a></li>
              <li><a href='page.yield.month.html'><span>Yield Month</span></a></li>
              <li><a href='page.yield.year.html'><span>Yield Year</span></a></li>
              <li><a href='page.yield.total.html'><span>Yield Total</span></a></li>
              <li><a href='page.info.html'><span>Info</span></a></li>
              <li class='last'><a href="javascript:window.print()"><span>Print</span></a></li>
            </ul>
          </div>
          <div align="center">
            <h1><img src="gen.logo.bmp" width="124" height="56" hspace="20" style="vertical-align:middle" alt="Producer Logo">Measurements</h1>
            <script src="gen.measurements.table.js"></script>
          </div>
        </body>
        <noscript>
          <div id="pgm-no-js-text">
            <p>JavaScript is required to access this website.</p>
            <p>Please enable JavaScript or use a browser that supports JavaScript.</p>
          </div>
        </noscript>
      </html>
      
      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #2

      @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

      ob ich diese Seite überhaupt parsen kann

      ich fürchte eher nicht:

      @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

      JavaScript is required to access this website

      Ist das überhaupt der Quelltext?

      kein Support per PN! - Fragen im Forum stellen -
      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      A 1 Antwort Letzte Antwort
      1
      • HomoranH Homoran

        @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

        ob ich diese Seite überhaupt parsen kann

        ich fürchte eher nicht:

        @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

        JavaScript is required to access this website

        Ist das überhaupt der Quelltext?

        A Offline
        A Offline
        Aiouh
        schrieb am zuletzt editiert von Aiouh
        #3

        @Homoran DAS war die gute Frage, ich hatte in "page source" geschaut...
        Mit "inspect" finde ich die Tabelle und die Werte - hätte ich selbst drauf kommen sollen. DANKE

        <table class="invisible"><tbody><tr class="invisible"><th class="invisible"><h3>Inverter</h3></th><th class="invisible"><h3></h3></th></tr><tr class="invisible"><td class="invisible" valign="top" align="center"><table><tbody><tr><th>Name</th><th>Value</th><th>Unit</th></tr><tr><td>P DC</td><td align="right"> 193.33</td><td>W</td></tr><tr><td>U DC</td><td align="right"> 393.22</td><td>V</td></tr><tr><td>I DC</td><td align="right">   0.49</td><td>A</td></tr><tr><td>U AC</td><td align="right"> 229.44</td><td>V</td></tr><tr><td>I AC</td><td align="right">   0.87</td><td>A</td></tr><tr><td>F AC</td><td align="right">  50.01</td><td>Hz</td></tr><tr><td>P AC</td><td align="right"> 177.47</td><td>W</td></tr></tbody></table></td><td class="invisible" valign="top" align="center"></td></tr></tbody></table>
        
        HomoranH 1 Antwort Letzte Antwort
        0
        • A Aiouh

          @Homoran DAS war die gute Frage, ich hatte in "page source" geschaut...
          Mit "inspect" finde ich die Tabelle und die Werte - hätte ich selbst drauf kommen sollen. DANKE

          <table class="invisible"><tbody><tr class="invisible"><th class="invisible"><h3>Inverter</h3></th><th class="invisible"><h3></h3></th></tr><tr class="invisible"><td class="invisible" valign="top" align="center"><table><tbody><tr><th>Name</th><th>Value</th><th>Unit</th></tr><tr><td>P DC</td><td align="right"> 193.33</td><td>W</td></tr><tr><td>U DC</td><td align="right"> 393.22</td><td>V</td></tr><tr><td>I DC</td><td align="right">   0.49</td><td>A</td></tr><tr><td>U AC</td><td align="right"> 229.44</td><td>V</td></tr><tr><td>I AC</td><td align="right">   0.87</td><td>A</td></tr><tr><td>F AC</td><td align="right">  50.01</td><td>Hz</td></tr><tr><td>P AC</td><td align="right"> 177.47</td><td>W</td></tr></tbody></table></td><td class="invisible" valign="top" align="center"></td></tr></tbody></table>
          
          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #4

          @Aiouh was bekommst du denn wenn du auf der Website mit der rechten Maustaste klickst und Quelltext anzeigen auswählst?

          kein Support per PN! - Fragen im Forum stellen -
          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
          Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          A 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @Aiouh was bekommst du denn wenn du auf der Website mit der rechten Maustaste klickst und Quelltext anzeigen auswählst?

            A Offline
            A Offline
            Aiouh
            schrieb am zuletzt editiert von
            #5

            @Homoran

            Rechte Maustaste "view page source", dann bekomme ich was ich zuerst gepostet hatte.
            Bei "Inspect Page" bekomme ich:

            dc57d889-80ca-444a-b61e-b4a71f55ec47-image.png

            (hab noch nicht rausgefunden wie ich das komplett aufklappen und als Text kopieren kann)

            A HomoranH 2 Antworten Letzte Antwort
            0
            • A Aiouh

              @Homoran

              Rechte Maustaste "view page source", dann bekomme ich was ich zuerst gepostet hatte.
              Bei "Inspect Page" bekomme ich:

              dc57d889-80ca-444a-b61e-b4a71f55ec47-image.png

              (hab noch nicht rausgefunden wie ich das komplett aufklappen und als Text kopieren kann)

              A Offline
              A Offline
              Aiouh
              schrieb am zuletzt editiert von Aiouh
              #6

              Zu früh gefreut, geht nicht :(, der Parser Adapter sieht nur nur das was unter "page source" gezeigt wird. Und da nutzt das parsen ja Nix

              UncleSamU 1 Antwort Letzte Antwort
              0
              • A Aiouh

                @Homoran

                Rechte Maustaste "view page source", dann bekomme ich was ich zuerst gepostet hatte.
                Bei "Inspect Page" bekomme ich:

                dc57d889-80ca-444a-b61e-b4a71f55ec47-image.png

                (hab noch nicht rausgefunden wie ich das komplett aufklappen und als Text kopieren kann)

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von Homoran
                #7

                @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                Bei "Inspect Page" bekomme ich:

                das ist ja auch der Inhalt der über js aufbereiteten Seite.

                @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                Rechte Maustaste "view page source", dann bekomme ich was ich zuerst gepostet hatte.

                das ist der echte Quelltext

                ... dann geht es nicht mit dem parser.

                Du kannst jetzt mal unter events (??) nachsehen, wie diese Werte ausgelesen werden und ggf. diesen Befehl über js absetzen

                oder kannst du das js-script gen.measurements.table.js sehen?

                kein Support per PN! - Fragen im Forum stellen -
                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                A 1 Antwort Letzte Antwort
                0
                • A Aiouh

                  Zu früh gefreut, geht nicht :(, der Parser Adapter sieht nur nur das was unter "page source" gezeigt wird. Und da nutzt das parsen ja Nix

                  UncleSamU Offline
                  UncleSamU Offline
                  UncleSam
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @Aiouh ... oder du schaust mal unter "Netzwerk" welche Requests gemacht werden. Wahrscheinlich wirst du in einer der Antworten die Werte finden. Dumm wäre nur, wenn es über WebSocket geht, dann bringt dir der Parser nichts. Für alle anderen Antworten sollte es gehen.

                  Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                  ♡-lichen Dank an meine Sponsoren

                  HomoranH 1 Antwort Letzte Antwort
                  0
                  • UncleSamU UncleSam

                    @Aiouh ... oder du schaust mal unter "Netzwerk" welche Requests gemacht werden. Wahrscheinlich wirst du in einer der Antworten die Werte finden. Dumm wäre nur, wenn es über WebSocket geht, dann bringt dir der Parser nichts. Für alle anderen Antworten sollte es gehen.

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #9

                    @UncleSam sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                    du schaust mal unter "Netzwerk" welche Requests gemacht werden.

                    Ach ja, so heisst das ;-)

                    kein Support per PN! - Fragen im Forum stellen -
                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • HomoranH Homoran

                      @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                      Bei "Inspect Page" bekomme ich:

                      das ist ja auch der Inhalt der über js aufbereiteten Seite.

                      @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                      Rechte Maustaste "view page source", dann bekomme ich was ich zuerst gepostet hatte.

                      das ist der echte Quelltext

                      ... dann geht es nicht mit dem parser.

                      Du kannst jetzt mal unter events (??) nachsehen, wie diese Werte ausgelesen werden und ggf. diesen Befehl über js absetzen

                      oder kannst du das js-script gen.measurements.table.js sehen?

                      A Offline
                      A Offline
                      Aiouh
                      schrieb am zuletzt editiert von Aiouh
                      #10

                      @Homoran @UncleSam

                      js-script gen.measurements.table.js sieht wie folgt aus

                      document.write("<table class='invisible'><tr class='invisible'><th class='invisible'><h3>Inverter</h3></th><th class='invisible'><h3></h3></th></tr><tr class='invisible'><td class='invisible' valign='top' align='center'><table><tr><th>Name</th><th>Value</th><th>Unit</th></tr><tr><td>P DC</td><td align='right'>  72.20</td><td>W</td></tr><tr><td>U DC</td><td align='right'> 221.75</td><td>V</td></tr><tr><td>I DC</td><td align='right'>   0.33</td><td>A</td></tr><tr><td>U AC</td><td align='right'> 231.10</td><td>V</td></tr><tr><td>I AC</td><td align='right'>   0.31</td><td>A</td></tr><tr><td>F AC</td><td align='right'>  50.01</td><td>Hz</td></tr><tr><td>P AC</td><td align='right'>  56.62</td><td>W</td></tr></table></td><td class='invisible' valign='top' align='center'></table></td></tr></table>");
                      

                      da gibt es auch noch script.chart.min.js

                      var Chart = function(s) {
                          function v(a, c, b) {
                              a = A((a - c.graphMin) / (c.steps * c.stepValue), 1, 0);
                              return b * c.steps * a
                          }
                          function x(a, c, b, e) {
                              function h() {
                                  g += f;
                                  var k = a.animation ? A(d(g), null, 0) : 1;
                                  e.clearRect(0, 0, q, u);
                                  a.scaleOverlay ? (b(k),
                                  c()) : (c(),
                                  b(k));
                                  if (1 >= g)
                                      D(h);
                                  else if ("function" == typeof a.onAnimationComplete)
                                      a.onAnimationComplete()
                              }
                              var f = a.animation ? 1 / A(a.animationSteps, Number.MAX_VALUE, 1) : 1
                                , d = B[a.animationEasing]
                                , g = a.animation ? 0 : 1;
                              "function" !== typeof c && (c = function() {}
                              );
                              D(h)
                          }
                          function C(a, c, b, e, h, f) {
                              var d;
                              a = Math.floor(Math.log(e - h) / Math.LN10);
                              h = Math.floor(h / (1 * Math.pow(10, a))) * Math.pow(10, a);
                              e = Math.ceil(e / (1 * Math.pow(10, a))) * Math.pow(10, a) - h;
                              a = Math.pow(10, a);
                              for (d = Math.round(e / a); d < b || d > c; )
                                  a = d < b ? a / 2 : 2 * a,
                                  d = Math.round(e / a);
                              c = [];
                              z(f, c, d, h, a);
                              return {
                                  steps: d,
                                  stepValue: a,
                                  graphMin: h,
                                  labels: c
                              }
                          }
                          function z(a, c, b, e, h) {
                              if (a)
                                  for (var f = 1; f < b + 1; f++)
                                      c.push(E(a, {
                                          value: (e + h * f).toFixed(0 != h % 1 ? h.toString().split(".")[1].length : 0)
                                      }))
                          }
                          function A(a, c, b) {
                              return !isNaN(parseFloat(c)) && isFinite(c) && a > c ? c : !isNaN(parseFloat(b)) && isFinite(b) && a < b ? b : a
                          }
                          function y(a, c) {
                              var b = {}, e;
                              for (e in a)
                                  b[e] = a[e];
                              for (e in c)
                                  b[e] = c[e];
                              return b
                          }
                          function E(a, c) {
                              var b = !/\W/.test(a) ? F[a] = F[a] || E(document.getElementById(a).innerHTML) : new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('" + a.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'") + "');}return p.join('');");
                              return c ? b(c) : b
                          }
                          var r = this
                            , B = {
                              linear: function(a) {
                                  return a
                              },
                              easeInQuad: function(a) {
                                  return a * a
                              },
                              easeOutQuad: function(a) {
                                  return -1 * a * (a - 2)
                              },
                              easeInOutQuad: function(a) {
                                  return 1 > (a /= 0.5) ? 0.5 * a * a : -0.5 * (--a * (a - 2) - 1)
                              },
                              easeInCubic: function(a) {
                                  return a * a * a
                              },
                              easeOutCubic: function(a) {
                                  return 1 * ((a = a / 1 - 1) * a * a + 1)
                              },
                              easeInOutCubic: function(a) {
                                  return 1 > (a /= 0.5) ? 0.5 * a * a * a : 0.5 * ((a -= 2) * a * a + 2)
                              },
                              easeInQuart: function(a) {
                                  return a * a * a * a
                              },
                              easeOutQuart: function(a) {
                                  return -1 * ((a = a / 1 - 1) * a * a * a - 1)
                              },
                              easeInOutQuart: function(a) {
                                  return 1 > (a /= 0.5) ? 0.5 * a * a * a * a : -0.5 * ((a -= 2) * a * a * a - 2)
                              },
                              easeInQuint: function(a) {
                                  return 1 * (a /= 1) * a * a * a * a
                              },
                              easeOutQuint: function(a) {
                                  return 1 * ((a = a / 1 - 1) * a * a * a * a + 1)
                              },
                              easeInOutQuint: function(a) {
                                  return 1 > (a /= 0.5) ? 0.5 * a * a * a * a * a : 0.5 * ((a -= 2) * a * a * a * a + 2)
                              },
                              easeInSine: function(a) {
                                  return -1 * Math.cos(a / 1 * (Math.PI / 2)) + 1
                              },
                              easeOutSine: function(a) {
                                  return 1 * Math.sin(a / 1 * (Math.PI / 2))
                              },
                              easeInOutSine: function(a) {
                                  return -0.5 * (Math.cos(Math.PI * a / 1) - 1)
                              },
                              easeInExpo: function(a) {
                                  return 0 == a ? 1 : 1 * Math.pow(2, 10 * (a / 1 - 1))
                              },
                              easeOutExpo: function(a) {
                                  return 1 == a ? 1 : 1 * (-Math.pow(2, -10 * a / 1) + 1)
                              },
                              easeInOutExpo: function(a) {
                                  return 0 == a ? 0 : 1 == a ? 1 : 1 > (a /= 0.5) ? 0.5 * Math.pow(2, 10 * (a - 1)) : 0.5 * (-Math.pow(2, -10 * --a) + 2)
                              },
                              easeInCirc: function(a) {
                                  return 1 <= a ? a : -1 * (Math.sqrt(1 - (a /= 1) * a) - 1)
                              },
                              easeOutCirc: function(a) {
                                  return 1 * Math.sqrt(1 - (a = a / 1 - 1) * a)
                              },
                              easeInOutCirc: function(a) {
                                  return 1 > (a /= 0.5) ? -0.5 * (Math.sqrt(1 - a * a) - 1) : 0.5 * (Math.sqrt(1 - (a -= 2) * a) + 1)
                              },
                              easeInElastic: function(a) {
                                  var c = 1.70158
                                    , b = 0
                                    , e = 1;
                                  if (0 == a)
                                      return 0;
                                  if (1 == (a /= 1))
                                      return 1;
                                  b || (b = 0.3);
                                  e < Math.abs(1) ? (e = 1,
                                  c = b / 4) : c = b / (2 * Math.PI) * Math.asin(1 / e);
                                  return -(e * Math.pow(2, 10 * (a -= 1)) * Math.sin((1 * a - c) * 2 * Math.PI / b))
                              },
                              easeOutElastic: function(a) {
                                  var c = 1.70158
                                    , b = 0
                                    , e = 1;
                                  if (0 == a)
                                      return 0;
                                  if (1 == (a /= 1))
                                      return 1;
                                  b || (b = 0.3);
                                  e < Math.abs(1) ? (e = 1,
                                  c = b / 4) : c = b / (2 * Math.PI) * Math.asin(1 / e);
                                  return e * Math.pow(2, -10 * a) * Math.sin((1 * a - c) * 2 * Math.PI / b) + 1
                              },
                              easeInOutElastic: function(a) {
                                  var c = 1.70158
                                    , b = 0
                                    , e = 1;
                                  if (0 == a)
                                      return 0;
                                  if (2 == (a /= 0.5))
                                      return 1;
                                  b || (b = 1 * 0.3 * 1.5);
                                  e < Math.abs(1) ? (e = 1,
                                  c = b / 4) : c = b / (2 * Math.PI) * Math.asin(1 / e);
                                  return 1 > a ? -0.5 * e * Math.pow(2, 10 * (a -= 1)) * Math.sin((1 * a - c) * 2 * Math.PI / b) : 0.5 * e * Math.pow(2, -10 * (a -= 1)) * Math.sin((1 * a - c) * 2 * Math.PI / b) + 1
                              },
                              easeInBack: function(a) {
                                  return 1 * (a /= 1) * a * (2.70158 * a - 1.70158)
                              },
                              easeOutBack: function(a) {
                                  return 1 * ((a = a / 1 - 1) * a * (2.70158 * a + 1.70158) + 1)
                              },
                              easeInOutBack: function(a) {
                                  var c = 1.70158;
                                  return 1 > (a /= 0.5) ? 0.5 * a * a * (((c *= 1.525) + 1) * a - c) : 0.5 * ((a -= 2) * a * (((c *= 1.525) + 1) * a + c) + 2)
                              },
                              easeInBounce: function(a) {
                                  return 1 - B.easeOutBounce(1 - a)
                              },
                              easeOutBounce: function(a) {
                                  return (a /= 1) < 1 / 2.75 ? 1 * 7.5625 * a * a : a < 2 / 2.75 ? 1 * (7.5625 * (a -= 1.5 / 2.75) * a + 0.75) : a < 2.5 / 2.75 ? 1 * (7.5625 * (a -= 2.25 / 2.75) * a + 0.9375) : 1 * (7.5625 * (a -= 2.625 / 2.75) * a + 0.984375)
                              },
                              easeInOutBounce: function(a) {
                                  return 0.5 > a ? 0.5 * B.easeInBounce(2 * a) : 0.5 * B.easeOutBounce(2 * a - 1) + 0.5
                              }
                          }
                            , q = s.canvas.width
                            , u = s.canvas.height;
                          window.devicePixelRatio && (s.canvas.style.width = q + "px",
                          s.canvas.style.height = u + "px",
                          s.canvas.height = u * window.devicePixelRatio,
                          s.canvas.width = q * window.devicePixelRatio,
                          s.scale(window.devicePixelRatio, window.devicePixelRatio));
                          this.PolarArea = function(a, c) {
                              r.PolarArea.defaults = {
                                  scaleOverlay: !0,
                                  scaleOverride: !1,
                                  scaleSteps: null,
                                  scaleStepWidth: null,
                                  scaleStartValue: null,
                                  scaleShowLine: !0,
                                  scaleLineColor: "rgba(0,0,0,.1)",
                                  scaleLineWidth: 1,
                                  scaleShowLabels: !0,
                                  scaleLabel: "<%=value%>",
                                  scaleFontFamily: "'Arial'",
                                  scaleFontSize: 12,
                                  scaleFontStyle: "normal",
                                  scaleFontColor: "#666",
                                  scaleShowLabelBackdrop: !0,
                                  scaleBackdropColor: "rgba(255,255,255,0.75)",
                                  scaleBackdropPaddingY: 2,
                                  scaleBackdropPaddingX: 2,
                                  segmentShowStroke: !0,
                                  segmentStrokeColor: "#fff",
                                  segmentStrokeWidth: 2,
                                  animation: !0,
                                  animationSteps: 100,
                                  animationEasing: "easeOutBounce",
                                  animateRotate: !0,
                                  animateScale: !1,
                                  onAnimationComplete: null
                              };
                              var b = c ? y(r.PolarArea.defaults, c) : r.PolarArea.defaults;
                              return new G(a,b,s)
                          }
                          ;
                          this.Radar = function(a, c) {
                              r.Radar.defaults = {
                                  scaleOverlay: !1,
                                  scaleOverride: !1,
                                  scaleSteps: null,
                                  scaleStepWidth: null,
                                  scaleStartValue: null,
                                  scaleShowLine: !0,
                                  scaleLineColor: "rgba(0,0,0,.1)",
                                  scaleLineWidth: 1,
                                  scaleShowLabels: !1,
                                  scaleLabel: "<%=value%>",
                                  scaleFontFamily: "'Arial'",
                                  scaleFontSize: 12,
                                  scaleFontStyle: "normal",
                                  scaleFontColor: "#666",
                                  scaleShowLabelBackdrop: !0,
                                  scaleBackdropColor: "rgba(255,255,255,0.75)",
                                  scaleBackdropPaddingY: 2,
                                  scaleBackdropPaddingX: 2,
                                  angleShowLineOut: !0,
                                  angleLineColor: "rgba(0,0,0,.1)",
                                  angleLineWidth: 1,
                                  pointLabelFontFamily: "'Arial'",
                                  pointLabelFontStyle: "normal",
                                  pointLabelFontSize: 12,
                                  pointLabelFontColor: "#666",
                                  pointDot: !0,
                                  pointDotRadius: 3,
                                  pointDotStrokeWidth: 1,
                                  datasetStroke: !0,
                                  datasetStrokeWidth: 2,
                                  datasetFill: !0,
                                  animation: !0,
                                  animationSteps: 60,
                                  animationEasing: "easeOutQuart",
                                  onAnimationComplete: null
                              };
                              var b = c ? y(r.Radar.defaults, c) : r.Radar.defaults;
                              return new H(a,b,s)
                          }
                          ;
                          this.Pie = function(a, c) {
                              r.Pie.defaults = {
                                  segmentShowStroke: !0,
                                  segmentStrokeColor: "#fff",
                                  segmentStrokeWidth: 2,
                                  animation: !0,
                                  animationSteps: 100,
                                  animationEasing: "easeOutBounce",
                                  animateRotate: !0,
                                  animateScale: !1,
                                  onAnimationComplete: null
                              };
                              var b = c ? y(r.Pie.defaults, c) : r.Pie.defaults;
                              return new I(a,b,s)
                          }
                          ;
                          this.Doughnut = function(a, c) {
                              r.Doughnut.defaults = {
                                  segmentShowStroke: !0,
                                  segmentStrokeColor: "#fff",
                                  segmentStrokeWidth: 2,
                                  percentageInnerCutout: 50,
                                  animation: !0,
                                  animationSteps: 100,
                                  animationEasing: "easeOutBounce",
                                  animateRotate: !0,
                                  animateScale: !1,
                                  onAnimationComplete: null
                              };
                              var b = c ? y(r.Doughnut.defaults, c) : r.Doughnut.defaults;
                              return new J(a,b,s)
                          }
                          ;
                          this.Line = function(a, c) {
                              r.Line.defaults = {
                                  scaleOverlay: !1,
                                  scaleOverride: !1,
                                  scaleSteps: null,
                                  scaleStepWidth: null,
                                  scaleStartValue: null,
                                  scaleLineColor: "rgba(0,0,0,.1)",
                                  scaleLineWidth: 1,
                                  scaleShowLabels: !0,
                                  scaleLabel: "<%=value%>",
                                  scaleFontFamily: "'Arial'",
                                  scaleFontSize: 12,
                                  scaleFontStyle: "normal",
                                  scaleFontColor: "#666",
                                  scaleShowGridLines: !0,
                                  scaleGridLineColor: "rgba(0,0,0,.05)",
                                  scaleGridLineWidth: 1,
                                  bezierCurve: !0,
                                  pointDot: !0,
                                  pointDotRadius: 4,
                                  pointDotStrokeWidth: 2,
                                  datasetStroke: !0,
                                  datasetStrokeWidth: 2,
                                  datasetFill: !0,
                                  animation: !0,
                                  animationSteps: 60,
                                  animationEasing: "easeOutQuart",
                                  onAnimationComplete: null
                              };
                              var b = c ? y(r.Line.defaults, c) : r.Line.defaults;
                              return new K(a,b,s)
                          }
                          ;
                          this.Bar = function(a, c) {
                              r.Bar.defaults = {
                                  scaleOverlay: !1,
                                  scaleOverride: !1,
                                  scaleSteps: null,
                                  scaleStepWidth: null,
                                  scaleStartValue: null,
                                  scaleLineColor: "rgba(0,0,0,.1)",
                                  scaleLineWidth: 1,
                                  scaleShowLabels: !0,
                                  scaleLabel: "<%=value%>",
                                  scaleFontFamily: "'Arial'",
                                  scaleFontSize: 12,
                                  scaleFontStyle: "normal",
                                  scaleFontColor: "#666",
                                  scaleShowGridLines: !0,
                                  scaleGridLineColor: "rgba(0,0,0,.05)",
                                  scaleGridLineWidth: 1,
                                  barShowStroke: !0,
                                  barStrokeWidth: 2,
                                  barValueSpacing: 5,
                                  barDatasetSpacing: 1,
                                  animation: !0,
                                  animationSteps: 60,
                                  animationEasing: "easeOutQuart",
                                  onAnimationComplete: null
                              };
                              var b = c ? y(r.Bar.defaults, c) : r.Bar.defaults;
                              return new L(a,b,s)
                          }
                          ;
                          var G = function(a, c, b) {
                              var e, h, f, d, g, k, j, l, m;
                              g = Math.min.apply(Math, [q, u]) / 2;
                              g -= Math.max.apply(Math, [0.5 * c.scaleFontSize, 0.5 * c.scaleLineWidth]);
                              d = 2 * c.scaleFontSize;
                              c.scaleShowLabelBackdrop && (d += 2 * c.scaleBackdropPaddingY,
                              g -= 1.5 * c.scaleBackdropPaddingY);
                              l = g;
                              d = d ? d : 5;
                              e = Number.MIN_VALUE;
                              h = Number.MAX_VALUE;
                              for (f = 0; f < a.length; f++)
                                  a[f].value > e && (e = a[f].value),
                                  a[f].value < h && (h = a[f].value);
                              f = Math.floor(l / (0.66 * d));
                              d = Math.floor(0.5 * (l / d));
                              m = c.scaleShowLabels ? c.scaleLabel : null;
                              c.scaleOverride ? (j = {
                                  steps: c.scaleSteps,
                                  stepValue: c.scaleStepWidth,
                                  graphMin: c.scaleStartValue,
                                  labels: []
                              },
                              z(m, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(l, f, d, e, h, m);
                              k = g / j.steps;
                              x(c, function() {
                                  for (var a = 0; a < j.steps; a++)
                                      if (c.scaleShowLine && (b.beginPath(),
                                      b.arc(q / 2, u / 2, k * (a + 1), 0, 2 * Math.PI, !0),
                                      b.strokeStyle = c.scaleLineColor,
                                      b.lineWidth = c.scaleLineWidth,
                                      b.stroke()),
                                      c.scaleShowLabels) {
                                          b.textAlign = "center";
                                          b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                          var e = j.labels[a];
                                          if (c.scaleShowLabelBackdrop) {
                                              var d = b.measureText(e).width;
                                              b.fillStyle = c.scaleBackdropColor;
                                              b.beginPath();
                                              b.rect(Math.round(q / 2 - d / 2 - c.scaleBackdropPaddingX), Math.round(u / 2 - k * (a + 1) - 0.5 * c.scaleFontSize - c.scaleBackdropPaddingY), Math.round(d + 2 * c.scaleBackdropPaddingX), Math.round(c.scaleFontSize + 2 * c.scaleBackdropPaddingY));
                                              b.fill()
                                          }
                                          b.textBaseline = "middle";
                                          b.fillStyle = c.scaleFontColor;
                                          b.fillText(e, q / 2, u / 2 - k * (a + 1))
                                      }
                              }, function(e) {
                                  var d = -Math.PI / 2
                                    , g = 2 * Math.PI / a.length
                                    , f = 1
                                    , h = 1;
                                  c.animation && (c.animateScale && (f = e),
                                  c.animateRotate && (h = e));
                                  for (e = 0; e < a.length; e++)
                                      b.beginPath(),
                                      b.arc(q / 2, u / 2, f * v(a[e].value, j, k), d, d + h * g, !1),
                                      b.lineTo(q / 2, u / 2),
                                      b.closePath(),
                                      b.fillStyle = a[e].color,
                                      b.fill(),
                                      c.segmentShowStroke && (b.strokeStyle = c.segmentStrokeColor,
                                      b.lineWidth = c.segmentStrokeWidth,
                                      b.stroke()),
                                      d += h * g
                              }, b)
                          }
                            , H = function(a, c, b) {
                              var e, h, f, d, g, k, j, l, m;
                              a.labels || (a.labels = []);
                              g = Math.min.apply(Math, [q, u]) / 2;
                              d = 2 * c.scaleFontSize;
                              for (e = l = 0; e < a.labels.length; e++)
                                  b.font = c.pointLabelFontStyle + " " + c.pointLabelFontSize + "px " + c.pointLabelFontFamily,
                                  h = b.measureText(a.labels[e]).width,
                                  h > l && (l = h);
                              g -= Math.max.apply(Math, [l, 1.5 * (c.pointLabelFontSize / 2)]);
                              g -= c.pointLabelFontSize;
                              l = g = A(g, null, 0);
                              d = d ? d : 5;
                              e = Number.MIN_VALUE;
                              h = Number.MAX_VALUE;
                              for (f = 0; f < a.datasets.length; f++)
                                  for (m = 0; m < a.datasets[f].data.length; m++)
                                      a.datasets[f].data[m] > e && (e = a.datasets[f].data[m]),
                                      a.datasets[f].data[m] < h && (h = a.datasets[f].data[m]);
                              f = Math.floor(l / (0.66 * d));
                              d = Math.floor(0.5 * (l / d));
                              m = c.scaleShowLabels ? c.scaleLabel : null;
                              c.scaleOverride ? (j = {
                                  steps: c.scaleSteps,
                                  stepValue: c.scaleStepWidth,
                                  graphMin: c.scaleStartValue,
                                  labels: []
                              },
                              z(m, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(l, f, d, e, h, m);
                              k = g / j.steps;
                              x(c, function() {
                                  var e = 2 * Math.PI / a.datasets[0].data.length;
                                  b.save();
                                  b.translate(q / 2, u / 2);
                                  if (c.angleShowLineOut) {
                                      b.strokeStyle = c.angleLineColor;
                                      b.lineWidth = c.angleLineWidth;
                                      for (var d = 0; d < a.datasets[0].data.length; d++)
                                          b.rotate(e),
                                          b.beginPath(),
                                          b.moveTo(0, 0),
                                          b.lineTo(0, -g),
                                          b.stroke()
                                  }
                                  for (d = 0; d < j.steps; d++) {
                                      b.beginPath();
                                      if (c.scaleShowLine) {
                                          b.strokeStyle = c.scaleLineColor;
                                          b.lineWidth = c.scaleLineWidth;
                                          b.moveTo(0, -k * (d + 1));
                                          for (var f = 0; f < a.datasets[0].data.length; f++)
                                              b.rotate(e),
                                              b.lineTo(0, -k * (d + 1));
                                          b.closePath();
                                          b.stroke()
                                      }
                                      c.scaleShowLabels && (b.textAlign = "center",
                                      b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily,
                                      b.textBaseline = "middle",
                                      c.scaleShowLabelBackdrop && (f = b.measureText(j.labels[d]).width,
                                      b.fillStyle = c.scaleBackdropColor,
                                      b.beginPath(),
                                      b.rect(Math.round(-f / 2 - c.scaleBackdropPaddingX), Math.round(-k * (d + 1) - 0.5 * c.scaleFontSize - c.scaleBackdropPaddingY), Math.round(f + 2 * c.scaleBackdropPaddingX), Math.round(c.scaleFontSize + 2 * c.scaleBackdropPaddingY)),
                                      b.fill()),
                                      b.fillStyle = c.scaleFontColor,
                                      b.fillText(j.labels[d], 0, -k * (d + 1)))
                                  }
                                  for (d = 0; d < a.labels.length; d++) {
                                      b.font = c.pointLabelFontStyle + " " + c.pointLabelFontSize + "px " + c.pointLabelFontFamily;
                                      b.fillStyle = c.pointLabelFontColor;
                                      var f = Math.sin(e * d) * (g + c.pointLabelFontSize)
                                        , h = Math.cos(e * d) * (g + c.pointLabelFontSize);
                                      b.textAlign = e * d == Math.PI || 0 == e * d ? "center" : e * d > Math.PI ? "right" : "left";
                                      b.textBaseline = "middle";
                                      b.fillText(a.labels[d], f, -h)
                                  }
                                  b.restore()
                              }, function(d) {
                                  var e = 2 * Math.PI / a.datasets[0].data.length;
                                  b.save();
                                  b.translate(q / 2, u / 2);
                                  for (var g = 0; g < a.datasets.length; g++) {
                                      b.beginPath();
                                      b.moveTo(0, d * -1 * v(a.datasets[g].data[0], j, k));
                                      for (var f = 1; f < a.datasets[g].data.length; f++)
                                          b.rotate(e),
                                          b.lineTo(0, d * -1 * v(a.datasets[g].data[f], j, k));
                                      b.closePath();
                                      b.fillStyle = a.datasets[g].fillColor;
                                      b.strokeStyle = a.datasets[g].strokeColor;
                                      b.lineWidth = c.datasetStrokeWidth;
                                      b.fill();
                                      b.stroke();
                                      if (c.pointDot) {
                                          b.fillStyle = a.datasets[g].pointColor;
                                          b.strokeStyle = a.datasets[g].pointStrokeColor;
                                          b.lineWidth = c.pointDotStrokeWidth;
                                          for (f = 0; f < a.datasets[g].data.length; f++)
                                              b.rotate(e),
                                              b.beginPath(),
                                              b.arc(0, d * -1 * v(a.datasets[g].data[f], j, k), c.pointDotRadius, 2 * Math.PI, !1),
                                              b.fill(),
                                              b.stroke()
                                      }
                                      b.rotate(e)
                                  }
                                  b.restore()
                              }, b)
                          }
                            , I = function(a, c, b) {
                              for (var e = 0, h = Math.min.apply(Math, [u / 2, q / 2]) - 5, f = 0; f < a.length; f++)
                                  e += a[f].value;
                              x(c, null, function(d) {
                                  var g = -Math.PI / 2
                                    , f = 1
                                    , j = 1;
                                  c.animation && (c.animateScale && (f = d),
                                  c.animateRotate && (j = d));
                                  for (d = 0; d < a.length; d++) {
                                      var l = j * a[d].value / e * 2 * Math.PI;
                                      b.beginPath();
                                      b.arc(q / 2, u / 2, f * h, g, g + l);
                                      b.lineTo(q / 2, u / 2);
                                      b.closePath();
                                      b.fillStyle = a[d].color;
                                      b.fill();
                                      c.segmentShowStroke && (b.lineWidth = c.segmentStrokeWidth,
                                      b.strokeStyle = c.segmentStrokeColor,
                                      b.stroke());
                                      g += l
                                  }
                              }, b)
                          }
                            , J = function(a, c, b) {
                              for (var e = 0, h = Math.min.apply(Math, [u / 2, q / 2]) - 5, f = h * (c.percentageInnerCutout / 100), d = 0; d < a.length; d++)
                                  e += a[d].value;
                              x(c, null, function(d) {
                                  var k = -Math.PI / 2
                                    , j = 1
                                    , l = 1;
                                  c.animation && (c.animateScale && (j = d),
                                  c.animateRotate && (l = d));
                                  for (d = 0; d < a.length; d++) {
                                      var m = l * a[d].value / e * 2 * Math.PI;
                                      b.beginPath();
                                      b.arc(q / 2, u / 2, j * h, k, k + m, !1);
                                      b.arc(q / 2, u / 2, j * f, k + m, k, !0);
                                      b.closePath();
                                      b.fillStyle = a[d].color;
                                      b.fill();
                                      c.segmentShowStroke && (b.lineWidth = c.segmentStrokeWidth,
                                      b.strokeStyle = c.segmentStrokeColor,
                                      b.stroke());
                                      k += m
                                  }
                              }, b)
                          }
                            , K = function(a, c, b) {
                              var e, h, f, d, g, k, j, l, m, t, r, n, p, s = 0;
                              g = u;
                              b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                              t = 1;
                              for (d = 0; d < a.labels.length; d++)
                                  e = b.measureText(a.labels[d]).width,
                                  t = e > t ? e : t;
                              q / a.labels.length < t ? (s = 45,
                              q / a.labels.length < Math.cos(s) * t ? (s = 90,
                              g -= t) : g -= Math.sin(s) * t) : g -= c.scaleFontSize;
                              d = c.scaleFontSize;
                              g = g - 5 - d;
                              e = Number.MIN_VALUE;
                              h = Number.MAX_VALUE;
                              for (f = 0; f < a.datasets.length; f++)
                                  for (l = 0; l < a.datasets[f].data.length; l++)
                                      a.datasets[f].data[l] > e && (e = a.datasets[f].data[l]),
                                      a.datasets[f].data[l] < h && (h = a.datasets[f].data[l]);
                              f = Math.floor(g / (0.66 * d));
                              d = Math.floor(0.5 * (g / d));
                              l = c.scaleShowLabels ? c.scaleLabel : "";
                              c.scaleOverride ? (j = {
                                  steps: c.scaleSteps,
                                  stepValue: c.scaleStepWidth,
                                  graphMin: c.scaleStartValue,
                                  labels: []
                              },
                              z(l, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(g, f, d, e, h, l);
                              k = Math.floor(g / j.steps);
                              d = 1;
                              if (c.scaleShowLabels) {
                                  b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                  for (e = 0; e < j.labels.length; e++)
                                      h = b.measureText(j.labels[e]).width,
                                      d = h > d ? h : d;
                                  d += 10
                              }
                              r = q - d - t;
                              m = Math.floor(r / (a.labels.length - 1));
                              n = q - t / 2 - r;
                              p = g + c.scaleFontSize / 2;
                              x(c, function() {
                                  b.lineWidth = c.scaleLineWidth;
                                  b.strokeStyle = c.scaleLineColor;
                                  b.beginPath();
                                  b.moveTo(q - t / 2 + 5, p);
                                  b.lineTo(q - t / 2 - r - 5, p);
                                  b.stroke();
                                  0 < s ? (b.save(),
                                  b.textAlign = "right") : b.textAlign = "center";
                                  b.fillStyle = c.scaleFontColor;
                                  for (var d = 0; d < a.labels.length; d++)
                                      b.save(),
                                      0 < s ? (b.translate(n + d * m, p + c.scaleFontSize),
                                      b.rotate(-(s * (Math.PI / 180))),
                                      b.fillText(a.labels[d], 0, 0),
                                      b.restore()) : b.fillText(a.labels[d], n + d * m, p + c.scaleFontSize + 3),
                                      b.beginPath(),
                                      b.moveTo(n + d * m, p + 3),
                                      c.scaleShowGridLines && 0 < d ? (b.lineWidth = c.scaleGridLineWidth,
                                      b.strokeStyle = c.scaleGridLineColor,
                                      b.lineTo(n + d * m, 5)) : b.lineTo(n + d * m, p + 3),
                                      b.stroke();
                                  b.lineWidth = c.scaleLineWidth;
                                  b.strokeStyle = c.scaleLineColor;
                                  b.beginPath();
                                  b.moveTo(n, p + 5);
                                  b.lineTo(n, 5);
                                  b.stroke();
                                  b.textAlign = "right";
                                  b.textBaseline = "middle";
                                  for (d = 0; d < j.steps; d++)
                                      b.beginPath(),
                                      b.moveTo(n - 3, p - (d + 1) * k),
                                      c.scaleShowGridLines ? (b.lineWidth = c.scaleGridLineWidth,
                                      b.strokeStyle = c.scaleGridLineColor,
                                      b.lineTo(n + r + 5, p - (d + 1) * k)) : b.lineTo(n - 0.5, p - (d + 1) * k),
                                      b.stroke(),
                                      c.scaleShowLabels && b.fillText(j.labels[d], n - 8, p - (d + 1) * k)
                              }, function(d) {
                                  function e(b, c) {
                                      return p - d * v(a.datasets[b].data[c], j, k)
                                  }
                                  for (var f = 0; f < a.datasets.length; f++) {
                                      b.strokeStyle = a.datasets[f].strokeColor;
                                      b.lineWidth = c.datasetStrokeWidth;
                                      b.beginPath();
                                      b.moveTo(n, p - d * v(a.datasets[f].data[0], j, k));
                                      for (var g = 1; g < a.datasets[f].data.length; g++)
                                          c.bezierCurve ? b.bezierCurveTo(n + m * (g - 0.5), e(f, g - 1), n + m * (g - 0.5), e(f, g), n + m * g, e(f, g)) : b.lineTo(n + m * g, e(f, g));
                                      b.stroke();
                                      c.datasetFill ? (b.lineTo(n + m * (a.datasets[f].data.length - 1), p),
                                      b.lineTo(n, p),
                                      b.closePath(),
                                      b.fillStyle = a.datasets[f].fillColor,
                                      b.fill()) : b.closePath();
                                      if (c.pointDot) {
                                          b.fillStyle = a.datasets[f].pointColor;
                                          b.strokeStyle = a.datasets[f].pointStrokeColor;
                                          b.lineWidth = c.pointDotStrokeWidth;
                                          for (g = 0; g < a.datasets[f].data.length; g++)
                                              b.beginPath(),
                                              b.arc(n + m * g, p - d * v(a.datasets[f].data[g], j, k), c.pointDotRadius, 0, 2 * Math.PI, !0),
                                              b.fill(),
                                              b.stroke()
                                      }
                                  }
                              }, b)
                          }
                            , L = function(a, c, b) {
                              var e, h, f, d, g, k, j, l, m, t, r, n, p, s, w = 0;
                              g = u;
                              b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                              t = 1;
                              for (d = 0; d < a.labels.length; d++)
                                  e = b.measureText(a.labels[d]).width,
                                  t = e > t ? e : t;
                              q / a.labels.length < t ? (w = 45,
                              q / a.labels.length < Math.cos(w) * t ? (w = 90,
                              g -= t) : g -= Math.sin(w) * t) : g -= c.scaleFontSize;
                              d = c.scaleFontSize;
                              g = g - 5 - d;
                              e = Number.MIN_VALUE;
                              h = Number.MAX_VALUE;
                              for (f = 0; f < a.datasets.length; f++)
                                  for (l = 0; l < a.datasets[f].data.length; l++)
                                      a.datasets[f].data[l] > e && (e = a.datasets[f].data[l]),
                                      a.datasets[f].data[l] < h && (h = a.datasets[f].data[l]);
                              f = Math.floor(g / (0.66 * d));
                              d = Math.floor(0.5 * (g / d));
                              l = c.scaleShowLabels ? c.scaleLabel : "";
                              c.scaleOverride ? (j = {
                                  steps: c.scaleSteps,
                                  stepValue: c.scaleStepWidth,
                                  graphMin: c.scaleStartValue,
                                  labels: []
                              },
                              z(l, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(g, f, d, e, h, l);
                              k = Math.floor(g / j.steps);
                              d = 1;
                              if (c.scaleShowLabels) {
                                  b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                  for (e = 0; e < j.labels.length; e++)
                                      h = b.measureText(j.labels[e]).width,
                                      d = h > d ? h : d;
                                  d += 10
                              }
                              r = q - d - t;
                              m = Math.floor(r / a.labels.length);
                              s = (m - 2 * c.scaleGridLineWidth - 2 * c.barValueSpacing - (c.barDatasetSpacing * a.datasets.length - 1) - (c.barStrokeWidth / 2 * a.datasets.length - 1)) / a.datasets.length;
                              n = q - t / 2 - r;
                              p = g + c.scaleFontSize / 2;
                              x(c, function() {
                                  b.lineWidth = c.scaleLineWidth;
                                  b.strokeStyle = c.scaleLineColor;
                                  b.beginPath();
                                  b.moveTo(q - t / 2 + 5, p);
                                  b.lineTo(q - t / 2 - r - 5, p);
                                  b.stroke();
                                  0 < w ? (b.save(),
                                  b.textAlign = "right") : b.textAlign = "center";
                                  b.fillStyle = c.scaleFontColor;
                                  for (var d = 0; d < a.labels.length; d++)
                                      b.save(),
                                      0 < w ? (b.translate(n + d * m, p + c.scaleFontSize),
                                      b.rotate(-(w * (Math.PI / 180))),
                                      b.fillText(a.labels[d], 0, 0),
                                      b.restore()) : b.fillText(a.labels[d], n + d * m + m / 2, p + c.scaleFontSize + 3),
                                      b.beginPath(),
                                      b.moveTo(n + (d + 1) * m, p + 3),
                                      b.lineWidth = c.scaleGridLineWidth,
                                      b.strokeStyle = c.scaleGridLineColor,
                                      b.lineTo(n + (d + 1) * m, 5),
                                      b.stroke();
                                  b.lineWidth = c.scaleLineWidth;
                                  b.strokeStyle = c.scaleLineColor;
                                  b.beginPath();
                                  b.moveTo(n, p + 5);
                                  b.lineTo(n, 5);
                                  b.stroke();
                                  b.textAlign = "right";
                                  b.textBaseline = "middle";
                                  for (d = 0; d < j.steps; d++)
                                      b.beginPath(),
                                      b.moveTo(n - 3, p - (d + 1) * k),
                                      c.scaleShowGridLines ? (b.lineWidth = c.scaleGridLineWidth,
                                      b.strokeStyle = c.scaleGridLineColor,
                                      b.lineTo(n + r + 5, p - (d + 1) * k)) : b.lineTo(n - 0.5, p - (d + 1) * k),
                                      b.stroke(),
                                      c.scaleShowLabels && b.fillText(j.labels[d], n - 8, p - (d + 1) * k)
                              }, function(d) {
                                  b.lineWidth = c.barStrokeWidth;
                                  for (var e = 0; e < a.datasets.length; e++) {
                                      b.fillStyle = a.datasets[e].fillColor;
                                      b.strokeStyle = a.datasets[e].strokeColor;
                                      for (var f = 0; f < a.datasets[e].data.length; f++) {
                                          var g = n + c.barValueSpacing + m * f + s * e + c.barDatasetSpacing * e + c.barStrokeWidth * e;
                                          b.beginPath();
                                          b.moveTo(g, p);
                                          b.lineTo(g, p - d * v(a.datasets[e].data[f], j, k) + c.barStrokeWidth / 2);
                                          b.lineTo(g + s, p - d * v(a.datasets[e].data[f], j, k) + c.barStrokeWidth / 2);
                                          b.lineTo(g + s, p);
                                          c.barShowStroke && b.stroke();
                                          b.closePath();
                                          b.fill()
                                      }
                                  }
                              }, b)
                          }
                            , D = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(a) {
                              window.setTimeout(a, 1E3 / 60)
                          }
                            , F = {}
                      };
                      
                      

                      Unter Network siehts so aus
                      c3bdd967-595c-4645-8dc4-bb55cc391b15-image.png

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • A Aiouh

                        @Homoran @UncleSam

                        js-script gen.measurements.table.js sieht wie folgt aus

                        document.write("<table class='invisible'><tr class='invisible'><th class='invisible'><h3>Inverter</h3></th><th class='invisible'><h3></h3></th></tr><tr class='invisible'><td class='invisible' valign='top' align='center'><table><tr><th>Name</th><th>Value</th><th>Unit</th></tr><tr><td>P DC</td><td align='right'>  72.20</td><td>W</td></tr><tr><td>U DC</td><td align='right'> 221.75</td><td>V</td></tr><tr><td>I DC</td><td align='right'>   0.33</td><td>A</td></tr><tr><td>U AC</td><td align='right'> 231.10</td><td>V</td></tr><tr><td>I AC</td><td align='right'>   0.31</td><td>A</td></tr><tr><td>F AC</td><td align='right'>  50.01</td><td>Hz</td></tr><tr><td>P AC</td><td align='right'>  56.62</td><td>W</td></tr></table></td><td class='invisible' valign='top' align='center'></table></td></tr></table>");
                        

                        da gibt es auch noch script.chart.min.js

                        var Chart = function(s) {
                            function v(a, c, b) {
                                a = A((a - c.graphMin) / (c.steps * c.stepValue), 1, 0);
                                return b * c.steps * a
                            }
                            function x(a, c, b, e) {
                                function h() {
                                    g += f;
                                    var k = a.animation ? A(d(g), null, 0) : 1;
                                    e.clearRect(0, 0, q, u);
                                    a.scaleOverlay ? (b(k),
                                    c()) : (c(),
                                    b(k));
                                    if (1 >= g)
                                        D(h);
                                    else if ("function" == typeof a.onAnimationComplete)
                                        a.onAnimationComplete()
                                }
                                var f = a.animation ? 1 / A(a.animationSteps, Number.MAX_VALUE, 1) : 1
                                  , d = B[a.animationEasing]
                                  , g = a.animation ? 0 : 1;
                                "function" !== typeof c && (c = function() {}
                                );
                                D(h)
                            }
                            function C(a, c, b, e, h, f) {
                                var d;
                                a = Math.floor(Math.log(e - h) / Math.LN10);
                                h = Math.floor(h / (1 * Math.pow(10, a))) * Math.pow(10, a);
                                e = Math.ceil(e / (1 * Math.pow(10, a))) * Math.pow(10, a) - h;
                                a = Math.pow(10, a);
                                for (d = Math.round(e / a); d < b || d > c; )
                                    a = d < b ? a / 2 : 2 * a,
                                    d = Math.round(e / a);
                                c = [];
                                z(f, c, d, h, a);
                                return {
                                    steps: d,
                                    stepValue: a,
                                    graphMin: h,
                                    labels: c
                                }
                            }
                            function z(a, c, b, e, h) {
                                if (a)
                                    for (var f = 1; f < b + 1; f++)
                                        c.push(E(a, {
                                            value: (e + h * f).toFixed(0 != h % 1 ? h.toString().split(".")[1].length : 0)
                                        }))
                            }
                            function A(a, c, b) {
                                return !isNaN(parseFloat(c)) && isFinite(c) && a > c ? c : !isNaN(parseFloat(b)) && isFinite(b) && a < b ? b : a
                            }
                            function y(a, c) {
                                var b = {}, e;
                                for (e in a)
                                    b[e] = a[e];
                                for (e in c)
                                    b[e] = c[e];
                                return b
                            }
                            function E(a, c) {
                                var b = !/\W/.test(a) ? F[a] = F[a] || E(document.getElementById(a).innerHTML) : new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('" + a.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'") + "');}return p.join('');");
                                return c ? b(c) : b
                            }
                            var r = this
                              , B = {
                                linear: function(a) {
                                    return a
                                },
                                easeInQuad: function(a) {
                                    return a * a
                                },
                                easeOutQuad: function(a) {
                                    return -1 * a * (a - 2)
                                },
                                easeInOutQuad: function(a) {
                                    return 1 > (a /= 0.5) ? 0.5 * a * a : -0.5 * (--a * (a - 2) - 1)
                                },
                                easeInCubic: function(a) {
                                    return a * a * a
                                },
                                easeOutCubic: function(a) {
                                    return 1 * ((a = a / 1 - 1) * a * a + 1)
                                },
                                easeInOutCubic: function(a) {
                                    return 1 > (a /= 0.5) ? 0.5 * a * a * a : 0.5 * ((a -= 2) * a * a + 2)
                                },
                                easeInQuart: function(a) {
                                    return a * a * a * a
                                },
                                easeOutQuart: function(a) {
                                    return -1 * ((a = a / 1 - 1) * a * a * a - 1)
                                },
                                easeInOutQuart: function(a) {
                                    return 1 > (a /= 0.5) ? 0.5 * a * a * a * a : -0.5 * ((a -= 2) * a * a * a - 2)
                                },
                                easeInQuint: function(a) {
                                    return 1 * (a /= 1) * a * a * a * a
                                },
                                easeOutQuint: function(a) {
                                    return 1 * ((a = a / 1 - 1) * a * a * a * a + 1)
                                },
                                easeInOutQuint: function(a) {
                                    return 1 > (a /= 0.5) ? 0.5 * a * a * a * a * a : 0.5 * ((a -= 2) * a * a * a * a + 2)
                                },
                                easeInSine: function(a) {
                                    return -1 * Math.cos(a / 1 * (Math.PI / 2)) + 1
                                },
                                easeOutSine: function(a) {
                                    return 1 * Math.sin(a / 1 * (Math.PI / 2))
                                },
                                easeInOutSine: function(a) {
                                    return -0.5 * (Math.cos(Math.PI * a / 1) - 1)
                                },
                                easeInExpo: function(a) {
                                    return 0 == a ? 1 : 1 * Math.pow(2, 10 * (a / 1 - 1))
                                },
                                easeOutExpo: function(a) {
                                    return 1 == a ? 1 : 1 * (-Math.pow(2, -10 * a / 1) + 1)
                                },
                                easeInOutExpo: function(a) {
                                    return 0 == a ? 0 : 1 == a ? 1 : 1 > (a /= 0.5) ? 0.5 * Math.pow(2, 10 * (a - 1)) : 0.5 * (-Math.pow(2, -10 * --a) + 2)
                                },
                                easeInCirc: function(a) {
                                    return 1 <= a ? a : -1 * (Math.sqrt(1 - (a /= 1) * a) - 1)
                                },
                                easeOutCirc: function(a) {
                                    return 1 * Math.sqrt(1 - (a = a / 1 - 1) * a)
                                },
                                easeInOutCirc: function(a) {
                                    return 1 > (a /= 0.5) ? -0.5 * (Math.sqrt(1 - a * a) - 1) : 0.5 * (Math.sqrt(1 - (a -= 2) * a) + 1)
                                },
                                easeInElastic: function(a) {
                                    var c = 1.70158
                                      , b = 0
                                      , e = 1;
                                    if (0 == a)
                                        return 0;
                                    if (1 == (a /= 1))
                                        return 1;
                                    b || (b = 0.3);
                                    e < Math.abs(1) ? (e = 1,
                                    c = b / 4) : c = b / (2 * Math.PI) * Math.asin(1 / e);
                                    return -(e * Math.pow(2, 10 * (a -= 1)) * Math.sin((1 * a - c) * 2 * Math.PI / b))
                                },
                                easeOutElastic: function(a) {
                                    var c = 1.70158
                                      , b = 0
                                      , e = 1;
                                    if (0 == a)
                                        return 0;
                                    if (1 == (a /= 1))
                                        return 1;
                                    b || (b = 0.3);
                                    e < Math.abs(1) ? (e = 1,
                                    c = b / 4) : c = b / (2 * Math.PI) * Math.asin(1 / e);
                                    return e * Math.pow(2, -10 * a) * Math.sin((1 * a - c) * 2 * Math.PI / b) + 1
                                },
                                easeInOutElastic: function(a) {
                                    var c = 1.70158
                                      , b = 0
                                      , e = 1;
                                    if (0 == a)
                                        return 0;
                                    if (2 == (a /= 0.5))
                                        return 1;
                                    b || (b = 1 * 0.3 * 1.5);
                                    e < Math.abs(1) ? (e = 1,
                                    c = b / 4) : c = b / (2 * Math.PI) * Math.asin(1 / e);
                                    return 1 > a ? -0.5 * e * Math.pow(2, 10 * (a -= 1)) * Math.sin((1 * a - c) * 2 * Math.PI / b) : 0.5 * e * Math.pow(2, -10 * (a -= 1)) * Math.sin((1 * a - c) * 2 * Math.PI / b) + 1
                                },
                                easeInBack: function(a) {
                                    return 1 * (a /= 1) * a * (2.70158 * a - 1.70158)
                                },
                                easeOutBack: function(a) {
                                    return 1 * ((a = a / 1 - 1) * a * (2.70158 * a + 1.70158) + 1)
                                },
                                easeInOutBack: function(a) {
                                    var c = 1.70158;
                                    return 1 > (a /= 0.5) ? 0.5 * a * a * (((c *= 1.525) + 1) * a - c) : 0.5 * ((a -= 2) * a * (((c *= 1.525) + 1) * a + c) + 2)
                                },
                                easeInBounce: function(a) {
                                    return 1 - B.easeOutBounce(1 - a)
                                },
                                easeOutBounce: function(a) {
                                    return (a /= 1) < 1 / 2.75 ? 1 * 7.5625 * a * a : a < 2 / 2.75 ? 1 * (7.5625 * (a -= 1.5 / 2.75) * a + 0.75) : a < 2.5 / 2.75 ? 1 * (7.5625 * (a -= 2.25 / 2.75) * a + 0.9375) : 1 * (7.5625 * (a -= 2.625 / 2.75) * a + 0.984375)
                                },
                                easeInOutBounce: function(a) {
                                    return 0.5 > a ? 0.5 * B.easeInBounce(2 * a) : 0.5 * B.easeOutBounce(2 * a - 1) + 0.5
                                }
                            }
                              , q = s.canvas.width
                              , u = s.canvas.height;
                            window.devicePixelRatio && (s.canvas.style.width = q + "px",
                            s.canvas.style.height = u + "px",
                            s.canvas.height = u * window.devicePixelRatio,
                            s.canvas.width = q * window.devicePixelRatio,
                            s.scale(window.devicePixelRatio, window.devicePixelRatio));
                            this.PolarArea = function(a, c) {
                                r.PolarArea.defaults = {
                                    scaleOverlay: !0,
                                    scaleOverride: !1,
                                    scaleSteps: null,
                                    scaleStepWidth: null,
                                    scaleStartValue: null,
                                    scaleShowLine: !0,
                                    scaleLineColor: "rgba(0,0,0,.1)",
                                    scaleLineWidth: 1,
                                    scaleShowLabels: !0,
                                    scaleLabel: "<%=value%>",
                                    scaleFontFamily: "'Arial'",
                                    scaleFontSize: 12,
                                    scaleFontStyle: "normal",
                                    scaleFontColor: "#666",
                                    scaleShowLabelBackdrop: !0,
                                    scaleBackdropColor: "rgba(255,255,255,0.75)",
                                    scaleBackdropPaddingY: 2,
                                    scaleBackdropPaddingX: 2,
                                    segmentShowStroke: !0,
                                    segmentStrokeColor: "#fff",
                                    segmentStrokeWidth: 2,
                                    animation: !0,
                                    animationSteps: 100,
                                    animationEasing: "easeOutBounce",
                                    animateRotate: !0,
                                    animateScale: !1,
                                    onAnimationComplete: null
                                };
                                var b = c ? y(r.PolarArea.defaults, c) : r.PolarArea.defaults;
                                return new G(a,b,s)
                            }
                            ;
                            this.Radar = function(a, c) {
                                r.Radar.defaults = {
                                    scaleOverlay: !1,
                                    scaleOverride: !1,
                                    scaleSteps: null,
                                    scaleStepWidth: null,
                                    scaleStartValue: null,
                                    scaleShowLine: !0,
                                    scaleLineColor: "rgba(0,0,0,.1)",
                                    scaleLineWidth: 1,
                                    scaleShowLabels: !1,
                                    scaleLabel: "<%=value%>",
                                    scaleFontFamily: "'Arial'",
                                    scaleFontSize: 12,
                                    scaleFontStyle: "normal",
                                    scaleFontColor: "#666",
                                    scaleShowLabelBackdrop: !0,
                                    scaleBackdropColor: "rgba(255,255,255,0.75)",
                                    scaleBackdropPaddingY: 2,
                                    scaleBackdropPaddingX: 2,
                                    angleShowLineOut: !0,
                                    angleLineColor: "rgba(0,0,0,.1)",
                                    angleLineWidth: 1,
                                    pointLabelFontFamily: "'Arial'",
                                    pointLabelFontStyle: "normal",
                                    pointLabelFontSize: 12,
                                    pointLabelFontColor: "#666",
                                    pointDot: !0,
                                    pointDotRadius: 3,
                                    pointDotStrokeWidth: 1,
                                    datasetStroke: !0,
                                    datasetStrokeWidth: 2,
                                    datasetFill: !0,
                                    animation: !0,
                                    animationSteps: 60,
                                    animationEasing: "easeOutQuart",
                                    onAnimationComplete: null
                                };
                                var b = c ? y(r.Radar.defaults, c) : r.Radar.defaults;
                                return new H(a,b,s)
                            }
                            ;
                            this.Pie = function(a, c) {
                                r.Pie.defaults = {
                                    segmentShowStroke: !0,
                                    segmentStrokeColor: "#fff",
                                    segmentStrokeWidth: 2,
                                    animation: !0,
                                    animationSteps: 100,
                                    animationEasing: "easeOutBounce",
                                    animateRotate: !0,
                                    animateScale: !1,
                                    onAnimationComplete: null
                                };
                                var b = c ? y(r.Pie.defaults, c) : r.Pie.defaults;
                                return new I(a,b,s)
                            }
                            ;
                            this.Doughnut = function(a, c) {
                                r.Doughnut.defaults = {
                                    segmentShowStroke: !0,
                                    segmentStrokeColor: "#fff",
                                    segmentStrokeWidth: 2,
                                    percentageInnerCutout: 50,
                                    animation: !0,
                                    animationSteps: 100,
                                    animationEasing: "easeOutBounce",
                                    animateRotate: !0,
                                    animateScale: !1,
                                    onAnimationComplete: null
                                };
                                var b = c ? y(r.Doughnut.defaults, c) : r.Doughnut.defaults;
                                return new J(a,b,s)
                            }
                            ;
                            this.Line = function(a, c) {
                                r.Line.defaults = {
                                    scaleOverlay: !1,
                                    scaleOverride: !1,
                                    scaleSteps: null,
                                    scaleStepWidth: null,
                                    scaleStartValue: null,
                                    scaleLineColor: "rgba(0,0,0,.1)",
                                    scaleLineWidth: 1,
                                    scaleShowLabels: !0,
                                    scaleLabel: "<%=value%>",
                                    scaleFontFamily: "'Arial'",
                                    scaleFontSize: 12,
                                    scaleFontStyle: "normal",
                                    scaleFontColor: "#666",
                                    scaleShowGridLines: !0,
                                    scaleGridLineColor: "rgba(0,0,0,.05)",
                                    scaleGridLineWidth: 1,
                                    bezierCurve: !0,
                                    pointDot: !0,
                                    pointDotRadius: 4,
                                    pointDotStrokeWidth: 2,
                                    datasetStroke: !0,
                                    datasetStrokeWidth: 2,
                                    datasetFill: !0,
                                    animation: !0,
                                    animationSteps: 60,
                                    animationEasing: "easeOutQuart",
                                    onAnimationComplete: null
                                };
                                var b = c ? y(r.Line.defaults, c) : r.Line.defaults;
                                return new K(a,b,s)
                            }
                            ;
                            this.Bar = function(a, c) {
                                r.Bar.defaults = {
                                    scaleOverlay: !1,
                                    scaleOverride: !1,
                                    scaleSteps: null,
                                    scaleStepWidth: null,
                                    scaleStartValue: null,
                                    scaleLineColor: "rgba(0,0,0,.1)",
                                    scaleLineWidth: 1,
                                    scaleShowLabels: !0,
                                    scaleLabel: "<%=value%>",
                                    scaleFontFamily: "'Arial'",
                                    scaleFontSize: 12,
                                    scaleFontStyle: "normal",
                                    scaleFontColor: "#666",
                                    scaleShowGridLines: !0,
                                    scaleGridLineColor: "rgba(0,0,0,.05)",
                                    scaleGridLineWidth: 1,
                                    barShowStroke: !0,
                                    barStrokeWidth: 2,
                                    barValueSpacing: 5,
                                    barDatasetSpacing: 1,
                                    animation: !0,
                                    animationSteps: 60,
                                    animationEasing: "easeOutQuart",
                                    onAnimationComplete: null
                                };
                                var b = c ? y(r.Bar.defaults, c) : r.Bar.defaults;
                                return new L(a,b,s)
                            }
                            ;
                            var G = function(a, c, b) {
                                var e, h, f, d, g, k, j, l, m;
                                g = Math.min.apply(Math, [q, u]) / 2;
                                g -= Math.max.apply(Math, [0.5 * c.scaleFontSize, 0.5 * c.scaleLineWidth]);
                                d = 2 * c.scaleFontSize;
                                c.scaleShowLabelBackdrop && (d += 2 * c.scaleBackdropPaddingY,
                                g -= 1.5 * c.scaleBackdropPaddingY);
                                l = g;
                                d = d ? d : 5;
                                e = Number.MIN_VALUE;
                                h = Number.MAX_VALUE;
                                for (f = 0; f < a.length; f++)
                                    a[f].value > e && (e = a[f].value),
                                    a[f].value < h && (h = a[f].value);
                                f = Math.floor(l / (0.66 * d));
                                d = Math.floor(0.5 * (l / d));
                                m = c.scaleShowLabels ? c.scaleLabel : null;
                                c.scaleOverride ? (j = {
                                    steps: c.scaleSteps,
                                    stepValue: c.scaleStepWidth,
                                    graphMin: c.scaleStartValue,
                                    labels: []
                                },
                                z(m, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(l, f, d, e, h, m);
                                k = g / j.steps;
                                x(c, function() {
                                    for (var a = 0; a < j.steps; a++)
                                        if (c.scaleShowLine && (b.beginPath(),
                                        b.arc(q / 2, u / 2, k * (a + 1), 0, 2 * Math.PI, !0),
                                        b.strokeStyle = c.scaleLineColor,
                                        b.lineWidth = c.scaleLineWidth,
                                        b.stroke()),
                                        c.scaleShowLabels) {
                                            b.textAlign = "center";
                                            b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                            var e = j.labels[a];
                                            if (c.scaleShowLabelBackdrop) {
                                                var d = b.measureText(e).width;
                                                b.fillStyle = c.scaleBackdropColor;
                                                b.beginPath();
                                                b.rect(Math.round(q / 2 - d / 2 - c.scaleBackdropPaddingX), Math.round(u / 2 - k * (a + 1) - 0.5 * c.scaleFontSize - c.scaleBackdropPaddingY), Math.round(d + 2 * c.scaleBackdropPaddingX), Math.round(c.scaleFontSize + 2 * c.scaleBackdropPaddingY));
                                                b.fill()
                                            }
                                            b.textBaseline = "middle";
                                            b.fillStyle = c.scaleFontColor;
                                            b.fillText(e, q / 2, u / 2 - k * (a + 1))
                                        }
                                }, function(e) {
                                    var d = -Math.PI / 2
                                      , g = 2 * Math.PI / a.length
                                      , f = 1
                                      , h = 1;
                                    c.animation && (c.animateScale && (f = e),
                                    c.animateRotate && (h = e));
                                    for (e = 0; e < a.length; e++)
                                        b.beginPath(),
                                        b.arc(q / 2, u / 2, f * v(a[e].value, j, k), d, d + h * g, !1),
                                        b.lineTo(q / 2, u / 2),
                                        b.closePath(),
                                        b.fillStyle = a[e].color,
                                        b.fill(),
                                        c.segmentShowStroke && (b.strokeStyle = c.segmentStrokeColor,
                                        b.lineWidth = c.segmentStrokeWidth,
                                        b.stroke()),
                                        d += h * g
                                }, b)
                            }
                              , H = function(a, c, b) {
                                var e, h, f, d, g, k, j, l, m;
                                a.labels || (a.labels = []);
                                g = Math.min.apply(Math, [q, u]) / 2;
                                d = 2 * c.scaleFontSize;
                                for (e = l = 0; e < a.labels.length; e++)
                                    b.font = c.pointLabelFontStyle + " " + c.pointLabelFontSize + "px " + c.pointLabelFontFamily,
                                    h = b.measureText(a.labels[e]).width,
                                    h > l && (l = h);
                                g -= Math.max.apply(Math, [l, 1.5 * (c.pointLabelFontSize / 2)]);
                                g -= c.pointLabelFontSize;
                                l = g = A(g, null, 0);
                                d = d ? d : 5;
                                e = Number.MIN_VALUE;
                                h = Number.MAX_VALUE;
                                for (f = 0; f < a.datasets.length; f++)
                                    for (m = 0; m < a.datasets[f].data.length; m++)
                                        a.datasets[f].data[m] > e && (e = a.datasets[f].data[m]),
                                        a.datasets[f].data[m] < h && (h = a.datasets[f].data[m]);
                                f = Math.floor(l / (0.66 * d));
                                d = Math.floor(0.5 * (l / d));
                                m = c.scaleShowLabels ? c.scaleLabel : null;
                                c.scaleOverride ? (j = {
                                    steps: c.scaleSteps,
                                    stepValue: c.scaleStepWidth,
                                    graphMin: c.scaleStartValue,
                                    labels: []
                                },
                                z(m, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(l, f, d, e, h, m);
                                k = g / j.steps;
                                x(c, function() {
                                    var e = 2 * Math.PI / a.datasets[0].data.length;
                                    b.save();
                                    b.translate(q / 2, u / 2);
                                    if (c.angleShowLineOut) {
                                        b.strokeStyle = c.angleLineColor;
                                        b.lineWidth = c.angleLineWidth;
                                        for (var d = 0; d < a.datasets[0].data.length; d++)
                                            b.rotate(e),
                                            b.beginPath(),
                                            b.moveTo(0, 0),
                                            b.lineTo(0, -g),
                                            b.stroke()
                                    }
                                    for (d = 0; d < j.steps; d++) {
                                        b.beginPath();
                                        if (c.scaleShowLine) {
                                            b.strokeStyle = c.scaleLineColor;
                                            b.lineWidth = c.scaleLineWidth;
                                            b.moveTo(0, -k * (d + 1));
                                            for (var f = 0; f < a.datasets[0].data.length; f++)
                                                b.rotate(e),
                                                b.lineTo(0, -k * (d + 1));
                                            b.closePath();
                                            b.stroke()
                                        }
                                        c.scaleShowLabels && (b.textAlign = "center",
                                        b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily,
                                        b.textBaseline = "middle",
                                        c.scaleShowLabelBackdrop && (f = b.measureText(j.labels[d]).width,
                                        b.fillStyle = c.scaleBackdropColor,
                                        b.beginPath(),
                                        b.rect(Math.round(-f / 2 - c.scaleBackdropPaddingX), Math.round(-k * (d + 1) - 0.5 * c.scaleFontSize - c.scaleBackdropPaddingY), Math.round(f + 2 * c.scaleBackdropPaddingX), Math.round(c.scaleFontSize + 2 * c.scaleBackdropPaddingY)),
                                        b.fill()),
                                        b.fillStyle = c.scaleFontColor,
                                        b.fillText(j.labels[d], 0, -k * (d + 1)))
                                    }
                                    for (d = 0; d < a.labels.length; d++) {
                                        b.font = c.pointLabelFontStyle + " " + c.pointLabelFontSize + "px " + c.pointLabelFontFamily;
                                        b.fillStyle = c.pointLabelFontColor;
                                        var f = Math.sin(e * d) * (g + c.pointLabelFontSize)
                                          , h = Math.cos(e * d) * (g + c.pointLabelFontSize);
                                        b.textAlign = e * d == Math.PI || 0 == e * d ? "center" : e * d > Math.PI ? "right" : "left";
                                        b.textBaseline = "middle";
                                        b.fillText(a.labels[d], f, -h)
                                    }
                                    b.restore()
                                }, function(d) {
                                    var e = 2 * Math.PI / a.datasets[0].data.length;
                                    b.save();
                                    b.translate(q / 2, u / 2);
                                    for (var g = 0; g < a.datasets.length; g++) {
                                        b.beginPath();
                                        b.moveTo(0, d * -1 * v(a.datasets[g].data[0], j, k));
                                        for (var f = 1; f < a.datasets[g].data.length; f++)
                                            b.rotate(e),
                                            b.lineTo(0, d * -1 * v(a.datasets[g].data[f], j, k));
                                        b.closePath();
                                        b.fillStyle = a.datasets[g].fillColor;
                                        b.strokeStyle = a.datasets[g].strokeColor;
                                        b.lineWidth = c.datasetStrokeWidth;
                                        b.fill();
                                        b.stroke();
                                        if (c.pointDot) {
                                            b.fillStyle = a.datasets[g].pointColor;
                                            b.strokeStyle = a.datasets[g].pointStrokeColor;
                                            b.lineWidth = c.pointDotStrokeWidth;
                                            for (f = 0; f < a.datasets[g].data.length; f++)
                                                b.rotate(e),
                                                b.beginPath(),
                                                b.arc(0, d * -1 * v(a.datasets[g].data[f], j, k), c.pointDotRadius, 2 * Math.PI, !1),
                                                b.fill(),
                                                b.stroke()
                                        }
                                        b.rotate(e)
                                    }
                                    b.restore()
                                }, b)
                            }
                              , I = function(a, c, b) {
                                for (var e = 0, h = Math.min.apply(Math, [u / 2, q / 2]) - 5, f = 0; f < a.length; f++)
                                    e += a[f].value;
                                x(c, null, function(d) {
                                    var g = -Math.PI / 2
                                      , f = 1
                                      , j = 1;
                                    c.animation && (c.animateScale && (f = d),
                                    c.animateRotate && (j = d));
                                    for (d = 0; d < a.length; d++) {
                                        var l = j * a[d].value / e * 2 * Math.PI;
                                        b.beginPath();
                                        b.arc(q / 2, u / 2, f * h, g, g + l);
                                        b.lineTo(q / 2, u / 2);
                                        b.closePath();
                                        b.fillStyle = a[d].color;
                                        b.fill();
                                        c.segmentShowStroke && (b.lineWidth = c.segmentStrokeWidth,
                                        b.strokeStyle = c.segmentStrokeColor,
                                        b.stroke());
                                        g += l
                                    }
                                }, b)
                            }
                              , J = function(a, c, b) {
                                for (var e = 0, h = Math.min.apply(Math, [u / 2, q / 2]) - 5, f = h * (c.percentageInnerCutout / 100), d = 0; d < a.length; d++)
                                    e += a[d].value;
                                x(c, null, function(d) {
                                    var k = -Math.PI / 2
                                      , j = 1
                                      , l = 1;
                                    c.animation && (c.animateScale && (j = d),
                                    c.animateRotate && (l = d));
                                    for (d = 0; d < a.length; d++) {
                                        var m = l * a[d].value / e * 2 * Math.PI;
                                        b.beginPath();
                                        b.arc(q / 2, u / 2, j * h, k, k + m, !1);
                                        b.arc(q / 2, u / 2, j * f, k + m, k, !0);
                                        b.closePath();
                                        b.fillStyle = a[d].color;
                                        b.fill();
                                        c.segmentShowStroke && (b.lineWidth = c.segmentStrokeWidth,
                                        b.strokeStyle = c.segmentStrokeColor,
                                        b.stroke());
                                        k += m
                                    }
                                }, b)
                            }
                              , K = function(a, c, b) {
                                var e, h, f, d, g, k, j, l, m, t, r, n, p, s = 0;
                                g = u;
                                b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                t = 1;
                                for (d = 0; d < a.labels.length; d++)
                                    e = b.measureText(a.labels[d]).width,
                                    t = e > t ? e : t;
                                q / a.labels.length < t ? (s = 45,
                                q / a.labels.length < Math.cos(s) * t ? (s = 90,
                                g -= t) : g -= Math.sin(s) * t) : g -= c.scaleFontSize;
                                d = c.scaleFontSize;
                                g = g - 5 - d;
                                e = Number.MIN_VALUE;
                                h = Number.MAX_VALUE;
                                for (f = 0; f < a.datasets.length; f++)
                                    for (l = 0; l < a.datasets[f].data.length; l++)
                                        a.datasets[f].data[l] > e && (e = a.datasets[f].data[l]),
                                        a.datasets[f].data[l] < h && (h = a.datasets[f].data[l]);
                                f = Math.floor(g / (0.66 * d));
                                d = Math.floor(0.5 * (g / d));
                                l = c.scaleShowLabels ? c.scaleLabel : "";
                                c.scaleOverride ? (j = {
                                    steps: c.scaleSteps,
                                    stepValue: c.scaleStepWidth,
                                    graphMin: c.scaleStartValue,
                                    labels: []
                                },
                                z(l, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(g, f, d, e, h, l);
                                k = Math.floor(g / j.steps);
                                d = 1;
                                if (c.scaleShowLabels) {
                                    b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                    for (e = 0; e < j.labels.length; e++)
                                        h = b.measureText(j.labels[e]).width,
                                        d = h > d ? h : d;
                                    d += 10
                                }
                                r = q - d - t;
                                m = Math.floor(r / (a.labels.length - 1));
                                n = q - t / 2 - r;
                                p = g + c.scaleFontSize / 2;
                                x(c, function() {
                                    b.lineWidth = c.scaleLineWidth;
                                    b.strokeStyle = c.scaleLineColor;
                                    b.beginPath();
                                    b.moveTo(q - t / 2 + 5, p);
                                    b.lineTo(q - t / 2 - r - 5, p);
                                    b.stroke();
                                    0 < s ? (b.save(),
                                    b.textAlign = "right") : b.textAlign = "center";
                                    b.fillStyle = c.scaleFontColor;
                                    for (var d = 0; d < a.labels.length; d++)
                                        b.save(),
                                        0 < s ? (b.translate(n + d * m, p + c.scaleFontSize),
                                        b.rotate(-(s * (Math.PI / 180))),
                                        b.fillText(a.labels[d], 0, 0),
                                        b.restore()) : b.fillText(a.labels[d], n + d * m, p + c.scaleFontSize + 3),
                                        b.beginPath(),
                                        b.moveTo(n + d * m, p + 3),
                                        c.scaleShowGridLines && 0 < d ? (b.lineWidth = c.scaleGridLineWidth,
                                        b.strokeStyle = c.scaleGridLineColor,
                                        b.lineTo(n + d * m, 5)) : b.lineTo(n + d * m, p + 3),
                                        b.stroke();
                                    b.lineWidth = c.scaleLineWidth;
                                    b.strokeStyle = c.scaleLineColor;
                                    b.beginPath();
                                    b.moveTo(n, p + 5);
                                    b.lineTo(n, 5);
                                    b.stroke();
                                    b.textAlign = "right";
                                    b.textBaseline = "middle";
                                    for (d = 0; d < j.steps; d++)
                                        b.beginPath(),
                                        b.moveTo(n - 3, p - (d + 1) * k),
                                        c.scaleShowGridLines ? (b.lineWidth = c.scaleGridLineWidth,
                                        b.strokeStyle = c.scaleGridLineColor,
                                        b.lineTo(n + r + 5, p - (d + 1) * k)) : b.lineTo(n - 0.5, p - (d + 1) * k),
                                        b.stroke(),
                                        c.scaleShowLabels && b.fillText(j.labels[d], n - 8, p - (d + 1) * k)
                                }, function(d) {
                                    function e(b, c) {
                                        return p - d * v(a.datasets[b].data[c], j, k)
                                    }
                                    for (var f = 0; f < a.datasets.length; f++) {
                                        b.strokeStyle = a.datasets[f].strokeColor;
                                        b.lineWidth = c.datasetStrokeWidth;
                                        b.beginPath();
                                        b.moveTo(n, p - d * v(a.datasets[f].data[0], j, k));
                                        for (var g = 1; g < a.datasets[f].data.length; g++)
                                            c.bezierCurve ? b.bezierCurveTo(n + m * (g - 0.5), e(f, g - 1), n + m * (g - 0.5), e(f, g), n + m * g, e(f, g)) : b.lineTo(n + m * g, e(f, g));
                                        b.stroke();
                                        c.datasetFill ? (b.lineTo(n + m * (a.datasets[f].data.length - 1), p),
                                        b.lineTo(n, p),
                                        b.closePath(),
                                        b.fillStyle = a.datasets[f].fillColor,
                                        b.fill()) : b.closePath();
                                        if (c.pointDot) {
                                            b.fillStyle = a.datasets[f].pointColor;
                                            b.strokeStyle = a.datasets[f].pointStrokeColor;
                                            b.lineWidth = c.pointDotStrokeWidth;
                                            for (g = 0; g < a.datasets[f].data.length; g++)
                                                b.beginPath(),
                                                b.arc(n + m * g, p - d * v(a.datasets[f].data[g], j, k), c.pointDotRadius, 0, 2 * Math.PI, !0),
                                                b.fill(),
                                                b.stroke()
                                        }
                                    }
                                }, b)
                            }
                              , L = function(a, c, b) {
                                var e, h, f, d, g, k, j, l, m, t, r, n, p, s, w = 0;
                                g = u;
                                b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                t = 1;
                                for (d = 0; d < a.labels.length; d++)
                                    e = b.measureText(a.labels[d]).width,
                                    t = e > t ? e : t;
                                q / a.labels.length < t ? (w = 45,
                                q / a.labels.length < Math.cos(w) * t ? (w = 90,
                                g -= t) : g -= Math.sin(w) * t) : g -= c.scaleFontSize;
                                d = c.scaleFontSize;
                                g = g - 5 - d;
                                e = Number.MIN_VALUE;
                                h = Number.MAX_VALUE;
                                for (f = 0; f < a.datasets.length; f++)
                                    for (l = 0; l < a.datasets[f].data.length; l++)
                                        a.datasets[f].data[l] > e && (e = a.datasets[f].data[l]),
                                        a.datasets[f].data[l] < h && (h = a.datasets[f].data[l]);
                                f = Math.floor(g / (0.66 * d));
                                d = Math.floor(0.5 * (g / d));
                                l = c.scaleShowLabels ? c.scaleLabel : "";
                                c.scaleOverride ? (j = {
                                    steps: c.scaleSteps,
                                    stepValue: c.scaleStepWidth,
                                    graphMin: c.scaleStartValue,
                                    labels: []
                                },
                                z(l, j.labels, j.steps, c.scaleStartValue, c.scaleStepWidth)) : j = C(g, f, d, e, h, l);
                                k = Math.floor(g / j.steps);
                                d = 1;
                                if (c.scaleShowLabels) {
                                    b.font = c.scaleFontStyle + " " + c.scaleFontSize + "px " + c.scaleFontFamily;
                                    for (e = 0; e < j.labels.length; e++)
                                        h = b.measureText(j.labels[e]).width,
                                        d = h > d ? h : d;
                                    d += 10
                                }
                                r = q - d - t;
                                m = Math.floor(r / a.labels.length);
                                s = (m - 2 * c.scaleGridLineWidth - 2 * c.barValueSpacing - (c.barDatasetSpacing * a.datasets.length - 1) - (c.barStrokeWidth / 2 * a.datasets.length - 1)) / a.datasets.length;
                                n = q - t / 2 - r;
                                p = g + c.scaleFontSize / 2;
                                x(c, function() {
                                    b.lineWidth = c.scaleLineWidth;
                                    b.strokeStyle = c.scaleLineColor;
                                    b.beginPath();
                                    b.moveTo(q - t / 2 + 5, p);
                                    b.lineTo(q - t / 2 - r - 5, p);
                                    b.stroke();
                                    0 < w ? (b.save(),
                                    b.textAlign = "right") : b.textAlign = "center";
                                    b.fillStyle = c.scaleFontColor;
                                    for (var d = 0; d < a.labels.length; d++)
                                        b.save(),
                                        0 < w ? (b.translate(n + d * m, p + c.scaleFontSize),
                                        b.rotate(-(w * (Math.PI / 180))),
                                        b.fillText(a.labels[d], 0, 0),
                                        b.restore()) : b.fillText(a.labels[d], n + d * m + m / 2, p + c.scaleFontSize + 3),
                                        b.beginPath(),
                                        b.moveTo(n + (d + 1) * m, p + 3),
                                        b.lineWidth = c.scaleGridLineWidth,
                                        b.strokeStyle = c.scaleGridLineColor,
                                        b.lineTo(n + (d + 1) * m, 5),
                                        b.stroke();
                                    b.lineWidth = c.scaleLineWidth;
                                    b.strokeStyle = c.scaleLineColor;
                                    b.beginPath();
                                    b.moveTo(n, p + 5);
                                    b.lineTo(n, 5);
                                    b.stroke();
                                    b.textAlign = "right";
                                    b.textBaseline = "middle";
                                    for (d = 0; d < j.steps; d++)
                                        b.beginPath(),
                                        b.moveTo(n - 3, p - (d + 1) * k),
                                        c.scaleShowGridLines ? (b.lineWidth = c.scaleGridLineWidth,
                                        b.strokeStyle = c.scaleGridLineColor,
                                        b.lineTo(n + r + 5, p - (d + 1) * k)) : b.lineTo(n - 0.5, p - (d + 1) * k),
                                        b.stroke(),
                                        c.scaleShowLabels && b.fillText(j.labels[d], n - 8, p - (d + 1) * k)
                                }, function(d) {
                                    b.lineWidth = c.barStrokeWidth;
                                    for (var e = 0; e < a.datasets.length; e++) {
                                        b.fillStyle = a.datasets[e].fillColor;
                                        b.strokeStyle = a.datasets[e].strokeColor;
                                        for (var f = 0; f < a.datasets[e].data.length; f++) {
                                            var g = n + c.barValueSpacing + m * f + s * e + c.barDatasetSpacing * e + c.barStrokeWidth * e;
                                            b.beginPath();
                                            b.moveTo(g, p);
                                            b.lineTo(g, p - d * v(a.datasets[e].data[f], j, k) + c.barStrokeWidth / 2);
                                            b.lineTo(g + s, p - d * v(a.datasets[e].data[f], j, k) + c.barStrokeWidth / 2);
                                            b.lineTo(g + s, p);
                                            c.barShowStroke && b.stroke();
                                            b.closePath();
                                            b.fill()
                                        }
                                    }
                                }, b)
                            }
                              , D = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(a) {
                                window.setTimeout(a, 1E3 / 60)
                            }
                              , F = {}
                        };
                        
                        

                        Unter Network siehts so aus
                        c3bdd967-595c-4645-8dc4-bb55cc391b15-image.png

                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von Homoran
                        #11

                        @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                        js-script gen.measurements.table.js sieht wie folgt aus

                        wenn sich das von dem ioBroker Server so aufrufen ließe, könnte man wahrscheinlich die Werte auslesen.

                        Aber da ist @UncleSam der viel bessere Ansprechpartner

                        kein Support per PN! - Fragen im Forum stellen -
                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        A 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @Aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                          js-script gen.measurements.table.js sieht wie folgt aus

                          wenn sich das von dem ioBroker Server so aufrufen ließe, könnte man wahrscheinlich die Werte auslesen.

                          Aber da ist @UncleSam der viel bessere Ansprechpartner

                          A Offline
                          A Offline
                          Aiouh
                          schrieb am zuletzt editiert von
                          #12

                          @UncleSam
                          Darf ich Dich dazu kurz nochmal befragen ob ich hier eine Chance habe weiter zu kommen oder ob das eine Sackgasse ist ? Danke Dir

                          UncleSamU 1 Antwort Letzte Antwort
                          0
                          • A Aiouh

                            @UncleSam
                            Darf ich Dich dazu kurz nochmal befragen ob ich hier eine Chance habe weiter zu kommen oder ob das eine Sackgasse ist ? Danke Dir

                            UncleSamU Offline
                            UncleSamU Offline
                            UncleSam
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            @aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                            @UncleSam
                            Darf ich Dich dazu kurz nochmal befragen ob ich hier eine Chance habe weiter zu kommen oder ob das eine Sackgasse ist ? Danke Dir

                            Ja klar.

                            @homoran sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                            Aber da ist @UncleSam der viel bessere Ansprechpartner

                            Vielen Dank für die 🌻🥀🌻...

                            Aber eigentlich hat es @Homoran schon geschrieben: du musst einfach die Datei gen.measurements.table.js parsen. Wenn du auf den Dateinamen klickst, kannst du sehen, wie die gesamte URL lautet (auf der rechten Seite steht zu oberst "General" > "Request URL"). Diese URL kannst du dann im Parser Adapter verwenden um die Werte rauszuparsen.

                            Du hast ja jeweils drei Werte auf einer Zeile: <tr><td>U DC</td><td align='right'> 221.75</td><td>V</td></tr>
                            Nach dem ersten musst du suchen, den zweiten verwenden und den dritten kannst du eigentlich ignorieren (da der eh fix ist).

                            Für obiges Beispiel müsste also das funktionieren: U DC.+?<td.+?>\s*([\d.]+)\s*<
                            Siehe hier: https://regex101.com/r/CAi1gr/1

                            Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                            ♡-lichen Dank an meine Sponsoren

                            A 1 Antwort Letzte Antwort
                            1
                            • UncleSamU UncleSam

                              @aiouh sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                              @UncleSam
                              Darf ich Dich dazu kurz nochmal befragen ob ich hier eine Chance habe weiter zu kommen oder ob das eine Sackgasse ist ? Danke Dir

                              Ja klar.

                              @homoran sagte in Parser Adapter Refusol Inverter - der richtige Weg?:

                              Aber da ist @UncleSam der viel bessere Ansprechpartner

                              Vielen Dank für die 🌻🥀🌻...

                              Aber eigentlich hat es @Homoran schon geschrieben: du musst einfach die Datei gen.measurements.table.js parsen. Wenn du auf den Dateinamen klickst, kannst du sehen, wie die gesamte URL lautet (auf der rechten Seite steht zu oberst "General" > "Request URL"). Diese URL kannst du dann im Parser Adapter verwenden um die Werte rauszuparsen.

                              Du hast ja jeweils drei Werte auf einer Zeile: <tr><td>U DC</td><td align='right'> 221.75</td><td>V</td></tr>
                              Nach dem ersten musst du suchen, den zweiten verwenden und den dritten kannst du eigentlich ignorieren (da der eh fix ist).

                              Für obiges Beispiel müsste also das funktionieren: U DC.+?<td.+?>\s*([\d.]+)\s*<
                              Siehe hier: https://regex101.com/r/CAi1gr/1

                              A Offline
                              A Offline
                              Aiouh
                              schrieb am zuletzt editiert von
                              #14

                              @unclesam Perfekt, Vielen Dank auch dass Du mir gleich das RegEx mundgerecht erstellt hast. Damit kann ich auch gleich ein paar andere Fragestellungen erledingen 👍

                              1 Antwort Letzte Antwort
                              0

                              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                              Registrieren Anmelden
                              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

                              722

                              Online

                              32.9k

                              Benutzer

                              83.0k

                              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