Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Daten aus einer Website mit Javascript

NEWS

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

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

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

Daten aus einer Website mit Javascript

Geplant Angeheftet Gesperrt Verschoben JavaScript
138 Beiträge 16 Kommentatoren 25.2k Aufrufe 5 Watching
  • Ä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.
  • smartboartS Offline
    smartboartS Offline
    smartboart
    schrieb am zuletzt editiert von
    #81

    Das inbetriebnahmedatum ist bei mir auch leer... Habe sie selber in Betrieb genommen. In meiner view ist das inbetriebnahmedatum manuell gesetzt... Ich versuche noch an das Service Passworts ran zu kommen, weil ich auch gerne die potentialfreie stoermeldung ueber gpio in meinem slave einlesen möchte..

    1 Antwort Letzte Antwort
    0
    • smartboartS Offline
      smartboartS Offline
      smartboart
      schrieb am zuletzt editiert von smartboart
      #82

      _was ist mit dem state D_D_2 kann der nicht auch entfallen? Sollwert WWH
      _Wegen des manuellen Regenerationsstart habe ich auch mal etwas gegoogelt und im lox wiki was gelesen...kopiere es mal hier rein...Ich würde nämlich auch gerne über meine anwesenheitskontrolle die Regeneration bei unterschreiten eines wertes zusätzlich zur fest eingestellten Zeit über die Abwesenehit triggern.

      Mit dem Befehl "edit=D_B_1>" ist dies möglich jedoch darf dieses Kommando nur ausgelöst werden wenn man eine gültige ID besitzt. (Nur wenn diese ID als Cookie im Browser registriert ist)
      Außerdem hätte ich probiert eine ID jedesmal zu generieren und zwar mit dem selben Syntax wie im Grünbeck Gerät ( parseInt( Math.random() * ( (9999+1) - 1000 )) )Auch ohne Erfolg (traurig)Hat jemand eine Idee, eine ID vom Gerät anzufordern?

      Wenn dies möglich wäre, hätte man die Möglichkeit eine Regeneration präsenzabhängig zu gestalten.

      1 Antwort Letzte Antwort
      0
      • A Online
        A Online
        ArnoD
        schrieb am zuletzt editiert von
        #83

        Ok, habe jetzt noch ein paar Fehler korrigiert und States gelöscht die keine Funktion haben.
        Der Fehler "send flag is true" sollte jetzt erledigt sein, aber ich habe noch nicht alle Kombinationen getestet.
        @smartboart : Installateurebene (Code 113), Kundendienstebene (Code 290) steht in der Bedienungsanleitung. :wink:

        Die manuelle Regeneration ist wohl nicht so einfach über die Schnittstelle möglich. Ich werde erst mal den programmierbarer Eingang der Anlage nutzen um eine manuelle Regeneration auszulösen.
        Aber ich bleibe dran eine Lösung zu finden.

        S smartboartS 2 Antworten Letzte Antwort
        0
        • A ArnoD

          Ok, habe jetzt noch ein paar Fehler korrigiert und States gelöscht die keine Funktion haben.
          Der Fehler "send flag is true" sollte jetzt erledigt sein, aber ich habe noch nicht alle Kombinationen getestet.
          @smartboart : Installateurebene (Code 113), Kundendienstebene (Code 290) steht in der Bedienungsanleitung. :wink:

          Die manuelle Regeneration ist wohl nicht so einfach über die Schnittstelle möglich. Ich werde erst mal den programmierbarer Eingang der Anlage nutzen um eine manuelle Regeneration auszulösen.
          Aber ich bleibe dran eine Lösung zu finden.

          S Offline
          S Offline
          schmid_no1
          schrieb am zuletzt editiert von
          #84

          @ArnoD Hallo ArnoD wie steuerst die Schnittstelle an?

          1 Antwort Letzte Antwort
          0
          • smartboartS Offline
            smartboartS Offline
            smartboart
            schrieb am zuletzt editiert von smartboart
            #85

            der programmierbare Eingang ist eine Hardwareschnittstelle . Die Anlage hat einen Eingang und ausgang potentialfrei. Würde das über ein Relas lösen und das Relais über gpio ansteuern. Das werde ich auch so machen...
            hab gerade gesehen, dass die Uhrzeit Sync schon behoben ist...

            1 Antwort Letzte Antwort
            0
            • A ArnoD

              Ok, habe jetzt noch ein paar Fehler korrigiert und States gelöscht die keine Funktion haben.
              Der Fehler "send flag is true" sollte jetzt erledigt sein, aber ich habe noch nicht alle Kombinationen getestet.
              @smartboart : Installateurebene (Code 113), Kundendienstebene (Code 290) steht in der Bedienungsanleitung. :wink:

              Die manuelle Regeneration ist wohl nicht so einfach über die Schnittstelle möglich. Ich werde erst mal den programmierbarer Eingang der Anlage nutzen um eine manuelle Regeneration auszulösen.
              Aber ich bleibe dran eine Lösung zu finden.

              smartboartS Offline
              smartboartS Offline
              smartboart
              schrieb am zuletzt editiert von
              #86

              @ArnoD Danke für den Hinweis...Vlt. sollte ich doch mal anfangen Bedienungsanleitungen zu lesen. :-)

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                schmid_no1
                schrieb am zuletzt editiert von
                #87

                @smartboart würde dies auch über ein knx Binäreingang funktionieren?

                1 Antwort Letzte Antwort
                0
                • smartboartS Offline
                  smartboartS Offline
                  smartboart
                  schrieb am zuletzt editiert von smartboart
                  #88

                  Habe leider kein KNX, aber am Eingang kannst du höchstens einen Zustand von der Gruenbeck abholen. z.B die Störmeldung der Gruenbeck weil Potentialfrei. Wenn du was schalten willst brauchst einen Ausgang. Wenn die Knx am Ausgnag einen Potentialfreien Kontakt ( NC oder NO ) zur Verfügung stellt, kannst den nehmen, ansonsten brauchst du ein Relais welches bei aktiven Ausgang anzieht. Dessen Kontakte / potentialfrei legst du dann auf den eingang der Grünbeck.

                  1 Antwort Letzte Antwort
                  0
                  • smartboartS Offline
                    smartboartS Offline
                    smartboart
                    schrieb am zuletzt editiert von smartboart
                    #89

                    xxx fehlerhafter post xxx

                    1 Antwort Letzte Antwort
                    0
                    • A Online
                      A Online
                      ArnoD
                      schrieb am zuletzt editiert von
                      #90

                      Ich habe jetzt bei mir eine manuelle Regeneration auslösen können.
                      Könnt ihr bitte das aktuelle Script einmal testen ob es bei euch auch funktiniert, bin mir nämlich nicht sicher
                      ob meine Anlage nicht die ID von meinem Webbrowser verwendet. :relieved:

                      1 Antwort Letzte Antwort
                      0
                      • A Online
                        A Online
                        ArnoD
                        schrieb am zuletzt editiert von
                        #91

                        Ich habe die manuelle Regeneration bei mir jetzt drei Mal gestestet und es funktioniert.
                        Warte jetzt noch auf Rückmeldungen, ob es bei euch auch geht, dann wäre der Punkt auch erledigt.
                        Entscheidet ist anscheinend die Reihenfolge beim Senden.
                        Anders als in der Schnittstellenbeschreibung angegeben muss zuerst "edit=D_B_1>1" und dann erst die ID "&id=3369~" gesendet werden.

                        smartboartS 1 Antwort Letzte Antwort
                        0
                        • A ArnoD

                          Ich habe die manuelle Regeneration bei mir jetzt drei Mal gestestet und es funktioniert.
                          Warte jetzt noch auf Rückmeldungen, ob es bei euch auch geht, dann wäre der Punkt auch erledigt.
                          Entscheidet ist anscheinend die Reihenfolge beim Senden.
                          Anders als in der Schnittstellenbeschreibung angegeben muss zuerst "edit=D_B_1>1" und dann erst die ID "&id=3369~" gesendet werden.

                          smartboartS Offline
                          smartboartS Offline
                          smartboart
                          schrieb am zuletzt editiert von smartboart
                          #92

                          @ArnoD said in Daten aus einer Website mit Javascript:

                          &id=3369

                          Hi, habe es gerade probiert... Habe den State D_B_1 mit 1 gesetzt. Das ist doch richtig oder? Jedenfalls Die Regeneration ist gestartet. Super Arbeit!!!Habe aber das Gefühl das sie 2 mal gestartet ist.. Kann das sein..Ist eine Verriegelung evtl. möglich wen aktiv dass ein 2. Tastendruck nicht durchgeht...
                          Die Rückmeldung D_A_2_1 Restzeit wird aber nicht angezeigt oder?
                          Hier der debug dazu:

                          2019-03-07 17:35:47.798 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: registered 9 subscriptions and 1 schedule
                          2019-03-07 17:36:00.024 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Zyklus1 Daten wurden gesendet
                          2019-03-07 17:36:03.614 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Rueckmeldung SC18:ok22.0---000117:3603:300365361192.168.1.24/24192.168.1.1192.168.1.10.0.0.01192.168.0.1/24softliQ:SC_d029d110-V01.01.020 5200.000.146.00.0 1380211 12h 01min146-516-----------------------
                          2019-03-07 17:36:14.401 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Änderung erkannt: Parameter ist=D_B_1 Status =1
                          2019-03-07 17:36:16.553 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Rueckmeldung SC18:-
                          2019-03-07 17:37:00.051 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Zyklus1 Daten wurden gesendet
                          2019-03-07 17:37:03.612 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Rueckmeldung SC18:ok22.0---000117:3703:300365361192.168.1.24/24192.168.1.1192.168.1.10.0.0.01192.168.0.1/24softliQ:SC_d029d112-V01.01.020 010.000.006.0-0.0 0100211 12h 02min146-516-----------------------
                          2019-03-07 17:38:00.051 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Zyklus1 Daten wurden gesendet
                          2019-03-07 17:38:03.613 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Rueckmeldung SC18:ok22.0---000117:3803:300365361192.168.1.24/24192.168.1.1192.168.1.10.0.0.01192.168.0.1/24softliQ:SC_d029d112-V01.01.020 010.000.006.0-0.0 0100211 12h 03min146-516-----------------------
                          2019-03-07 17:39:00.044 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Zyklus1 Daten wurden gesendet
                          2019-03-07 17:39:03.612 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Rueckmeldung SC18:ok22.0---000117:3903:300365361192.168.1.24/24192.168.1.1192.168.1.10.0.0.01192.168.0.1/24softliQ:SC_d029d112-V01.01.020 010.000.006.0-0.0 0100211 12h 04min146-516-----------------------
                          2019-03-07 17:39:50.865 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Änderung erkannt: Parameter ist=D_B_1 Status =0
                          2019-03-07 17:39:52.553 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Rueckmeldung SC18:-
                          2019-03-07 17:40:00.044 - info: javascript.0 script.js.common.Status_Geraete.THW.Weichwasseranlage.Gruenbeck_Weichwasseranlage: Zyklus1 Daten wurden gesendet
                          

                          Und Danke nochmal für die tolle Arbeit..echt klass!

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            schmid_no1
                            schrieb am zuletzt editiert von
                            #93

                            @smartboart hast du für die manuelle Regeneration einen schalter genommen der auf 1 stehen bleibt oder einen Taster der nach Betätigung auf 0 zurückspringt?

                            1 Antwort Letzte Antwort
                            0
                            • smartboartS Offline
                              smartboartS Offline
                              smartboart
                              schrieb am zuletzt editiert von smartboart
                              #94

                              Hi ein Schalter bleibt auf 1 stehen... Gedanke war ihn gleich als state Anzeige zu nehmen... Springt nach der reg wieder auf 0...aber jetzt wo du so fragst und ich drüber nachdenke ist ein Taster widget wohl besser...
                              Aber triggern tust du doch mit
                              on(instanz + pfad + 'Allgemein.D_B_1', function (obj) also auf 1 und 0 bzw. Change any... Also ist Schalter wohl doch OK...
                              ansonsten müsste man auf val 1 change ne triggern
                              Und nur if 0.
                              Also
                              on(instanz + pfad + 'Allgemein.D_B_1',val:1,change'ne', function (obj)

                              1 Antwort Letzte Antwort
                              0
                              • smartboartS Offline
                                smartboartS Offline
                                smartboart
                                schrieb am zuletzt editiert von
                                #95

                                Heute Abend ist das Script wieder ausgestiegen.
                                Screenshot_20190307_215627.jpg

                                1 Antwort Letzte Antwort
                                0
                                • S Offline
                                  S Offline
                                  schmid_no1
                                  schrieb am zuletzt editiert von
                                  #96

                                  @smartboart also hab ich verstanden mein Problem war ich hatte die states nicht gelöscht und dachte ich müsste die nehmen. Jetzt funktioniert es. Zu deriner erkenntnis mit D_A_2_1 ist mir aufgefallen das dieser nur bei Regenerationsschritt 3 angezeigt wird.
                                  Zum Thema Fehlermeldung über die Potentialfreien ... finde ich schade dass dies nicht auch über die Weboberfläche abgegriffen werden kann.
                                  Vielleicht gibt s diese Abfrage ja und Grünbeck gibt diase halt nicht raus.

                                  1 Antwort Letzte Antwort
                                  0
                                  • A Online
                                    A Online
                                    ArnoD
                                    schrieb am zuletzt editiert von
                                    #97

                                    Habe das Script noch mal optimiert und ein zusätzliches State zum Auslesen vom Fehlerspeicher hinzugefügt.

                                    @smartboart wurde bei dir die Regeneration zweimal gestartet oder nur der Send befehl vom Script ?

                                    Eigentlich müsste es egal sein, ob man einen Taster oder Schalter verwendet.
                                    Das Script reagiert auf eine Änderung vom state D_B_1 und schickt den Wert 1 an die SC18, bei der zyklischen Abfrage wird
                                    von der SC18 der state D_B_1 wieder auf 0 gesetzt.
                                    Der Fehler war, dass diese Änderung noch mal einen Send Befehl ausgelöst hat. Ich prüfe jetzt vorher, ob der State 1 ist und Sende nur dann die Änderung an die SC18.

                                    Der Fehler "socket hang up" kommt, wenn zu viele Anfragen in zu kurzer Zeit gestellt werden oder du keine Netzwerkverbindung zur SC18 hast.
                                    Die Netzwerkverbindung zu prüfen und im Script darauf zu reagieren ist, das was ich mir noch vorgenommen habe.
                                    Kann jetzt aber etwas dauern, muss mich bei meiner Frau wieder einschmeicheln :innocent: , die ist etwas zu kurz gekommen in den letzten Tagen. :wink:

                                    smartboartS 1 Antwort Letzte Antwort
                                    0
                                    • A Online
                                      A Online
                                      ArnoD
                                      schrieb am zuletzt editiert von
                                      #98

                                      @schmid_no1 durch die Weboberfläche von Grünbeck habe ich alle möglichen Werte gefunden, aber eine Störmeldung von der SC18 war nicht dabei. Wenn es die geben sollte wird sie von Grünbeck auch in der eigenen App nicht verwendet.

                                      Ok zum Abschluss noch mein View Grünbeck:
                                      2019-01-27 19_19_01-Edit vis.png

                                      1 Antwort Letzte Antwort
                                      0
                                      • A ArnoD

                                        Habe das Script noch mal optimiert und ein zusätzliches State zum Auslesen vom Fehlerspeicher hinzugefügt.

                                        @smartboart wurde bei dir die Regeneration zweimal gestartet oder nur der Send befehl vom Script ?

                                        Eigentlich müsste es egal sein, ob man einen Taster oder Schalter verwendet.
                                        Das Script reagiert auf eine Änderung vom state D_B_1 und schickt den Wert 1 an die SC18, bei der zyklischen Abfrage wird
                                        von der SC18 der state D_B_1 wieder auf 0 gesetzt.
                                        Der Fehler war, dass diese Änderung noch mal einen Send Befehl ausgelöst hat. Ich prüfe jetzt vorher, ob der State 1 ist und Sende nur dann die Änderung an die SC18.

                                        Der Fehler "socket hang up" kommt, wenn zu viele Anfragen in zu kurzer Zeit gestellt werden oder du keine Netzwerkverbindung zur SC18 hast.
                                        Die Netzwerkverbindung zu prüfen und im Script darauf zu reagieren ist, das was ich mir noch vorgenommen habe.
                                        Kann jetzt aber etwas dauern, muss mich bei meiner Frau wieder einschmeicheln :innocent: , die ist etwas zu kurz gekommen in den letzten Tagen. :wink:

                                        smartboartS Offline
                                        smartboartS Offline
                                        smartboart
                                        schrieb am zuletzt editiert von smartboart
                                        #99

                                        @ArnoD die Regeneration wurde 2 x gestartet... Bzw. Das erste Mal kam sie bis zum Schritt besalzen und wurde abgebrochen und ist dann ein 2. Mal gestartet.. Wird ein Tastendruck zu viel gewesen sein... Den Befehl nur bei change ne und nur bei 1 abzusetzen ist da besser.. Zusaetzlich verriegeln mit ner if Bedingung wenn Regeneration nicht aktiv wuerde das zusaetzlich verhindern...

                                        Schau mir die Änderung dazu nachher mal an..
                                        Und viel spass beim einschmeicheln. Ich kenne das.. Iobroker birgt echt eine Suchtgefahr
                                        ... 😂😂😂

                                        1 Antwort Letzte Antwort
                                        0
                                        • A ArnoD

                                          @smartboart werde deine Idee aufgreifen. Werd mal ein paar Versuche machen, was da sinnvoll ist. Entweder die Zeit der Anlage oder der Status WLAN von der Anlage. :thinking_face:

                                          Änderungen:

                                          • alle Werte von der Schnittstellenbeschreibung, die möglich sind bzw. eine sinnvolle Rückmeldung bei der SC18 liefern, hinzugefügt.
                                          • Der Fehler "Error in callback: Error: INVALID_STATE_ERR: send flag is true" sollte jetzt nicht mehr auftreten.
                                            Ich würde aber mit den Abfragezyklen nicht unter 15 sek. gehen, da sonst eine Steuerung über die App nicht mehr möglich ist.
                                            Die Antwortzeiten der SC18 ligt bei meinem Netzwerk bei 1,5 bis 4,5 sek. so das Abfragen unter 15 sek. wirklich nichts mehr bringen. Ich habe bei mir die Zeit auf 60 sek. eingestellt und ist für mich auch völlig ausreichend.

                                          Sollte jemand das erste Script bereits gestestet haben, dann vorher den Pfad "Gruenbeck" löschen so das alle states wieder neu angelegt werden.

                                          Geplante Änderungen:

                                          • Möglichkeit zum Starten der manuellen Regeneration
                                          • Vor dem Request prüfen, ob die SC18 online ist (ohne Ping).
                                          • Automatische Unterscheidung zwischen SC und MC um die richtigen Werte abzufragen.
                                          • Theoretische Berechnung vom Salzverbrauch integrieren, um eine ungefähre Anzeige in Vis zu ermöglichen.

                                          Über Rückmeldungen würde ich mich natürlich wie immer freuen.

                                          /************************************************************************
                                          Version: 1.6.1  - Nächster Versuch den Fehler "send flag true" abzufangen :-)
                                                          - State Salzverbrauch gesamt
                                          Version: 1.6.0  - Formel zum berechnen vom Salzverbrauch
                                                          - State Salzverbrauch in kg
                                          Version: 1.5.1  - Optimierung manuelle Regeneration von smartboart übernommen.
                                          Version: 1.5.0  - Neu State für das auslesen vom Fehlerspeicher hinzugefügt.
                                                          - zweiter send Befehl nach Änderung vom D_B_1 State unterbunden.
                                          Version: 1.4.2  - Auslösen einer manuelle Regeneration ist jetzt über Vis möglich
                                                          - State D_Y_6 für die Softwareversion hinzugefügt.
                                          Version: 1.4.1  - Fehler "send flag is true" beseitigt.
                                                          - Fehler in der Zeitsynchronisation beseitigt.
                                                          - State D_C_5_2 und D_D_2 und D_Y_8_10 entfernt (ohne Funktion bei SC18)
                                          Version: 1.4.0  - Fehler "send flag is true" sollte nur noch bei manuellen State Änderungen <18 Sek. auftreten.
                                          Version: 1.3.0  - Automatische Zeit Synchronisation wenn Regenerationszeitpunkt auf "1=fest" eingestellt ist
                                                          - Bei Änderung der Werte Ansprechverhalten,Regenerationszeitpunkt,Regenerationszeit wird
                                                            die Änderung an die SC18 gesendet. 
                                                          - Parameter C_C_5_3 Automatische Umschaltung Sommer-/Winterzeit entfernt (ohne Funktion bei SC18)
                                          
                                          Version: 1.2.2 - Konstante für Abfragezyklus eingefügt
                                          Version: 1.2.1 - Timeout Variable eingefügt
                                          Version: 1.2.0 - Änderung:Nur noch eine Abfrage wo alle Werte abgefragt werden.
                                          Version: 1.1.0 - Fehler korrigiert das bei kürzeren Abfragen der Fehler "Error in callback: Error: INVALID_STATE_ERR: send flag is true" auftritt.
                                                         - Alle Werte der Schnittstellenbeschreibung, die sinnvoll bei der SC18 abgefragt werden können, hinzugefügt.
                                          Version: 1.0.0 - Erstellung Script nach Vorlage  hiasii12
                                          *************************************************************************/
                                          
                                          // ++++++++++ USER ANPASSUNGEN ++++++++++++++++++++++
                                          
                                          // Hier IP Adresse der Anlage eintragen 
                                          var constIP = "192.168.1.230"
                                          // Hier Anlagen Typ eintragen SC18, SC23, MC32, MC38 (aktuelle geht nur SC18)
                                          var sTyp = "SC18" 
                                          // Instanz eintragen
                                          var instance    = '0';
                                          var instanz     = 'javascript.' + instance + '.';
                                          // Pfad innerhalb der Instanz
                                          var PfadEbene1 = 'Gruenbeck.SC18.';
                                          // Abfragezyklus in Sekunden eintragen ( <10 sek. sind nicht zu empfehlen)
                                          const constPollingCycle = 30
                                          // nur zur Fehleranalyse
                                          var debug = false;
                                          //++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++
                                          var PfadEbene2 = ['Parameter.', 'Allgemein.','Netzwerk.','Fehlerspeicher.','Aktualwerte.','Wasserverbrauch.','Regenerationen.', 'Ausseneingriff.']
                                          
                                          // erstelle States
                                          if (sTyp == 'SC18') {
                                              // Parameter mit Schreib- und Lesezugriff
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_D_1', {def: 0,name: 'Rohwasserhärte',type: 'number',role: 'number',desc: 'Rohwasserhärte',unit: '°dH'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_A_4_1', {def: "-",name: 'Name Installateur',type: 'string',role: 'string',desc: 'Name Installateur',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_A_4_2', {def: "-",name: 'Tel Installateur',type: 'string',role: 'string',desc: 'Tel Installateur',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_A_4_3', {def: "-",name: 'E-Mail Installateur',type: 'string',role: 'string',desc: 'E-Mail Installateur',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_1_1', {def: 0,name: 'Sprache 0=De 1=En 3=Fr 4=Nl 5=Ru 6=Es 7=Zh',type: 'number',role: 'number',desc: 'Sprache 0=De 1=En 3=Fr 4=Nl 5=Ru 6=Es 7=Zh',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_2_1', {def: 0,name: 'Haerteeinheit 0=°dH 1=°f 2=°e 3=ppm 4=mol/m³',type: 'number',role: 'number',desc: 'Haerteeinheit 0=°dH 1=°f 2=°e 3=ppm 4=mol/m³',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_5_1', {def: 0,name: 'Ansprechverhalten 0=eco 1=Power',type: 'number',role: 'number',desc: 'Ansprechverhalten 0=eco 1=Power',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_4_1', {def: 0,name: 'Regenerationszeitpunkt 0= Auto 1= Fest',type: 'number',role: 'number',desc: 'Regenerationszeitpunkt 0= Auto 1= Fest',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_4_2', {def: "00:00",name: 'Uhrzeit',type: 'string',role: 'string',desc: 'Uhrzeit',unit: 'Uhr'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_4_3', {def: "00:00",name: 'Startzeit Regeneration 1',type: 'string',role: 'string',desc: 'Startzeit Regeneration 1',unit: 'Uhr'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_6_1', {def: 0,name: 'Aktives Display im Standby 0=deaktiviert 1=aktiviert',type: 'number',role: 'number',desc: 'Aktives Display im Standby 0=deaktiviert 1=aktiviert',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_C_7_1', {def: 0,name: 'Soll Service Intervalldauer',type: 'number',role: 'number',desc: 'Soll Service Intervalldauer',unit: 'Tage'});
                                              // Allgemein Parameter mit Lesezugriff
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_A_2_2', {def: 0,name: 'Tage bis zur nächsten Wartung',type: 'number',role: 'number',desc: 'Tage bis zur nächsten Wartung',unit: 'Tage'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_Y_5', {def: 0,name: 'Aktueller Regenerationsschritt 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat',type: 'number',role: 'number',desc: 'Aktueller Regenerationsschritt 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_Y_7', {def: "--.--.--",name: 'Inbetriebnahme-Datum',type: 'string',role: 'string',desc: 'Inbetriebnahme-Datum',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_Y_6', {def: "-",name: 'sw_version',type: 'string',role: 'string',desc: 'sw_version',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_Y_8_11', {def: 0,name: 'Ergebnis letzter E-Mail Versand 0=keine Mail versandt 1=Mail erfolgreich versandt 2=Benutzerdaten fehlerhaft 3= kein Internetzugang/Server nicht bereit',type: 'number',role: 'number',desc: 'Ergebnis letzter E-Mail Versand 0=keine Mail versandt 1=Mail erfolgreich versandt 2=Benutzerdaten fehlerhaft 3= kein Internetzugang/Server nicht bereit',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_Y_10_1', {def: 0,name: 'Aktuelle Restkapazität Austauscher',type: 'number',role: 'number',desc: 'Aktuelle Restkapazität Austauscher',unit: '%'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[1] + 'D_B_1', {def: 0,name: 'Regeneration aktiv',type: 'number',role: 'number',desc: 'Regeneration aktiv',unit: ''});
                                              //Netzwerk
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_6_1', {def: "-",name: 'IP-Adresse WLAN',type: 'string',role: 'string',desc: 'IP-Adresse WLAN',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_6_2', {def: "-",name: 'Default Gateway WLAN',type: 'string',role: 'string',desc: 'Default Gateway WLAN',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_6_3', {def: "-",name: 'Primary DNS WLAN',type: 'string',role: 'string',desc: 'Primary DNS WLAN',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_6_4', {def: "-",name: 'Secondary DNS WLAN',type: 'string',role: 'string',desc: 'Secondary DNS WLAN',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_6_5', {def: 0,name: 'Status WLAN 1=verbunden',type: 'number',role: 'number',desc: 'Status WLAN 1=verbunden',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_7_1', {def: "-",name: 'IP-Adresse Access Point',type: 'string',role: 'string',desc: 'IP-Adresse Access Point',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_7_2', {def: "-",name: 'SSID Access Point',type: 'string',role: 'string',desc: 'SSID Access Point',unit: ''});
                                              createState(instanz + PfadEbene1 + PfadEbene2[2] + 'D_C_3_7_3', {def: 0,name: 'Status Access Point 1=verbunden',type: 'number',role: 'number',desc: 'Status Access Point 1=verbunden',unit: ''});
                                              
                                              //Fehlerspeicher
                                              for(var i = 1; i<= 16; i++) {
                                          	    if(i<10){
                                          		    createState(instanz + PfadEbene1 + PfadEbene2[3] + 'D_K_10_0' + i, {def: "-",name: 'Fehlerspeicher ' + i ,type: 'string',role: 'string',desc: 'Fehlerspeicher ' + i ,unit: ''});
                                          	    }
                                          	    else {
                                          		    createState(instanz + PfadEbene1 + PfadEbene2[3] + 'D_K_10_' + i, {def: "-",name: 'Fehlerspeicher ' + i ,type: 'string',role: 'string',desc: 'Fehlerspeicher ' + i ,unit: ''});	
                                          	    }
                                              }
                                              //**** Aktualwerte ***
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_1_1', {def: 0,name: 'Aktueller Durchfluss',type: 'number',role: 'number',desc: 'Aktueller Durchfluss',unit: 'm³/h'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_1_2', {def: 0,name: 'Restkapazität',type: 'number',role: 'number',desc: 'Restkapazität',unit: 'm³*°dH'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_1_3', {def: 0,name: 'Kapazitätszahl',type: 'number',role: 'number',desc: 'Kapazitätszahl',unit: 'm³*°dH'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_2_1', {def: 0,name: 'Restzeit/-menge Reg.Schritt',type: 'number',role: 'number',desc: 'Restzeit/-menge Reg.Schritt',unit: 'l oder min'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_3_1', {def: "-",name: 'Letzte Regeneration',type: 'string',role: 'string',desc: 'Letzte Regeneration',unit: 'h'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_3_2', {def: 0,name: 'Letzte Regeneration über',type: 'number',role: 'number',desc: 'Letzte Regeneration über',unit: '%'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'Salzverbrauch', {def: 0, name: 'Salzverbrauch in kg',type: 'number',role: 'number',desc: 'Salzverbrauch in kg',unit: 'kg'});
                                              createState(instanz + PfadEbene1 + PfadEbene2[4] + 'SalzverbrauchGesamt', {def: 0, name: 'Salzverbrauch gesamt in kg',type: 'number',role: 'number',desc: 'Salzverbrauch gesamt in kg',unit: 'kg'});
                                              //**** Wasserverbrauch *** Regenerationen ***
                                              for(var i = 1; i<= 14; i++) {
                                          	    if(i<10){
                                          		    createState(instanz + PfadEbene1 + PfadEbene2[5] + 'D_Y_2_0' + i, {def: 0,name: 'Wasserverbrauch vor ' + i + 'Tagen',type: 'number',role: 'number',desc: 'Wasserverbrauch vor ' + i + ' Tagen',unit: 'Liter'});
                                          		    createState(instanz + PfadEbene1 + PfadEbene2[6] + 'D_Y_4_0' + i, {def: "-",name: 'Zeit letzte Regenereation ' + i + ' vor aktueller',type: 'string',role: 'string',desc: 'Zeit letzte Regenereation ' + i + ' vor aktueller',unit: ''});
                                          	    }
                                          	    else {
                                          		    createState(instanz + PfadEbene1 + PfadEbene2[5] + 'D_Y_2_' + i, {def: 0,name: 'Wasserverbrauch vor ' + i + 'Tagen',type: 'number',role: 'number',desc: 'Wasserverbrauch vor ' + i + ' Tagen',unit: 'Liter'});
                                          		    createState(instanz + PfadEbene1 + PfadEbene2[6] + 'D_Y_4_' + i, {def: "-",name: 'Zeit letzte Regenereation ' + i + ' vor aktueller',type: 'string',role: 'string',desc: 'Zeit letzte Regenereation ' + i + ' vor aktueller',unit: ''});	
                                          	    }
                                              }
                                              //*** Ausseneingriff ******
                                              createState(instanz + PfadEbene1 + PfadEbene2[7] + 'Fehlerspeicher' , {def:'false',name:'Fehlerspeicher ' ,type:'boolean',role:'State',desc: 'State zum auslesen vom Fehlerspeicher '});
                                              createState(instanz + PfadEbene1 + PfadEbene2[7] + 'Regenerationsstart', {def:'false',name:'Regenerationsstart',type:'boolean',role:'State',desc: 'State zum starten der Regeneration'});     
                                          };
                                          //*************************************************************************************************
                                          var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
                                          var parser = require('xmldom').DOMParser;
                                          var xhr = new XMLHttpRequest();
                                          var StatePfad = "";
                                          var Parameter;
                                          var sParSend = "";
                                          var sParGet = "";
                                          var neuerWert;
                                          var arryPfadEbene2;
                                          var KeineRueckmeldung = false;
                                          var TimeoutRueckmeldung;
                                          // Regenerationsstart von Vis
                                          const idRegStart = instanz + PfadEbene1 + PfadEbene2[7] + 'Regenerationsstart';
                                          // Regenerationsstart von SC18
                                          const idReg = instanz + PfadEbene1 + PfadEbene2[1] + 'D_B_1';
                                          
                                          //**************************************************************************************************
                                          /*xhr.onerror = function () 
                                          {
                                              console.error ("Es ist ein Fehler aufgetreten")
                                              console.error ("Status Text ist: " + xhr.statusText)
                                              if (xhr.statusText == "Error: connect EHOSTUNREACH 192.168.1.230:80" || xhr.statusText == "Error: connect ETIMEDOUT 192.168.1.230:80")
                                              {
                                                  console.error("Keine W-Lan Verbindung zur SC18")
                                                  ShowState (sParSend)
                                              }
                                          };*/
                                          
                                          
                                          //wird aufgerufen wenn Sendevorgang erfolgreich abgeschlossen wurde
                                          xhr.onload = function () 
                                          {
                                              if (debug) {console.log("Rueckmeldung SC18:" + xhr.responseText)}
                                              var str = xhr.responseText;
                                              switch (arryPfadEbene2)
                                              {
                                                  case 0:
                                                  case 1:
                                                  case 2:
                                                  case 4:
                                                  case 5: 
                                                  case 6:    
                                                  regex = /<data><code>([^\<]+)<\/code><D_D_1>([^\<]+)<\/D_D_1><D_A_4_1>([^\<]+)<\/D_A_4_1><D_A_4_2>([^\<]+)<\/D_A_4_2><D_A_4_3>([^\<]+)<\/D_A_4_3><D_C_1_1>([^\<]+)<\/D_C_1_1><D_C_2_1>([^\<]+)<\/D_C_2_1><D_C_5_1>([^\<]+)<\/D_C_5_1><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_6_1>([^\<]+)<\/D_C_6_1><D_C_7_1>([^\<]+)<\/D_C_7_1><D_A_2_2>([^\<]+)<\/D_A_2_2><D_C_3_6_1>([^\<]+)<\/D_C_3_6_1><D_C_3_6_2>([^\<]+)<\/D_C_3_6_2><D_C_3_6_3>([^\<]+)<\/D_C_3_6_3><D_C_3_6_4>([^\<]+)<\/D_C_3_6_4><D_C_3_6_5>([^\<]+)<\/D_C_3_6_5><D_C_3_7_1>([^\<]+)<\/D_C_3_7_1><D_C_3_7_2>([^\<]+)<\/D_C_3_7_2><D_C_3_7_3>([^\<]+)<\/D_C_3_7_3><D_Y_5>([^\<]+)<\/D_Y_5><D_Y_7>([^\<]+)<\/D_Y_7><D_Y_6>([^\<]+)<\/D_Y_6><D_Y_8_11>([^\<]+)<\/D_Y_8_11><D_Y_10_1>([^\<]+)<\/D_Y_10_1><D_B_1>([^\<]+)<\/D_B_1><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><D_Y_2_1>([^\<]+)<\/D_Y_2_1><D_Y_4_1>([^\<]+)<\/D_Y_4_1><D_Y_2_2>([^\<]+)<\/D_Y_2_2><D_Y_4_2>([^\<]+)<\/D_Y_4_2><D_Y_2_3>([^\<]+)<\/D_Y_2_3><D_Y_4_3>([^\<]+)<\/D_Y_4_3><D_Y_2_4>([^\<]+)<\/D_Y_2_4><D_Y_4_4>([^\<]+)<\/D_Y_4_4><D_Y_2_5>([^\<]+)<\/D_Y_2_5><D_Y_4_5>([^\<]+)<\/D_Y_4_5><D_Y_2_6>([^\<]+)<\/D_Y_2_6><D_Y_4_6>([^\<]+)<\/D_Y_4_6><D_Y_2_7>([^\<]+)<\/D_Y_2_7><D_Y_4_7>([^\<]+)<\/D_Y_4_7><D_Y_2_8>([^\<]+)<\/D_Y_2_8><D_Y_4_8>([^\<]+)<\/D_Y_4_8><D_Y_2_9>([^\<]+)<\/D_Y_2_9><D_Y_4_9>([^\<]+)<\/D_Y_4_9><D_Y_2_10>([^\<]+)<\/D_Y_2_10><D_Y_4_10>([^\<]+)<\/D_Y_4_10><D_Y_2_11>([^\<]+)<\/D_Y_2_11><D_Y_4_11>([^\<]+)<\/D_Y_4_11><D_Y_2_12>([^\<]+)<\/D_Y_2_12><D_Y_4_12>([^\<]+)<\/D_Y_4_12><D_Y_2_13>([^\<]+)<\/D_Y_2_13><D_Y_4_13>([^\<]+)<\/D_Y_4_13><D_Y_2_14>([^\<]+)<\/D_Y_2_14><D_Y_4_14>([^\<]+)<\/D_Y_4_14><\/data>/;
                                          	    subst = regex.exec(str);
                                                  if (subst)
                                          	    {
                                          		    var i = 2;
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_D_1' , parseFloat(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_A_4_1' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_A_4_2' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_A_4_3' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_1_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_2_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_5_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_4_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_4_2' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_4_3' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_6_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Parameter.D_C_7_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_A_2_2' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_6_1' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_6_2' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_6_3' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_6_4' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_6_5' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_7_1' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_7_2' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Netzwerk.D_C_3_7_3' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_Y_5' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_Y_7' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_Y_6' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_Y_8_11' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_Y_10_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Allgemein.D_B_1' , parseInt(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Aktualwerte.D_A_1_1' , parseFloat(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Aktualwerte.D_A_1_2' , parseFloat(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Aktualwerte.D_A_1_3' , parseFloat(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Aktualwerte.D_A_2_1' , parseFloat(subst[i++]) );
                                                      setState(instanz + PfadEbene1 + 'Aktualwerte.D_A_3_1' , subst[i++] );
                                                      setState(instanz + PfadEbene1 + 'Aktualwerte.D_A_3_2' , parseInt(subst[i]) );
                                                      var iz = i;
                                          		    for(var iw = 1; iw<= 14; iw++) 
                                                      {
                                          			    iz++;
                                          			    if(iw<10)
                                                          {
                                          				    setState(instanz + PfadEbene1 + 'Wasserverbrauch.D_Y_2_0' + iw , parseInt(subst[iz++]) );
                                          				    setState(instanz + PfadEbene1 + 'Regenerationen.D_Y_4_0' + iw , subst[iz] );
                                                          }
                                          			    else 
                                                          {
                                          				    setState(instanz + PfadEbene1 + 'Wasserverbrauch.D_Y_2_' + iw , parseInt(subst[iz++]) );
                                          				    setState(instanz + PfadEbene1 + 'Regenerationen.D_Y_4_' + iw , subst[iz] );
                                          			    }
                                                      }
                                                  }
                                                  break;
                                                  case 3:
                                                  regex = /<data><code>([^\<]+)<\/code><D_K_10_1>([^\<]+)<\/D_K_10_1><D_K_10_2>([^\<]+)<\/D_K_10_2><D_K_10_3>([^\<]+)<\/D_K_10_3><D_K_10_4>([^\<]+)<\/D_K_10_4><D_K_10_5>([^\<]+)<\/D_K_10_5><D_K_10_6>([^\<]+)<\/D_K_10_6><D_K_10_7>([^\<]+)<\/D_K_10_7><D_K_10_8>([^\<]+)<\/D_K_10_8><D_K_10_9>([^\<]+)<\/D_K_10_9><D_K_10_10>([^\<]+)<\/D_K_10_10><D_K_10_11>([^\<]+)<\/D_K_10_11><D_K_10_12>([^\<]+)<\/D_K_10_12><D_K_10_13>([^\<]+)<\/D_K_10_13><D_K_10_14>([^\<]+)<\/D_K_10_14><D_K_10_15>([^\<]+)<\/D_K_10_15><D_K_10_16>([^\<]+)<\/D_K_10_16><\/data>/;
                                                  subst = regex.exec(str);
                                                  if (subst)
                                          	    {
                                          		    var iz = 2
                                                      for(var iw = 1; iw<= 16; iw++) 
                                                      {
                                          			    
                                                          if(iw<10)
                                                          {
                                          				    setState(instanz + PfadEbene1 + PfadEbene2[3] + 'D_K_10_0'+ iw , subst[iz] );
                                                          }
                                          			    else 
                                                          {
                                          				    setState(instanz + PfadEbene1 + PfadEbene2[3] + 'D_K_10_'+ iw , subst[iz] );
                                          			    }
                                                          iz++;
                                                      }
                                                  }
                                                  break;
                                                  default:
                                              }
                                          };
                                          
                                          // State SC18 String erstellen für Zyklisch abfragen
                                          on({time: "*/" + constPollingCycle + " * * * * *"}, function () {
                                          	if (KeineRueckmeldung == false){
                                                  sParSend = "id=3369&show=D_D_1|D_A_4_1|D_A_4_2|D_A_4_3|D_C_1_1|D_C_2_1|D_C_5_1|D_C_4_1|D_C_4_2|D_C_4_3|D_C_6_1|D_C_7_1|D_A_2_2|D_C_3_6_1|D_C_3_6_2|D_C_3_6_3|D_C_3_6_4|D_C_3_6_5|D_C_3_7_1|D_C_3_7_2|D_C_3_7_3|D_Y_5|D_Y_7|D_Y_6|D_Y_8_11|D_Y_10_1|D_B_1|D_A_1_1|D_A_1_2|D_A_1_3|D_A_2_1|D_A_3_1|D_A_3_2|D_Y_2_1|D_Y_4_1|D_Y_2_2|D_Y_4_2|D_Y_2_3|D_Y_4_3|D_Y_2_4|D_Y_4_4|D_Y_2_5|D_Y_4_5|D_Y_2_6|D_Y_4_6|D_Y_2_7|D_Y_4_7|D_Y_2_8|D_Y_4_8|D_Y_2_9|D_Y_4_9|D_Y_2_10|D_Y_4_10|D_Y_2_11|D_Y_4_11|D_Y_2_12|D_Y_4_12|D_Y_2_13|D_Y_4_13|D_Y_2_14|D_Y_4_14~"
                                                  ShowState (sParSend)
                                                  arryPfadEbene2 = 0  
                                              } 
                                          });
                                          
                                          //Power- Eco-modus umschalten Int 0=eco 1=power
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_5_1', function (obj) 
                                          {
                                              if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_5_1').val;
                                                  if (neuerWert == 1 || neuerWert == 0){ 
                                                      ShowState ("edit=D_C_5_1>"+neuerWert+"&id=3369~")
                                                  }
                                              }
                                          });
                                          
                                          //Regenerationszeitpunkt Int 0=auto 1=fest
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_4_1', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_4_1').val;
                                                  if (neuerWert == 1 || neuerWert == 0){ 
                                                      ShowState ("edit=D_C_4_1>"+neuerWert+"&id=3369~")
                                                  }
                                              }
                                          });
                                          
                                          //Uhrzeit String hh:mm wird automatisch Synchronisiert wenn Regenerationszeitpunkt auf "1=fest" eingestellt ist
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_4_2', function (obj) 
                                          {
                                              if (KeineRueckmeldung == false){
                                                  var sZeitState = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_4_2').val;
                                                  var minutes = new Date();
                                                  var Minuten = minutes.getMinutes(); Minuten = Minuten > 9 ? Minuten : '0' + Minuten; 
                                                  var akkZeit = new Date().getHours()+":"+Minuten;
                                                  // wenn Regenerationszeitpunkt = 1 (fest) und aktuelle Zeit nicht gleich Anlagenzeit
                                                  if (getState(instanz + PfadEbene1 +PfadEbene2[0]+'D_C_4_1').val && akkZeit != sZeitState ){
                                                      ShowState ("edit=D_C_4_2>"+ akkZeit +"&id=3369~")
                                                  }
                                              }
                                          });
                                          
                                          //Startzeit Regeneration String hh:mm
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_4_3', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_4_3').val;
                                                  ShowState ("edit=D_C_4_3>"+neuerWert+"&id=3369~")
                                              }   
                                          });
                                          
                                          //Rohwasserhärte Double °dH
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_D_1', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_D_1').val;
                                                  ShowState ("edit=D_D_1>"+neuerWert+"&id=3369~")
                                              }
                                          });
                                          
                                          //Sprache Int 0=De 1=En 3=Fr 4=Nl 5=Ru 6=Es 7=Zh
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_1_1', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_1_1').val;
                                                  ShowState ("edit=D_C_1_1>"+neuerWert+"&id=3369~")
                                              }
                                          });
                                          
                                          //Aktives Display im Standby Int 0=deaktiviert 1=aktiviert
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_6_1', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_6_1').val;
                                                  if (neuerWert == 1 || neuerWert == 0){
                                                     ShowState ("edit=D_C_6_1>"+neuerWert+"&id=3369~")
                                                  }
                                              }
                                          });
                                          
                                          //Soll Service Intervalldauer Int Tage
                                          on(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_7_1', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[0]+'D_C_6_1').val;
                                                  if (neuerWert >= 0 && neuerWert <= 4){
                                                      ShowState ("edit=D_C_7_1>"+neuerWert+"&id=3369~")
                                                  }
                                              } 
                                          });
                                          
                                          //manuelle Regeneration Int 1=Start
                                          on({id:idRegStart,val:true,change:'ne'}, function (obj){
                                             if (KeineRueckmeldung == false){
                                                  var Regeneration = getState(idReg).val;
                                                  var Trigger = getState(idRegStart).val;
                                                  setStateDelayed(idRegStart,false,1*1000);
                                                  if (Regeneration === 0 && Trigger === true){
                                                     ShowState ("edit=D_B_1>1&id=3369~")
                                                  }else{
                                          	        if (debug) {console.log('Regeneration bereits aktiv')}
                                                  } 
                                              }
                                          });
                                          
                                          //Fehlerspeicher Int 1=abfragen
                                          on(instanz+PfadEbene1+PfadEbene2[7]+'Fehlerspeicher', function (obj) 
                                          {
                                             if (KeineRueckmeldung == false){
                                                  neuerWert = getState(instanz + PfadEbene1 + PfadEbene2[7]+'Fehlerspeicher').val;
                                                  if (neuerWert == 1){
                                                      sParSend = "id=3369&code=245&show=D_K_10_1|D_K_10_2|D_K_10_3|D_K_10_4|D_K_10_5|D_K_10_6|D_K_10_7|D_K_10_8|D_K_10_9|D_K_10_10|D_K_10_11|D_K_10_12|D_K_10_13|D_K_10_14|D_K_10_15|D_K_10_16~"
                                                      ShowState (sParSend)
                                                      arryPfadEbene2 = 3; 
                                                      setState(instanz + PfadEbene1 + PfadEbene2[7]+'Fehlerspeicher',false);
                                                  }
                                              } 
                                          });
                                          
                                          // aktuelle State SC18 abrufen
                                          function ShowState (sParSend) 
                                          {
                                              if (KeineRueckmeldung == false)
                                              {
                                                  if(typeof(sParSend) == "undefined")sParSend = "";
                                          		xhr.open("POST","http://" + constIP + "/mux_http", true);
                                          	    xhr.setRequestHeader("Content-type", "application/json");
                                          	    xhr.setRequestHeader("Content-length", sParSend.length);
                                          		xhr.setRequestHeader("Connection", "close");
                                          		xhr.responseType = "document";
                                                  if (KeineRueckmeldung == false){
                                                      xhr.send(sParSend);
                                                      if (debug) {console.log (sParSend.length + " Byte an Daten wurden gesendet :" + sParSend)}
                                                  }
                                                  KeineRueckmeldung = true;
                                                  TimeoutRueckmeldung = setInterval(function(){timeout_Rueckmeldung();} , 4000);
                                          		xhr.onreadystatechange = function()
                                          		{
                                          				if (xhr.readyState==4)
                                          				{
                                          					clearInterval(TimeoutRueckmeldung);
                                          					KeineRueckmeldung = false;
                                          				}
                                          			
                                          		}
                                          		
                                              }	
                                              else {return}
                                          }
                                          
                                          //Bei Timeout abbrechen
                                          function timeout_Rueckmeldung()
                                          {
                                          	KeineRueckmeldung = false;
                                          	xhr.abort();
                                          	clearInterval(TimeoutRueckmeldung);
                                              if (debug) {console.log("Timeout")}
                                          }
                                          
                                          
                                          // Salzverbrauch berechnen 
                                          on(instanz + PfadEbene1 + PfadEbene2[5] + 'D_Y_2_01', function (obj){ 
                                          /*Formel Grünbeck bei Kapazitätszahl 8 m³x°dH und einem Härteunterschied von Rohwasser zu Brauchwasser 
                                            von 12 °dH  : 0,0285 kg x 12 °dH x 100 m³ = 34,2 kg Regeneriersalz
                                                  Bei der min. Kapazitätszahl 6 m³x°dH entspricht der Salzverbrauch 0.025 kg
                                                  Bei der max. Kapazitätszahl 14 m³x°dH entspricht der Salzverbrauch 0.039 kg
                                                  Es wird von einem liniaren Salzverbrauch von 0.00175 kg pro m³x°dH ausgegangen.
                                                  (((Kapazitätszahl-6)*0.00175)+0.025)x Rohwasserhärte x (Wasserverbrauch/1000)
                                          */
                                          var Rohwasserhaerte = getState(instanz + PfadEbene1 + PfadEbene2[0] + 'D_D_1').val;
                                          var KapZahl = getState(instanz + PfadEbene1 + PfadEbene2[4] + 'D_A_1_3').val;
                                          var Wasserverbrauch = getState(instanz + PfadEbene1 + PfadEbene2[5] + 'D_Y_2_01').val;
                                          var SalzverbrauchAlt = getState(instanz + PfadEbene1 + PfadEbene2[4] + 'Salzverbrauch').val;
                                          var SalzverbrauchGesamt = getState(instanz + PfadEbene1 + PfadEbene2[4] + 'SalzverbrauchGesamt').val;
                                          var SalzverbrauchNeu = (((KapZahl-6)*0.00175)+ 0.025)*Rohwasserhaerte*(Wasserverbrauch/1000)
                                          SalzverbrauchNeu = SalzverbrauchNeu+SalzverbrauchAlt;
                                          SalzverbrauchGesamt =SalzverbrauchGesamt+SalzverbrauchNeu;
                                          setState(instanz + PfadEbene1 + PfadEbene2[4] + 'Salzverbrauch',SalzverbrauchNeu);
                                          setState(instanz + PfadEbene1 + PfadEbene2[4] + 'SalzverbrauchGesamt',SalzverbrauchGesamt);
                                          
                                          if (debug) {console.log(SalzverbrauchAlt +" : "+ SalzverbrauchNeu)}
                                          
                                          });
                                          
                                          
                                          
                                          smartboartS Offline
                                          smartboartS Offline
                                          smartboart
                                          schrieb am zuletzt editiert von smartboart
                                          #100

                                          @ArnoD

                                          //manuelle Regeneration Int 1=Start
                                          
                                          on(instanz + PfadEbene1 + 'Allgemein.D_B_1', function (obj) 
                                          
                                          {
                                          
                                             StatePfad = instanz + PfadEbene1 +'Allgemein.D_B_1';
                                          
                                             Parameter = 'D_B_1'
                                          
                                             neuerWert = getState(StatePfad).val;
                                          
                                             if (neuerWert == 1)
                                          
                                             {
                                          
                                                  EditState(StatePfad,Parameter,neuerWert);
                                          
                                              } 
                                          
                                          });
                                          

                                          Hi, hab dazu nochmal nachgedacht.. Must nicht gleich draufspringen, hast genug geleistet die letzten Tage...Ich wollte es nur nicht vergessen, deshalb schreibe ich es gleich mal nieder..
                                          Was passiert denn wenn die Regeneration fest oder auto losläuft. Dann fängt dieser Script Teil ja auch an loszulaufen. Das heist zusätzlich zu festen oder auto Regeneration würde die anlage nochmal den Befehl zum starten bekommen. Wenn ich das richtig sehe, wäre eine Lösung um das zu unterbinden mit einem Hiflsmerker oder zusätzlichen state zu arbeiten. Ansosnten behebt das natürlich erstmal mein beschriebenes Problem mit dem 2 Tastendruck.
                                          Den scriptteil würde ich aber mit ner zuzsätzlichen Bedingung / Hilfsmerker bei von der anlage gestarten Reg blockieren.
                                          Einfacher wäre vlt. nen eigen State als Trigger zu nehmen und die Regeneration / State D_B_1 nicht mit sich selbst zu triggern.

                                          smartboartS 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          509

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe