Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Daten aus einer Website mit Javascript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Daten aus einer Website mit Javascript

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      Tom63 last edited by

      Hallo Fangemeinde vom IO-Broker,

      ich bin seit 5 Tagen auch endlich glücklicher Besitzer eines Raspberry und habe mich dank des guten Image sofort für den IO-Broker als Smarthome Projekt entschieden. Neben dem PI-Hole läuft derzeit aktiv nur der IO-Broker.

      Ich habe auch eine SC18 Enthärtung, die ja per App viel zu sagen hat, aber eben sehr kryptisch.

      Zunächst ein Dank an diesen Beitrag, ich habe es in kurzer Zeit ohne besondere Vorkenntnisse zum Laufen bekommen. 😄

      Durch meine derzeit aktuelle Version vom IO-Broker (3.5.10) sind die hier hinterlegten Bilder auch schon wieder veraltet,

      z.B. Javascribt Ablageverzeichnis.

      Ich habe die Scribts derzeit ins Root-Verzeichnis gespeichert, da ich das Verzeichnis Global oder Common als falsch erachtet habe.

      Weiterhin habe ich es so verstanden, dass im Scribt 1 eigentlich nur einmalig die Datenfelder wie im Bild 3 dargestellt angelegt werden.

      Somit muss dieses Scribt nur einmal ausgeführt werden. Richtig ?

      Mit dem Logger werden jetzt die Daten permanent befüllt, die aus der SC18 entnommern werden.

      Somit liest er fortlaufend die aktuellen Anlagedaten in den Parser.

      Wichtig zu erwähnen für alle Anfänger (wie mich) -im Scribt 2 in der Zeile 15 ist die IP-Adresse der eigenen Anlage fest einzutragen

      ( Keine Constante im Kopf des Scribt festgelegt).

      Meine Anlage wird ab sofort ausgelesen und ich bin echt begeistert, wie schnell ich meine ersten Lösungen im IO-Broker dank Euch fertig habe.!

      Besten Dank - nun nur noch die Visualisierung und die 2. VIS ist nach dem tankerkönig online.

      Zusätzlich bin ich beim Überlegen die Messwerte z.B. für Verbrauch als Metadaten auch in den SQL-Server zu schreiben und dort zu archivieren.

      Wie schreiben uns weiter !

      1 Reply Last reply Reply Quote 0
      • F
        f0rd42 last edited by

        Kurze Frage zum Wasserverbrauch.

        Ist der nicht eigentlich pauschal falsch dadurch dass es ja immer einen Verschnitt gibt der nicht gemessen wird?

        Eigentlich müsste man also z.b 10 Liter Zapfen und dann sehen was die Anlage anzeigt und daraus einen Multiplikator berechnen oder habe ich hier einen Denkfehler?

        1 Reply Last reply Reply Quote 0
        • F
          f0rd42 last edited by

          noch etwas (unabhängig von der Frage nach dem Wasserverbrauch oben):

          Ich bekomme beim Request 2 immer folgende Fehlermeldung:

          javascript.0	2019-01-12 19:07:56.092	info	script.js.Gruenbeck_Logger: Request 5 ausgeführt
          javascript.0	2019-01-12 19:07:53.088	info	script.js.Gruenbeck_Logger: Request 4 ausgeführt
          javascript.0	2019-01-12 19:07:50.087	info	script.js.Gruenbeck_Logger: Request 3 ausgeführt
          javascript.0	2019-01-12 19:07:49.617	warn	at process._tickCallback (internal/process/next_tick.js:181:9)
          javascript.0	2019-01-12 19:07:49.617	warn	at _combinedTickCallback (internal/process/next_tick.js:139:11)
          javascript.0	2019-01-12 19:07:49.617	warn	at endReadableNT (_stream_readable.js:1064:12)
          javascript.0	2019-01-12 19:07:49.617	warn	at IncomingMessage.emit (events.js:208:7)
          javascript.0	2019-01-12 19:07:49.617	warn	at emitNone (events.js:111:20)
          javascript.0	2019-01-12 19:07:49.616	warn	at IncomingMessage. <anonymous>(/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13)
          javascript.0	2019-01-12 19:07:49.616	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:610:14)
          javascript.0	2019-01-12 19:07:49.616	warn	at exports.XMLHttpRequest.dispatchEvent (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
          javascript.0	2019-01-12 19:07:49.616	warn	at exports.XMLHttpRequest.Interval.xhr.onreadystatechange (script.js.Gruenbeck_Logger:74:33)
          javascript.0	2019-01-12 19:07:49.616	warn	State "Messwerte.0.SC18.Allgemein.D_C_4_1" not found
          javascript.0	2019-01-12 19:07:49.615	warn	at process._tickCallback (internal/process/next_tick.js:181:9)
          javascript.0	2019-01-12 19:07:49.615	warn	at _combinedTickCallback (internal/process/next_tick.js:139:11)
          javascript.0	2019-01-12 19:07:49.615	warn	at endReadableNT (_stream_readable.js:1064:12)
          javascript.0	2019-01-12 19:07:49.615	warn	at IncomingMessage.emit (events.js:208:7)
          javascript.0	2019-01-12 19:07:49.615	warn	at emitNone (events.js:111:20)
          javascript.0	2019-01-12 19:07:49.614	warn	at IncomingMessage. <anonymous>(/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13)
          javascript.0	2019-01-12 19:07:49.614	warn	at setState (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:610:14)
          javascript.0	2019-01-12 19:07:49.614	warn	at exports.XMLHttpRequest.dispatchEvent (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
          javascript.0	2019-01-12 19:07:49.614	warn	at exports.XMLHttpRequest.Interval.xhr.onreadystatechange (script.js.Gruenbeck_Logger:72:33)
          javascript.0	2019-01-12 19:07:49.613	warn	Wrong type of Messwerte.0.SC18.Allgemein.D_C_5_2: "string". Please fix, while deprecated and will not work in next versions.
          javascript.0	2019-01-12 19:07:47.083	info	script.js.Gruenbeck_Logger: Request 2 ausgeführt
          javascript.0	2019-01-12 19:07:44.082	info	script.js.Gruenbeck_Logger: Request 1 ausgeführt</anonymous></anonymous>
          

          und ab und zu (relativ oft) bekomme ich noch bei den unterschiedlichsten Requests:

          javascript.0	2019-01-12 19:07:32.076	error	at Timer.listOnTimeout (timers.js:290:5)
          javascript.0	2019-01-12 19:07:32.075	error	at tryOnTimeout (timers.js:323:5)
          javascript.0	2019-01-12 19:07:32.075	error	at ontimeout (timers.js:511:34)
          javascript.0	2019-01-12 19:07:32.075	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1762:34)
          javascript.0	2019-01-12 19:07:32.075	error	at Object.Interval (script.js.Gruenbeck_Logger:16:5)
          javascript.0	2019-01-12 19:07:32.075	error	at exports.XMLHttpRequest.setRequestHeader (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:201:13)
          javascript.0	2019-01-12 19:07:32.075	error	Error in callback: Error: INVALID_STATE_ERR: send flag is true
          javascript.0	2019-01-12 19:07:29.074	info	script.js.Gruenbeck_Logger: Request 3 ausgeführt
          javascript.0	2019-01-12 19:07:26.071	info	script.js.Gruenbeck_Logger: Request 3 ausgeführt
          

          was muss / sollte ich hier noch anpassen?

          Das Script liesst ja auch die "Uhrzeit" aus, aber die ist ja mal füllig von der rolle. Ich habe aber auch in der SC18 nirgends eine Möglichkeit gefunden einen Uhrzeit einzustellen.. Ist das bei Euch auch so?

          1 Reply Last reply Reply Quote 0
          • T
            Tom63 last edited by

            Hallo SC18 Nutzer,

            hier mal ein praktischer Ansatz. Ich habe eine SC18 von Grünbeck seit einem jahr im Einsatz.

            Dank des hier im Forum sehr gut beschriebenen Js-Scribt liest der IO-Broker jetzt permanent meinen aktuellen Status aus.

            Mit ein wenig Mathematik lässt sich sogar die Verbrauchsanzeige in Liter/Minute darstellen.

            Mein aktuelles Vis sieht so aus:
            17493_screenshot-sc18.jpg
            Die Felder aus den Messdaten im VIS-Editor einbinden ist simpel.

            Es gibt aber einen Multiplikator in den erweiterten Einstellungen.

            Damit kannst du dann die Restkapazität der Anlage in Liter zumindest annähernd anzeigen lassen.

            Das Scribt ist auch so schnell, dass innerhalb von wenigen Sekunden der aktuelle Verbrauch gleich unten auf der VIS-Seite angezeigt wird.

            Z.B. bei der WC-Spülung sieht man sehr schön den Durchfluss oder wenn die Waschmaschine läuft.

            Ich habe auch den letzten Time-Stempel dafür extra eingebaut.

            Bitte stellt Eure Anlage zumindest auf Regenarationszeitpunkt Fest ein.

            Nur so kann auch die Uhrzeit in der Anlage per App gestellt werden. (warum holt die sich das nicht vom Router ? :roll:

            Wen es variable bleibt, wird es amlaufenden Tag gemacht.

            Diese Brühe sorgt dann für die Ablagerungen auf den Armaturen, die sich sehr hartnäckig gegen Reiniger wehren können !!!

            Deshalb unbedingt die Regeneration auf Fest einstellen.

            1 Reply Last reply Reply Quote 0
            • H
              hiasii12 last edited by

              Hallo,

              ich habe das Script nochmals überarbeitet.

              Alles was zum einstellen ist ist jetzt in den ersten Zeilen zu finden.

              Es hat jetzt eine Verbindungsüberwachung integriert und die Aktualisierungszeit ist auch einstellbar.

              Es sollten diejenigen die Fehlermeldungen bekommen die Aktualisierungsrate verringern.

              Post auf Seite 1 wurde aktualisiert.

              Ist es möglich das diejenigen die so schöne Widgets erstellt haben diese für alle zur Verfügung stellen?

              1 Reply Last reply Reply Quote 0
              • F
                f0rd42 last edited by

                @hiasii12:

                Hallo,

                ich habe das Script nochmals überarbeitet.

                Alles was zum einstellen ist ist jetzt in den ersten Zeilen zu finden.

                Es hat jetzt eine Verbindungsüberwachung integriert und die Aktualisierungszeit ist auch einstellbar.

                Es sollten diejenigen die Fehlermeldungen bekommen die Aktualisierungsrate verringern.

                Post auf Seite 1 wurde aktualisiert.

                Ist es möglich das diejenigen die so schöne Widgets erstellt haben diese für alle zur Verfügung stellen? `

                Hi

                nun sind bei mir auch die Fehler scheinbar weg. Danke!

                Eine Frage noch:

                Die Werte D_Y_4_xx haben einen "Namen" von "Prozentsatz Regeneration 1vor aktueller". Abgesehen von dem Fehlenden Leerzeichen zwischen der Zahl und dem Wort "vor" bekomme ich hier als Werte allerdings Stunden / Minuten angezeigt ??!?!?!?!

                1 Reply Last reply Reply Quote 0
                • A
                  ArnoD last edited by

                  @f0rd42:

                  Hi

                  nun sind bei mir auch die Fehler scheinbar weg. Danke!

                  Eine Frage noch:

                  Die Werte D_Y_4_xx haben einen "Namen" von "Prozentsatz Regeneration 1vor aktueller". Abgesehen von dem Fehlenden Leerzeichen zwischen der Zahl und dem Wort "vor" bekomme ich hier als Werte allerdings Stunden / Minuten angezeigt ??!?!?!?! `

                  Ja, da ist noch ein Fehler enthalten.

                  D_Y_4_xx ist die Zeit von Regeneration zu Regeneration und D_A_3_2_xx sollte die Prozentangabe der Regeneration sein.

                  Du kanns entweder den Text ändern oder das Script anpassen.

                  1 Reply Last reply Reply Quote 0
                  • A
                    ArnoD last edited by

                    Erst mal danke an alle für das Script und die Anleitung.

                    Habe auch als Laie, was Java Script angeht, alles soweit hinbekommen.

                    10332_2019-01-26_15_05_02-vis.jpg

                    Weiss jemand wie man eine manuelle Regeneration über IO Brocker auslösen kann ?

                    1 Reply Last reply Reply Quote 0
                    • A
                      ArnoD last edited by

                      Für alle die was kopieren wollen habe mein View Gruenbeck eingefügt 😄
                      10332_21_gruenbeck.txt
                      10332_gr_nbeck.png

                      1 Reply Last reply Reply Quote 0
                      • A
                        ArnoD last edited by

                        Ich hatte heute etwas Zeit um mich mit dem Thema zu beschäftigen. 😄

                        Ich habe die Enthärtungsanlage softliQ:SC18 und bei mir erhalte ich

                        bei folgenden Abfragen keine vernüftige Rückmeldungen:

                        D_C_5_2 Datum (kein Wert)

                        D_C_5_3 Sommer/Winterzeit (kein Wert)

                        D_Y_13 wird bei mir Wert 0 angezeigt was nach der Austauscher gestört bedeutet, obwohl keine Störung vorliegt.

                        D_A_3_2_1-14 wird bei allen Werten nur der Prozentsatz der letzten Regeneration angezeigt und nicht der letzten 14 Regenerationen

                        D-A-3_1 sollte nach der Schnittstellenbeschreibung ein String sein (TT.MM.JJJ HH:MM) ist aber die Zeit der letzten Regeneration in h

                        Meine Frage ist, ob das bei allen so ist, oder jemand mit der SC18 da was Sinnvolles angezeigt bekommt ?

                        1 Reply Last reply Reply Quote 0
                        • H
                          hiasii12 last edited by

                          D_C_5_2 Datum (kein Wert)

                          => Anfrage liefert keinen Wert => Wert ist aber eigentlich auch uninteressant => wurde entfernt

                          D_C_5_3 Sommer/Winterzeit (kein Wert)

                          => Anfrage liefert keinen Wert => Wert ist aber eigentlich auch uninteressant => wurde entfernt

                          D_Y_13 wird bei mir Wert 0 angezeigt was nach der Austauscher gestört bedeutet, obwohl keine Störung vorliegt.

                          => Da hast du eigentlich recht. Ist bei meiner Anlage auch so. Nicht gestört oder in Regeneration und 0 :shock:

                          D_A_3_2_1-14

                          => Auch hier hast du recht. Ist bei meiner Anlage auch so. :shock:

                          D_A_3_1

                          => Auch hier hast du recht. Ist bei meiner Anlage auch so. :shock:

                          Ich habe das Script nochmals überarbeitet.

                          siehe Seite 1
                          6543_gruenbeck_webserver_dokumentation.pdf

                          1 Reply Last reply Reply Quote 0
                          • F
                            f0rd42 last edited by

                            Ich muss nochmals meine Frage zum Wasserverbrauch aufgreifen.

                            Da die meisten mit einem Verschnitt arbeiten (wer will schon eine Härte von 0), muss der Wasserverbrauch doch berechnet werden, da ein Teil des Wassers ja an der Anlage vorbei geht, oder sehe ich das hier komplett falsch?

                            1 Reply Last reply Reply Quote 0
                            • A
                              ArnoD last edited by

                              Die Anzeige des momentanen Verbrauchs bezieht sich auf das 0°dH Wasser welches durch die Anlage selber geht . Um den realen Durchfluss zuhaben, müsstest du den prozentualen Verschnitt über das Verschneide Ventil mit dazu rechnen.

                              1 Reply Last reply Reply Quote 0
                              • A
                                ArnoD last edited by

                                Vielleicht noch ein paar hinweiße zur Erklärung der Kapazitätszahl (Anlagenkapazität), die ich im Haustechnik Dialog Forum, gefunden habe.

                                Die Kapazitätszahl errechnet sich durch den Durchschnittsverbrauch 0 °dH Wasser der drei letzten Tage, ohne Verschnittwasser

                                mal je nach Modus Eco 1,3 und Power 1,8 mal Grundhärte.

                                Berechnung der automatischen Einstellung der Anlagenkapazität

                                = Wasser Durchschnittverbrauch x (1,3 Eco, oder 1,8 Power) x Grundhärte

                                Kleines Beispiel:

                                Verbrauch vor 1 Tag 323 l, vor 2 Tagen 292 l, vor 3 Tagen 282 l, Einstellung Power Modus, Grundwasserhärte 21 °dH

                                323+292+282 = 897 l /3 = 299 l Wasser Durchnittsverbrauch

                                299 l x 1,8 (Power Modus) = 538,2 l x 21 °dH = 11,30 qm x °dH

                                Hier noch ein paar Berechnungen, die interessant sind:

                                1. Berechnung Restkapazität (max)

                                = Anlagenkapazität / Grundhärte

                                1. Berechnung max. Verschnittwassermenge (Grundhärtewasser und SC18-Wasser)

                                = Anlagenkapazität / (Grundhärte - Schnitthärte)

                                1 Reply Last reply Reply Quote 0
                                • A
                                  ArnoD last edited by

                                  hiasii12 kannst du das Script noch etwas optimieren ?? 😄 😉

                                  In der Schnittstellenbeschreibung steht "Um die Schnittstelle zuverlässig betreiben zu können, sollte der Abstand zweier Anfragen eine Zeit

                                  von 15 Sekunden zueinander nicht unterschreiten."

                                  Das konnte ich bereits auch feststellen, da ich bei weniger als 15 sek. keine Einstellungen mehr mit der Grünbeck APP verändern konnte.

                                  Ich würde gerne alle Werte in ein Paket packen und alle 15 sek. abfragen, nicht wie jetzt über drei Abfragen verteilt.

                                  Die Werte für Wasserverbrauch D_Y_2_xx und Zeit letzte Regeneration D_Y_4_xx würden einmal am Tag ausreichen, da sich ja nichts ändert.

                                  (z.B. immer um 1:00 Uhr in der Nacht)

                                  Würde es ja selber machen, aber bei der Aufgabe, Werte nur einmal am Tag abfragen, scheitere ich mit meinen Scriptkenntnissen. :?

                                  So sieht mein View jetzt aus 😄

                                  10332_2019-01-26_15_05_02-vis.jpg

                                  Ach ja, wenn jetzt noch jemand weiss wie mann eine manuelle Regeneration über Vis auslösen kann, währe ich happy :mrgreen:

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    Marc_P last edited by

                                    Hallo,
                                    vielleicht kann mir jemand helfen. Ich habe das Problem, dass das Logger-Script nicht läuft.
                                    Die Datenpunkte wurden durch das erste Script erstellt.
                                    Wenn ich das Logger-Script starte kommt die Fehlermeldung:

                                    javascript.0	2019-02-11 16:40:47.957	error	Error in callback: Error: INVALID_STATE_ERR: send flag is true
                                    

                                    und

                                    error	javascript.0 at Object.Interval (script.js.gruenbeck_logger:28:9)
                                    

                                    Hat er ein Problem mit der function Interval?

                                    Hier noch mein komplettes Script:

                                    // Logger
                                        // Wichtige Daten hier anpassen
                                        // V1.0: Erstellung
                                        // V1.1: Header mit Konstanten hinzu;
                                        // Verbindungsüberwachung hinzu;
                                        // V1.2: Datum auslesen entfernt
                                        // Sommer/Winterzeit auslesen entfernt
                                        // Hier IP Adresse der Anlage eintragen
                                        var constIP = "192.168.10.31"
                                        // Hier Namen der State Variable eintragen wenn Verbindung über Ping Adapter geprüft werden soll
                                        // Wenn kein Ping Adapter verwendet werden soll dan True eintragen
                                        var statePingAdapter = 'ping.0.iobroker.192_168_10_31'
                                        // Hier Abfragezyklus in Sekunden eintragen
                                        var constTick = 5
                                        var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
                                        var parser = require('xmldom').DOMParser;
                                        var xhr = new XMLHttpRequest();
                                        var requestNumber = 1 ;
                                        xhr.onload = function () { };
                                        xhr.onerror = function () { };
                                        var varInterval = setInterval(Interval, constTick * 1000 );
                                        function Interval() {
                                        var connection = getState(statePingAdapter)
                                        // console.log(connection.val);
                                        if (connection.val)
                                        {
                                        xhr.open("POST","http://" + constIP + "/mux_http");
                                        xhr.setRequestHeader("Content-type", "application/json");
                                        xhr.responseType = "document";
                                        switch(requestNumber) {
                                        case 1:
                                        //console.log('Request ' + requestNumber + ' ausgeführt');
                                        xhr.send("id=8871&show=D_Y_2_1|D_Y_2_2|D_Y_2_3|D_Y_2_4|D_Y_2_5|D_Y_2_6|D_Y_2_7|D_Y_2_8|D_Y_2_9|D_Y_2_10|D_Y_2_11|D_Y_2_12|D_Y_2_13|D_Y_2_14~");
                                        xhr.onreadystatechange = function()
                                        {
                                        if (xhr.readyState==4)
                                        {
                                        if (xhr.status == 200)
                                        {
                                        if (xhr.responseText)
                                        {
                                        var str = xhr.responseText;
                                     const regex = /<data>`([^\<]+)<\/code><d_y_2_1>([^\<]+)<\/D_Y_2_1><d_y_2_2>([^\<]+)<\/D_Y_2_2><d_y_2_3>([^\<]+)<\/D_Y_2_3><d_y_2_4>([^\<]+)<\/D_Y_2_4><d_y_2_5>([^\<]+)<\/D_Y_2_5><d_y_2_6>([^\<]+)<\/D_Y_2_6><d_y_2_7>([^\<]+)<\/D_Y_2_7><d_y_2_8>([^\<]+)<\/D_Y_2_8><d_y_2_9>([^\<]+)<\/D_Y_2_9><d_y_2_10>([^\<]+)<\/D_Y_2_10><d_y_2_11>([^\<]+)<\/D_Y_2_11><d_y_2_12>([^\<]+)<\/D_Y_2_12><d_y_2_13>([^\<]+)<\/D_Y_2_13><d_y_2_14>([^\<]+)<\/D_Y_2_14><\/data>/;
                                                    const subst = regex.exec(str);
                                    
                                                        if (subst)
                                                        {
                                                            for ( i = 1; i < 15; i++ ) {
                                                                i1 = i + 1;
                                                                if (i < 10)
                                                                setState("Messwerte.0.SC18.Wasserverbrauch.D_Y_2_0" + i , parseInt(subst[i1]) );
                                                                else
                                                                setState("Messwerte.0.SC18.Wasserverbrauch.D_Y_2_" + i , parseInt(subst[i1]) );
                                                            }
                                    
                                                        }
                                                        requestNumber = 2;
                                                    }
                                                }
                                    		}
                                    };
                                    break;
                                    case 2:
                                    //console.log('Request ' + requestNumber + ' ausgeführt');
                                    xhr.send("id=8871&show=D_C_4_1|D_C_4_2|D_C_4_3|D_C_5_1|D_C_7_1~");
                                    xhr.onreadystatechange = function()
                                    {
                                    	if (xhr.readyState==4)
                                    	{
                                    		if (xhr.status == 200)
                                    		{
                                    			if (xhr.responseText)
                                    			{
                                    			    var str = xhr.responseText;
                                    
                                                    const regex = /<data>`([^\<]+)<\/code><d_c_4_1>([^\<]+)<\/D_C_4_1><d_c_4_2>([^\<]+)<\/D_C_4_2><d_c_4_3>([^\<]+)<\/D_C_4_3><d_c_5_1>([^\<]+)<\/D_C_5_1><d_c_7_1>([^\<]+)<\/D_C_7_1><\/data>/;
                                                    const subst = regex.exec(str);
                                    
                                                        if (subst)
                                                        {
                                                                setState("Messwerte.0.SC18.Allgemein.D_C_4_1" , parseInt(subst[2]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_C_4_2" , subst[3] );
                                                                setState("Messwerte.0.SC18.Allgemein.D_C_4_3" , subst[4] );
                                                                setState("Messwerte.0.SC18.Allgemein.D_C_5_1" , parseInt(subst[5]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_C_7_1" , parseInt(subst[6]) );                  
                                                        }
                                                        requestNumber = 3;
                                                    }
                                                }
                                    		}
                                    };
                                    break;
                                    case 3:
                                    //console.log('Request ' + requestNumber + ' ausgeführt');
                                    xhr.send("id=8871&show=D_Y_4_1|D_Y_4_2|D_Y_4_3|D_Y_4_4|D_Y_4_5|D_Y_4_6|D_Y_4_7|D_Y_4_8|D_Y_4_9|D_Y_4_10|D_Y_4_11|D_Y_4_12|D_Y_4_13|D_Y_4_14~");
                                    xhr.onreadystatechange = function()
                                    {
                                    	if (xhr.readyState==4)
                                    	{
                                    		if (xhr.status == 200)
                                    		{
                                    			if (xhr.responseText)
                                    			{
                                    			    var str = xhr.responseText;
                                    
                                                    const regex = /<data>`([^\<]+)<\/code><d_y_4_1>([^\<]+)<\/D_Y_4_1><d_y_4_2>([^\<]+)<\/D_Y_4_2><d_y_4_3>([^\<]+)<\/D_Y_4_3><d_y_4_4>([^\<]+)<\/D_Y_4_4><d_y_4_5>([^\<]+)<\/D_Y_4_5><d_y_4_6>([^\<]+)<\/D_Y_4_6><d_y_4_7>([^\<]+)<\/D_Y_4_7><d_y_4_8>([^\<]+)<\/D_Y_4_8><d_y_4_9>([^\<]+)<\/D_Y_4_9><d_y_4_10>([^\<]+)<\/D_Y_4_10><d_y_4_11>([^\<]+)<\/D_Y_4_11><d_y_4_12>([^\<]+)<\/D_Y_4_12><d_y_4_13>([^\<]+)<\/D_Y_4_13><d_y_4_14>([^\<]+)<\/D_Y_4_14><\/data>/;
                                                    const subst = regex.exec(str);
                                    
                                                        if (subst)
                                                        {
                                                            for ( i = 1; i < 15; i++ ) {
                                                                i1 = i + 1;
                                                                if (i < 10)
                                                                setState("Messwerte.0.SC18.Regenerationen.D_Y_4_0" + i , subst[i1] );
                                                                else
                                                                setState("Messwerte.0.SC18.Regenerationen.D_Y_4_" + i , subst[i1] );
                                                            }
                                                        requestNumber = 4;
                                                        }
                                                    }
                                                }
                                    		}
                                    };
                                    break;
                                    case 4:
                                    //console.log('Request ' + requestNumber + ' ausgeführt');
                                    xhr.send("id=8871&show=D_Y_5|D_Y_7|D_Y_8_11|D_Y_10_1|D_Y_13|D_Y_14|D_B_1|D_C_5_1~");
                                    xhr.onreadystatechange = function()
                                    {
                                    	if (xhr.readyState==4)
                                    	{
                                    		if (xhr.status == 200)
                                    		{
                                    			if (xhr.responseText)
                                    			{
                                    			    var str = xhr.responseText;
                                    
                                                    const regex = /<data>`([^\<]+)<\/code><d_y_5>([^\<]+)<\/D_Y_5><d_y_7>([^\<]+)<\/D_Y_7><d_y_8_11>([^\<]+)<\/D_Y_8_11><d_y_10_1>([^\<]+)<\/D_Y_10_1><d_y_13>([^\<]+)<\/D_Y_13><d_y_14>([^\<]+)<\/D_Y_14><d_b_1>([^\<]+)<\/D_B_1><d_c_5_1>([^\<]+)<\/D_C_5_1><\/data>/;
                                                    const subst = regex.exec(str);
                                    
                                                        if (subst)
                                                        {
                                                                setState("Messwerte.0.SC18.Allgemein.D_Y_5" , parseInt(subst[2]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_Y_7" , subst[3] );
                                                                setState("Messwerte.0.SC18.Allgemein.D_Y_8_11" , parseInt(subst[4]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_Y_10_1" , parseInt(subst[5]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_Y_13" , parseInt(subst[6]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_Y_14" , subst[7] );
                                                                setState("Messwerte.0.SC18.Allgemein.D_B_1" , parseInt(subst[8]) );
                                                                setState("Messwerte.0.SC18.Allgemein.D_C_5_1" , parseInt(subst[9]) );
                                                        }
                                                        requestNumber = 5;
                                                    }
                                                }
                                    		}
                                    };
                                    break;
                                    
                                    case 5:
                                    //console.log('Request ' + requestNumber + ' ausgeführt');
                                    xhr.send("id=8871&show=D_A_1_1|D_A_1_2|D_A_1_3|D_A_2_1|D_A_3_1|D_A_3_2~");
                                    xhr.onreadystatechange = function()
                                    {
                                    	if (xhr.readyState==4)
                                    	{
                                    		if (xhr.status == 200)
                                    		{
                                    			if (xhr.responseText)
                                    			{
                                    			    var str = xhr.responseText;
                                    
                                                    const regex = /<data>`([^\<]+)<\/code><d_a_1_1>([^\<]+)<\/D_A_1_1><d_a_1_2>([^\<]+)<\/D_A_1_2><d_a_1_3>([^\<]+)<\/D_A_1_3><d_a_2_1>([^\<]+)<\/D_A_2_1><d_a_3_1>([^\<]+)<\/D_A_3_1><d_a_3_2>([^\<]+)<\/D_A_3_2><\/data>/;
                                                    const subst = regex.exec(str);
                                    
                                                        if (subst)
                                                        {
                                                                setState("Messwerte.0.SC18.Aktualwerte.D_A_1_1" , parseFloat(subst[2]) );
                                                                setState("Messwerte.0.SC18.Aktualwerte.D_A_1_2" , parseFloat(subst[3]) );
                                                                setState("Messwerte.0.SC18.Aktualwerte.D_A_1_3" , parseFloat(subst[4]) );
                                                                setState("Messwerte.0.SC18.Aktualwerte.D_A_2_1" , parseInt(subst[5]) );
                                                                setState("Messwerte.0.SC18.Aktualwerte.D_A_3_1" , subst[6] );
                                                                setState("Messwerte.0.SC18.Aktualwerte.D_A_3_2" , parseInt(subst[7]) );
                                                        }
                                                        requestNumber = 1;
                                                    }
                                                }
                                    		}
                                    };
                                    }
                                    }
                                    }
                                    

                                    Auch ist mir die folgende Zeile im Original-Script nicht ganz klar:

                                    var statePingAdapter = 'ping.0.matthias-SS15HT.192_168_0_132'/192 168 0 132/
                                    

                                    gehört das /192 168 0 132/ mit dazu oder ist das ein Kommentar?
                                    Wenn ich das mit reinschreibe, gibt es ein compile error.

                                    Gruß
                                    Marc

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      Marc_P last edited by

                                      So, der Fehler ist, warum auch immer, verschwunden?!
                                      Allerdings werden keine Daten in die Objekte geschrieben.
                                      Ich habe mit console.Log das Script im Betrieb mal überprüft:

                                      • console.Log(xhr.responseText) enthält die Daten, die mit xhr.send angefragt wurden
                                      • console.Log(subst) hat aber den Inhalt null. Es scheint so, dass das regex nicht richtig funktioniert oder sehe ich das falsch?

                                      Wenn ich es auf der Seite regex101.com wie folgt teste, gibt es keine Übereinstimmung:

                                      REGULAR EXPRESSION

                                      <data>`([^\<]+)<\/code><d_c_4_1>([^\<]+)<\/D_C_4_1><d_c_4_2>([^\<]+)<\/D_C_4_2><d_c_4_3>([^\<]+)<\/D_C_4_3><d_c_5_1>([^\<]+)<\/D_C_5_1><d_c_7_1>([^\<]+)<\/D_C_7_1><\/data>
                                      

                                      TEST STRING

                                      <data><code>ok</code><D_C_4_1>1</D_C_4_1><D_C_4_2>13:10</D_C_4_2><D_C_4_3>02:00</D_C_4_3><D_C_5_1>0</D_C_5_1><D_C_7_1>365</D_C_7_1></data>
                                      

                                      Könnte hier jemand sein Logger-Script einstellen, was bei ihm funktioniert?
                                      Ich habe es von hier kopiert, aber durch den Seitenumzug ist ja, wie man ganz oben sieht, alles zerschossen und ich bin mir nicht sicher ob mein Script soweit i.O. ist bzw. ob ich es richtig kopiert habe.☹

                                      Gruß
                                      Marc

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        Marc_P last edited by Marc_P

                                        So, Problem gefunden.
                                        Durch die Forenumstellung sind die 2 Skripte oben unbrauchbar.

                                        Hier die 2, die bei mir jetzt einwandfrei laufen:
                                        statemachine

                                        // StateMaschine
                                            var i
                                            // Wasserverbrauch
                                            var path = 'Messwerte.0.SC18.Wasserverbrauch.';
                                            for ( i = 1; i < 15; i++ ) {
                                            if (i<10)var id = path + 'D_Y_2_0' + i;
                                            else var id = path + 'D_Y_2_' + i ;
                                            var obj = {};
                                            obj.type = 'state';
                                            obj.common = {};
                                            obj.common.name = 'Wasserverbrauch vor ' + i + ' Tagen' ;
                                            obj.common.type = 'number';
                                            obj.common.role = 'number';
                                            obj.common.desc = 'Wasserverbrauch vor ' + i + ' Tagen';
                                            obj.common.read = true;
                                            obj.common.write = true;
                                            obj.common.def = 0;
                                            obj.common.min = 0;
                                            obj.common.unit = 'Liter';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                            }
                                            // Regenerationen
                                            var path = 'Messwerte.0.SC18.Regenerationen.';
                                        
                                        for ( i = 1; i < 15; i++ ) {
                                        if (i<10)var id = path + 'D_Y_4_0' + i;
                                        else var id = path + 'D_Y_4_' + i ;
                                        
                                            var obj = {};
                                            obj.type = 'state';
                                            obj.common = {};
                                            obj.common.name = 'Zeitpunkt Regenereation ' + i + ' vor aktueller';
                                            obj.common.type = 'string';
                                            obj.common.role = 'string';
                                            obj.common.desc = 'Zeitpunkt Regenereation ' + i + ' vor aktueller';
                                            obj.common.read = true;
                                            obj.common.write = true;
                                            obj.common.def = 0;
                                            obj.common.min = 0;
                                            obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                            }
                                        // Allgemeine Felder
                                        var path = 'Messwerte.0.SC18.Allgemein.';
                                        var id = path + 'D_C_4_2';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Uhrzeit' ;
                                        obj.common.type = 'string';
                                        obj.common.role = 'string';
                                        obj.common.desc = 'Uhrzeit';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = 'Uhr';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        	
                                        var id = path + 'D_C_5_1';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Ansprechverhalten' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Ansprechverhalten';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                              var id = path + 'D_C_4_1';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Regenerationszeitpunkt' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Regenerationszeitpunkt 0= Auto 1= Fest';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_C_4_3';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Startzeit Regeneration' ;
                                        obj.common.type = 'string';
                                        obj.common.role = 'string';
                                        obj.common.desc = 'Startzeit Regeneration';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = 'Uhr';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_C_7_1';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Soll Service Intervalldauer' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Soll Service Intervalldauer';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = 'Tage';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_A_2_2';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Tage bis zur nächsten Wartung' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Tage bis zur nächsten Wartung';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = 'Tage';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_Y_5';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Aktueller Regenerationsschritt 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Aktueller Regenerationsschritt 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_Y_7';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Inbetriebnahme-Datum' ;
                                        obj.common.type = 'string';
                                        obj.common.role = 'string';
                                        obj.common.desc = 'Inbetriebnahme-Datum';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_Y_8_11';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Ergebnis letzter E-Mail Versand 0=keine Mail versandt 1=Mail erfolgreich versandt 2=Benutzerdaten fehlerhaft 3= kein Internetzugang/Server nicht bereit' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Ergebnis letzter E-Mail Versand 0=keine Mail versandt 1=Mail erfolgreich versandt 2=Benutzerdaten fehlerhaft 3= kein Internetzugang/Server nicht bereit';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_Y_10_1';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Aktuelle Restkapazität Austauscher' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Aktuelle Restkapazität Austauscher';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '%';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_Y_13';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = '0= Austauscher gestört/in Regeneration 1= Austauscher in Betrieb' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = '0= Austauscher gestört/in Regeneration 1= Austauscher in Betrieb';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        var id = path + 'D_Y_14';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Voraussichtliche nächste Regeneration' ;
                                        obj.common.type = 'string';
                                        obj.common.role = 'string';
                                        obj.common.desc = 'Voraussichtliche nächste Regeneration';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        //region D_B_1 Regeneration
                                        var id = path + 'D_B_1';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Regeneration aktiv' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Regeneration aktiv';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        // Aktualwerte
                                        var path = 'Messwerte.0.SC18.Aktualwerte.';
                                        
                                            //region D_A_1_1
                                            var id = path + 'D_A_1_1';
                                            var obj = {};
                                            obj.type = 'state';
                                            obj.common = {};
                                            obj.common.name = 'Aktueller Durchfluss' ;
                                            obj.common.type = 'number';
                                            obj.common.role = 'number';
                                            obj.common.desc = 'Aktueller Durchfluss';
                                            obj.common.read = true;
                                            obj.common.write = true;
                                            obj.common.def = 0;
                                            obj.common.min = 0;
                                            obj.common.unit = 'm³/h';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        //endregion D_A_1_1
                                        
                                            //region D_A_1_2
                                            var id = path + 'D_A_1_2';
                                            var obj = {};
                                            obj.type = 'state';
                                            obj.common = {};
                                            obj.common.name = 'Restkapazität' ;
                                            obj.common.type = 'number';
                                            obj.common.role = 'number';
                                            obj.common.desc = 'Restkapazität';
                                            obj.common.read = true;
                                            obj.common.write = true;
                                            obj.common.def = 0;
                                            obj.common.min = 0;
                                            obj.common.unit = 'm³*°dH';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        //endregion
                                        
                                        //region D_A_1_3
                                        var id = path + 'D_A_1_3';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Kapazitätszahl' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Kapazitätszahl';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = 'm³*°dH';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                            //endregion
                                            //region D_A_2_1
                                            var id = path + 'D_A_2_1';
                                            var obj = {};
                                            obj.type = 'state';
                                            obj.common = {};
                                            obj.common.name = 'Restzeit/-menge Reg.Schritt' ;
                                            obj.common.type = 'number';
                                            obj.common.role = 'number';
                                            obj.common.desc = 'Restzeit/-menge Reg.Schritt';
                                            obj.common.read = true;
                                            obj.common.write = true;
                                            obj.common.def = 0;
                                            obj.common.min = 0;
                                            obj.common.unit = 'l oder min';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                            //endregion
                                            //region D_A_3_1
                                            var id = path + 'D_A_3_1';
                                            var obj = {};
                                            obj.type = 'state';
                                            obj.common = {};
                                            obj.common.name = 'Letzte Regeneration' ;
                                            obj.common.type = 'string';
                                            obj.common.role = 'string';
                                            obj.common.desc = 'Letzte Regeneration vor x h';
                                            obj.common.read = true;
                                            obj.common.write = true;
                                            obj.common.def = 0;
                                            obj.common.min = 0;
                                            obj.common.unit = 'h';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        
                                        //endregion
                                        
                                            //region D_A_3_2
                                        var id = path + 'D_A_3_2';
                                        var obj = {};
                                        obj.type = 'state';
                                        obj.common = {};
                                        obj.common.name = 'Letzte Regeneration Über' ;
                                        obj.common.type = 'number';
                                        obj.common.role = 'number';
                                        obj.common.desc = 'Letzte Regeneration Über';
                                        obj.common.read = true;
                                        obj.common.write = true;
                                        obj.common.def = 0;
                                        obj.common.min = 0;
                                        obj.common.unit = '%';
                                        
                                        setObject(id, obj, function(err) {
                                            if(err) log('Cannot write object: ' + err);
                                            else setState(id, obj.common.def);
                                        });
                                        //endregion
                                        

                                        logger

                                        	// Logger
                                            // Wichtige Daten hier anpassen
                                            // V1.0: Erstellung
                                            // V1.1: Header mit Konstanten hinzu;
                                            // Verbindungsüberwachung hinzu;
                                            // V1.2: Datum auslesen entfernt
                                            // Sommer/Winterzeit auslesen entfernt
                                            // Hier IP Adresse der Anlage eintragen
                                            var constIP = "192.168.10.31"
                                            // Hier Namen der State Variable eintragen wenn Verbindung über Ping Adapter geprüft werden soll
                                            // Wenn kein Ping Adapter verwendet werden soll dan True eintragen
                                            var statePingAdapter = 'ping.0.iobroker.192_168_10_31'
                                            // Hier Abfragezyklus in Sekunden eintragen
                                            var constTick = 15
                                            var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
                                            var parser = require('xmldom').DOMParser;
                                            var xhr = new XMLHttpRequest();
                                            var requestNumber = 1 ;
                                            xhr.onload = function () { };
                                            xhr.onerror = function () { };
                                            var varInterval = setInterval(Interval, constTick * 1000 );
                                            function Interval() {
                                            var connection = getState(statePingAdapter);
                                            // console.log(connection.val);
                                            if (connection.val)
                                            {
                                            xhr.open("POST","http://" + constIP + "/mux_http");
                                            xhr.setRequestHeader("Content-type", "application/json");
                                            xhr.responseType = "document";
                                            switch(requestNumber) {
                                        case 1:
                                        console.log('Grünbeck: Request ' + requestNumber + ' ausgeführt');
                                        xhr.send("id=8871&show=D_Y_2_1|D_Y_2_2|D_Y_2_3|D_Y_2_4|D_Y_2_5|D_Y_2_6|D_Y_2_7|D_Y_2_8|D_Y_2_9|D_Y_2_10|D_Y_2_11|D_Y_2_12|D_Y_2_13|D_Y_2_14~");
                                        xhr.onreadystatechange = function()
                                        {
                                        	if (xhr.readyState==4)
                                            {
                                        		if (xhr.status == 200)
                                        		{
                                        			if (xhr.responseText)
                                        			{
                                        				var str = xhr.responseText;
                                        				const regex = /<data><code>([^\<]+)<\/code><D_Y_2_1>([^\<]+)<\/D_Y_2_1><D_Y_2_2>([^\<]+)<\/D_Y_2_2><D_Y_2_3>([^\<]+)<\/D_Y_2_3><D_Y_2_4>([^\<]+)<\/D_Y_2_4><D_Y_2_5>([^\<]+)<\/D_Y_2_5><D_Y_2_6>([^\<]+)<\/D_Y_2_6><D_Y_2_7>([^\<]+)<\/D_Y_2_7><D_Y_2_8>([^\<]+)<\/D_Y_2_8><D_Y_2_9>([^\<]+)<\/D_Y_2_9><D_Y_2_10>([^\<]+)<\/D_Y_2_10><D_Y_2_11>([^\<]+)<\/D_Y_2_11><D_Y_2_12>([^\<]+)<\/D_Y_2_12><D_Y_2_13>([^\<]+)<\/D_Y_2_13><D_Y_2_14>([^\<]+)<\/D_Y_2_14><\/data>/;
                                                        const subst = regex.exec(str);
                                        
                                                            if (subst)
                                                            {
                                                                for ( i = 1; i < 15; i++ ) {
                                                                    i1 = i + 1;
                                                                    if (i < 10)
                                                                    setState("Messwerte.0.SC18.Wasserverbrauch.D_Y_2_0" + i , parseInt(subst[i1]) );
                                                                    else
                                                                    setState("Messwerte.0.SC18.Wasserverbrauch.D_Y_2_" + i , parseInt(subst[i1]) );
                                                                }
                                        
                                                            }
                                                            requestNumber = 2;
                                                        }
                                                    }
                                        		}
                                        };
                                        break;
                                        case 2:
                                        console.log('Grünbeck: Request ' + requestNumber + ' ausgeführt');
                                        xhr.send("id=8871&show=D_C_4_1|D_C_4_2|D_C_4_3|D_C_5_1|D_C_7_1~");
                                        xhr.onreadystatechange = function()
                                        {
                                        	if (xhr.readyState==4)
                                        	{
                                        		if (xhr.status == 200)
                                        		{
                                        			if (xhr.responseText)
                                        			{
                                        			    var str = xhr.responseText;
                                                        const regex = /<data><code>([^\<]+)<\/code><D_C_4_1>([^\<]+)<\/D_C_4_1><D_C_4_2>([^\<]+)<\/D_C_4_2><D_C_4_3>([^\<]+)<\/D_C_4_3><D_C_5_1>([^\<]+)<\/D_C_5_1><D_C_7_1>([^\<]+)<\/D_C_7_1><\/data>/;
                                                        const subst = regex.exec(str);
                                        
                                                            if (subst)
                                                            {
                                                                    setState("Messwerte.0.SC18.Allgemein.D_C_4_1" , parseInt(subst[2]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_C_4_2" , subst[3] );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_C_4_3" , subst[4] );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_C_5_1" , parseInt(subst[5]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_C_7_1" , parseInt(subst[6]) );                  
                                                            }
                                                            requestNumber = 3;
                                                        }
                                                    }
                                        		}
                                        };
                                        break;
                                        case 3:
                                        console.log('Grünbeck: Request ' + requestNumber + ' ausgeführt');
                                        xhr.send("id=8871&show=D_Y_4_1|D_Y_4_2|D_Y_4_3|D_Y_4_4|D_Y_4_5|D_Y_4_6|D_Y_4_7|D_Y_4_8|D_Y_4_9|D_Y_4_10|D_Y_4_11|D_Y_4_12|D_Y_4_13|D_Y_4_14~");
                                        xhr.onreadystatechange = function()
                                        {
                                        	if (xhr.readyState==4)
                                        	{
                                        		if (xhr.status == 200)
                                        		{
                                        			if (xhr.responseText)
                                        			{
                                        			    var str = xhr.responseText;
                                                        const regex = /<data><code>([^\<]+)<\/code><D_Y_4_1>([^\<]+)<\/D_Y_4_1><D_Y_4_2>([^\<]+)<\/D_Y_4_2><D_Y_4_3>([^\<]+)<\/D_Y_4_3><D_Y_4_4>([^\<]+)<\/D_Y_4_4><D_Y_4_5>([^\<]+)<\/D_Y_4_5><D_Y_4_6>([^\<]+)<\/D_Y_4_6><D_Y_4_7>([^\<]+)<\/D_Y_4_7><D_Y_4_8>([^\<]+)<\/D_Y_4_8><D_Y_4_9>([^\<]+)<\/D_Y_4_9><D_Y_4_10>([^\<]+)<\/D_Y_4_10><D_Y_4_11>([^\<]+)<\/D_Y_4_11><D_Y_4_12>([^\<]+)<\/D_Y_4_12><D_Y_4_13>([^\<]+)<\/D_Y_4_13><D_Y_4_14>([^\<]+)<\/D_Y_4_14><\/data>/;
                                                        const subst = regex.exec(str);
                                        
                                                            if (subst)
                                                            {
                                                                for ( i = 1; i < 15; i++ ) {
                                                                    i1 = i + 1;
                                                                    if (i < 10)
                                                                    setState("Messwerte.0.SC18.Regenerationen.D_Y_4_0" + i , subst[i1] );
                                                                    else
                                                                    setState("Messwerte.0.SC18.Regenerationen.D_Y_4_" + i , subst[i1] );
                                                                }
                                                            requestNumber = 4;
                                                            }
                                                        }
                                                    }
                                        		}
                                        };
                                        break;
                                        case 4:
                                        console.log('Grünbeck: Request ' + requestNumber + ' ausgeführt');
                                        xhr.send("id=8871&show=D_Y_5|D_Y_7|D_Y_8_11|D_Y_10_1|D_Y_13|D_Y_14|D_B_1|D_C_5_1~");
                                        xhr.onreadystatechange = function()
                                        {
                                        	if (xhr.readyState==4)
                                        	{
                                        		if (xhr.status == 200)
                                        		{
                                        			if (xhr.responseText)
                                        			{
                                        			    var str = xhr.responseText;
                                                        const regex = /<data><code>([^\<]+)<\/code><D_Y_5>([^\<]+)<\/D_Y_5><D_Y_7>([^\<]+)<\/D_Y_7><D_Y_8_11>([^\<]+)<\/D_Y_8_11><D_Y_10_1>([^\<]+)<\/D_Y_10_1><D_Y_13>([^\<]+)<\/D_Y_13><D_Y_14>([^\<]+)<\/D_Y_14><D_B_1>([^\<]+)<\/D_B_1><D_C_5_1>([^\<]+)<\/D_C_5_1><\/data>/;
                                                        const subst = regex.exec(str);
                                        
                                                            if (subst)
                                                            {
                                                                    setState("Messwerte.0.SC18.Allgemein.D_Y_5" , parseInt(subst[2]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_Y_7" , subst[3] );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_Y_8_11" , parseInt(subst[4]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_Y_10_1" , parseInt(subst[5]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_Y_13" , parseInt(subst[6]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_Y_14" , subst[7] );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_B_1" , parseInt(subst[8]) );
                                                                    setState("Messwerte.0.SC18.Allgemein.D_C_5_1" , parseInt(subst[9]) );
                                                            }
                                                            requestNumber = 5;
                                                        }
                                                    }
                                        		}
                                        };
                                        break;
                                        
                                        case 5:
                                        console.log('Grünbeck: Request ' + requestNumber + ' ausgeführt');
                                        xhr.send("id=8871&show=D_A_1_1|D_A_1_2|D_A_1_3|D_A_2_1|D_A_3_1|D_A_3_2~");
                                        xhr.onreadystatechange = function()
                                        {
                                        	if (xhr.readyState==4)
                                        	{
                                        		if (xhr.status == 200)
                                        		{
                                        			if (xhr.responseText)
                                        			{
                                        			    var str = xhr.responseText;
                                                        const regex = /<data><code>([^\<]+)<\/code><D_A_1_1>([^\<]+)<\/D_A_1_1><D_A_1_2>([^\<]+)<\/D_A_1_2><D_A_1_3>([^\<]+)<\/D_A_1_3><D_A_2_1>([^\<]+)<\/D_A_2_1><D_A_3_1>([^\<]+)<\/D_A_3_1><D_A_3_2>([^\<]+)<\/D_A_3_2><\/data>/;
                                                        const subst = regex.exec(str);
                                        
                                                            if (subst)
                                                            {
                                                                    setState("Messwerte.0.SC18.Aktualwerte.D_A_1_1" , parseFloat(subst[2]) );
                                                                    setState("Messwerte.0.SC18.Aktualwerte.D_A_1_2" , parseFloat(subst[3]) );
                                                                    setState("Messwerte.0.SC18.Aktualwerte.D_A_1_3" , parseFloat(subst[4]) );
                                                                    setState("Messwerte.0.SC18.Aktualwerte.D_A_2_1" , parseInt(subst[5]) );
                                                                    setState("Messwerte.0.SC18.Aktualwerte.D_A_3_1" , subst[6] );
                                                                    setState("Messwerte.0.SC18.Aktualwerte.D_A_3_2" , parseInt(subst[7]) );
                                                            }
                                                            requestNumber = 1;
                                                        }
                                                    }
                                        		}
                                        };
                                        }
                                        }
                                        }
                                        

                                        Gruß
                                        Marc

                                        1 Reply Last reply Reply Quote 0
                                        • smartboart
                                          smartboart @hiasii12 last edited by smartboart

                                          danke fürs wieder einstellen.
                                          Ob das Script auch bei der nächst groesseren anlage funktioniert? Weis das jemand die SC23.

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            Marc_P last edited by Marc_P

                                            Hm, leider wohl etwas zu früh gefreut.
                                            Manchmal (eigentlich "recht oft") kommt bei der Aktualisierung, egal ob Request 1, 2, 3, 4 oder 5 die folgende Fehlermeldung:

                                            javascript.0	2019-02-13 15:31:53.460	error	at Timer.listOnTimeout (timers.js:290:5)
                                            javascript.0	2019-02-13 15:31:53.460	error	at tryOnTimeout (timers.js:323:5)
                                            javascript.0	2019-02-13 15:31:53.460	error	at ontimeout (timers.js:511:34)
                                            javascript.0	2019-02-13 15:31:53.460	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1815:34)
                                            javascript.0	2019-02-13 15:31:53.459	error	at Object.Interval (script.js.gruenbeck_logger:28:9)
                                            javascript.0	2019-02-13 15:31:53.459	error	at exports.XMLHttpRequest.setRequestHeader (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:201:13)
                                            javascript.0	2019-02-13 15:31:53.459	error	Error in callback: Error: INVALID_STATE_ERR: send flag is true
                                            javascript.0	2019-02-13 15:31:48.456	info	script.js.gruenbeck_logger: Grünbeck: Request 1 ausgeführt
                                            

                                            Er versucht dann den Request so oft, bis er den abarbeiten konnte und den Request-Zähler intern erhöht. Dann macht er weiter.
                                            Scheint ja irgendein Timout Problem zu sein.
                                            Gibt es eine Möglichkeit, irgendwo ein Timeout einzustellen? Oder liegt das Problem wo anders?
                                            Alternativ: Gibt es eine Möglichkeit für dieses Script die Log-Ausgabe von error zu unterbinden? Das macht das Log völlig unübersichtlich.☹

                                            Gruß
                                            Marc

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            984
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            16
                                            138
                                            20242
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo