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. Parser Adapter

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    627

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

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

Parser Adapter

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
49 Beiträge 4 Kommentatoren 4.8k Aufrufe 3 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.
  • HomoranH Homoran

    @stefan-schmidt sagte in Parser Adapter:

    @homoran DC-Spannung 375 V

    nnung[^\d]+([\.\d]+)
    NUM 0 = DC; NUM 1 = AC

    DC-Strom 0.5 A

    rom[^\d]+([\.\d]+)
    NUM 0 = DC; NUM 1 = AC

    DC-Leistung 210.3 W

    hab ich schon

    Netzspannung 234 V

    siehe oben

    Netzstrom 0.7 A

    siehe oben

    Ausgangsleistung 184 W

    hab ich schon

    Energie heute 0.840 kWh

    ute[^\d]+([\.\d]+)

    Temperatur 1 32768 °C
    Temperatur 2 32768 °C
    Temperatur 3 235 °C

    hab ich schon

    Am besten wäre wenn ich für die Werte die REGex bekommen könnte. =)
    Wenn das nicht zuviel arbeit macht?

    Stefan SchmidtS Offline
    Stefan SchmidtS Offline
    Stefan Schmidt
    schrieb am zuletzt editiert von
    #14

    @homoran

    Super danke. Du hast mir echt weitergeholfen.
    Bin da schon ewig bei das zu versuchen.

    Danke nochmal.

    HomoranH 1 Antwort Letzte Antwort
    0
    • Stefan SchmidtS Stefan Schmidt

      @homoran

      Super danke. Du hast mir echt weitergeholfen.
      Bin da schon ewig bei das zu versuchen.

      Danke nochmal.

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

      @stefan-schmidt sagte in Parser Adapter:

      Bin da schon ewig bei das zu versuchen.

      wo hat's geklemmt?
      Ich vermute, du hast nicht den Quelltext, sondern die html-Seite parsen wollen, oder?

      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 -

      Stefan SchmidtS G 2 Antworten Letzte Antwort
      1
      • HomoranH Homoran

        @stefan-schmidt sagte in Parser Adapter:

        Bin da schon ewig bei das zu versuchen.

        wo hat's geklemmt?
        Ich vermute, du hast nicht den Quelltext, sondern die html-Seite parsen wollen, oder?

        Stefan SchmidtS Offline
        Stefan SchmidtS Offline
        Stefan Schmidt
        schrieb am zuletzt editiert von
        #16

        @homoran Ich glaub da liegt der Fehler.🙄

        HomoranH 1 Antwort Letzte Antwort
        0
        • Stefan SchmidtS Stefan Schmidt

          @homoran Ich glaub da liegt der Fehler.🙄

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

          @stefan-schmidt

          Eventuell wäre der Status (tus[^\d]+([\.\d]+)) und die Fehlermeldung (ler[^\d]+([\.\d]+)) noch von Interesse

          Da musst du dir dann aber noch ein Übersetzungsscript basteln:
          Solarstatus.png

          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 -

          Stefan SchmidtS 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @stefan-schmidt

            Eventuell wäre der Status (tus[^\d]+([\.\d]+)) und die Fehlermeldung (ler[^\d]+([\.\d]+)) noch von Interesse

            Da musst du dir dann aber noch ein Übersetzungsscript basteln:
            Solarstatus.png

            Stefan SchmidtS Offline
            Stefan SchmidtS Offline
            Stefan Schmidt
            schrieb am zuletzt editiert von
            #18

            @homoran WOW Das sieht ja schon gut aus.😁
            Ja muss erstmal sehen das ich jetzt alles da rein bekomme.
            Danke

            1 Antwort Letzte Antwort
            0
            • HomoranH Homoran

              @stefan-schmidt sagte in Parser Adapter:

              Bin da schon ewig bei das zu versuchen.

              wo hat's geklemmt?
              Ich vermute, du hast nicht den Quelltext, sondern die html-Seite parsen wollen, oder?

              G Offline
              G Offline
              GOETSCHHOFER
              schrieb am zuletzt editiert von GOETSCHHOFER
              #19

              @homoran said in Parser Adapter:

              @stefan-schmidt sagte in Parser Adapter:

              Bin da schon ewig bei das zu versuchen.

              wo hat's geklemmt?
              Ich vermute, du hast nicht den Quelltext, sondern die html-Seite parsen wollen, oder?

              Hallo homoran,

              darf ich mich zu diesem Thema einklinken, da ich ein ähnliches Problem habe. ?

              Ich möchte aus meinem AMIS-Reader (Infrarotlesekopf für EVU-Smartmeter) die Tageswerte für Bezug auslesen.

              Könnte es sein, dass dies nicht funktioniert, da dies eine dynamische Seite ist, so habe ich dies mal im Forum hier aufgeschnappt, aber als Laie nicht wirklich verstanden ?

              Danke für die Hilfe.


              c2871fb2-c1c0-4cf6-9829-a8947a05bab8-image.png


              22899b33-d24d-40d3-8bdc-a47abf755d39-image.png


              e90b30b6-5c44-41ea-b500-6ad48ee4c0ca-image.png

              <!doctype html>
              <html lang="de">
              <head>
                  <!--<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval';">-->
                  <meta charset="utf-8">
                  <meta name="viewport" content="width=device-width, initial-scale=1.0">
                  <title>ESP-Device</title>
                  <link rel="stylesheet" href="custom.css">
                  <link rel="icon" type="image/png" href="data:image/png;base64,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">
                  <script src="jquery351.js"></script>
              </head>
              <body>
              <div id="layout">  <!--This is the parent `<div>` that contains the menu and the content area :: side-menu.css-->
                  <!-- Menu toggle -->
                  <!--<a href="#menu" id="menuLink" class="menu-link">-->
                  <a id="menuLink" class="menu-link">
                      <!-- Hamburger icon -->
                      <span></span>
                  </a>
                  <div id="menu">
                      <div class="pure-menu">
                          <!--<a class="pure-menu-heading" href="#">Device</a>-->
                          <span class="pure-menu-heading" name="devicetype">DeviceType</span>
                          <ul class="pure-menu-list">
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-home">Zähler</a></li>
                              <li class="pure-menu-item menu-graf"><a class="pure-menu-link" data="panel-graf">Grafik</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-log">Log</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-status">Status</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-general">Allgemein</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-wifi">WiFi</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-mqtt">MQTT</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-update">Update</a></li>
                              <li class="pure-menu-item"><a class="pure-menu-link" data="panel-hist">Versionsinfo</a></li>
                          </ul>
                      </div>
                  </div>
              
                  <div class="content">  <!--The content `<div>` is where all your content goes.  :: side-menu.css-->
                    <div class="panel" id="panel-graf">
                      <div id="chart-container" class="chart">
                          <br>Daten von Thingspeak werden geladen...<br>
                      </div>
                      <div class="chart-below">
                      <div class="pure-g">
                        <div class="pure-u-1 pure-u-sm-1-5">
                          <button class="pure-button button-load" onclick="loadOneChannel();" style="margin-left: 10px;width:160px;">Daten nachladen:</button>
                        </div>
                        <select class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;" id="Loads">
                          <option selected="selected" value="1">1 Tag</option>
                          <option value="2">2 Tage</option>
                          <option value="3">3 Tage</option>
                          <option value="4">4 Tage</option>
                          <option value="5">5 Tage</option>
                          <option value="6">6 Tage</option>
                          <option value="7">7 Tage</option>
                          <option value="8">8 Tage</option>
                          <option value="9">9 Tage</option>
                          <option value="10">10 Tage</option>
                        </select>
                        <select id="ChannelSelect" class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;"></select>
                        <div class="pure-u-1 pure-u-sm-1-5">
                          <button class="pure-button button-graf" style="margin-left:10px;width:160px;">Chart neu laden</button>
                        </div>
                      </div>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">Grafikdaten autom. aktualisieren</label>
                        <div class="pure-u-1 pure-u-sm-1-5 on_off">
                          <input id="Update" name="Update" type="checkbox" class="">
                        </div>
                        <div class="pure-u-1 pure-u-sm-2-5"></div>
                      </div>
                      </div>
                    </div>
              
                    <div class="panel" id="panel-home">
                      <div class="header">
                          <h1>AMIS-Zähler</h1>
                          <br>
                      </div><br>
                      <div class="amis">
                          <div class="pure-u-11-24">Uhrzeit (Zähler)</div>
                          <div class="pure-u-11-24" name="now"></div>
                          <div class="pure-u-11-24">1.8.0 (Energie A+)</div>
                          <strong><div class="pure-u-11-24" name="1_8_0" post=" kWh" div="1000"></div></strong>
                          <div class="pure-u-11-24">2.8.0 (Energie A-)</div>
                          <strong><div class="pure-u-11-24" name="2_8_0" post=" kWh" div="1000"></div></strong>
                          <div class="pure-u-11-24">3.8.1 (Energie R+)</div>
                          <div class="pure-u-11-24" name="3_8_1" post=" kVarh" div="1000"></div>
                          <div class="pure-u-11-24">4.8.1 (Energie R-)</div>
                          <div class="pure-u-11-24" name="4_8_1" post=" kVarh" div="1000"></div>
                          <div class="pure-u-11-24">1.7.0 (Wirk. P+)</div>
                          <strong><div class="pure-u-11-24" name="1_7_0" post=" kW" div="1000"></div></strong>
                          <div class="pure-u-11-24">2.7.0 (Wirk. P-)</div>
                          <strong><div class="pure-u-11-24" name="2_7_0" post=" kW" div="1000"></div></strong>
                          <div class="pure-u-11-24">Saldo 1.7.0-2.7.0</div>
                          <strong><div class="pure-u-11-24" id="saldo"></div></strong>
                          <div class="pure-u-11-24">3.7.0 (Blind. Q+)</div>
                          <div class="pure-u-11-24" name="3_7_0" post=" kVar" div="1000"></div>
                          <div class="pure-u-11-24">4.7.0 (Blind. Q-)</div>
                          <div class="pure-u-11-24" name="4_7_0" post=" kVar" div="1000"></div>
                          <div class="pure-u-11-24">1.128.0 (Inkasso)</div>
                          <div class="pure-u-11-24" name="1_128_0"></div>
                          <br><hr>
                          <div class="pure-u-11-24">Uptime</div>
                          <div class="pure-u-11-24" name="uptime"></div>
                          <div class="pure-u-11-24">Upload Thingspeak</div>
                          <div class="pure-u-11-24" name="things_up"></div>
                          <br><hr>
                          <h3>Energie [kWh]</h3>
                          <div class="pure-u-1">
                            <table class="pure-table pure-table-striped" width="100%">
                              <thead><tr><th>Tag</th><th align="right">Bezug</th><th align="right">Lfrg.</th><th align="right">Diff.</th></tr></thead>
                              <Tbody>
                                <tr><td>Heute</td>    <td align="right" id="tdy_in"></td><td align="right" id="tdy_out"></td><td align="right" id="tdy_diff"></td></tr>
                                <tr><td id="wd0"></td><td align="right" id="wd_in0"></td><td align="right" id="wd_out0"></td><td align="right" id="wd_diff0"></td></tr>
                                <tr><td id="wd1"></td><td align="right" id="wd_in1"></td><td align="right" id="wd_out1"></td><td align="right" id="wd_diff1"></td></tr>
                                <tr><td id="wd2"></td><td align="right" id="wd_in2"></td><td align="right" id="wd_out2"></td><td align="right" id="wd_diff2"></td></tr>
                                <tr><td id="wd3"></td><td align="right" id="wd_in3"></td><td align="right" id="wd_out3"></td><td align="right" id="wd_diff3"></td></tr>
                                <tr><td id="wd4"></td><td align="right" id="wd_in4"></td><td align="right" id="wd_out4"></td><td align="right" id="wd_diff4"></td></tr>
                                <tr><td id="wd5"></td><td align="right" id="wd_in5"></td><td align="right" id="wd_out5"></td><td align="right" id="wd_diff5"></td></tr>
                                <tr><td id="wd6"></td><td align="right" id="wd_in6"></td><td align="right" id="wd_out6"></td><td align="right" id="wd_diff6"></td></tr>
                              </Tbody>
                            </table>
                          </div>
                      </div>
                    </div>
              
                    <div class="panel pure-form" id="panel-status">
                      <div class="header">
                          <h1>STATUS 🛈</h1>
                          <br>
                      </div>
                      <div class="pure-u-1 pure-u-lg-1-2 state">
                          <div class="pure-u-1-2">Chip ID</div>
                          <div class="pure-u-11-24"><span class="right" name="chipid"></span></div>
                          <div class="pure-u-1-2">Wifi MAC</div>
                          <div class="pure-u-11-24"><span class="right" name="mac"></span></div>
                          <div class="pure-u-1-2">SDK version</div>
                          <div class="pure-u-11-24"><span class="right" name="sdk"></span></div>
                          <div class="pure-u-1-2">Core version</div>
                          <div class="pure-u-11-24"><span class="right" name="core"></span></div>
                          <div class="pure-u-1-2">App version</div>
                          <div class="pure-u-11-24"><span class="right" name="version"></span></div>
                          <div class="pure-u-1-2">App name</div>
                          <div class="pure-u-11-24"><span class="right" name="app_name"></span></div>
                          <div class="pure-u-1-2">Firmware size</div>
                          <div class="pure-u-11-24"><span class="right" name="sketchsize" post=" bytes"></span></div>
                          <div class="pure-u-1-2">Free space</div>
                          <div class="pure-u-11-24"><span class="right" name="freesize" post=" bytes"></span></div>
                          <div class="pure-u-1-2">LITTLE-FS size</div>
                          <div class="pure-u-11-24"><span class="right" name="littlefs_size" post=" bytes"></span></div>
                          <div class="pure-u-1-2">LITTLE-FS used</div>
                          <div class="pure-u-11-24"><span class="right" name="littlefs_used" post=" bytes"></span></div>
                          <div class="pure-u-1-2">Max. free block size</div>
                          <div class="pure-u-11-24"><span class="right" name="max_free_blocksz" post=" bytes"></span></div>
                          <div class="pure-u-1-2">Free heap</div>
                          <div class="pure-u-11-24"><span class="right" name="heap_free" post=" bytes"></span></div>
                          <div class="pure-u-1-2">Heap fragmentation</div>
                          <div class="pure-u-11-24"><span class="right" name="heap_fragment" post=" %"></span></div>
                          <div class="pure-u-1-2">Flash speed</div>
                          <div class="pure-u-11-24"><span class="right" name="flashspeed" post=" Hz"></span></div>
                          <div class="pure-u-1-2">Flash size</div>
                          <div class="pure-u-11-24"><span class="right" name="flashsize" post=" bytes"></span></div>
                          <div class="pure-u-1-2">Flash mode</div>
                          <div class="pure-u-11-24"><span class="right" name="flashmode"></span></div>
                          <div class="pure-u-1-2">CPU Frequ.</div>
                          <div class="pure-u-11-24"><span class="right" name="cpu" post=" MHz"></span></div>
                      </div>
                      <div class="pure-u-1 pure-u-lg-11-24 state">
                          <div class="pure-u-1-2">Network</div>
                          <div class="pure-u-11-24" name="ssid"></div>
                          <div class="pure-u-1-2">Channel</div>
                          <div class="pure-u-11-24" name="channel"></div>
                          <div class="pure-u-1-2">RSSI</div>
                          <div class="pure-u-11-24" name="rssi" post=" dB"></div>
                          <div class="pure-u-1-2">IP</div>
                          <div class="pure-u-11-24" name="deviceip"></div>
                          <div class="pure-u-1-2">DNS</div>
                          <div class="pure-u-11-24" name="dns"></div>
                          <div class="pure-u-1-2">Gateway</div>
                          <div class="pure-u-11-24" name="gateway"></div>
                          <div class="pure-u-1-2">Netmask</div>
                          <div class="pure-u-11-24" name="netmask"></div>
                          <div class="pure-u-1-2">VCC</div>
                          <div class="pure-u-11-24"><span class="right" name="vcc">? </span><span>mV</span></div>
                          <div class="pure-u-1-2 module-mqtt">MQTT Status</div>
                          <div class="pure-u-11-24 module-mqtt" name="mqttStatus"></div>
                          <div class="pure-u-1-2 module-ntp">NTP Status</div>
                          <div class="pure-u-11-24 module-ntp" name="ntpSynced"></div>
                          <div class="pure-u-1-2 module-ntp">Current time</div>
                          <div class="pure-u-11-24 module-ntp" name="now"></div>
                          <div class="pure-u-1-2">Uptime</div>
                          <div class="pure-u-11-24" name="uptime"></div>
                      </div>
                    </div>
              
                    <div class="panel  pure-form" id="panel-general">
                      <div class="header">
                          <h1>Allgemein</h1>
                          <!--<h3>Current configuration</h3>-->
                          <br>
                      </div>
                      <br>
                      <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Name Gerät:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="devicename" placeholder="ESP-Device" />
                      </div>
                          <br>
                      <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Authentifizierung:</label>
                          <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="use_auth" id="use_auth" class="general"/></div>
                      </div>
                      <div class="auth_details">
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Benutzer:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_user" value="Admin"/>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_passwd" type="password" spellcheck="false" />
                          <span class="no-select password-reveal"></span>
                        </div>
                      </div>
                      <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">System-Log:</label>
                          <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="log_sys" id="log_sys" class="general"/></div>
                      </div>
                        <br>
                      <div style="display:block;">
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">Amis-Key:</label>
                              <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="amis_key"/>
                          </div>
                              <br>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">ThingSpeak/Highcharts aktiv:</label>
                              <div class="pure-u-1 pure-u-sm-1-5"><input type="checkbox" name="thingspeak_aktiv" id="thingspeak_aktiv" class="general"/></div>
                          </div>
                          <div class="things_details">
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id"/>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Write API Key:</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="write_api_key"/>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key"/>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Intervall (sec):</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="number" min="30" name="thingspeak_iv"/>
                            </div>
                                <hr>
                                <br>
                                Daten für einen zweiten Zähler abrufen:
                                <br><br>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id2"/>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key2"/>
                            </div>
                          </div>
                      </div>
                      <hr>
                      <div class="pure-g">
                        <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_general"></progress></div>
                        <div style="min-height: 40px"></div>
                      </div>
                      <div class="pure-g">
                        <div class="pure-u-1 pure-u-sm-3-5">
                          <button class="pure-button button-update-general">Übernehmen</button>
                          <button class="pure-button button-reboot">Neustart</button>
                        </div>
                      </div>
                    </div>
              
                    <div class="panel pure-form" id="panel-wifi">
                      <div class="header">
                          <h1>WiFi 📶</h1>
                          <h2>Gerätebezeichnung (Hostname) bei "Allgemein" festlegen</h2>
                      </div>
                      <br>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">SSID:</label>
                        <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ssid" type="text"/>
                      </div>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                        <input class="pure-u-1 pure-u-sm-2-5 wifi" name="wifipassword" type="password"/>
                        <span class="no-select password-reveal"></span>
                      </div>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">DHCP</label>
                        <div class="pure-u-1 pure-u-sm-2-5  on_off"><input type="checkbox" name="dhcp" id="dhcp" class="wifi" /></div>
                      </div>
                      <div class="wifi_details">
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Static IP:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_static" type="text"/>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Netmask:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_netmask" type="text"/>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Gateway:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_gateway" type="text"/>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Nameserver:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_nameserver" type="text"/>
                        </div>
                      </div>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">RF-Power:</label>
                        <input class="pure-u-1 pure-u-sm-1-5 wifi" name="rfpower" type="number" min="0" max="25" placeholder="0..25dBm"/>
                        <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;dBm</span>
                      </div>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">MDNS</label>
                        <div class="pure-u-1 pure-u-sm-2-5 on_off"><input type="checkbox" name="mdns" class="wifi" /></div>
                        <div class="pure-u-1 pure-u-sm-3-5"></div>
                        <div class="pure-u-1 pure-u-sm-1-5"></div>
                        <div class="pure-u-1 pure-u-sm-4-5 hint">
                            Wenn der Browser / das BS MDNS unterstützen, kann dieses Gerät unter "<span name="devicename" class="wifi"></span>.local" erreicht werden.
                            Das Verfahren ist auch als Bonjour bekannt.
                        </div>
                      </div>
                      <div class="pure-g">
                        <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_wifi"></progress></div>
                        <div style="min-height:40px"></div>
                      </div>
                      <div class="pure-g">
                        <div class="pure-u-1 pure-u-sm-3-5">
                          <button class="pure-button button-update-wifi">Übernehmen</button>
                          <button class="pure-button button-reboot">Neustart</button>
                        </div>
                      </div>
                      <hr>
                      <div class="pure-g">
                        <label class="pure-u-1 pure-u-sm-1-5">WiFi-Scan</label>
                        <div class="pure-u-1 pure-u-sm-4-5"><span name="stations"></span></div>
                      </div>
                    </div>
              
                    <div class="panel pure-form" id="panel-mqtt">
                        <div class="header">
                            <h1>MQTT</h1>
                            <h2>Einen MQTT broker im lokalen Netzwerk definieren.</h2>
                        </div>
                        <br>
                        <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">MQTT aktiv:</label>
                            <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_enabled" id="mqtt_enabled" class="mqtt"/></div>
                        </div>
                        <div class="mqtt_details">
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Broker</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_broker" type="text" placeholder="IP or address of your broker" />
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Port</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_port" type="number" value="1883" />
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT User</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_user" type="text" placeholder="Frei lassen wenn kein Benutzer definiert ist" autocomplete="off" />
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Passwort</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_password" type="password" placeholder="Frei lassen wenn kein Passwort definiert ist" autocomplete="new-password" spellcheck="false" />
                              <span class="no-select password-reveal"></span>
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Client ID</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_clientid" type="text"/>
                              <div class="pure-u-0 pure-u-sm-2-5"></div>
                              <div class="pure-u-0 pure-u-sm-1-5"></div>
                              <div class="pure-u-1 pure-u-sm-2-5 hint">
                                  Wenn nicht definiert, wird automatisch eine ID generiert
                              </div>
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT QoS</label>
                              <select class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_qos">
                                  <option value="0">0: At most once</option>
                                  <option value="1">1: At least once</option>
                                  <option value="2">2: Exactly once</option>
                              </select>
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Retain</label>
                              <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_retain" class="mqtt"/></div>
                          </div>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Keep Alive</label>
                              <input class="pure-u-1 pure-u-sm-1-5 mqtt" type="number" name="mqtt_keep" min="0" max="3600" value="30"/>
                              <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;sec</span>
                          </div>
                          <div class="pure-g">
                              <div class="pure-u-1 pure-u-sm-1-5"></div>
                              <div class="pure-u-1 pure-u-sm-2-5 hint">
                                  Die publish-message wird im definierten Intervall gesendet.
                              </div>
                          </div>
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">MQTT publish:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_pub" type="text"/>
                          </div>
                          <!--<div class="pure-g">-->
                            <!--<label class="pure-u-1 pure-u-sm-1-5">MQTT subscribe:</label>-->
                            <!--<input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_sub" type="text"/>-->
                          <!--</div>-->
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">MQTT Last Will:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_will" type="text"/>
                          </div>
                        </div>
                        <hr>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_mqtt"></progress></div>
                          <div style="min-height:40px"></div>
                        </div>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-3-5">
                            <button class="pure-button button-update-mqtt">Übernehmen</button>
                            <button class="pure-button button-reboot">Neustart</button>
                          </div>
                        </div>
                    </div>
              
                    <div class="panel pure-form" id="panel-update">
                        <div class="header">
                            <h1>Software-Update ♺</h1>
                            <!--<h4>Configure your NTP (Network Time Protocol) servers and local configuration to keep your device time up to the second for your location.</h4>-->
                          <br>
                        </div>
                        <br><br><br>
                        <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Datei:</label>
                            <input class="pure-u-1 pure-u-sm-2-5" name="filename" type="text" readonly />
                        </div>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_update"></progress></div>
                          <div style="min-height:40px"></div>
                        </div>
                        <div class="main-buttons pure-g">
                            <button class="pure-button button-upgrade-browse pure-u-1 pure-u-sm-2-24">Auswahl</button>
                            <div class="pure-u-1 pure-u-sm-1-24"></div>
                            <button class="pure-button button-upgrade pure-u-1 pure-u-sm-2-24">Update</button>
                            <div class="pure-u-1 pure-u-sm-1-24"></div>
                            <button class="pure-button button-reboot pure-u-1 pure-u-sm-2-24">Neustart</button>
                        </div>
                        <input name="upgrade" type="file" style="display:none;"/>
                    </div>
              
                    <div class="panel" id="panel-log">
                        <div class="header">
                            <h1>LOG 🗊</h1>
                            <!--<h2> style="color:#555;">-->
                            <h2>
                                Ereignisse anzeigen
                            </h2>
                        </div>
                        <br>
                        <div class="pure-g">
                          <div class="pure-u-2-5 "><span name="page"></span></div>
                        </div>
                        <div class="pure-g">
                            <div class="pure-u-1 log"><span class="terminal" name="list"></span></div>
                            <!--<div class=""><span class="terminal" name="list"></span></div>-->
                        </div>
                        <br>
                        <div class="pure-g">
                            <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-prev">Seite -</button></div>
                            <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-next">Seite +</button></div>
                            <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-clear">Log löschen</button></div>
                        </div>
                        <br>
                        <div class="pure-g">
                            <div class="pure-u-1 pure-u-sm-1-5">Tagesverbrauch</div>
                            <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-hist_clear">Löschen</button></div>
                        </div>
                    </div>
                    <div class="panel" id="panel-hist">
                        <div class="header">
                            <h1>Versionsinfo</h1>
                        </div>
                        <br>
                        <div class="pure-g hist">
                          <div class="pure-u-1">
                            <h3>Version 1.2.0</h3>
                            Neues Filesystem LittleFs eingeführt. Leider gehen dadurch alle Konfigurations- und Logdateien verloren.
                            Kleine Bugs behoben.
                            <br>
                            <h3>Version 1.1.5</h3>
                            Antwort auf rest-Anfrage ist gesperrt, so lange Zähler nicht synchron ist.
                            <br>
                            <h3>Version 1.1.4</h3>
                            Alle Web-Dateien werden vom lokalen Server bereitgestellt, d.h. kein Nachladen aus externen Quellen ist notwendig. Ausnahme: Chart-Grafik, aber dazu ist grundsätzlich eine Internetverbindung notwendig.
                            <br>
                            Logdatei und Log-Anzeige: übersteigt die Größe der Logdatei ca. 1000 Zeilen, dann wird sie gelöscht und neu erzeugt. Der Seitenabruf wurde verbessert wegen Timeout-Problemen.
                            <br>
                            <h3>Version 1.1.3</h3>
                            Leerzeichen in SSID erlaubt.
                            Einige HTML-Bugs bereinigt.
                            <br>
                            <h3>Version 1.1.2</h3>
                            Saldo 1.7.0 - 2.7.0 wird angezeigt.<br>
                            Die Energie-History wurde ergänzt und zeigt jetzt auch die Lieferung und den Saldo per Tag an.
                            <br>
                            <h3>Version 1.1.1</h3>
                            Einführung Versionsinfo.<br>
                            Bugfix MQTT.<br>
                            Die blaue LED leuchtet jetzt dauernd, sobald eine Verbindung zu einem Router (Access-Point) aufgebaut ist.<br>
                            Wenn das Modul selbst als Access-Point auftritt (Jumper gesetzt), blinkt die LED. Die Netzwerkkennung (SSID) ist dann "ESP8266_AP",
                            die Verbindung kann unter 192.168.4.1 aufgebaut werden.<br>
                            <h3>Version 1.1.0</h3>
                            Der Datenabruf von Thingspeak musste geändert werden, weil die bisherige Methhode mit jsonp nicht mehr unterstützt wird.
                            Durch die Änderung des API können sehr restriktive Webbrowser u.U. keine Daten mehr abrufen.<br>
                            Die gesamte Oberfläche wurde neu gestaltet, im Hintergrund laufen jetzt alle Vorgänge asynchron ab. Die Betriebssicherheit
                            sollte dadurch noch besser werden.
                          </div>
                        </div>
                    </div>
                  </div>
              </div>
              
              <!--<script src="chart.js"></script>-->
              <script src="cust.js"></script>
              
              </body>
              </html>
              
              HomoranH 1 Antwort Letzte Antwort
              0
              • G GOETSCHHOFER

                @homoran said in Parser Adapter:

                @stefan-schmidt sagte in Parser Adapter:

                Bin da schon ewig bei das zu versuchen.

                wo hat's geklemmt?
                Ich vermute, du hast nicht den Quelltext, sondern die html-Seite parsen wollen, oder?

                Hallo homoran,

                darf ich mich zu diesem Thema einklinken, da ich ein ähnliches Problem habe. ?

                Ich möchte aus meinem AMIS-Reader (Infrarotlesekopf für EVU-Smartmeter) die Tageswerte für Bezug auslesen.

                Könnte es sein, dass dies nicht funktioniert, da dies eine dynamische Seite ist, so habe ich dies mal im Forum hier aufgeschnappt, aber als Laie nicht wirklich verstanden ?

                Danke für die Hilfe.


                c2871fb2-c1c0-4cf6-9829-a8947a05bab8-image.png


                22899b33-d24d-40d3-8bdc-a47abf755d39-image.png


                e90b30b6-5c44-41ea-b500-6ad48ee4c0ca-image.png

                <!doctype html>
                <html lang="de">
                <head>
                    <!--<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval';">-->
                    <meta charset="utf-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1.0">
                    <title>ESP-Device</title>
                    <link rel="stylesheet" href="custom.css">
                    <link rel="icon" type="image/png" href="data:image/png;base64,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">
                    <script src="jquery351.js"></script>
                </head>
                <body>
                <div id="layout">  <!--This is the parent `<div>` that contains the menu and the content area :: side-menu.css-->
                    <!-- Menu toggle -->
                    <!--<a href="#menu" id="menuLink" class="menu-link">-->
                    <a id="menuLink" class="menu-link">
                        <!-- Hamburger icon -->
                        <span></span>
                    </a>
                    <div id="menu">
                        <div class="pure-menu">
                            <!--<a class="pure-menu-heading" href="#">Device</a>-->
                            <span class="pure-menu-heading" name="devicetype">DeviceType</span>
                            <ul class="pure-menu-list">
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-home">Zähler</a></li>
                                <li class="pure-menu-item menu-graf"><a class="pure-menu-link" data="panel-graf">Grafik</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-log">Log</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-status">Status</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-general">Allgemein</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-wifi">WiFi</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-mqtt">MQTT</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-update">Update</a></li>
                                <li class="pure-menu-item"><a class="pure-menu-link" data="panel-hist">Versionsinfo</a></li>
                            </ul>
                        </div>
                    </div>
                
                    <div class="content">  <!--The content `<div>` is where all your content goes.  :: side-menu.css-->
                      <div class="panel" id="panel-graf">
                        <div id="chart-container" class="chart">
                            <br>Daten von Thingspeak werden geladen...<br>
                        </div>
                        <div class="chart-below">
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-1-5">
                            <button class="pure-button button-load" onclick="loadOneChannel();" style="margin-left: 10px;width:160px;">Daten nachladen:</button>
                          </div>
                          <select class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;" id="Loads">
                            <option selected="selected" value="1">1 Tag</option>
                            <option value="2">2 Tage</option>
                            <option value="3">3 Tage</option>
                            <option value="4">4 Tage</option>
                            <option value="5">5 Tage</option>
                            <option value="6">6 Tage</option>
                            <option value="7">7 Tage</option>
                            <option value="8">8 Tage</option>
                            <option value="9">9 Tage</option>
                            <option value="10">10 Tage</option>
                          </select>
                          <select id="ChannelSelect" class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;"></select>
                          <div class="pure-u-1 pure-u-sm-1-5">
                            <button class="pure-button button-graf" style="margin-left:10px;width:160px;">Chart neu laden</button>
                          </div>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Grafikdaten autom. aktualisieren</label>
                          <div class="pure-u-1 pure-u-sm-1-5 on_off">
                            <input id="Update" name="Update" type="checkbox" class="">
                          </div>
                          <div class="pure-u-1 pure-u-sm-2-5"></div>
                        </div>
                        </div>
                      </div>
                
                      <div class="panel" id="panel-home">
                        <div class="header">
                            <h1>AMIS-Zähler</h1>
                            <br>
                        </div><br>
                        <div class="amis">
                            <div class="pure-u-11-24">Uhrzeit (Zähler)</div>
                            <div class="pure-u-11-24" name="now"></div>
                            <div class="pure-u-11-24">1.8.0 (Energie A+)</div>
                            <strong><div class="pure-u-11-24" name="1_8_0" post=" kWh" div="1000"></div></strong>
                            <div class="pure-u-11-24">2.8.0 (Energie A-)</div>
                            <strong><div class="pure-u-11-24" name="2_8_0" post=" kWh" div="1000"></div></strong>
                            <div class="pure-u-11-24">3.8.1 (Energie R+)</div>
                            <div class="pure-u-11-24" name="3_8_1" post=" kVarh" div="1000"></div>
                            <div class="pure-u-11-24">4.8.1 (Energie R-)</div>
                            <div class="pure-u-11-24" name="4_8_1" post=" kVarh" div="1000"></div>
                            <div class="pure-u-11-24">1.7.0 (Wirk. P+)</div>
                            <strong><div class="pure-u-11-24" name="1_7_0" post=" kW" div="1000"></div></strong>
                            <div class="pure-u-11-24">2.7.0 (Wirk. P-)</div>
                            <strong><div class="pure-u-11-24" name="2_7_0" post=" kW" div="1000"></div></strong>
                            <div class="pure-u-11-24">Saldo 1.7.0-2.7.0</div>
                            <strong><div class="pure-u-11-24" id="saldo"></div></strong>
                            <div class="pure-u-11-24">3.7.0 (Blind. Q+)</div>
                            <div class="pure-u-11-24" name="3_7_0" post=" kVar" div="1000"></div>
                            <div class="pure-u-11-24">4.7.0 (Blind. Q-)</div>
                            <div class="pure-u-11-24" name="4_7_0" post=" kVar" div="1000"></div>
                            <div class="pure-u-11-24">1.128.0 (Inkasso)</div>
                            <div class="pure-u-11-24" name="1_128_0"></div>
                            <br><hr>
                            <div class="pure-u-11-24">Uptime</div>
                            <div class="pure-u-11-24" name="uptime"></div>
                            <div class="pure-u-11-24">Upload Thingspeak</div>
                            <div class="pure-u-11-24" name="things_up"></div>
                            <br><hr>
                            <h3>Energie [kWh]</h3>
                            <div class="pure-u-1">
                              <table class="pure-table pure-table-striped" width="100%">
                                <thead><tr><th>Tag</th><th align="right">Bezug</th><th align="right">Lfrg.</th><th align="right">Diff.</th></tr></thead>
                                <Tbody>
                                  <tr><td>Heute</td>    <td align="right" id="tdy_in"></td><td align="right" id="tdy_out"></td><td align="right" id="tdy_diff"></td></tr>
                                  <tr><td id="wd0"></td><td align="right" id="wd_in0"></td><td align="right" id="wd_out0"></td><td align="right" id="wd_diff0"></td></tr>
                                  <tr><td id="wd1"></td><td align="right" id="wd_in1"></td><td align="right" id="wd_out1"></td><td align="right" id="wd_diff1"></td></tr>
                                  <tr><td id="wd2"></td><td align="right" id="wd_in2"></td><td align="right" id="wd_out2"></td><td align="right" id="wd_diff2"></td></tr>
                                  <tr><td id="wd3"></td><td align="right" id="wd_in3"></td><td align="right" id="wd_out3"></td><td align="right" id="wd_diff3"></td></tr>
                                  <tr><td id="wd4"></td><td align="right" id="wd_in4"></td><td align="right" id="wd_out4"></td><td align="right" id="wd_diff4"></td></tr>
                                  <tr><td id="wd5"></td><td align="right" id="wd_in5"></td><td align="right" id="wd_out5"></td><td align="right" id="wd_diff5"></td></tr>
                                  <tr><td id="wd6"></td><td align="right" id="wd_in6"></td><td align="right" id="wd_out6"></td><td align="right" id="wd_diff6"></td></tr>
                                </Tbody>
                              </table>
                            </div>
                        </div>
                      </div>
                
                      <div class="panel pure-form" id="panel-status">
                        <div class="header">
                            <h1>STATUS 🛈</h1>
                            <br>
                        </div>
                        <div class="pure-u-1 pure-u-lg-1-2 state">
                            <div class="pure-u-1-2">Chip ID</div>
                            <div class="pure-u-11-24"><span class="right" name="chipid"></span></div>
                            <div class="pure-u-1-2">Wifi MAC</div>
                            <div class="pure-u-11-24"><span class="right" name="mac"></span></div>
                            <div class="pure-u-1-2">SDK version</div>
                            <div class="pure-u-11-24"><span class="right" name="sdk"></span></div>
                            <div class="pure-u-1-2">Core version</div>
                            <div class="pure-u-11-24"><span class="right" name="core"></span></div>
                            <div class="pure-u-1-2">App version</div>
                            <div class="pure-u-11-24"><span class="right" name="version"></span></div>
                            <div class="pure-u-1-2">App name</div>
                            <div class="pure-u-11-24"><span class="right" name="app_name"></span></div>
                            <div class="pure-u-1-2">Firmware size</div>
                            <div class="pure-u-11-24"><span class="right" name="sketchsize" post=" bytes"></span></div>
                            <div class="pure-u-1-2">Free space</div>
                            <div class="pure-u-11-24"><span class="right" name="freesize" post=" bytes"></span></div>
                            <div class="pure-u-1-2">LITTLE-FS size</div>
                            <div class="pure-u-11-24"><span class="right" name="littlefs_size" post=" bytes"></span></div>
                            <div class="pure-u-1-2">LITTLE-FS used</div>
                            <div class="pure-u-11-24"><span class="right" name="littlefs_used" post=" bytes"></span></div>
                            <div class="pure-u-1-2">Max. free block size</div>
                            <div class="pure-u-11-24"><span class="right" name="max_free_blocksz" post=" bytes"></span></div>
                            <div class="pure-u-1-2">Free heap</div>
                            <div class="pure-u-11-24"><span class="right" name="heap_free" post=" bytes"></span></div>
                            <div class="pure-u-1-2">Heap fragmentation</div>
                            <div class="pure-u-11-24"><span class="right" name="heap_fragment" post=" %"></span></div>
                            <div class="pure-u-1-2">Flash speed</div>
                            <div class="pure-u-11-24"><span class="right" name="flashspeed" post=" Hz"></span></div>
                            <div class="pure-u-1-2">Flash size</div>
                            <div class="pure-u-11-24"><span class="right" name="flashsize" post=" bytes"></span></div>
                            <div class="pure-u-1-2">Flash mode</div>
                            <div class="pure-u-11-24"><span class="right" name="flashmode"></span></div>
                            <div class="pure-u-1-2">CPU Frequ.</div>
                            <div class="pure-u-11-24"><span class="right" name="cpu" post=" MHz"></span></div>
                        </div>
                        <div class="pure-u-1 pure-u-lg-11-24 state">
                            <div class="pure-u-1-2">Network</div>
                            <div class="pure-u-11-24" name="ssid"></div>
                            <div class="pure-u-1-2">Channel</div>
                            <div class="pure-u-11-24" name="channel"></div>
                            <div class="pure-u-1-2">RSSI</div>
                            <div class="pure-u-11-24" name="rssi" post=" dB"></div>
                            <div class="pure-u-1-2">IP</div>
                            <div class="pure-u-11-24" name="deviceip"></div>
                            <div class="pure-u-1-2">DNS</div>
                            <div class="pure-u-11-24" name="dns"></div>
                            <div class="pure-u-1-2">Gateway</div>
                            <div class="pure-u-11-24" name="gateway"></div>
                            <div class="pure-u-1-2">Netmask</div>
                            <div class="pure-u-11-24" name="netmask"></div>
                            <div class="pure-u-1-2">VCC</div>
                            <div class="pure-u-11-24"><span class="right" name="vcc">? </span><span>mV</span></div>
                            <div class="pure-u-1-2 module-mqtt">MQTT Status</div>
                            <div class="pure-u-11-24 module-mqtt" name="mqttStatus"></div>
                            <div class="pure-u-1-2 module-ntp">NTP Status</div>
                            <div class="pure-u-11-24 module-ntp" name="ntpSynced"></div>
                            <div class="pure-u-1-2 module-ntp">Current time</div>
                            <div class="pure-u-11-24 module-ntp" name="now"></div>
                            <div class="pure-u-1-2">Uptime</div>
                            <div class="pure-u-11-24" name="uptime"></div>
                        </div>
                      </div>
                
                      <div class="panel  pure-form" id="panel-general">
                        <div class="header">
                            <h1>Allgemein</h1>
                            <!--<h3>Current configuration</h3>-->
                            <br>
                        </div>
                        <br>
                        <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Name Gerät:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="devicename" placeholder="ESP-Device" />
                        </div>
                            <br>
                        <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Authentifizierung:</label>
                            <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="use_auth" id="use_auth" class="general"/></div>
                        </div>
                        <div class="auth_details">
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Benutzer:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_user" value="Admin"/>
                          </div>
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_passwd" type="password" spellcheck="false" />
                            <span class="no-select password-reveal"></span>
                          </div>
                        </div>
                        <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">System-Log:</label>
                            <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="log_sys" id="log_sys" class="general"/></div>
                        </div>
                          <br>
                        <div style="display:block;">
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">Amis-Key:</label>
                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="amis_key"/>
                            </div>
                                <br>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">ThingSpeak/Highcharts aktiv:</label>
                                <div class="pure-u-1 pure-u-sm-1-5"><input type="checkbox" name="thingspeak_aktiv" id="thingspeak_aktiv" class="general"/></div>
                            </div>
                            <div class="things_details">
                              <div class="pure-g">
                                  <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                  <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id"/>
                              </div>
                              <div class="pure-g">
                                  <label class="pure-u-1 pure-u-sm-1-5">Write API Key:</label>
                                  <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="write_api_key"/>
                              </div>
                              <div class="pure-g">
                                  <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                  <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key"/>
                              </div>
                              <div class="pure-g">
                                  <label class="pure-u-1 pure-u-sm-1-5">Intervall (sec):</label>
                                  <input class="pure-u-1 pure-u-sm-2-5 general" type="number" min="30" name="thingspeak_iv"/>
                              </div>
                                  <hr>
                                  <br>
                                  Daten für einen zweiten Zähler abrufen:
                                  <br><br>
                              <div class="pure-g">
                                  <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                  <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id2"/>
                              </div>
                              <div class="pure-g">
                                  <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                  <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key2"/>
                              </div>
                            </div>
                        </div>
                        <hr>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_general"></progress></div>
                          <div style="min-height: 40px"></div>
                        </div>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-3-5">
                            <button class="pure-button button-update-general">Übernehmen</button>
                            <button class="pure-button button-reboot">Neustart</button>
                          </div>
                        </div>
                      </div>
                
                      <div class="panel pure-form" id="panel-wifi">
                        <div class="header">
                            <h1>WiFi 📶</h1>
                            <h2>Gerätebezeichnung (Hostname) bei "Allgemein" festlegen</h2>
                        </div>
                        <br>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">SSID:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ssid" type="text"/>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                          <input class="pure-u-1 pure-u-sm-2-5 wifi" name="wifipassword" type="password"/>
                          <span class="no-select password-reveal"></span>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">DHCP</label>
                          <div class="pure-u-1 pure-u-sm-2-5  on_off"><input type="checkbox" name="dhcp" id="dhcp" class="wifi" /></div>
                        </div>
                        <div class="wifi_details">
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Static IP:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_static" type="text"/>
                          </div>
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Netmask:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_netmask" type="text"/>
                          </div>
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Gateway:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_gateway" type="text"/>
                          </div>
                          <div class="pure-g">
                            <label class="pure-u-1 pure-u-sm-1-5">Nameserver:</label>
                            <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_nameserver" type="text"/>
                          </div>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">RF-Power:</label>
                          <input class="pure-u-1 pure-u-sm-1-5 wifi" name="rfpower" type="number" min="0" max="25" placeholder="0..25dBm"/>
                          <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;dBm</span>
                        </div>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">MDNS</label>
                          <div class="pure-u-1 pure-u-sm-2-5 on_off"><input type="checkbox" name="mdns" class="wifi" /></div>
                          <div class="pure-u-1 pure-u-sm-3-5"></div>
                          <div class="pure-u-1 pure-u-sm-1-5"></div>
                          <div class="pure-u-1 pure-u-sm-4-5 hint">
                              Wenn der Browser / das BS MDNS unterstützen, kann dieses Gerät unter "<span name="devicename" class="wifi"></span>.local" erreicht werden.
                              Das Verfahren ist auch als Bonjour bekannt.
                          </div>
                        </div>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_wifi"></progress></div>
                          <div style="min-height:40px"></div>
                        </div>
                        <div class="pure-g">
                          <div class="pure-u-1 pure-u-sm-3-5">
                            <button class="pure-button button-update-wifi">Übernehmen</button>
                            <button class="pure-button button-reboot">Neustart</button>
                          </div>
                        </div>
                        <hr>
                        <div class="pure-g">
                          <label class="pure-u-1 pure-u-sm-1-5">WiFi-Scan</label>
                          <div class="pure-u-1 pure-u-sm-4-5"><span name="stations"></span></div>
                        </div>
                      </div>
                
                      <div class="panel pure-form" id="panel-mqtt">
                          <div class="header">
                              <h1>MQTT</h1>
                              <h2>Einen MQTT broker im lokalen Netzwerk definieren.</h2>
                          </div>
                          <br>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT aktiv:</label>
                              <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_enabled" id="mqtt_enabled" class="mqtt"/></div>
                          </div>
                          <div class="mqtt_details">
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT Broker</label>
                                <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_broker" type="text" placeholder="IP or address of your broker" />
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT Port</label>
                                <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_port" type="number" value="1883" />
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT User</label>
                                <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_user" type="text" placeholder="Frei lassen wenn kein Benutzer definiert ist" autocomplete="off" />
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT Passwort</label>
                                <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_password" type="password" placeholder="Frei lassen wenn kein Passwort definiert ist" autocomplete="new-password" spellcheck="false" />
                                <span class="no-select password-reveal"></span>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT Client ID</label>
                                <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_clientid" type="text"/>
                                <div class="pure-u-0 pure-u-sm-2-5"></div>
                                <div class="pure-u-0 pure-u-sm-1-5"></div>
                                <div class="pure-u-1 pure-u-sm-2-5 hint">
                                    Wenn nicht definiert, wird automatisch eine ID generiert
                                </div>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT QoS</label>
                                <select class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_qos">
                                    <option value="0">0: At most once</option>
                                    <option value="1">1: At least once</option>
                                    <option value="2">2: Exactly once</option>
                                </select>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT Retain</label>
                                <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_retain" class="mqtt"/></div>
                            </div>
                            <div class="pure-g">
                                <label class="pure-u-1 pure-u-sm-1-5">MQTT Keep Alive</label>
                                <input class="pure-u-1 pure-u-sm-1-5 mqtt" type="number" name="mqtt_keep" min="0" max="3600" value="30"/>
                                <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;sec</span>
                            </div>
                            <div class="pure-g">
                                <div class="pure-u-1 pure-u-sm-1-5"></div>
                                <div class="pure-u-1 pure-u-sm-2-5 hint">
                                    Die publish-message wird im definierten Intervall gesendet.
                                </div>
                            </div>
                            <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT publish:</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_pub" type="text"/>
                            </div>
                            <!--<div class="pure-g">-->
                              <!--<label class="pure-u-1 pure-u-sm-1-5">MQTT subscribe:</label>-->
                              <!--<input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_sub" type="text"/>-->
                            <!--</div>-->
                            <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">MQTT Last Will:</label>
                              <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_will" type="text"/>
                            </div>
                          </div>
                          <hr>
                          <div class="pure-g">
                            <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_mqtt"></progress></div>
                            <div style="min-height:40px"></div>
                          </div>
                          <div class="pure-g">
                            <div class="pure-u-1 pure-u-sm-3-5">
                              <button class="pure-button button-update-mqtt">Übernehmen</button>
                              <button class="pure-button button-reboot">Neustart</button>
                            </div>
                          </div>
                      </div>
                
                      <div class="panel pure-form" id="panel-update">
                          <div class="header">
                              <h1>Software-Update ♺</h1>
                              <!--<h4>Configure your NTP (Network Time Protocol) servers and local configuration to keep your device time up to the second for your location.</h4>-->
                            <br>
                          </div>
                          <br><br><br>
                          <div class="pure-g">
                              <label class="pure-u-1 pure-u-sm-1-5">Datei:</label>
                              <input class="pure-u-1 pure-u-sm-2-5" name="filename" type="text" readonly />
                          </div>
                          <div class="pure-g">
                            <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_update"></progress></div>
                            <div style="min-height:40px"></div>
                          </div>
                          <div class="main-buttons pure-g">
                              <button class="pure-button button-upgrade-browse pure-u-1 pure-u-sm-2-24">Auswahl</button>
                              <div class="pure-u-1 pure-u-sm-1-24"></div>
                              <button class="pure-button button-upgrade pure-u-1 pure-u-sm-2-24">Update</button>
                              <div class="pure-u-1 pure-u-sm-1-24"></div>
                              <button class="pure-button button-reboot pure-u-1 pure-u-sm-2-24">Neustart</button>
                          </div>
                          <input name="upgrade" type="file" style="display:none;"/>
                      </div>
                
                      <div class="panel" id="panel-log">
                          <div class="header">
                              <h1>LOG 🗊</h1>
                              <!--<h2> style="color:#555;">-->
                              <h2>
                                  Ereignisse anzeigen
                              </h2>
                          </div>
                          <br>
                          <div class="pure-g">
                            <div class="pure-u-2-5 "><span name="page"></span></div>
                          </div>
                          <div class="pure-g">
                              <div class="pure-u-1 log"><span class="terminal" name="list"></span></div>
                              <!--<div class=""><span class="terminal" name="list"></span></div>-->
                          </div>
                          <br>
                          <div class="pure-g">
                              <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-prev">Seite -</button></div>
                              <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-next">Seite +</button></div>
                              <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-clear">Log löschen</button></div>
                          </div>
                          <br>
                          <div class="pure-g">
                              <div class="pure-u-1 pure-u-sm-1-5">Tagesverbrauch</div>
                              <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-hist_clear">Löschen</button></div>
                          </div>
                      </div>
                      <div class="panel" id="panel-hist">
                          <div class="header">
                              <h1>Versionsinfo</h1>
                          </div>
                          <br>
                          <div class="pure-g hist">
                            <div class="pure-u-1">
                              <h3>Version 1.2.0</h3>
                              Neues Filesystem LittleFs eingeführt. Leider gehen dadurch alle Konfigurations- und Logdateien verloren.
                              Kleine Bugs behoben.
                              <br>
                              <h3>Version 1.1.5</h3>
                              Antwort auf rest-Anfrage ist gesperrt, so lange Zähler nicht synchron ist.
                              <br>
                              <h3>Version 1.1.4</h3>
                              Alle Web-Dateien werden vom lokalen Server bereitgestellt, d.h. kein Nachladen aus externen Quellen ist notwendig. Ausnahme: Chart-Grafik, aber dazu ist grundsätzlich eine Internetverbindung notwendig.
                              <br>
                              Logdatei und Log-Anzeige: übersteigt die Größe der Logdatei ca. 1000 Zeilen, dann wird sie gelöscht und neu erzeugt. Der Seitenabruf wurde verbessert wegen Timeout-Problemen.
                              <br>
                              <h3>Version 1.1.3</h3>
                              Leerzeichen in SSID erlaubt.
                              Einige HTML-Bugs bereinigt.
                              <br>
                              <h3>Version 1.1.2</h3>
                              Saldo 1.7.0 - 2.7.0 wird angezeigt.<br>
                              Die Energie-History wurde ergänzt und zeigt jetzt auch die Lieferung und den Saldo per Tag an.
                              <br>
                              <h3>Version 1.1.1</h3>
                              Einführung Versionsinfo.<br>
                              Bugfix MQTT.<br>
                              Die blaue LED leuchtet jetzt dauernd, sobald eine Verbindung zu einem Router (Access-Point) aufgebaut ist.<br>
                              Wenn das Modul selbst als Access-Point auftritt (Jumper gesetzt), blinkt die LED. Die Netzwerkkennung (SSID) ist dann "ESP8266_AP",
                              die Verbindung kann unter 192.168.4.1 aufgebaut werden.<br>
                              <h3>Version 1.1.0</h3>
                              Der Datenabruf von Thingspeak musste geändert werden, weil die bisherige Methhode mit jsonp nicht mehr unterstützt wird.
                              Durch die Änderung des API können sehr restriktive Webbrowser u.U. keine Daten mehr abrufen.<br>
                              Die gesamte Oberfläche wurde neu gestaltet, im Hintergrund laufen jetzt alle Vorgänge asynchron ab. Die Betriebssicherheit
                              sollte dadurch noch besser werden.
                            </div>
                          </div>
                      </div>
                    </div>
                </div>
                
                <!--<script src="chart.js"></script>-->
                <script src="cust.js"></script>
                
                </body>
                </html>
                
                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #20

                @goetschhofer sagte in Parser Adapter:

                ch möchte aus meinem AMIS-Reader (Infrarotlesekopf für EVU-Smartmeter) die Tageswerte für Bezug auslesen.

                hatten wir das nicht schon irgendwo?

                Wie willst du aus einem Lesekopf etwas auslesen?
                Das ist nur ein Photowiderstand

                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 -

                G 1 Antwort Letzte Antwort
                1
                • HomoranH Homoran

                  @goetschhofer sagte in Parser Adapter:

                  ch möchte aus meinem AMIS-Reader (Infrarotlesekopf für EVU-Smartmeter) die Tageswerte für Bezug auslesen.

                  hatten wir das nicht schon irgendwo?

                  Wie willst du aus einem Lesekopf etwas auslesen?
                  Das ist nur ein Photowiderstand

                  G Offline
                  G Offline
                  GOETSCHHOFER
                  schrieb am zuletzt editiert von GOETSCHHOFER
                  #21

                  @homoran said in Parser Adapter:

                  @goetschhofer sagte in Parser Adapter:

                  ch möchte aus meinem AMIS-Reader (Infrarotlesekopf für EVU-Smartmeter) die Tageswerte für Bezug auslesen.

                  hatten wir das nicht schon irgendwo?

                  Wie willst du aus einem Lesekopf etwas auslesen?
                  Das ist nur ein Photowiderstand

                  Du hast Recht dieses Thema hatten wir schon mal:
                  https://forum.iobroker.net/topic/44660/anfänger-sucht-hilfe-bei-install-proxmox-auf-intelnuc8i3bek/846?_=1629297565903

                  Sorry, habe mich laienhaft ausgedrückt, ich kann mit der IP-Adresse des Infrarot-Lesekopfes-ESP8266 auf diese vorhin gezeigte Seite im AMIS-Zähler zugreifen. Übertrage die obigen Werte auch über MQTT an den iobroker, aber die unten angeführten Tageswerte für Bezug würde ich auch noch gerne in Grafana zeigen.

                  Da hat sich für mich die Frage gestellt, ob man die nicht parsen könnte ?

                  HomoranH 1 Antwort Letzte Antwort
                  0
                  • G GOETSCHHOFER

                    @homoran said in Parser Adapter:

                    @goetschhofer sagte in Parser Adapter:

                    ch möchte aus meinem AMIS-Reader (Infrarotlesekopf für EVU-Smartmeter) die Tageswerte für Bezug auslesen.

                    hatten wir das nicht schon irgendwo?

                    Wie willst du aus einem Lesekopf etwas auslesen?
                    Das ist nur ein Photowiderstand

                    Du hast Recht dieses Thema hatten wir schon mal:
                    https://forum.iobroker.net/topic/44660/anfänger-sucht-hilfe-bei-install-proxmox-auf-intelnuc8i3bek/846?_=1629297565903

                    Sorry, habe mich laienhaft ausgedrückt, ich kann mit der IP-Adresse des Infrarot-Lesekopfes-ESP8266 auf diese vorhin gezeigte Seite im AMIS-Zähler zugreifen. Übertrage die obigen Werte auch über MQTT an den iobroker, aber die unten angeführten Tageswerte für Bezug würde ich auch noch gerne in Grafana zeigen.

                    Da hat sich für mich die Frage gestellt, ob man die nicht parsen könnte ?

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

                    @goetschhofer sagte in Parser Adapter:

                    ob man die nicht parsen könnte ?

                    ich sehe keinen einzigen Wert im Quelltext, sondern nur variable.

                    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 -

                    G 1 Antwort Letzte Antwort
                    0
                    • HomoranH Homoran

                      @goetschhofer sagte in Parser Adapter:

                      ob man die nicht parsen könnte ?

                      ich sehe keinen einzigen Wert im Quelltext, sondern nur variable.

                      G Offline
                      G Offline
                      GOETSCHHOFER
                      schrieb am zuletzt editiert von GOETSCHHOFER
                      #23

                      @homoran

                      Ich mache jetzt ausnahmsweise einen Screenshot.

                      Habe den Bezugswert heute 4,077 markiert und mit rechter Maustaste untersuchen gemacht.
                      Hilft dir dies weiter ?


                      af79acc4-bc7a-4364-a79c-075a4ff0f01e-image.png

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • G GOETSCHHOFER

                        @homoran

                        Ich mache jetzt ausnahmsweise einen Screenshot.

                        Habe den Bezugswert heute 4,077 markiert und mit rechter Maustaste untersuchen gemacht.
                        Hilft dir dies weiter ?


                        af79acc4-bc7a-4364-a79c-075a4ff0f01e-image.png

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

                        @goetschhofer sagte in Parser Adapter:

                        Hilft dir dies weiter ?

                        Nein!
                        Da hat der Browser bereits dynamisch den Wert der Variable eingesetzt.

                        Deswegen braucht es den echten Quellcode und es nutzt der HTML-Code nichts.

                        Möglicherweise kannst du im Reiter Netzwerk sehen, wo die Seite die Werte herholt und dort nach den aktuellen Werten suchen

                        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 -

                        G 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @goetschhofer sagte in Parser Adapter:

                          Hilft dir dies weiter ?

                          Nein!
                          Da hat der Browser bereits dynamisch den Wert der Variable eingesetzt.

                          Deswegen braucht es den echten Quellcode und es nutzt der HTML-Code nichts.

                          Möglicherweise kannst du im Reiter Netzwerk sehen, wo die Seite die Werte herholt und dort nach den aktuellen Werten suchen

                          G Offline
                          G Offline
                          GOETSCHHOFER
                          schrieb am zuletzt editiert von GOETSCHHOFER
                          #25

                          @homoran said in Parser Adapter:

                          @goetschhofer sagte in Parser Adapter:

                          Hilft dir dies weiter ?

                          Nein!
                          Da hat der Browser bereits dynamisch den Wert der Variable eingesetzt.

                          Deswegen braucht es den echten Quellcode und es nutzt der HTML-Code nichts.

                          Möglicherweise kannst du im Reiter Netzwerk sehen, wo die Seite die Werte herholt und dort nach den aktuellen Werten suchen


                          834e5521-bb75-4b5d-82bf-386a3931fb76-image.png

                          Reiter Quellen sieht so aus:


                          63586444-7efa-48ae-8b87-347f73d36bf1-image.png

                          Ab Zeile 131 wird offenbar gerechnet.

                          var websock = null;
                          var wsUri = "";
                          var loginUri="";
                          var UpdateUri="";
                          const wday=["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"];
                          var ws_pingpong;
                          var logpage=1;
                          var logpagenr;
                          var e180,e280;
                          var yestd_in;
                          var yestd_out;
                          
                          var config_general = {
                              "devicetype": "AMIS-Reader",
                              "devicename": "Amis-1",
                              "auth_passwd": "admin",
                              "auth_user": "admin",
                              "use_auth":0,
                              "log_sys":0,
                              "amis_key": "0",
                              "thingspeak_aktiv":0,
                              "channel_id":0,
                              "write_api_key":"",
                              "read_api_key":"",
                              "thingspeak_iv":30,
                              "channel_id2":"",
                              "read_api_key2":"",
                              "command" :"/config_general"
                          };
                          
                          var config_wifi= {
                              "ssid": "",
                              "wifipassword": "",
                              "dhcp": 0,
                              "ip_static": "192.168.",
                              "ip_netmask": "255.255.255.0",
                              "ip_gateway": "192.168.",
                              "ip_nameserver": "192.168.",
                              "rfpower":20,
                              "mdns": 0,
                              "command":"/config_wifi"
                          };
                          var config_mqtt={
                              "mqtt_enabled": 0,
                              "mqtt_broker": "192.168.",
                              "mqtt_port": 1883,
                              "mqtt_user": "",
                              "mqtt_password": "",
                              "mqtt_clientid": "",
                              "mqtt_qos": 0,
                              "mqtt_retain": 0,
                              "mqtt_keep": 0,
                              "mqtt_pub":"amis/out",
                              "mqtt_will":"",
                              "command":"/config_mqtt"
                          };
                          
                          function timeDecoder (tc) {
                            let hi=Number(tc.slice(0,4));
                            let lo=Number("0x"+tc.slice(4,12));
                            let secs = zeroPad((lo & 0x3f)^0x2d,2);
                            lo=lo >> 8;
                            let mins = zeroPad((lo & 0x3f)^0x0c,2);
                            lo =lo >> 8;
                            let hrs = zeroPad((lo & 0x1f),2);
                            lo =lo >> 8;
                            let day = zeroPad((lo & 0x1f),2);
                            let month = zeroPad((hi & 0x0f),2);
                            let year=(lo & 0xe0) >> 5;
                            year |= (hi & 0xf0) >> 1;
                            year+=2000;
                            return (year+'/'+month+'/'+day+'&nbsp;'+hrs+':'+mins+'.'+secs);
                          }
                          
                          function updateElements (obj) {
                            let pre;
                            let post;
                            let div;
                            for (let [key, value] of Object.entries(obj)) {
                              //console.log(key,value);
                              if (key==='command') {
                                switch (value) {
                                  case "/config_general":
                                    config_general=obj;
                                    if (config_general.thingspeak_aktiv) $(".menu-graf").show();
                                    break;
                                  case "/config_wifi":
                                    config_wifi=obj;
                                    break;
                                  case "/config_mqtt":
                                    config_mqtt=obj;
                                    break;
                                }
                              }
                              else if (key==='now') {
                                if (0===Number(value)) value='Warte auf Zählerdaten...';
                                else value=timeDecoder((value));
                              }
                              else if (key==='today_in') {   // 1x nach Start
                                yestd_in=obj.yestd_in;
                                yestd_out=obj.yestd_out;
                                $("#tdy_in"  ).html(((value-yestd_in)/1000).toFixed(3).replace('.',','));
                                $("#tdy_out" ).html(((obj.today_out-yestd_out) / 1000).toFixed(3).replace('.',','));
                                var diff=(value-yestd_in)-(obj.today_out-yestd_out);
                                if (diff >0) $("#tdy_diff").css({'color':'#FF0000'});
                                else         $("#tdy_diff").css({'color':'#0000FF'});
                                $("#tdy_diff").html((diff / 1000).toFixed(3).replace('.',','));
                                for (let i=0;i<7;i++ ) {
                                  let datax = "data" + i;
                                  if (datax in obj) {
                                    datax = obj[datax];
                                    if (i === 0) $("#wd0").html('Gestern');
                                    else $("#wd"+i).html(wday[datax[0]]);
                                    $("#wd_in" +i).html((datax[1] / 1000).toFixed(3).replace('.',','));
                                    $("#wd_out"+i).html((datax[2] / 1000).toFixed(3).replace('.',','));
                                    diff=datax[1]-datax[2];
                                    if (diff >0) $("#wd_diff"+i).css({'color':'#FF0000'});
                                    else         $("#wd_diff"+i).css({'color':'#0000FF'});
                                    $("#wd_diff"+i).html((diff / 1000).toFixed(3).replace('.',','));
                                  }
                                }
                                continue;
                              }
                              else if (key==='1_7_0') {
                                diff=value-obj['2_7_0'];
                                if (diff >0) $("#saldo").css({'color':'#FF0000'});
                                else         $("#saldo").css({'color':'#0000FF'});
                                $("#saldo").html((diff / 1000).toFixed(3).replace('.',',')+' kW');
                              }
                              else if (key==='1_8_0') {
                                if (e180 != value) {          // Energie-Tabelle auch aktualisieren
                                  $("#tdy_in").html(((value-yestd_in) / 1000).toFixed(3).replace('.',','));
                                  e180=value;
                                }
                              }
                              else if (key==='2_8_0') {
                                if (e280 != value) {          // Energie-Tabelle auch aktualisieren
                                  $("#tdy_out").html(((value-yestd_out) / 1000).toFixed(3).replace('.',','));
                                  e280 = value;
                                }
                                $("#tdy_diff").html((((e180-yestd_in)-(e280-yestd_out)) / 1000).toFixed(3).replace('.',','));
                              }
                              else if (key==='things_up') {
                                 if (value) value=timeDecoder(value);
                                 else value="";
                              }
                              else if (key==='page') {             // Logpanel
                                logpagenr=obj["haspages"];
                                value="Seite "+value+" von "+logpagenr;
                              }
                              else if (key==='list') {             // Logpanel
                                let tab='<table class="pure-table pure-table-striped"><thead><tr><th>Zeit</th><th>Typ</th><th>Src</th><th>Inhalt</th><th>Daten</th></tr></thead><Tbody>';
                                  for (let i=0;i<value.length;i++ ) {
                                    let line=JSON.parse(value[i]);
                                    let t='- - -';
                                    if (line.time) {
                                      t=timeDecoder(line.time);
                                    }
                                    tab += '<tr><td>'+t+'</td><td>'+line.type+'</td><td>'+line.src+'</td><td>'+line.desc+'</td><td>'+line.data+'</td></tr>';
                                  }
                                tab+='</tbody></table>';
                                value=tab;
                              }
                              else if (key==='uptime') {
                                let uptime  = parseInt(value, 10);
                                let seconds = uptime % 60;
                                uptime = parseInt(uptime / 60, 10);
                                let minutes = uptime % 60;
                                uptime = parseInt(uptime / 60, 10);
                                let hours   = uptime % 24;
                                uptime = parseInt(uptime / 24, 10);
                                value = uptime + "d " + hours + "h " + zeroPad(minutes, 2) + "m " + zeroPad(seconds, 2) + "s";
                              }
                              else if (key==='ls') {
                                for (let i=0; i < value;i++) {
                                  let s=String(i);
                                  console.log(obj[s]);
                                }
                                //console.log(obj)
                              }
                              else if (key === 'flashmode') {
                                switch (value) {
                                  case '0': value = 'QIO';break
                                  case '1': value = 'QOUT';break
                                  case '2': value = 'DIO';break
                                  case '3': value = 'DOUT';break
                                  case '4': value = 'FAST-READ';break
                                  case '5': value = 'SLOW-READ';break
                                  case '0xff': value = 'unknown';break
                                }
                              }
                              else if (key === 'stations') {        // WiFi-Scan
                                let tab = '<table class="pure-table pure-table-striped"><thead><tr><th>SSID</th><th>RSSI</th><th>Channel</th><th>Encryption</th></tr></thead><Tbody>';
                                for (let i = 0; i < value.length; i++) {
                                  let station = JSON.parse(value[i]);
                                  let encr="Unknown";
                                  switch (station.encrpt) {
                                    case '7': encr="Open";break;
                                    case '5': encr="WEP";break;
                                    case '2': encr="WPA_PSK";break;
                                    case '4': encr="WPA2_PSK";break;
                                    case '8': encr="auto";break;
                                  }
                                  tab+='<tr><td>'+station.ssid+'</td><td>'+station.rssi+' dB</td><td>'+station.channel+'</td><td>'+encr+'</td></tr>'
                                }
                                tab += '</tbody></table>';
                                value = tab;
                              }
                          
                              // Look for INPUTs
                              let input = $("input[name='" + key + "']");
                              if (input.length > 0) {
                                //console.log(input)
                                if (input.attr("type") === "checkbox") {
                                  input.prop("checked", value);
                                }
                                else if (input.attr("type") === "radio")
                                  input.val([value]);
                                else {
                                  pre = input.attr("pre") || "";
                                  post = input.attr("post") || "";
                                  input.val(pre + value + post);
                                }
                              }
                              // Look for SPANs
                              let span = $("span[name='" + key + "']");
                              pre = span.attr("pre") || "";
                              post = span.attr("post") || "";
                              div = span.attr("div") || 0;
                              if (div) {
                                value = value / div;
                                value=value.toFixed(3).replace('.',',');
                              }
                              span.html(pre + value + post);
                          
                              // Look for DIVs
                              let divt = $("div[name='" + key + "']");
                              pre = divt.attr("pre") || "";
                              post = divt.attr("post") || "";
                              div = divt.attr("div") || 0;
                              if (div) {
                                value = value / div;
                                value=value.toFixed(3).replace('.',',');
                              }
                              divt.html(pre + value + post);
                          
                              // Look for SELECTs
                              let select = $("select[name='" + key + "']");
                              if (select.length > 0)
                                select.val(value);
                            }
                          }
                          
                          function socketMessageListener(evt) {   // incomming from ESP
                            try {
                              var obj = JSON.parse(evt.data);
                            }
                            catch (e) {                   // Debug-Ausgaben
                              console.log("%c"+evt.data,"color:blue");
                              return;
                            }
                            try {
                              if ("devicetype" in obj) {
                                let title = obj.devicetype;
                                if ("devicename" in obj) title = obj.devicename + " - " + title;
                                document.title = title;
                              }
                            }
                            catch (e) {                   // Debug-Ausgaben
                              console.log(e);
                              console.log(obj);
                              return;
                            }
                            updateElements(obj);
                          }
                          
                          function connectWS() {
                            websock = new WebSocket(wsUri);
                            websock.addEventListener("message", socketMessageListener);
                            websock.onopen = function(evt) {
                              $("#panel-home").show();
                              //$("#panel-graf").show();
                              websock.send('{"command":"getconf"}');
                              //websock.send('{"command":"status"}');
                              ws_pingpong = setInterval(function() {
                                websock.send('{"command":"ping"}');
                              }, 3000);
                            }
                          }
                          
                          function createCheckboxes() {
                            $("input[type='checkbox']").each(function() {
                              if($(this).prop("name")) $(this).prop("id", $(this).prop("name"));
                              $(this).parent().addClass("toggleWrapper");
                              $(this).after('<label for="' + $(this).prop("name") + '" class="toggle"><span class="toggle__handler"></span></label>')
                            });
                          }
                          
                          function zeroPad(number, positions) {
                            return number.toString().padStart(positions, "0");
                          }
                          
                          function loadTimeZones() {
                            var time_zones = [
                              -720, -660, -600, -570, -540,-480, -420, -360, -300, -240,-210, -180, -120, -60, 0,60, 120, 180, 210, 240,
                              270, 300, 330, 345, 360,390, 420, 480, 510, 525,540, 570, 600, 630, 660, 720, 765, 780, 840 ];
                            for(var i in time_zones) {
                              var tz = time_zones[i];
                              var offset = tz >= 0 ? tz : -tz;
                              var text = "GMT" + (tz >= 0 ? "+" : "-") +
                                zeroPad(parseInt(offset / 60, 10), 2) + ":" +
                                zeroPad(offset % 60, 2);
                              $("select[name='ntp_offset']").append(
                                $("<option></option>")
                                .attr("value", tz)
                                .text(text)
                              );
                            }
                          }
                          
                          function toggleMenu() {               // Hamburger Button
                            $("#layout").toggleClass("active");
                            $("#menu").toggleClass("active");     //???
                            $("#menuLink").toggleClass("active"); //???
                          }
                          
                          function beforHC () {
                            if(window.confirm("Die nachfolgende Grafik wird mit einer Bibliothek von Highcharts.com erzeugt.\n\
                          Nur der private Gebrauch ist gestattet."))
                            onload2();
                          }
                          function showPanel() {              // menu click select panel
                            try {highchartDestroy(false);}
                            catch(e) {};
                            $(".panel").hide();
                            if($("#layout").hasClass("active")) {
                              toggleMenu();
                            }
                            $("#" + $(this).attr("data")).show();
                            if ($(this).attr('data')=='panel-home') {
                              if ($('#timing').prop('checked') == false) $(".home_details").hide();
                            }
                            if ($(this).attr('data')=='panel-graf') {
                              try {
                                onload2();    // create chart
                              }
                              catch (e) {     // dyn. load js-files
                                jQuery.getScript('chart.js', function(){
                                  try {
                                    let test=Highcharts.version;
                                  }
                                  catch (e) {
                                    //console.log(e);
                                    jQuery.getScript('https://cdnjs.cloudflare.com/ajax/libs/highstock/5.0.14/highstock.js', function(){
                                      beforHC();
                                    });
                                    return;
                                  }
                                  beforHC();
                                });
                              }
                            }
                            if ($(this).attr('data')=='panel-general') {
                              if ($('#use_auth').prop('checked') == false) $(".auth_details").hide();
                              if ($('#thingspeak_aktiv').prop('checked') == false) $(".things_details").hide();
                            }
                            else if ($(this).attr('data')=='panel-mqtt') {
                              if ($('#mqtt_enabled').prop('checked') == false) $(".mqtt_details").hide();
                            }
                            else if ($(this).attr('data')=='panel-status') {
                              websock.send('{"command":"status"}');
                            }
                            else if ($(this).attr('data')=='panel-wifi') {
                              if ($('#dhcp').prop('checked') == true) $(".wifi_details").hide();
                              websock.send('{"command":"scan_wifi"}');
                            }
                            else if ($(this).attr('data')=='panel-log') {
                              websock.send('{"command":"geteventlog","page":'+logpage+'}');
                            }
                          }
                          
                          function progressAnimate(id,time) {
                            var pbar=$("#"+id);
                            pbar.prop('max',time);
                            pbar.val(0);
                            pbar.show();
                            var tm=time / (time/100);
                            var iv=tm;
                            var ticker=setInterval(function(){
                              pbar.val(tm);
                              tm+=iv;
                              if (tm>time) {
                                pbar.hide();
                                clearInterval(ticker);
                              }
                            },tm);
                          }
                          
                          function doUpdateGeneral() {                 // button save config
                            progressAnimate('prgbar_general',300);
                            let boot=($("#use_auth").prop("checked")!=config_general.use_auth);
                            $(".general").each(function () {
                              if ($(this).prop('type') == 'checkbox') config_general[this.name] = $(this).prop('checked');
                              else config_general[this.name] = this.value;
                            });
                            if (config_general.thingspeak_aktiv) $(".menu-graf").show();
                            else $(".menu-graf").hide();
                            websock.send(JSON.stringify(config_general));
                            if (boot) doReboot("Wenn die Authentifizierung ein- oder ausgeschaltet wurde, muss neu gebootet werden.\n")
                          }
                          function doUpdateWiFi() {
                            progressAnimate('prgbar_wifi',300);
                            $(".wifi").each(function () {
                              if ($(this).prop('type') == 'checkbox') config_wifi[this.name] = $(this).prop('checked');
                              else if ($(this).prop('type') == 'text') {
                                if (this.name!='ssid') {
                                  config_wifi[this.name] = this.value.replaceAll(" ", "");
                                }else config_wifi[this.name] = this.value;
                              }
                              else config_wifi[this.name] = this.value;
                            })
                            websock.send(JSON.stringify(config_wifi));
                          }
                          function doUpdateMQTT() {
                            progressAnimate('prgbar_mqtt',300);
                            $(".mqtt").each(function () {
                              if ($(this).prop('type') == 'checkbox') config_mqtt[this.name] = $(this).prop('checked');
                              else if ($(this).prop('type') == 'text')config_mqtt[this.name] = this.value.replaceAll(" ","");
                              else config_mqtt[this.name] = this.value;
                            })
                            websock.send(JSON.stringify(config_mqtt));
                          }
                          
                          function doReboot(msg) {
                            if(window.confirm(msg+"Neustart mit OK bestätigen, dann 10s warten...")) {
                              websock.send('{"command":"restart"}');
                              doReload(7000);
                            }
                          }
                          
                          function doReload(milliseconds) {
                            websock.close();
                            $("#layout").hide();
                            setTimeout(function() {
                              window.location.reload();
                            }, parseInt(milliseconds, 10));
                          }
                          
                          function doUpgrade () {               // firmware update
                            var file = $("input[name='upgrade']")[0].files[0];
                            if(typeof file === "undefined") {
                              alert("Zuerst muss eine lokale Datei gewählt werden!");
                              return false;
                            }
                            var data = new FormData();
                            data.append("update",file,file.name);       // www.mediaevent.de/javascript/ajax-2-xmlhttprequest.html
                            var xhr = new XMLHttpRequest();     // https://javascript.info/xmlhttprequest
                            var msg_ok = "Firmware geladen, Gerät wird neu gestartet. Die Verbindung wird in 15 Sekunden neu aufgebaut.";
                            var msg_err = "Fehler beim Laden der Datei. Bitte wiederholen. ";
                          
                            var network_error = function(e) {
                              alert(msg_err + " xhr request " + e.type);
                            };
                            xhr.addEventListener("error", network_error, false);
                            xhr.addEventListener("abort", network_error, false);
                            xhr.addEventListener("load", function(e) {
                              if(xhr.status===200) {
                                  if (file.name.startsWith("firmware")) {
                                    $("#prgbar_update").hide();
                                    alert(msg_ok);
                                    doReload(15000);
                                  }
                              }
                              else alert(msg_err + xhr.status.toString() + " " + xhr.statusText + ", " + xhr.responseText);
                            }, false);
                            // xhr.upload.onprogress liefert keine vernünftigne Daten im Kurzzeitbereich
                            xhr.open("POST",UpdateUri);
                            xhr.send(data);
                            if (file.name.startsWith("firmware"))
                              progressAnimate('prgbar_update',10000);
                            else progressAnimate('prgbar_update',400);
                          }
                          
                          function mqttDetails() {  // display settings only if mqtt active
                            if ($(this).prop('checked')) $(".mqtt_details").show();
                            else $(".mqtt_details").hide();
                          }
                          
                          function wifiDetails() {  // display settings only if dhcp active
                            if ($(this).prop('checked')) $(".wifi_details").hide();
                            else $(".wifi_details").show();
                          }
                          
                          function thingsDetails() {  // display settings only if thingspeak active
                            if ($(this).prop('checked')) $(".things_details").show();
                            else $(".things_details").hide();
                          }
                          
                          function authDetails() {  // display settings only if auth active
                            if ($(this).prop('checked')) $(".auth_details").show();
                            else $(".auth_details").hide();
                          }
                          
                          function login() {
                            var xhr = new XMLHttpRequest();
                            xhr.onload = function (e) {
                              if (xhr.readyState === 4) {
                                if (xhr.status === 200) {
                          //        console.log("login")
                                  connectWS();
                                }
                              }
                            }
                            xhr.open("get", loginUri);
                            xhr.send(null);
                          }
                          
                          function toggleVisiblePassword() {
                            var elem = this.previousElementSibling;
                            if(elem.type === "password") {
                              elem.type = "text";
                            }
                            else {
                              elem.type = "password";
                            }
                            return false;
                          }
                          
                          function doLogNext() {
                            if (logpage < logpagenr) {
                              logpage++;
                              websock.send('{"command":"geteventlog","page":'+logpage+'}');
                            }
                          }
                          
                          function doLogPrev() {
                            if (logpage>1) logpage--;
                            websock.send('{"command":"geteventlog","page":'+logpage+'}');
                          }
                          
                          function doLogClear () {
                            if(window.confirm("Log-Datei löschen. Sicher?"))
                            websock.send('{"command":"clearevent"}');
                            logpage=1;
                            doLogPrev();
                          }
                          
                          function test () {
                            websock.send('{"command":"test"}');
                          }
                          
                          function clear () {
                            websock.send('{"command":"clear"}');
                          }
                          
                          $(function() {            // main
                            loadTimeZones();
                            createCheckboxes();
                          
                            $(".password-reveal").on("click", toggleVisiblePassword);
                            $("#menuLink").on("click", toggleMenu);
                            $(".pure-menu-link").on("click", showPanel);
                            $(".button-update-general").on("click", doUpdateGeneral);  // save config
                            $(".button-update-wifi").on("click", doUpdateWiFi);  // save config
                            $(".button-update-mqtt").on("click", doUpdateMQTT);  // save config
                            //$(".button-update-ntp").on("click", doUpdateNTP);  // save config
                            $(".button-log-prev").on("click", doLogPrev);  // Logpage
                            $(".button-log-next").on("click", doLogNext);  // Logpage
                            $(".button-log-clear").on("click", doLogClear);  // Logpage
                            $(".button-hist_clear").on("click", function(){
                              if(window.confirm("Tagesverbrauch Wochentage löschen. Sicher?")) {
                                websock.send('{"command":"clearhist"}');
                                for (let i=0;i<7;i++ ) {
                                  $("#wd"+i).html('');
                                  $("#wd_in" +i).html('');
                                  $("#wd_out"+i).html('');
                                  $("#wd_diff"+i).html('');
                                }
                              }
                            });
                            $(".button-reboot").on("click", function () {
                              doReboot("");
                            });
                            $(".button-graf").on("click", function (){
                              highchartDestroy(true);
                            });
                            $("input[name='mqtt_enabled']").on("click", mqttDetails);
                            $("input[name='dhcp']").on("click", wifiDetails);
                            $("input[name='thingspeak_aktiv']").on("click", thingsDetails);
                            $("input[name='use_auth']").on("click", authDetails);
                            $(".button-upgrade").on("click", doUpgrade);      // firmware update
                            $(".button-upgrade-browse").on("click", function() {
                              $("input[name='upgrade']")[0].click();  // unsichtbaren Button klicken!
                              return false;
                            });
                            $("input[name='upgrade']").change(function() {
                              var file = this.files[0];               // copy Auswahl vom unsichtbaren auf sichtbaren Input
                              $("input[name='filename']").val(file.name);
                            });
                            updateElements(config_general);     // vordefinierte configs übernehmen
                            updateElements(config_wifi);
                            updateElements(config_mqtt);
                            let host=window.location.hostname;
                            wsUri = "ws://" + host + "/ws";
                            loginUri = "http://" + host + "/login";
                            UpdateUri = "http://" + host + "/update";
                            if (host=="localhost") {
                              wsUri = "ws://192.168.2.20/ws";
                              loginUri = "http://192.168.2.20/login";
                              UpdateUri= "http://192.168.2.20/update"
                            }
                            login();
                          });
                          
                          
                          G 1 Antwort Letzte Antwort
                          0
                          • G GOETSCHHOFER

                            @homoran said in Parser Adapter:

                            @goetschhofer sagte in Parser Adapter:

                            Hilft dir dies weiter ?

                            Nein!
                            Da hat der Browser bereits dynamisch den Wert der Variable eingesetzt.

                            Deswegen braucht es den echten Quellcode und es nutzt der HTML-Code nichts.

                            Möglicherweise kannst du im Reiter Netzwerk sehen, wo die Seite die Werte herholt und dort nach den aktuellen Werten suchen


                            834e5521-bb75-4b5d-82bf-386a3931fb76-image.png

                            Reiter Quellen sieht so aus:


                            63586444-7efa-48ae-8b87-347f73d36bf1-image.png

                            Ab Zeile 131 wird offenbar gerechnet.

                            var websock = null;
                            var wsUri = "";
                            var loginUri="";
                            var UpdateUri="";
                            const wday=["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"];
                            var ws_pingpong;
                            var logpage=1;
                            var logpagenr;
                            var e180,e280;
                            var yestd_in;
                            var yestd_out;
                            
                            var config_general = {
                                "devicetype": "AMIS-Reader",
                                "devicename": "Amis-1",
                                "auth_passwd": "admin",
                                "auth_user": "admin",
                                "use_auth":0,
                                "log_sys":0,
                                "amis_key": "0",
                                "thingspeak_aktiv":0,
                                "channel_id":0,
                                "write_api_key":"",
                                "read_api_key":"",
                                "thingspeak_iv":30,
                                "channel_id2":"",
                                "read_api_key2":"",
                                "command" :"/config_general"
                            };
                            
                            var config_wifi= {
                                "ssid": "",
                                "wifipassword": "",
                                "dhcp": 0,
                                "ip_static": "192.168.",
                                "ip_netmask": "255.255.255.0",
                                "ip_gateway": "192.168.",
                                "ip_nameserver": "192.168.",
                                "rfpower":20,
                                "mdns": 0,
                                "command":"/config_wifi"
                            };
                            var config_mqtt={
                                "mqtt_enabled": 0,
                                "mqtt_broker": "192.168.",
                                "mqtt_port": 1883,
                                "mqtt_user": "",
                                "mqtt_password": "",
                                "mqtt_clientid": "",
                                "mqtt_qos": 0,
                                "mqtt_retain": 0,
                                "mqtt_keep": 0,
                                "mqtt_pub":"amis/out",
                                "mqtt_will":"",
                                "command":"/config_mqtt"
                            };
                            
                            function timeDecoder (tc) {
                              let hi=Number(tc.slice(0,4));
                              let lo=Number("0x"+tc.slice(4,12));
                              let secs = zeroPad((lo & 0x3f)^0x2d,2);
                              lo=lo >> 8;
                              let mins = zeroPad((lo & 0x3f)^0x0c,2);
                              lo =lo >> 8;
                              let hrs = zeroPad((lo & 0x1f),2);
                              lo =lo >> 8;
                              let day = zeroPad((lo & 0x1f),2);
                              let month = zeroPad((hi & 0x0f),2);
                              let year=(lo & 0xe0) >> 5;
                              year |= (hi & 0xf0) >> 1;
                              year+=2000;
                              return (year+'/'+month+'/'+day+'&nbsp;'+hrs+':'+mins+'.'+secs);
                            }
                            
                            function updateElements (obj) {
                              let pre;
                              let post;
                              let div;
                              for (let [key, value] of Object.entries(obj)) {
                                //console.log(key,value);
                                if (key==='command') {
                                  switch (value) {
                                    case "/config_general":
                                      config_general=obj;
                                      if (config_general.thingspeak_aktiv) $(".menu-graf").show();
                                      break;
                                    case "/config_wifi":
                                      config_wifi=obj;
                                      break;
                                    case "/config_mqtt":
                                      config_mqtt=obj;
                                      break;
                                  }
                                }
                                else if (key==='now') {
                                  if (0===Number(value)) value='Warte auf Zählerdaten...';
                                  else value=timeDecoder((value));
                                }
                                else if (key==='today_in') {   // 1x nach Start
                                  yestd_in=obj.yestd_in;
                                  yestd_out=obj.yestd_out;
                                  $("#tdy_in"  ).html(((value-yestd_in)/1000).toFixed(3).replace('.',','));
                                  $("#tdy_out" ).html(((obj.today_out-yestd_out) / 1000).toFixed(3).replace('.',','));
                                  var diff=(value-yestd_in)-(obj.today_out-yestd_out);
                                  if (diff >0) $("#tdy_diff").css({'color':'#FF0000'});
                                  else         $("#tdy_diff").css({'color':'#0000FF'});
                                  $("#tdy_diff").html((diff / 1000).toFixed(3).replace('.',','));
                                  for (let i=0;i<7;i++ ) {
                                    let datax = "data" + i;
                                    if (datax in obj) {
                                      datax = obj[datax];
                                      if (i === 0) $("#wd0").html('Gestern');
                                      else $("#wd"+i).html(wday[datax[0]]);
                                      $("#wd_in" +i).html((datax[1] / 1000).toFixed(3).replace('.',','));
                                      $("#wd_out"+i).html((datax[2] / 1000).toFixed(3).replace('.',','));
                                      diff=datax[1]-datax[2];
                                      if (diff >0) $("#wd_diff"+i).css({'color':'#FF0000'});
                                      else         $("#wd_diff"+i).css({'color':'#0000FF'});
                                      $("#wd_diff"+i).html((diff / 1000).toFixed(3).replace('.',','));
                                    }
                                  }
                                  continue;
                                }
                                else if (key==='1_7_0') {
                                  diff=value-obj['2_7_0'];
                                  if (diff >0) $("#saldo").css({'color':'#FF0000'});
                                  else         $("#saldo").css({'color':'#0000FF'});
                                  $("#saldo").html((diff / 1000).toFixed(3).replace('.',',')+' kW');
                                }
                                else if (key==='1_8_0') {
                                  if (e180 != value) {          // Energie-Tabelle auch aktualisieren
                                    $("#tdy_in").html(((value-yestd_in) / 1000).toFixed(3).replace('.',','));
                                    e180=value;
                                  }
                                }
                                else if (key==='2_8_0') {
                                  if (e280 != value) {          // Energie-Tabelle auch aktualisieren
                                    $("#tdy_out").html(((value-yestd_out) / 1000).toFixed(3).replace('.',','));
                                    e280 = value;
                                  }
                                  $("#tdy_diff").html((((e180-yestd_in)-(e280-yestd_out)) / 1000).toFixed(3).replace('.',','));
                                }
                                else if (key==='things_up') {
                                   if (value) value=timeDecoder(value);
                                   else value="";
                                }
                                else if (key==='page') {             // Logpanel
                                  logpagenr=obj["haspages"];
                                  value="Seite "+value+" von "+logpagenr;
                                }
                                else if (key==='list') {             // Logpanel
                                  let tab='<table class="pure-table pure-table-striped"><thead><tr><th>Zeit</th><th>Typ</th><th>Src</th><th>Inhalt</th><th>Daten</th></tr></thead><Tbody>';
                                    for (let i=0;i<value.length;i++ ) {
                                      let line=JSON.parse(value[i]);
                                      let t='- - -';
                                      if (line.time) {
                                        t=timeDecoder(line.time);
                                      }
                                      tab += '<tr><td>'+t+'</td><td>'+line.type+'</td><td>'+line.src+'</td><td>'+line.desc+'</td><td>'+line.data+'</td></tr>';
                                    }
                                  tab+='</tbody></table>';
                                  value=tab;
                                }
                                else if (key==='uptime') {
                                  let uptime  = parseInt(value, 10);
                                  let seconds = uptime % 60;
                                  uptime = parseInt(uptime / 60, 10);
                                  let minutes = uptime % 60;
                                  uptime = parseInt(uptime / 60, 10);
                                  let hours   = uptime % 24;
                                  uptime = parseInt(uptime / 24, 10);
                                  value = uptime + "d " + hours + "h " + zeroPad(minutes, 2) + "m " + zeroPad(seconds, 2) + "s";
                                }
                                else if (key==='ls') {
                                  for (let i=0; i < value;i++) {
                                    let s=String(i);
                                    console.log(obj[s]);
                                  }
                                  //console.log(obj)
                                }
                                else if (key === 'flashmode') {
                                  switch (value) {
                                    case '0': value = 'QIO';break
                                    case '1': value = 'QOUT';break
                                    case '2': value = 'DIO';break
                                    case '3': value = 'DOUT';break
                                    case '4': value = 'FAST-READ';break
                                    case '5': value = 'SLOW-READ';break
                                    case '0xff': value = 'unknown';break
                                  }
                                }
                                else if (key === 'stations') {        // WiFi-Scan
                                  let tab = '<table class="pure-table pure-table-striped"><thead><tr><th>SSID</th><th>RSSI</th><th>Channel</th><th>Encryption</th></tr></thead><Tbody>';
                                  for (let i = 0; i < value.length; i++) {
                                    let station = JSON.parse(value[i]);
                                    let encr="Unknown";
                                    switch (station.encrpt) {
                                      case '7': encr="Open";break;
                                      case '5': encr="WEP";break;
                                      case '2': encr="WPA_PSK";break;
                                      case '4': encr="WPA2_PSK";break;
                                      case '8': encr="auto";break;
                                    }
                                    tab+='<tr><td>'+station.ssid+'</td><td>'+station.rssi+' dB</td><td>'+station.channel+'</td><td>'+encr+'</td></tr>'
                                  }
                                  tab += '</tbody></table>';
                                  value = tab;
                                }
                            
                                // Look for INPUTs
                                let input = $("input[name='" + key + "']");
                                if (input.length > 0) {
                                  //console.log(input)
                                  if (input.attr("type") === "checkbox") {
                                    input.prop("checked", value);
                                  }
                                  else if (input.attr("type") === "radio")
                                    input.val([value]);
                                  else {
                                    pre = input.attr("pre") || "";
                                    post = input.attr("post") || "";
                                    input.val(pre + value + post);
                                  }
                                }
                                // Look for SPANs
                                let span = $("span[name='" + key + "']");
                                pre = span.attr("pre") || "";
                                post = span.attr("post") || "";
                                div = span.attr("div") || 0;
                                if (div) {
                                  value = value / div;
                                  value=value.toFixed(3).replace('.',',');
                                }
                                span.html(pre + value + post);
                            
                                // Look for DIVs
                                let divt = $("div[name='" + key + "']");
                                pre = divt.attr("pre") || "";
                                post = divt.attr("post") || "";
                                div = divt.attr("div") || 0;
                                if (div) {
                                  value = value / div;
                                  value=value.toFixed(3).replace('.',',');
                                }
                                divt.html(pre + value + post);
                            
                                // Look for SELECTs
                                let select = $("select[name='" + key + "']");
                                if (select.length > 0)
                                  select.val(value);
                              }
                            }
                            
                            function socketMessageListener(evt) {   // incomming from ESP
                              try {
                                var obj = JSON.parse(evt.data);
                              }
                              catch (e) {                   // Debug-Ausgaben
                                console.log("%c"+evt.data,"color:blue");
                                return;
                              }
                              try {
                                if ("devicetype" in obj) {
                                  let title = obj.devicetype;
                                  if ("devicename" in obj) title = obj.devicename + " - " + title;
                                  document.title = title;
                                }
                              }
                              catch (e) {                   // Debug-Ausgaben
                                console.log(e);
                                console.log(obj);
                                return;
                              }
                              updateElements(obj);
                            }
                            
                            function connectWS() {
                              websock = new WebSocket(wsUri);
                              websock.addEventListener("message", socketMessageListener);
                              websock.onopen = function(evt) {
                                $("#panel-home").show();
                                //$("#panel-graf").show();
                                websock.send('{"command":"getconf"}');
                                //websock.send('{"command":"status"}');
                                ws_pingpong = setInterval(function() {
                                  websock.send('{"command":"ping"}');
                                }, 3000);
                              }
                            }
                            
                            function createCheckboxes() {
                              $("input[type='checkbox']").each(function() {
                                if($(this).prop("name")) $(this).prop("id", $(this).prop("name"));
                                $(this).parent().addClass("toggleWrapper");
                                $(this).after('<label for="' + $(this).prop("name") + '" class="toggle"><span class="toggle__handler"></span></label>')
                              });
                            }
                            
                            function zeroPad(number, positions) {
                              return number.toString().padStart(positions, "0");
                            }
                            
                            function loadTimeZones() {
                              var time_zones = [
                                -720, -660, -600, -570, -540,-480, -420, -360, -300, -240,-210, -180, -120, -60, 0,60, 120, 180, 210, 240,
                                270, 300, 330, 345, 360,390, 420, 480, 510, 525,540, 570, 600, 630, 660, 720, 765, 780, 840 ];
                              for(var i in time_zones) {
                                var tz = time_zones[i];
                                var offset = tz >= 0 ? tz : -tz;
                                var text = "GMT" + (tz >= 0 ? "+" : "-") +
                                  zeroPad(parseInt(offset / 60, 10), 2) + ":" +
                                  zeroPad(offset % 60, 2);
                                $("select[name='ntp_offset']").append(
                                  $("<option></option>")
                                  .attr("value", tz)
                                  .text(text)
                                );
                              }
                            }
                            
                            function toggleMenu() {               // Hamburger Button
                              $("#layout").toggleClass("active");
                              $("#menu").toggleClass("active");     //???
                              $("#menuLink").toggleClass("active"); //???
                            }
                            
                            function beforHC () {
                              if(window.confirm("Die nachfolgende Grafik wird mit einer Bibliothek von Highcharts.com erzeugt.\n\
                            Nur der private Gebrauch ist gestattet."))
                              onload2();
                            }
                            function showPanel() {              // menu click select panel
                              try {highchartDestroy(false);}
                              catch(e) {};
                              $(".panel").hide();
                              if($("#layout").hasClass("active")) {
                                toggleMenu();
                              }
                              $("#" + $(this).attr("data")).show();
                              if ($(this).attr('data')=='panel-home') {
                                if ($('#timing').prop('checked') == false) $(".home_details").hide();
                              }
                              if ($(this).attr('data')=='panel-graf') {
                                try {
                                  onload2();    // create chart
                                }
                                catch (e) {     // dyn. load js-files
                                  jQuery.getScript('chart.js', function(){
                                    try {
                                      let test=Highcharts.version;
                                    }
                                    catch (e) {
                                      //console.log(e);
                                      jQuery.getScript('https://cdnjs.cloudflare.com/ajax/libs/highstock/5.0.14/highstock.js', function(){
                                        beforHC();
                                      });
                                      return;
                                    }
                                    beforHC();
                                  });
                                }
                              }
                              if ($(this).attr('data')=='panel-general') {
                                if ($('#use_auth').prop('checked') == false) $(".auth_details").hide();
                                if ($('#thingspeak_aktiv').prop('checked') == false) $(".things_details").hide();
                              }
                              else if ($(this).attr('data')=='panel-mqtt') {
                                if ($('#mqtt_enabled').prop('checked') == false) $(".mqtt_details").hide();
                              }
                              else if ($(this).attr('data')=='panel-status') {
                                websock.send('{"command":"status"}');
                              }
                              else if ($(this).attr('data')=='panel-wifi') {
                                if ($('#dhcp').prop('checked') == true) $(".wifi_details").hide();
                                websock.send('{"command":"scan_wifi"}');
                              }
                              else if ($(this).attr('data')=='panel-log') {
                                websock.send('{"command":"geteventlog","page":'+logpage+'}');
                              }
                            }
                            
                            function progressAnimate(id,time) {
                              var pbar=$("#"+id);
                              pbar.prop('max',time);
                              pbar.val(0);
                              pbar.show();
                              var tm=time / (time/100);
                              var iv=tm;
                              var ticker=setInterval(function(){
                                pbar.val(tm);
                                tm+=iv;
                                if (tm>time) {
                                  pbar.hide();
                                  clearInterval(ticker);
                                }
                              },tm);
                            }
                            
                            function doUpdateGeneral() {                 // button save config
                              progressAnimate('prgbar_general',300);
                              let boot=($("#use_auth").prop("checked")!=config_general.use_auth);
                              $(".general").each(function () {
                                if ($(this).prop('type') == 'checkbox') config_general[this.name] = $(this).prop('checked');
                                else config_general[this.name] = this.value;
                              });
                              if (config_general.thingspeak_aktiv) $(".menu-graf").show();
                              else $(".menu-graf").hide();
                              websock.send(JSON.stringify(config_general));
                              if (boot) doReboot("Wenn die Authentifizierung ein- oder ausgeschaltet wurde, muss neu gebootet werden.\n")
                            }
                            function doUpdateWiFi() {
                              progressAnimate('prgbar_wifi',300);
                              $(".wifi").each(function () {
                                if ($(this).prop('type') == 'checkbox') config_wifi[this.name] = $(this).prop('checked');
                                else if ($(this).prop('type') == 'text') {
                                  if (this.name!='ssid') {
                                    config_wifi[this.name] = this.value.replaceAll(" ", "");
                                  }else config_wifi[this.name] = this.value;
                                }
                                else config_wifi[this.name] = this.value;
                              })
                              websock.send(JSON.stringify(config_wifi));
                            }
                            function doUpdateMQTT() {
                              progressAnimate('prgbar_mqtt',300);
                              $(".mqtt").each(function () {
                                if ($(this).prop('type') == 'checkbox') config_mqtt[this.name] = $(this).prop('checked');
                                else if ($(this).prop('type') == 'text')config_mqtt[this.name] = this.value.replaceAll(" ","");
                                else config_mqtt[this.name] = this.value;
                              })
                              websock.send(JSON.stringify(config_mqtt));
                            }
                            
                            function doReboot(msg) {
                              if(window.confirm(msg+"Neustart mit OK bestätigen, dann 10s warten...")) {
                                websock.send('{"command":"restart"}');
                                doReload(7000);
                              }
                            }
                            
                            function doReload(milliseconds) {
                              websock.close();
                              $("#layout").hide();
                              setTimeout(function() {
                                window.location.reload();
                              }, parseInt(milliseconds, 10));
                            }
                            
                            function doUpgrade () {               // firmware update
                              var file = $("input[name='upgrade']")[0].files[0];
                              if(typeof file === "undefined") {
                                alert("Zuerst muss eine lokale Datei gewählt werden!");
                                return false;
                              }
                              var data = new FormData();
                              data.append("update",file,file.name);       // www.mediaevent.de/javascript/ajax-2-xmlhttprequest.html
                              var xhr = new XMLHttpRequest();     // https://javascript.info/xmlhttprequest
                              var msg_ok = "Firmware geladen, Gerät wird neu gestartet. Die Verbindung wird in 15 Sekunden neu aufgebaut.";
                              var msg_err = "Fehler beim Laden der Datei. Bitte wiederholen. ";
                            
                              var network_error = function(e) {
                                alert(msg_err + " xhr request " + e.type);
                              };
                              xhr.addEventListener("error", network_error, false);
                              xhr.addEventListener("abort", network_error, false);
                              xhr.addEventListener("load", function(e) {
                                if(xhr.status===200) {
                                    if (file.name.startsWith("firmware")) {
                                      $("#prgbar_update").hide();
                                      alert(msg_ok);
                                      doReload(15000);
                                    }
                                }
                                else alert(msg_err + xhr.status.toString() + " " + xhr.statusText + ", " + xhr.responseText);
                              }, false);
                              // xhr.upload.onprogress liefert keine vernünftigne Daten im Kurzzeitbereich
                              xhr.open("POST",UpdateUri);
                              xhr.send(data);
                              if (file.name.startsWith("firmware"))
                                progressAnimate('prgbar_update',10000);
                              else progressAnimate('prgbar_update',400);
                            }
                            
                            function mqttDetails() {  // display settings only if mqtt active
                              if ($(this).prop('checked')) $(".mqtt_details").show();
                              else $(".mqtt_details").hide();
                            }
                            
                            function wifiDetails() {  // display settings only if dhcp active
                              if ($(this).prop('checked')) $(".wifi_details").hide();
                              else $(".wifi_details").show();
                            }
                            
                            function thingsDetails() {  // display settings only if thingspeak active
                              if ($(this).prop('checked')) $(".things_details").show();
                              else $(".things_details").hide();
                            }
                            
                            function authDetails() {  // display settings only if auth active
                              if ($(this).prop('checked')) $(".auth_details").show();
                              else $(".auth_details").hide();
                            }
                            
                            function login() {
                              var xhr = new XMLHttpRequest();
                              xhr.onload = function (e) {
                                if (xhr.readyState === 4) {
                                  if (xhr.status === 200) {
                            //        console.log("login")
                                    connectWS();
                                  }
                                }
                              }
                              xhr.open("get", loginUri);
                              xhr.send(null);
                            }
                            
                            function toggleVisiblePassword() {
                              var elem = this.previousElementSibling;
                              if(elem.type === "password") {
                                elem.type = "text";
                              }
                              else {
                                elem.type = "password";
                              }
                              return false;
                            }
                            
                            function doLogNext() {
                              if (logpage < logpagenr) {
                                logpage++;
                                websock.send('{"command":"geteventlog","page":'+logpage+'}');
                              }
                            }
                            
                            function doLogPrev() {
                              if (logpage>1) logpage--;
                              websock.send('{"command":"geteventlog","page":'+logpage+'}');
                            }
                            
                            function doLogClear () {
                              if(window.confirm("Log-Datei löschen. Sicher?"))
                              websock.send('{"command":"clearevent"}');
                              logpage=1;
                              doLogPrev();
                            }
                            
                            function test () {
                              websock.send('{"command":"test"}');
                            }
                            
                            function clear () {
                              websock.send('{"command":"clear"}');
                            }
                            
                            $(function() {            // main
                              loadTimeZones();
                              createCheckboxes();
                            
                              $(".password-reveal").on("click", toggleVisiblePassword);
                              $("#menuLink").on("click", toggleMenu);
                              $(".pure-menu-link").on("click", showPanel);
                              $(".button-update-general").on("click", doUpdateGeneral);  // save config
                              $(".button-update-wifi").on("click", doUpdateWiFi);  // save config
                              $(".button-update-mqtt").on("click", doUpdateMQTT);  // save config
                              //$(".button-update-ntp").on("click", doUpdateNTP);  // save config
                              $(".button-log-prev").on("click", doLogPrev);  // Logpage
                              $(".button-log-next").on("click", doLogNext);  // Logpage
                              $(".button-log-clear").on("click", doLogClear);  // Logpage
                              $(".button-hist_clear").on("click", function(){
                                if(window.confirm("Tagesverbrauch Wochentage löschen. Sicher?")) {
                                  websock.send('{"command":"clearhist"}');
                                  for (let i=0;i<7;i++ ) {
                                    $("#wd"+i).html('');
                                    $("#wd_in" +i).html('');
                                    $("#wd_out"+i).html('');
                                    $("#wd_diff"+i).html('');
                                  }
                                }
                              });
                              $(".button-reboot").on("click", function () {
                                doReboot("");
                              });
                              $(".button-graf").on("click", function (){
                                highchartDestroy(true);
                              });
                              $("input[name='mqtt_enabled']").on("click", mqttDetails);
                              $("input[name='dhcp']").on("click", wifiDetails);
                              $("input[name='thingspeak_aktiv']").on("click", thingsDetails);
                              $("input[name='use_auth']").on("click", authDetails);
                              $(".button-upgrade").on("click", doUpgrade);      // firmware update
                              $(".button-upgrade-browse").on("click", function() {
                                $("input[name='upgrade']")[0].click();  // unsichtbaren Button klicken!
                                return false;
                              });
                              $("input[name='upgrade']").change(function() {
                                var file = this.files[0];               // copy Auswahl vom unsichtbaren auf sichtbaren Input
                                $("input[name='filename']").val(file.name);
                              });
                              updateElements(config_general);     // vordefinierte configs übernehmen
                              updateElements(config_wifi);
                              updateElements(config_mqtt);
                              let host=window.location.hostname;
                              wsUri = "ws://" + host + "/ws";
                              loginUri = "http://" + host + "/login";
                              UpdateUri = "http://" + host + "/update";
                              if (host=="localhost") {
                                wsUri = "ws://192.168.2.20/ws";
                                loginUri = "http://192.168.2.20/login";
                                UpdateUri= "http://192.168.2.20/update"
                              }
                              login();
                            });
                            
                            
                            G Offline
                            G Offline
                            GOETSCHHOFER
                            schrieb am zuletzt editiert von
                            #26

                            @Homoran

                            Die Regex stimmt soweit, aber ich bekomme mit dieser Regex keine Werte in den Objekten im iobroker.

                            Was könnte dies noch für einen Grund haben ?

                            34c33cff-4cbc-4c7e-905d-514ccf603ab2-image.png

                            HomoranH 1 Antwort Letzte Antwort
                            0
                            • G GOETSCHHOFER

                              @Homoran

                              Die Regex stimmt soweit, aber ich bekomme mit dieser Regex keine Werte in den Objekten im iobroker.

                              Was könnte dies noch für einen Grund haben ?

                              34c33cff-4cbc-4c7e-905d-514ccf603ab2-image.png

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

                              @goetschhofer Was willst du mir damit sagen?
                              Die Seite lässt sich nicht mit dem Parser auslesen, da die Werte dynamisch ausserhalb des Quelltextes geholt werden.
                              und nur der Quelltext kann geparst werden.

                              Das hatten wir alles schon einmal und ändert sich nicht
                              du arbeitest nicht mit dem Quelltext sondern mit der HTML-Seite, die der Browaser aufbaut.
                              Darauf hat der Parser keinen Zugriff

                              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 -

                              G 1 Antwort Letzte Antwort
                              1
                              • HomoranH Homoran

                                @goetschhofer Was willst du mir damit sagen?
                                Die Seite lässt sich nicht mit dem Parser auslesen, da die Werte dynamisch ausserhalb des Quelltextes geholt werden.
                                und nur der Quelltext kann geparst werden.

                                Das hatten wir alles schon einmal und ändert sich nicht
                                du arbeitest nicht mit dem Quelltext sondern mit der HTML-Seite, die der Browaser aufbaut.
                                Darauf hat der Parser keinen Zugriff

                                G Offline
                                G Offline
                                GOETSCHHOFER
                                schrieb am zuletzt editiert von GOETSCHHOFER
                                #28

                                @homoran

                                Vielen Dank nochmals für die Klarstellung und Erläuterung.

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

                                  @goetschhofer sagte in Parser Adapter:

                                  @homoran

                                  Vielen Dank nochmals für die Klarstellung und Erläuterung.

                                  wo ist denn der Quelltext?

                                  @homoran sagte in Parser Adapter:

                                  dazu brauche ich den echten Seitenquelltext (rechte Maustaste in die Seite wo die Werte stehen und Seitenquelltext anzeigen anklicken)

                                  @goetschhofer sagte in Parser Adapter:

                                  Die Regex stimmt soweit,

                                  selbst das stimmt nicht, außer du willst den RegEx in php verwenden.
                                  iobroker nutzt aber Javascript.

                                  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 -

                                  G 2 Antworten Letzte Antwort
                                  0
                                  • HomoranH Homoran

                                    @goetschhofer sagte in Parser Adapter:

                                    @homoran

                                    Vielen Dank nochmals für die Klarstellung und Erläuterung.

                                    wo ist denn der Quelltext?

                                    @homoran sagte in Parser Adapter:

                                    dazu brauche ich den echten Seitenquelltext (rechte Maustaste in die Seite wo die Werte stehen und Seitenquelltext anzeigen anklicken)

                                    @goetschhofer sagte in Parser Adapter:

                                    Die Regex stimmt soweit,

                                    selbst das stimmt nicht, außer du willst den RegEx in php verwenden.
                                    iobroker nutzt aber Javascript.

                                    G Offline
                                    G Offline
                                    GOETSCHHOFER
                                    schrieb am zuletzt editiert von GOETSCHHOFER
                                    #30

                                    @homoran said in Parser Adapter:

                                    wo ist denn der Quelltext?

                                    @homoran sagte in Parser Adapter:

                                    dazu brauche ich den echten Seitenquelltext (rechte Maustaste in die Seite wo die Werte stehen und Seitenquelltext anzeigen anklicken)

                                    @goetschhofer sagte in Parser Adapter:

                                    Die Regex stimmt soweit,

                                    selbst das stimmt nicht, außer du willst den RegEx in php verwenden.
                                    iobroker nutzt aber Javascript.

                                    Seitenquelltext anzeigen mit rechter Maustaste:

                                    <!doctype html>
                                    <html lang="de">
                                    <head>
                                        <!--<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval';">-->
                                        <meta charset="utf-8">
                                        <meta name="viewport" content="width=device-width, initial-scale=1.0">
                                        <title>ESP-Device</title>
                                        <link rel="stylesheet" href="custom.css">
                                        <link rel="icon" type="image/png" href="data:image/png;base64,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">
                                        <script src="jquery351.js"></script>
                                    </head>
                                    <body>
                                    <div id="layout">  <!--This is the parent `<div>` that contains the menu and the content area :: side-menu.css-->
                                        <!-- Menu toggle -->
                                        <!--<a href="#menu" id="menuLink" class="menu-link">-->
                                        <a id="menuLink" class="menu-link">
                                            <!-- Hamburger icon -->
                                            <span></span>
                                        </a>
                                        <div id="menu">
                                            <div class="pure-menu">
                                                <!--<a class="pure-menu-heading" href="#">Device</a>-->
                                                <span class="pure-menu-heading" name="devicetype">DeviceType</span>
                                                <ul class="pure-menu-list">
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-home">Zähler</a></li>
                                                    <li class="pure-menu-item menu-graf"><a class="pure-menu-link" data="panel-graf">Grafik</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-log">Log</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-status">Status</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-general">Allgemein</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-wifi">WiFi</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-mqtt">MQTT</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-update">Update</a></li>
                                                    <li class="pure-menu-item"><a class="pure-menu-link" data="panel-hist">Versionsinfo</a></li>
                                                </ul>
                                            </div>
                                        </div>
                                    
                                        <div class="content">  <!--The content `<div>` is where all your content goes.  :: side-menu.css-->
                                          <div class="panel" id="panel-graf">
                                            <div id="chart-container" class="chart">
                                                <br>Daten von Thingspeak werden geladen...<br>
                                            </div>
                                            <div class="chart-below">
                                            <div class="pure-g">
                                              <div class="pure-u-1 pure-u-sm-1-5">
                                                <button class="pure-button button-load" onclick="loadOneChannel();" style="margin-left: 10px;width:160px;">Daten nachladen:</button>
                                              </div>
                                              <select class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;" id="Loads">
                                                <option selected="selected" value="1">1 Tag</option>
                                                <option value="2">2 Tage</option>
                                                <option value="3">3 Tage</option>
                                                <option value="4">4 Tage</option>
                                                <option value="5">5 Tage</option>
                                                <option value="6">6 Tage</option>
                                                <option value="7">7 Tage</option>
                                                <option value="8">8 Tage</option>
                                                <option value="9">9 Tage</option>
                                                <option value="10">10 Tage</option>
                                              </select>
                                              <select id="ChannelSelect" class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;"></select>
                                              <div class="pure-u-1 pure-u-sm-1-5">
                                                <button class="pure-button button-graf" style="margin-left:10px;width:160px;">Chart neu laden</button>
                                              </div>
                                            </div>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">Grafikdaten autom. aktualisieren</label>
                                              <div class="pure-u-1 pure-u-sm-1-5 on_off">
                                                <input id="Update" name="Update" type="checkbox" class="">
                                              </div>
                                              <div class="pure-u-1 pure-u-sm-2-5"></div>
                                            </div>
                                            </div>
                                          </div>
                                    
                                          <div class="panel" id="panel-home">
                                            <div class="header">
                                                <h1>AMIS-Zähler</h1>
                                                <br>
                                            </div><br>
                                            <div class="amis">
                                                <div class="pure-u-11-24">Uhrzeit (Zähler)</div>
                                                <div class="pure-u-11-24" name="now"></div>
                                                <div class="pure-u-11-24">1.8.0 (Energie A+)</div>
                                                <strong><div class="pure-u-11-24" name="1_8_0" post=" kWh" div="1000"></div></strong>
                                                <div class="pure-u-11-24">2.8.0 (Energie A-)</div>
                                                <strong><div class="pure-u-11-24" name="2_8_0" post=" kWh" div="1000"></div></strong>
                                                <div class="pure-u-11-24">3.8.1 (Energie R+)</div>
                                                <div class="pure-u-11-24" name="3_8_1" post=" kVarh" div="1000"></div>
                                                <div class="pure-u-11-24">4.8.1 (Energie R-)</div>
                                                <div class="pure-u-11-24" name="4_8_1" post=" kVarh" div="1000"></div>
                                                <div class="pure-u-11-24">1.7.0 (Wirk. P+)</div>
                                                <strong><div class="pure-u-11-24" name="1_7_0" post=" kW" div="1000"></div></strong>
                                                <div class="pure-u-11-24">2.7.0 (Wirk. P-)</div>
                                                <strong><div class="pure-u-11-24" name="2_7_0" post=" kW" div="1000"></div></strong>
                                                <div class="pure-u-11-24">Saldo 1.7.0-2.7.0</div>
                                                <strong><div class="pure-u-11-24" id="saldo"></div></strong>
                                                <div class="pure-u-11-24">3.7.0 (Blind. Q+)</div>
                                                <div class="pure-u-11-24" name="3_7_0" post=" kVar" div="1000"></div>
                                                <div class="pure-u-11-24">4.7.0 (Blind. Q-)</div>
                                                <div class="pure-u-11-24" name="4_7_0" post=" kVar" div="1000"></div>
                                                <div class="pure-u-11-24">1.128.0 (Inkasso)</div>
                                                <div class="pure-u-11-24" name="1_128_0"></div>
                                                <br><hr>
                                                <div class="pure-u-11-24">Uptime</div>
                                                <div class="pure-u-11-24" name="uptime"></div>
                                                <div class="pure-u-11-24">Upload Thingspeak</div>
                                                <div class="pure-u-11-24" name="things_up"></div>
                                                <br><hr>
                                                <h3>Energie [kWh]</h3>
                                                <div class="pure-u-1">
                                                  <table class="pure-table pure-table-striped" width="100%">
                                                    <thead><tr><th>Tag</th><th align="right">Bezug</th><th align="right">Lfrg.</th><th align="right">Diff.</th></tr></thead>
                                                    <Tbody>
                                                      <tr><td>Heute</td>    <td align="right" id="tdy_in"></td><td align="right" id="tdy_out"></td><td align="right" id="tdy_diff"></td></tr>
                                                      <tr><td id="wd0"></td><td align="right" id="wd_in0"></td><td align="right" id="wd_out0"></td><td align="right" id="wd_diff0"></td></tr>
                                                      <tr><td id="wd1"></td><td align="right" id="wd_in1"></td><td align="right" id="wd_out1"></td><td align="right" id="wd_diff1"></td></tr>
                                                      <tr><td id="wd2"></td><td align="right" id="wd_in2"></td><td align="right" id="wd_out2"></td><td align="right" id="wd_diff2"></td></tr>
                                                      <tr><td id="wd3"></td><td align="right" id="wd_in3"></td><td align="right" id="wd_out3"></td><td align="right" id="wd_diff3"></td></tr>
                                                      <tr><td id="wd4"></td><td align="right" id="wd_in4"></td><td align="right" id="wd_out4"></td><td align="right" id="wd_diff4"></td></tr>
                                                      <tr><td id="wd5"></td><td align="right" id="wd_in5"></td><td align="right" id="wd_out5"></td><td align="right" id="wd_diff5"></td></tr>
                                                      <tr><td id="wd6"></td><td align="right" id="wd_in6"></td><td align="right" id="wd_out6"></td><td align="right" id="wd_diff6"></td></tr>
                                                    </Tbody>
                                                  </table>
                                                </div>
                                            </div>
                                          </div>
                                    
                                          <div class="panel pure-form" id="panel-status">
                                            <div class="header">
                                                <h1>STATUS 🛈</h1>
                                                <br>
                                            </div>
                                            <div class="pure-u-1 pure-u-lg-1-2 state">
                                                <div class="pure-u-1-2">Chip ID</div>
                                                <div class="pure-u-11-24"><span class="right" name="chipid"></span></div>
                                                <div class="pure-u-1-2">Wifi MAC</div>
                                                <div class="pure-u-11-24"><span class="right" name="mac"></span></div>
                                                <div class="pure-u-1-2">SDK version</div>
                                                <div class="pure-u-11-24"><span class="right" name="sdk"></span></div>
                                                <div class="pure-u-1-2">Core version</div>
                                                <div class="pure-u-11-24"><span class="right" name="core"></span></div>
                                                <div class="pure-u-1-2">App version</div>
                                                <div class="pure-u-11-24"><span class="right" name="version"></span></div>
                                                <div class="pure-u-1-2">App name</div>
                                                <div class="pure-u-11-24"><span class="right" name="app_name"></span></div>
                                                <div class="pure-u-1-2">Firmware size</div>
                                                <div class="pure-u-11-24"><span class="right" name="sketchsize" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">Free space</div>
                                                <div class="pure-u-11-24"><span class="right" name="freesize" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">LITTLE-FS size</div>
                                                <div class="pure-u-11-24"><span class="right" name="littlefs_size" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">LITTLE-FS used</div>
                                                <div class="pure-u-11-24"><span class="right" name="littlefs_used" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">Max. free block size</div>
                                                <div class="pure-u-11-24"><span class="right" name="max_free_blocksz" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">Free heap</div>
                                                <div class="pure-u-11-24"><span class="right" name="heap_free" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">Heap fragmentation</div>
                                                <div class="pure-u-11-24"><span class="right" name="heap_fragment" post=" %"></span></div>
                                                <div class="pure-u-1-2">Flash speed</div>
                                                <div class="pure-u-11-24"><span class="right" name="flashspeed" post=" Hz"></span></div>
                                                <div class="pure-u-1-2">Flash size</div>
                                                <div class="pure-u-11-24"><span class="right" name="flashsize" post=" bytes"></span></div>
                                                <div class="pure-u-1-2">Flash mode</div>
                                                <div class="pure-u-11-24"><span class="right" name="flashmode"></span></div>
                                                <div class="pure-u-1-2">CPU Frequ.</div>
                                                <div class="pure-u-11-24"><span class="right" name="cpu" post=" MHz"></span></div>
                                            </div>
                                            <div class="pure-u-1 pure-u-lg-11-24 state">
                                                <div class="pure-u-1-2">Network</div>
                                                <div class="pure-u-11-24" name="ssid"></div>
                                                <div class="pure-u-1-2">Channel</div>
                                                <div class="pure-u-11-24" name="channel"></div>
                                                <div class="pure-u-1-2">RSSI</div>
                                                <div class="pure-u-11-24" name="rssi" post=" dB"></div>
                                                <div class="pure-u-1-2">IP</div>
                                                <div class="pure-u-11-24" name="deviceip"></div>
                                                <div class="pure-u-1-2">DNS</div>
                                                <div class="pure-u-11-24" name="dns"></div>
                                                <div class="pure-u-1-2">Gateway</div>
                                                <div class="pure-u-11-24" name="gateway"></div>
                                                <div class="pure-u-1-2">Netmask</div>
                                                <div class="pure-u-11-24" name="netmask"></div>
                                                <div class="pure-u-1-2">VCC</div>
                                                <div class="pure-u-11-24"><span class="right" name="vcc">? </span><span>mV</span></div>
                                                <div class="pure-u-1-2 module-mqtt">MQTT Status</div>
                                                <div class="pure-u-11-24 module-mqtt" name="mqttStatus"></div>
                                                <div class="pure-u-1-2 module-ntp">NTP Status</div>
                                                <div class="pure-u-11-24 module-ntp" name="ntpSynced"></div>
                                                <div class="pure-u-1-2 module-ntp">Current time</div>
                                                <div class="pure-u-11-24 module-ntp" name="now"></div>
                                                <div class="pure-u-1-2">Uptime</div>
                                                <div class="pure-u-11-24" name="uptime"></div>
                                            </div>
                                          </div>
                                    
                                          <div class="panel  pure-form" id="panel-general">
                                            <div class="header">
                                                <h1>Allgemein</h1>
                                                <!--<h3>Current configuration</h3>-->
                                                <br>
                                            </div>
                                            <br>
                                            <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Name Gerät:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="devicename" placeholder="ESP-Device" />
                                            </div>
                                                <br>
                                            <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Authentifizierung:</label>
                                                <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="use_auth" id="use_auth" class="general"/></div>
                                            </div>
                                            <div class="auth_details">
                                              <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Benutzer:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_user" value="Admin"/>
                                              </div>
                                              <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_passwd" type="password" spellcheck="false" />
                                                <span class="no-select password-reveal"></span>
                                              </div>
                                            </div>
                                            <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">System-Log:</label>
                                                <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="log_sys" id="log_sys" class="general"/></div>
                                            </div>
                                              <br>
                                            <div style="display:block;">
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">Amis-Key:</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="amis_key"/>
                                                </div>
                                                    <br>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">ThingSpeak/Highcharts aktiv:</label>
                                                    <div class="pure-u-1 pure-u-sm-1-5"><input type="checkbox" name="thingspeak_aktiv" id="thingspeak_aktiv" class="general"/></div>
                                                </div>
                                                <div class="things_details">
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id"/>
                                                  </div>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Write API Key:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="write_api_key"/>
                                                  </div>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key"/>
                                                  </div>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Intervall (sec):</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="number" min="30" name="thingspeak_iv"/>
                                                  </div>
                                                      <hr>
                                                      <br>
                                                      Daten für einen zweiten Zähler abrufen:
                                                      <br><br>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id2"/>
                                                  </div>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key2"/>
                                                  </div>
                                                </div>
                                            </div>
                                            <hr>
                                            <div class="pure-g">
                                              <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_general"></progress></div>
                                              <div style="min-height: 40px"></div>
                                            </div>
                                            <div class="pure-g">
                                              <div class="pure-u-1 pure-u-sm-3-5">
                                                <button class="pure-button button-update-general">Übernehmen</button>
                                                <button class="pure-button button-reboot">Neustart</button>
                                              </div>
                                            </div>
                                          </div>
                                    
                                          <div class="panel pure-form" id="panel-wifi">
                                            <div class="header">
                                                <h1>WiFi 📶</h1>
                                                <h2>Gerätebezeichnung (Hostname) bei "Allgemein" festlegen</h2>
                                            </div>
                                            <br>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">SSID:</label>
                                              <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ssid" type="text"/>
                                            </div>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                                              <input class="pure-u-1 pure-u-sm-2-5 wifi" name="wifipassword" type="password"/>
                                              <span class="no-select password-reveal"></span>
                                            </div>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">DHCP</label>
                                              <div class="pure-u-1 pure-u-sm-2-5  on_off"><input type="checkbox" name="dhcp" id="dhcp" class="wifi" /></div>
                                            </div>
                                            <div class="wifi_details">
                                              <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Static IP:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_static" type="text"/>
                                              </div>
                                              <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Netmask:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_netmask" type="text"/>
                                              </div>
                                              <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Gateway:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_gateway" type="text"/>
                                              </div>
                                              <div class="pure-g">
                                                <label class="pure-u-1 pure-u-sm-1-5">Nameserver:</label>
                                                <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_nameserver" type="text"/>
                                              </div>
                                            </div>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">RF-Power:</label>
                                              <input class="pure-u-1 pure-u-sm-1-5 wifi" name="rfpower" type="number" min="0" max="25" placeholder="0..25dBm"/>
                                              <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;dBm</span>
                                            </div>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">MDNS</label>
                                              <div class="pure-u-1 pure-u-sm-2-5 on_off"><input type="checkbox" name="mdns" class="wifi" /></div>
                                              <div class="pure-u-1 pure-u-sm-3-5"></div>
                                              <div class="pure-u-1 pure-u-sm-1-5"></div>
                                              <div class="pure-u-1 pure-u-sm-4-5 hint">
                                                  Wenn der Browser / das BS MDNS unterstützen, kann dieses Gerät unter "<span name="devicename" class="wifi"></span>.local" erreicht werden.
                                                  Das Verfahren ist auch als Bonjour bekannt.
                                              </div>
                                            </div>
                                            <div class="pure-g">
                                              <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_wifi"></progress></div>
                                              <div style="min-height:40px"></div>
                                            </div>
                                            <div class="pure-g">
                                              <div class="pure-u-1 pure-u-sm-3-5">
                                                <button class="pure-button button-update-wifi">Übernehmen</button>
                                                <button class="pure-button button-reboot">Neustart</button>
                                              </div>
                                            </div>
                                            <hr>
                                            <div class="pure-g">
                                              <label class="pure-u-1 pure-u-sm-1-5">WiFi-Scan</label>
                                              <div class="pure-u-1 pure-u-sm-4-5"><span name="stations"></span></div>
                                            </div>
                                          </div>
                                    
                                          <div class="panel pure-form" id="panel-mqtt">
                                              <div class="header">
                                                  <h1>MQTT</h1>
                                                  <h2>Einen MQTT broker im lokalen Netzwerk definieren.</h2>
                                              </div>
                                              <br>
                                              <div class="pure-g">
                                                  <label class="pure-u-1 pure-u-sm-1-5">MQTT aktiv:</label>
                                                  <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_enabled" id="mqtt_enabled" class="mqtt"/></div>
                                              </div>
                                              <div class="mqtt_details">
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT Broker</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_broker" type="text" placeholder="IP or address of your broker" />
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT Port</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_port" type="number" value="1883" />
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT User</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_user" type="text" placeholder="Frei lassen wenn kein Benutzer definiert ist" autocomplete="off" />
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT Passwort</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_password" type="password" placeholder="Frei lassen wenn kein Passwort definiert ist" autocomplete="new-password" spellcheck="false" />
                                                    <span class="no-select password-reveal"></span>
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT Client ID</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_clientid" type="text"/>
                                                    <div class="pure-u-0 pure-u-sm-2-5"></div>
                                                    <div class="pure-u-0 pure-u-sm-1-5"></div>
                                                    <div class="pure-u-1 pure-u-sm-2-5 hint">
                                                        Wenn nicht definiert, wird automatisch eine ID generiert
                                                    </div>
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT QoS</label>
                                                    <select class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_qos">
                                                        <option value="0">0: At most once</option>
                                                        <option value="1">1: At least once</option>
                                                        <option value="2">2: Exactly once</option>
                                                    </select>
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT Retain</label>
                                                    <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_retain" class="mqtt"/></div>
                                                </div>
                                                <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MQTT Keep Alive</label>
                                                    <input class="pure-u-1 pure-u-sm-1-5 mqtt" type="number" name="mqtt_keep" min="0" max="3600" value="30"/>
                                                    <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;sec</span>
                                                </div>
                                                <div class="pure-g">
                                                    <div class="pure-u-1 pure-u-sm-1-5"></div>
                                                    <div class="pure-u-1 pure-u-sm-2-5 hint">
                                                        Die publish-message wird im definierten Intervall gesendet.
                                                    </div>
                                                </div>
                                                <div class="pure-g">
                                                  <label class="pure-u-1 pure-u-sm-1-5">MQTT publish:</label>
                                                  <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_pub" type="text"/>
                                                </div>
                                                <!--<div class="pure-g">-->
                                                  <!--<label class="pure-u-1 pure-u-sm-1-5">MQTT subscribe:</label>-->
                                                  <!--<input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_sub" type="text"/>-->
                                                <!--</div>-->
                                                <div class="pure-g">
                                                  <label class="pure-u-1 pure-u-sm-1-5">MQTT Last Will:</label>
                                                  <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_will" type="text"/>
                                                </div>
                                              </div>
                                              <hr>
                                              <div class="pure-g">
                                                <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_mqtt"></progress></div>
                                                <div style="min-height:40px"></div>
                                              </div>
                                              <div class="pure-g">
                                                <div class="pure-u-1 pure-u-sm-3-5">
                                                  <button class="pure-button button-update-mqtt">Übernehmen</button>
                                                  <button class="pure-button button-reboot">Neustart</button>
                                                </div>
                                              </div>
                                          </div>
                                    
                                          <div class="panel pure-form" id="panel-update">
                                              <div class="header">
                                                  <h1>Software-Update ♺</h1>
                                                  <!--<h4>Configure your NTP (Network Time Protocol) servers and local configuration to keep your device time up to the second for your location.</h4>-->
                                                <br>
                                              </div>
                                              <br><br><br>
                                              <div class="pure-g">
                                                  <label class="pure-u-1 pure-u-sm-1-5">Datei:</label>
                                                  <input class="pure-u-1 pure-u-sm-2-5" name="filename" type="text" readonly />
                                              </div>
                                              <div class="pure-g">
                                                <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_update"></progress></div>
                                                <div style="min-height:40px"></div>
                                              </div>
                                              <div class="main-buttons pure-g">
                                                  <button class="pure-button button-upgrade-browse pure-u-1 pure-u-sm-2-24">Auswahl</button>
                                                  <div class="pure-u-1 pure-u-sm-1-24"></div>
                                                  <button class="pure-button button-upgrade pure-u-1 pure-u-sm-2-24">Update</button>
                                                  <div class="pure-u-1 pure-u-sm-1-24"></div>
                                                  <button class="pure-button button-reboot pure-u-1 pure-u-sm-2-24">Neustart</button>
                                              </div>
                                              <input name="upgrade" type="file" style="display:none;"/>
                                          </div>
                                    
                                          <div class="panel" id="panel-log">
                                              <div class="header">
                                                  <h1>LOG 🗊</h1>
                                                  <!--<h2> style="color:#555;">-->
                                                  <h2>
                                                      Ereignisse anzeigen
                                                  </h2>
                                              </div>
                                              <br>
                                              <div class="pure-g">
                                                <div class="pure-u-2-5 "><span name="page"></span></div>
                                              </div>
                                              <div class="pure-g">
                                                  <div class="pure-u-1 log"><span class="terminal" name="list"></span></div>
                                                  <!--<div class=""><span class="terminal" name="list"></span></div>-->
                                              </div>
                                              <br>
                                              <div class="pure-g">
                                                  <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-prev">Seite -</button></div>
                                                  <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-next">Seite +</button></div>
                                                  <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-clear">Log löschen</button></div>
                                              </div>
                                              <br>
                                              <div class="pure-g">
                                                  <div class="pure-u-1 pure-u-sm-1-5">Tagesverbrauch</div>
                                                  <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-hist_clear">Löschen</button></div>
                                              </div>
                                          </div>
                                          <div class="panel" id="panel-hist">
                                              <div class="header">
                                                  <h1>Versionsinfo</h1>
                                              </div>
                                              <br>
                                              <div class="pure-g hist">
                                                <div class="pure-u-1">
                                                  <h3>Version 1.2.0</h3>
                                                  Neues Filesystem LittleFs eingeführt. Leider gehen dadurch alle Konfigurations- und Logdateien verloren.
                                                  Kleine Bugs behoben.
                                                  <br>
                                                  <h3>Version 1.1.5</h3>
                                                  Antwort auf rest-Anfrage ist gesperrt, so lange Zähler nicht synchron ist.
                                                  <br>
                                                  <h3>Version 1.1.4</h3>
                                                  Alle Web-Dateien werden vom lokalen Server bereitgestellt, d.h. kein Nachladen aus externen Quellen ist notwendig. Ausnahme: Chart-Grafik, aber dazu ist grundsätzlich eine Internetverbindung notwendig.
                                                  <br>
                                                  Logdatei und Log-Anzeige: übersteigt die Größe der Logdatei ca. 1000 Zeilen, dann wird sie gelöscht und neu erzeugt. Der Seitenabruf wurde verbessert wegen Timeout-Problemen.
                                                  <br>
                                                  <h3>Version 1.1.3</h3>
                                                  Leerzeichen in SSID erlaubt.
                                                  Einige HTML-Bugs bereinigt.
                                                  <br>
                                                  <h3>Version 1.1.2</h3>
                                                  Saldo 1.7.0 - 2.7.0 wird angezeigt.<br>
                                                  Die Energie-History wurde ergänzt und zeigt jetzt auch die Lieferung und den Saldo per Tag an.
                                                  <br>
                                                  <h3>Version 1.1.1</h3>
                                                  Einführung Versionsinfo.<br>
                                                  Bugfix MQTT.<br>
                                                  Die blaue LED leuchtet jetzt dauernd, sobald eine Verbindung zu einem Router (Access-Point) aufgebaut ist.<br>
                                                  Wenn das Modul selbst als Access-Point auftritt (Jumper gesetzt), blinkt die LED. Die Netzwerkkennung (SSID) ist dann "ESP8266_AP",
                                                  die Verbindung kann unter 192.168.4.1 aufgebaut werden.<br>
                                                  <h3>Version 1.1.0</h3>
                                                  Der Datenabruf von Thingspeak musste geändert werden, weil die bisherige Methhode mit jsonp nicht mehr unterstützt wird.
                                                  Durch die Änderung des API können sehr restriktive Webbrowser u.U. keine Daten mehr abrufen.<br>
                                                  Die gesamte Oberfläche wurde neu gestaltet, im Hintergrund laufen jetzt alle Vorgänge asynchron ab. Die Betriebssicherheit
                                                  sollte dadurch noch besser werden.
                                                </div>
                                              </div>
                                          </div>
                                        </div>
                                    </div>
                                    
                                    <!--<script src="chart.js"></script>-->
                                    <script src="cust.js"></script>
                                    
                                    </body>
                                    </html>
                                    
                                    HomoranH 1 Antwort Letzte Antwort
                                    0
                                    • HomoranH Homoran

                                      @goetschhofer sagte in Parser Adapter:

                                      @homoran

                                      Vielen Dank nochmals für die Klarstellung und Erläuterung.

                                      wo ist denn der Quelltext?

                                      @homoran sagte in Parser Adapter:

                                      dazu brauche ich den echten Seitenquelltext (rechte Maustaste in die Seite wo die Werte stehen und Seitenquelltext anzeigen anklicken)

                                      @goetschhofer sagte in Parser Adapter:

                                      Die Regex stimmt soweit,

                                      selbst das stimmt nicht, außer du willst den RegEx in php verwenden.
                                      iobroker nutzt aber Javascript.

                                      G Offline
                                      G Offline
                                      GOETSCHHOFER
                                      schrieb am zuletzt editiert von
                                      #31

                                      @homoran said in Parser Adapter:

                                      @goetschhofer sagte in Parser Adapter:

                                      Die Regex stimmt soweit,

                                      selbst das stimmt nicht, außer du willst den RegEx in php verwenden.
                                      iobroker nutzt aber Javascript.

                                      Ja, dies kann ich nachvollziehen.
                                      Beim Test mir Regex war ich offenbar zu schnell, bei Java zeigt er einen Fehler an.

                                      421ef5e8-cf16-43ee-ab91-7e09281aad1e-image.png

                                      HomoranH 1 Antwort Letzte Antwort
                                      0
                                      • Q Offline
                                        Q Offline
                                        Qlink
                                        schrieb am zuletzt editiert von
                                        #32

                                        Hi Leute,

                                        ich hätte eine Frage bzgl. Regex:

                                        Meine Abfrage lautet: "Drive Warning"[^}]+\D\s(\d+)

                                        Auf regex101.com bekomme ich mit meiner Abfrage den richtigen Wert:
                                        https://regex101.com/r/NxzobQ/1

                                        6f6c8147-bf0d-4a66-a748-6a0081fc3c36-image.png

                                        wenn ich dieselbe Abfrage im Parser Adapter verwende bekomme ich den falschen Wert retour:

                                        2b558ef6-cc73-4e9d-b8b1-dd5a12690d69-image.png

                                        Wo habe ich hier einen Fehler drin, bzw. wieso bekomme ich unterschiedliche Ergebnisse ?

                                        Beste Grüße

                                        HomoranH 1 Antwort Letzte Antwort
                                        0
                                        • G GOETSCHHOFER

                                          @homoran said in Parser Adapter:

                                          wo ist denn der Quelltext?

                                          @homoran sagte in Parser Adapter:

                                          dazu brauche ich den echten Seitenquelltext (rechte Maustaste in die Seite wo die Werte stehen und Seitenquelltext anzeigen anklicken)

                                          @goetschhofer sagte in Parser Adapter:

                                          Die Regex stimmt soweit,

                                          selbst das stimmt nicht, außer du willst den RegEx in php verwenden.
                                          iobroker nutzt aber Javascript.

                                          Seitenquelltext anzeigen mit rechter Maustaste:

                                          <!doctype html>
                                          <html lang="de">
                                          <head>
                                              <!--<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval';">-->
                                              <meta charset="utf-8">
                                              <meta name="viewport" content="width=device-width, initial-scale=1.0">
                                              <title>ESP-Device</title>
                                              <link rel="stylesheet" href="custom.css">
                                              <link rel="icon" type="image/png" href="data:image/png;base64,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">
                                              <script src="jquery351.js"></script>
                                          </head>
                                          <body>
                                          <div id="layout">  <!--This is the parent `<div>` that contains the menu and the content area :: side-menu.css-->
                                              <!-- Menu toggle -->
                                              <!--<a href="#menu" id="menuLink" class="menu-link">-->
                                              <a id="menuLink" class="menu-link">
                                                  <!-- Hamburger icon -->
                                                  <span></span>
                                              </a>
                                              <div id="menu">
                                                  <div class="pure-menu">
                                                      <!--<a class="pure-menu-heading" href="#">Device</a>-->
                                                      <span class="pure-menu-heading" name="devicetype">DeviceType</span>
                                                      <ul class="pure-menu-list">
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-home">Zähler</a></li>
                                                          <li class="pure-menu-item menu-graf"><a class="pure-menu-link" data="panel-graf">Grafik</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-log">Log</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-status">Status</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-general">Allgemein</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-wifi">WiFi</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-mqtt">MQTT</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-update">Update</a></li>
                                                          <li class="pure-menu-item"><a class="pure-menu-link" data="panel-hist">Versionsinfo</a></li>
                                                      </ul>
                                                  </div>
                                              </div>
                                          
                                              <div class="content">  <!--The content `<div>` is where all your content goes.  :: side-menu.css-->
                                                <div class="panel" id="panel-graf">
                                                  <div id="chart-container" class="chart">
                                                      <br>Daten von Thingspeak werden geladen...<br>
                                                  </div>
                                                  <div class="chart-below">
                                                  <div class="pure-g">
                                                    <div class="pure-u-1 pure-u-sm-1-5">
                                                      <button class="pure-button button-load" onclick="loadOneChannel();" style="margin-left: 10px;width:160px;">Daten nachladen:</button>
                                                    </div>
                                                    <select class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;" id="Loads">
                                                      <option selected="selected" value="1">1 Tag</option>
                                                      <option value="2">2 Tage</option>
                                                      <option value="3">3 Tage</option>
                                                      <option value="4">4 Tage</option>
                                                      <option value="5">5 Tage</option>
                                                      <option value="6">6 Tage</option>
                                                      <option value="7">7 Tage</option>
                                                      <option value="8">8 Tage</option>
                                                      <option value="9">9 Tage</option>
                                                      <option value="10">10 Tage</option>
                                                    </select>
                                                    <select id="ChannelSelect" class="pure-u-1 pure-u-sm-1-5" style="margin-left: 10px;"></select>
                                                    <div class="pure-u-1 pure-u-sm-1-5">
                                                      <button class="pure-button button-graf" style="margin-left:10px;width:160px;">Chart neu laden</button>
                                                    </div>
                                                  </div>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">Grafikdaten autom. aktualisieren</label>
                                                    <div class="pure-u-1 pure-u-sm-1-5 on_off">
                                                      <input id="Update" name="Update" type="checkbox" class="">
                                                    </div>
                                                    <div class="pure-u-1 pure-u-sm-2-5"></div>
                                                  </div>
                                                  </div>
                                                </div>
                                          
                                                <div class="panel" id="panel-home">
                                                  <div class="header">
                                                      <h1>AMIS-Zähler</h1>
                                                      <br>
                                                  </div><br>
                                                  <div class="amis">
                                                      <div class="pure-u-11-24">Uhrzeit (Zähler)</div>
                                                      <div class="pure-u-11-24" name="now"></div>
                                                      <div class="pure-u-11-24">1.8.0 (Energie A+)</div>
                                                      <strong><div class="pure-u-11-24" name="1_8_0" post=" kWh" div="1000"></div></strong>
                                                      <div class="pure-u-11-24">2.8.0 (Energie A-)</div>
                                                      <strong><div class="pure-u-11-24" name="2_8_0" post=" kWh" div="1000"></div></strong>
                                                      <div class="pure-u-11-24">3.8.1 (Energie R+)</div>
                                                      <div class="pure-u-11-24" name="3_8_1" post=" kVarh" div="1000"></div>
                                                      <div class="pure-u-11-24">4.8.1 (Energie R-)</div>
                                                      <div class="pure-u-11-24" name="4_8_1" post=" kVarh" div="1000"></div>
                                                      <div class="pure-u-11-24">1.7.0 (Wirk. P+)</div>
                                                      <strong><div class="pure-u-11-24" name="1_7_0" post=" kW" div="1000"></div></strong>
                                                      <div class="pure-u-11-24">2.7.0 (Wirk. P-)</div>
                                                      <strong><div class="pure-u-11-24" name="2_7_0" post=" kW" div="1000"></div></strong>
                                                      <div class="pure-u-11-24">Saldo 1.7.0-2.7.0</div>
                                                      <strong><div class="pure-u-11-24" id="saldo"></div></strong>
                                                      <div class="pure-u-11-24">3.7.0 (Blind. Q+)</div>
                                                      <div class="pure-u-11-24" name="3_7_0" post=" kVar" div="1000"></div>
                                                      <div class="pure-u-11-24">4.7.0 (Blind. Q-)</div>
                                                      <div class="pure-u-11-24" name="4_7_0" post=" kVar" div="1000"></div>
                                                      <div class="pure-u-11-24">1.128.0 (Inkasso)</div>
                                                      <div class="pure-u-11-24" name="1_128_0"></div>
                                                      <br><hr>
                                                      <div class="pure-u-11-24">Uptime</div>
                                                      <div class="pure-u-11-24" name="uptime"></div>
                                                      <div class="pure-u-11-24">Upload Thingspeak</div>
                                                      <div class="pure-u-11-24" name="things_up"></div>
                                                      <br><hr>
                                                      <h3>Energie [kWh]</h3>
                                                      <div class="pure-u-1">
                                                        <table class="pure-table pure-table-striped" width="100%">
                                                          <thead><tr><th>Tag</th><th align="right">Bezug</th><th align="right">Lfrg.</th><th align="right">Diff.</th></tr></thead>
                                                          <Tbody>
                                                            <tr><td>Heute</td>    <td align="right" id="tdy_in"></td><td align="right" id="tdy_out"></td><td align="right" id="tdy_diff"></td></tr>
                                                            <tr><td id="wd0"></td><td align="right" id="wd_in0"></td><td align="right" id="wd_out0"></td><td align="right" id="wd_diff0"></td></tr>
                                                            <tr><td id="wd1"></td><td align="right" id="wd_in1"></td><td align="right" id="wd_out1"></td><td align="right" id="wd_diff1"></td></tr>
                                                            <tr><td id="wd2"></td><td align="right" id="wd_in2"></td><td align="right" id="wd_out2"></td><td align="right" id="wd_diff2"></td></tr>
                                                            <tr><td id="wd3"></td><td align="right" id="wd_in3"></td><td align="right" id="wd_out3"></td><td align="right" id="wd_diff3"></td></tr>
                                                            <tr><td id="wd4"></td><td align="right" id="wd_in4"></td><td align="right" id="wd_out4"></td><td align="right" id="wd_diff4"></td></tr>
                                                            <tr><td id="wd5"></td><td align="right" id="wd_in5"></td><td align="right" id="wd_out5"></td><td align="right" id="wd_diff5"></td></tr>
                                                            <tr><td id="wd6"></td><td align="right" id="wd_in6"></td><td align="right" id="wd_out6"></td><td align="right" id="wd_diff6"></td></tr>
                                                          </Tbody>
                                                        </table>
                                                      </div>
                                                  </div>
                                                </div>
                                          
                                                <div class="panel pure-form" id="panel-status">
                                                  <div class="header">
                                                      <h1>STATUS 🛈</h1>
                                                      <br>
                                                  </div>
                                                  <div class="pure-u-1 pure-u-lg-1-2 state">
                                                      <div class="pure-u-1-2">Chip ID</div>
                                                      <div class="pure-u-11-24"><span class="right" name="chipid"></span></div>
                                                      <div class="pure-u-1-2">Wifi MAC</div>
                                                      <div class="pure-u-11-24"><span class="right" name="mac"></span></div>
                                                      <div class="pure-u-1-2">SDK version</div>
                                                      <div class="pure-u-11-24"><span class="right" name="sdk"></span></div>
                                                      <div class="pure-u-1-2">Core version</div>
                                                      <div class="pure-u-11-24"><span class="right" name="core"></span></div>
                                                      <div class="pure-u-1-2">App version</div>
                                                      <div class="pure-u-11-24"><span class="right" name="version"></span></div>
                                                      <div class="pure-u-1-2">App name</div>
                                                      <div class="pure-u-11-24"><span class="right" name="app_name"></span></div>
                                                      <div class="pure-u-1-2">Firmware size</div>
                                                      <div class="pure-u-11-24"><span class="right" name="sketchsize" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">Free space</div>
                                                      <div class="pure-u-11-24"><span class="right" name="freesize" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">LITTLE-FS size</div>
                                                      <div class="pure-u-11-24"><span class="right" name="littlefs_size" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">LITTLE-FS used</div>
                                                      <div class="pure-u-11-24"><span class="right" name="littlefs_used" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">Max. free block size</div>
                                                      <div class="pure-u-11-24"><span class="right" name="max_free_blocksz" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">Free heap</div>
                                                      <div class="pure-u-11-24"><span class="right" name="heap_free" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">Heap fragmentation</div>
                                                      <div class="pure-u-11-24"><span class="right" name="heap_fragment" post=" %"></span></div>
                                                      <div class="pure-u-1-2">Flash speed</div>
                                                      <div class="pure-u-11-24"><span class="right" name="flashspeed" post=" Hz"></span></div>
                                                      <div class="pure-u-1-2">Flash size</div>
                                                      <div class="pure-u-11-24"><span class="right" name="flashsize" post=" bytes"></span></div>
                                                      <div class="pure-u-1-2">Flash mode</div>
                                                      <div class="pure-u-11-24"><span class="right" name="flashmode"></span></div>
                                                      <div class="pure-u-1-2">CPU Frequ.</div>
                                                      <div class="pure-u-11-24"><span class="right" name="cpu" post=" MHz"></span></div>
                                                  </div>
                                                  <div class="pure-u-1 pure-u-lg-11-24 state">
                                                      <div class="pure-u-1-2">Network</div>
                                                      <div class="pure-u-11-24" name="ssid"></div>
                                                      <div class="pure-u-1-2">Channel</div>
                                                      <div class="pure-u-11-24" name="channel"></div>
                                                      <div class="pure-u-1-2">RSSI</div>
                                                      <div class="pure-u-11-24" name="rssi" post=" dB"></div>
                                                      <div class="pure-u-1-2">IP</div>
                                                      <div class="pure-u-11-24" name="deviceip"></div>
                                                      <div class="pure-u-1-2">DNS</div>
                                                      <div class="pure-u-11-24" name="dns"></div>
                                                      <div class="pure-u-1-2">Gateway</div>
                                                      <div class="pure-u-11-24" name="gateway"></div>
                                                      <div class="pure-u-1-2">Netmask</div>
                                                      <div class="pure-u-11-24" name="netmask"></div>
                                                      <div class="pure-u-1-2">VCC</div>
                                                      <div class="pure-u-11-24"><span class="right" name="vcc">? </span><span>mV</span></div>
                                                      <div class="pure-u-1-2 module-mqtt">MQTT Status</div>
                                                      <div class="pure-u-11-24 module-mqtt" name="mqttStatus"></div>
                                                      <div class="pure-u-1-2 module-ntp">NTP Status</div>
                                                      <div class="pure-u-11-24 module-ntp" name="ntpSynced"></div>
                                                      <div class="pure-u-1-2 module-ntp">Current time</div>
                                                      <div class="pure-u-11-24 module-ntp" name="now"></div>
                                                      <div class="pure-u-1-2">Uptime</div>
                                                      <div class="pure-u-11-24" name="uptime"></div>
                                                  </div>
                                                </div>
                                          
                                                <div class="panel  pure-form" id="panel-general">
                                                  <div class="header">
                                                      <h1>Allgemein</h1>
                                                      <!--<h3>Current configuration</h3>-->
                                                      <br>
                                                  </div>
                                                  <br>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Name Gerät:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="devicename" placeholder="ESP-Device" />
                                                  </div>
                                                      <br>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Authentifizierung:</label>
                                                      <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="use_auth" id="use_auth" class="general"/></div>
                                                  </div>
                                                  <div class="auth_details">
                                                    <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Benutzer:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_user" value="Admin"/>
                                                    </div>
                                                    <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 general" name="auth_passwd" type="password" spellcheck="false" />
                                                      <span class="no-select password-reveal"></span>
                                                    </div>
                                                  </div>
                                                  <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">System-Log:</label>
                                                      <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="log_sys" id="log_sys" class="general"/></div>
                                                  </div>
                                                    <br>
                                                  <div style="display:block;">
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">Amis-Key:</label>
                                                          <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="amis_key"/>
                                                      </div>
                                                          <br>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">ThingSpeak/Highcharts aktiv:</label>
                                                          <div class="pure-u-1 pure-u-sm-1-5"><input type="checkbox" name="thingspeak_aktiv" id="thingspeak_aktiv" class="general"/></div>
                                                      </div>
                                                      <div class="things_details">
                                                        <div class="pure-g">
                                                            <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                                            <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id"/>
                                                        </div>
                                                        <div class="pure-g">
                                                            <label class="pure-u-1 pure-u-sm-1-5">Write API Key:</label>
                                                            <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="write_api_key"/>
                                                        </div>
                                                        <div class="pure-g">
                                                            <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                                            <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key"/>
                                                        </div>
                                                        <div class="pure-g">
                                                            <label class="pure-u-1 pure-u-sm-1-5">Intervall (sec):</label>
                                                            <input class="pure-u-1 pure-u-sm-2-5 general" type="number" min="30" name="thingspeak_iv"/>
                                                        </div>
                                                            <hr>
                                                            <br>
                                                            Daten für einen zweiten Zähler abrufen:
                                                            <br><br>
                                                        <div class="pure-g">
                                                            <label class="pure-u-1 pure-u-sm-1-5">Channel ID:</label>
                                                            <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="channel_id2"/>
                                                        </div>
                                                        <div class="pure-g">
                                                            <label class="pure-u-1 pure-u-sm-1-5">Read API Key:</label>
                                                            <input class="pure-u-1 pure-u-sm-2-5 general" type="text" name="read_api_key2"/>
                                                        </div>
                                                      </div>
                                                  </div>
                                                  <hr>
                                                  <div class="pure-g">
                                                    <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_general"></progress></div>
                                                    <div style="min-height: 40px"></div>
                                                  </div>
                                                  <div class="pure-g">
                                                    <div class="pure-u-1 pure-u-sm-3-5">
                                                      <button class="pure-button button-update-general">Übernehmen</button>
                                                      <button class="pure-button button-reboot">Neustart</button>
                                                    </div>
                                                  </div>
                                                </div>
                                          
                                                <div class="panel pure-form" id="panel-wifi">
                                                  <div class="header">
                                                      <h1>WiFi 📶</h1>
                                                      <h2>Gerätebezeichnung (Hostname) bei "Allgemein" festlegen</h2>
                                                  </div>
                                                  <br>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">SSID:</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ssid" type="text"/>
                                                  </div>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">Passwort:</label>
                                                    <input class="pure-u-1 pure-u-sm-2-5 wifi" name="wifipassword" type="password"/>
                                                    <span class="no-select password-reveal"></span>
                                                  </div>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">DHCP</label>
                                                    <div class="pure-u-1 pure-u-sm-2-5  on_off"><input type="checkbox" name="dhcp" id="dhcp" class="wifi" /></div>
                                                  </div>
                                                  <div class="wifi_details">
                                                    <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Static IP:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_static" type="text"/>
                                                    </div>
                                                    <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Netmask:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_netmask" type="text"/>
                                                    </div>
                                                    <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Gateway:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_gateway" type="text"/>
                                                    </div>
                                                    <div class="pure-g">
                                                      <label class="pure-u-1 pure-u-sm-1-5">Nameserver:</label>
                                                      <input class="pure-u-1 pure-u-sm-2-5 wifi" name="ip_nameserver" type="text"/>
                                                    </div>
                                                  </div>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">RF-Power:</label>
                                                    <input class="pure-u-1 pure-u-sm-1-5 wifi" name="rfpower" type="number" min="0" max="25" placeholder="0..25dBm"/>
                                                    <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;dBm</span>
                                                  </div>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">MDNS</label>
                                                    <div class="pure-u-1 pure-u-sm-2-5 on_off"><input type="checkbox" name="mdns" class="wifi" /></div>
                                                    <div class="pure-u-1 pure-u-sm-3-5"></div>
                                                    <div class="pure-u-1 pure-u-sm-1-5"></div>
                                                    <div class="pure-u-1 pure-u-sm-4-5 hint">
                                                        Wenn der Browser / das BS MDNS unterstützen, kann dieses Gerät unter "<span name="devicename" class="wifi"></span>.local" erreicht werden.
                                                        Das Verfahren ist auch als Bonjour bekannt.
                                                    </div>
                                                  </div>
                                                  <div class="pure-g">
                                                    <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_wifi"></progress></div>
                                                    <div style="min-height:40px"></div>
                                                  </div>
                                                  <div class="pure-g">
                                                    <div class="pure-u-1 pure-u-sm-3-5">
                                                      <button class="pure-button button-update-wifi">Übernehmen</button>
                                                      <button class="pure-button button-reboot">Neustart</button>
                                                    </div>
                                                  </div>
                                                  <hr>
                                                  <div class="pure-g">
                                                    <label class="pure-u-1 pure-u-sm-1-5">WiFi-Scan</label>
                                                    <div class="pure-u-1 pure-u-sm-4-5"><span name="stations"></span></div>
                                                  </div>
                                                </div>
                                          
                                                <div class="panel pure-form" id="panel-mqtt">
                                                    <div class="header">
                                                        <h1>MQTT</h1>
                                                        <h2>Einen MQTT broker im lokalen Netzwerk definieren.</h2>
                                                    </div>
                                                    <br>
                                                    <div class="pure-g">
                                                        <label class="pure-u-1 pure-u-sm-1-5">MQTT aktiv:</label>
                                                        <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_enabled" id="mqtt_enabled" class="mqtt"/></div>
                                                    </div>
                                                    <div class="mqtt_details">
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT Broker</label>
                                                          <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_broker" type="text" placeholder="IP or address of your broker" />
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT Port</label>
                                                          <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_port" type="number" value="1883" />
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT User</label>
                                                          <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_user" type="text" placeholder="Frei lassen wenn kein Benutzer definiert ist" autocomplete="off" />
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT Passwort</label>
                                                          <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_password" type="password" placeholder="Frei lassen wenn kein Passwort definiert ist" autocomplete="new-password" spellcheck="false" />
                                                          <span class="no-select password-reveal"></span>
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT Client ID</label>
                                                          <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_clientid" type="text"/>
                                                          <div class="pure-u-0 pure-u-sm-2-5"></div>
                                                          <div class="pure-u-0 pure-u-sm-1-5"></div>
                                                          <div class="pure-u-1 pure-u-sm-2-5 hint">
                                                              Wenn nicht definiert, wird automatisch eine ID generiert
                                                          </div>
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT QoS</label>
                                                          <select class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_qos">
                                                              <option value="0">0: At most once</option>
                                                              <option value="1">1: At least once</option>
                                                              <option value="2">2: Exactly once</option>
                                                          </select>
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT Retain</label>
                                                          <div class="pure-u-1 pure-u-sm-2-5"><input type="checkbox" name="mqtt_retain" class="mqtt"/></div>
                                                      </div>
                                                      <div class="pure-g">
                                                          <label class="pure-u-1 pure-u-sm-1-5">MQTT Keep Alive</label>
                                                          <input class="pure-u-1 pure-u-sm-1-5 mqtt" type="number" name="mqtt_keep" min="0" max="3600" value="30"/>
                                                          <span class="pure-u-1 pure-u-sm-1-5">&nbsp;&nbsp;sec</span>
                                                      </div>
                                                      <div class="pure-g">
                                                          <div class="pure-u-1 pure-u-sm-1-5"></div>
                                                          <div class="pure-u-1 pure-u-sm-2-5 hint">
                                                              Die publish-message wird im definierten Intervall gesendet.
                                                          </div>
                                                      </div>
                                                      <div class="pure-g">
                                                        <label class="pure-u-1 pure-u-sm-1-5">MQTT publish:</label>
                                                        <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_pub" type="text"/>
                                                      </div>
                                                      <!--<div class="pure-g">-->
                                                        <!--<label class="pure-u-1 pure-u-sm-1-5">MQTT subscribe:</label>-->
                                                        <!--<input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_sub" type="text"/>-->
                                                      <!--</div>-->
                                                      <div class="pure-g">
                                                        <label class="pure-u-1 pure-u-sm-1-5">MQTT Last Will:</label>
                                                        <input class="pure-u-1 pure-u-sm-2-5 mqtt" name="mqtt_will" type="text"/>
                                                      </div>
                                                    </div>
                                                    <hr>
                                                    <div class="pure-g">
                                                      <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_mqtt"></progress></div>
                                                      <div style="min-height:40px"></div>
                                                    </div>
                                                    <div class="pure-g">
                                                      <div class="pure-u-1 pure-u-sm-3-5">
                                                        <button class="pure-button button-update-mqtt">Übernehmen</button>
                                                        <button class="pure-button button-reboot">Neustart</button>
                                                      </div>
                                                    </div>
                                                </div>
                                          
                                                <div class="panel pure-form" id="panel-update">
                                                    <div class="header">
                                                        <h1>Software-Update ♺</h1>
                                                        <!--<h4>Configure your NTP (Network Time Protocol) servers and local configuration to keep your device time up to the second for your location.</h4>-->
                                                      <br>
                                                    </div>
                                                    <br><br><br>
                                                    <div class="pure-g">
                                                        <label class="pure-u-1 pure-u-sm-1-5">Datei:</label>
                                                        <input class="pure-u-1 pure-u-sm-2-5" name="filename" type="text" readonly />
                                                    </div>
                                                    <div class="pure-g">
                                                      <div class="pure-u-1 pure-u-sm-1-5"><progress id="prgbar_update"></progress></div>
                                                      <div style="min-height:40px"></div>
                                                    </div>
                                                    <div class="main-buttons pure-g">
                                                        <button class="pure-button button-upgrade-browse pure-u-1 pure-u-sm-2-24">Auswahl</button>
                                                        <div class="pure-u-1 pure-u-sm-1-24"></div>
                                                        <button class="pure-button button-upgrade pure-u-1 pure-u-sm-2-24">Update</button>
                                                        <div class="pure-u-1 pure-u-sm-1-24"></div>
                                                        <button class="pure-button button-reboot pure-u-1 pure-u-sm-2-24">Neustart</button>
                                                    </div>
                                                    <input name="upgrade" type="file" style="display:none;"/>
                                                </div>
                                          
                                                <div class="panel" id="panel-log">
                                                    <div class="header">
                                                        <h1>LOG 🗊</h1>
                                                        <!--<h2> style="color:#555;">-->
                                                        <h2>
                                                            Ereignisse anzeigen
                                                        </h2>
                                                    </div>
                                                    <br>
                                                    <div class="pure-g">
                                                      <div class="pure-u-2-5 "><span name="page"></span></div>
                                                    </div>
                                                    <div class="pure-g">
                                                        <div class="pure-u-1 log"><span class="terminal" name="list"></span></div>
                                                        <!--<div class=""><span class="terminal" name="list"></span></div>-->
                                                    </div>
                                                    <br>
                                                    <div class="pure-g">
                                                        <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-prev">Seite -</button></div>
                                                        <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-next">Seite +</button></div>
                                                        <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-log-clear">Log löschen</button></div>
                                                    </div>
                                                    <br>
                                                    <div class="pure-g">
                                                        <div class="pure-u-1 pure-u-sm-1-5">Tagesverbrauch</div>
                                                        <div class="pure-u-1 pure-u-sm-1-5"><button class="pure-button button-hist_clear">Löschen</button></div>
                                                    </div>
                                                </div>
                                                <div class="panel" id="panel-hist">
                                                    <div class="header">
                                                        <h1>Versionsinfo</h1>
                                                    </div>
                                                    <br>
                                                    <div class="pure-g hist">
                                                      <div class="pure-u-1">
                                                        <h3>Version 1.2.0</h3>
                                                        Neues Filesystem LittleFs eingeführt. Leider gehen dadurch alle Konfigurations- und Logdateien verloren.
                                                        Kleine Bugs behoben.
                                                        <br>
                                                        <h3>Version 1.1.5</h3>
                                                        Antwort auf rest-Anfrage ist gesperrt, so lange Zähler nicht synchron ist.
                                                        <br>
                                                        <h3>Version 1.1.4</h3>
                                                        Alle Web-Dateien werden vom lokalen Server bereitgestellt, d.h. kein Nachladen aus externen Quellen ist notwendig. Ausnahme: Chart-Grafik, aber dazu ist grundsätzlich eine Internetverbindung notwendig.
                                                        <br>
                                                        Logdatei und Log-Anzeige: übersteigt die Größe der Logdatei ca. 1000 Zeilen, dann wird sie gelöscht und neu erzeugt. Der Seitenabruf wurde verbessert wegen Timeout-Problemen.
                                                        <br>
                                                        <h3>Version 1.1.3</h3>
                                                        Leerzeichen in SSID erlaubt.
                                                        Einige HTML-Bugs bereinigt.
                                                        <br>
                                                        <h3>Version 1.1.2</h3>
                                                        Saldo 1.7.0 - 2.7.0 wird angezeigt.<br>
                                                        Die Energie-History wurde ergänzt und zeigt jetzt auch die Lieferung und den Saldo per Tag an.
                                                        <br>
                                                        <h3>Version 1.1.1</h3>
                                                        Einführung Versionsinfo.<br>
                                                        Bugfix MQTT.<br>
                                                        Die blaue LED leuchtet jetzt dauernd, sobald eine Verbindung zu einem Router (Access-Point) aufgebaut ist.<br>
                                                        Wenn das Modul selbst als Access-Point auftritt (Jumper gesetzt), blinkt die LED. Die Netzwerkkennung (SSID) ist dann "ESP8266_AP",
                                                        die Verbindung kann unter 192.168.4.1 aufgebaut werden.<br>
                                                        <h3>Version 1.1.0</h3>
                                                        Der Datenabruf von Thingspeak musste geändert werden, weil die bisherige Methhode mit jsonp nicht mehr unterstützt wird.
                                                        Durch die Änderung des API können sehr restriktive Webbrowser u.U. keine Daten mehr abrufen.<br>
                                                        Die gesamte Oberfläche wurde neu gestaltet, im Hintergrund laufen jetzt alle Vorgänge asynchron ab. Die Betriebssicherheit
                                                        sollte dadurch noch besser werden.
                                                      </div>
                                                    </div>
                                                </div>
                                              </div>
                                          </div>
                                          
                                          <!--<script src="chart.js"></script>-->
                                          <script src="cust.js"></script>
                                          
                                          </body>
                                          </html>
                                          
                                          HomoranH Nicht stören
                                          HomoranH Nicht stören
                                          Homoran
                                          Global Moderator Administrators
                                          schrieb am zuletzt editiert von
                                          #33

                                          @goetschhofer sagte in Parser Adapter:

                                          Seitenquelltext anzeigen mit rechter Maustaste:

                                          da stehen, wie bereits vermutet, nur Variable und js-Befehle drin:

                                                            <tr><td>Heute</td>    <td align="right" id="tdy_in"></td><td align="right" id="tdy_out"></td><td align="right" id="tdy_diff"></td></tr>
                                                            <tr><td id="wd0"></td><td align="right" id="wd_in0"></td><td align="right" id="wd_out0"></td><td align="right" id="wd_diff0"></td></tr>
                                                            <tr><td id="wd1"></td><td align="right" id="wd_in1"></td><td align="right" id="wd_out1"></td><td align="right" id="wd_diff1"></td></tr>
                                                            <tr><td id="wd2"></td><td align="right" id="wd_in2"></td><td align="right" id="wd_out2"></td><td align="right" id="wd_diff2"></td></tr>
                                                            <tr><td id="wd3"></td><td align="right" id="wd_in3"></td><td align="right" id="wd_out3"></td><td align="right" id="wd_diff3"></td></tr>
                                                            <tr><td id="wd4"></td><td align="right" id="wd_in4"></td><td align="right" id="wd_out4"></td><td align="right" id="wd_diff4"></td></tr>
                                                            <tr><td id="wd5"></td><td align="right" id="wd_in5"></td><td align="right" id="wd_out5"></td><td align="right" id="wd_diff5"></td></tr>
                                                            <tr><td id="wd6"></td><td align="right" id="wd_in6"></td><td align="right" id="wd_out6"></td><td align="right" id="wd_diff6"></td></tr>
                                                          </Tbody>
                                          

                                          Dein Wert kommt nicht im Quelltext vor

                                          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
                                          1

                                          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

                                          455

                                          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