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.
    • S
      schmid_no1 last edited by

      @ArnoD Richtig cool !!!!
      nur noch ne kleine Frage ist das der Salzverbrauch pro Tag? Wenn ja könnet man noch ein State dazufügen indem man eingeben kann wieviel Salz man eingefüllt hat und durch deine Doku des Täglich verbrauchten Salzes ausrechnet wie lange dieses noch halten würde.

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

        @schmid_no1 Nein der Salzverbrauch bzw. die Berechnung wird getriggert durch den Wasserverbrauch vor einem Tag und dann immer dazu addiert. Im Prinzip bekommst du dadurch einen Salzverbrauch über alles. Wenn du den zurück setzen willst, gib einfach einen neuen Start Wert ein! Also Setze den State Salzverbrauch auf 0 nach dem Befüllen!
        Das hat Arno schon super gemacht... Jetzt könnete man im Script noch einfügen, wenn der Salzverbrauch 10 kg oder einen anderen Erfahrungswert, habe ich noch nicht....ab wieviel Verbrauch wird Wasserr sichtbar? erreicht hat, setze einen weiteren State Salz nachfüllen! Perfekt
        @ArnoD Wenn ich das richtig sehe, ist für die Berechnung ein gültiger Start Wert nötig oder? Also Salzverbrauch alt. Bei Scriptstart ist der Wert erstmal Null.... Es wird wahrscheinlich reichen den Wert in den objekten manuell zu beschreiben. Ansosnten könnte man es in dem Script konfigurierbar machen oder...Z.B ich habe schon 2 Kilo verbraucht also starten wir mit 2 Kilo... oder eben 25 oder was bis zum ersten Start des Skripts verbraucht wurde...Somit wäre das Thema mit der Null weg... Oder du gibst einfach 0 vor...Oder eben einfach nur ein Hinweis bei Scriptstart Verbrauch bis dahin Salz manuell berechnen und eintragen.. oder eben einfach das Ding voll machen und 0 eintragen..
        Korrigier mich wenn ich schwachsinn schreibe... 🙂
        oder einfach :
        createState(instanz + PfadEbene1 + PfadEbene2[4] + 'Salzverbrauch', {name: 'Salzverbrauch in kg',type: 'number',role: 'number',desc: 'Salzverbrauch in kg',unit: 'kg',def:'0'});
        für den ersten Scriptstart.

        1 Reply Last reply Reply Quote 0
        • S
          schmid_no1 last edited by

          In dem Fall passt das so für mich danke euch 😁

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

            Ich fände es gut den Scriptteil nochmal laufen zu lassen mit nem weiteren State Salzverbrauch über alles...Somit hätte man einen Gesamt Wert über den gesamten lifecycle der Anlage. Den anderen habe ich für den Salzwechsel zum zurücksetzen in vis .

            Wenn du willst kannst du das noch einpflegen...Ansosnten muss ich bei aktualisierungen deines Scripts halt aufpassen..

            Benutzt ihr Telegramm? Habe noch eine push Nachricht in den Salzverbrauch eingebaut..
            Ebenfalls eine Pushnachricht bei Sammelstörung ( GPIO ) potentialfrei mit Ansage am Tablet.
            Zusätzlich wird das Display eingeschaltet wenn der Raum betreten wird.
            Ausserdem Autoregeneration bei Abwesenheit und Waschmaschine aus und <10%
            oder bei unterschreiten 2 % mit rein genommen.
            Ist aber alles eher individuel..macht wahrscheinlich keinen Sinn das mit rein zunehmen.
            Aber vlt. möchte es ja jemand für sich anpassen..

             createState(instanz + PfadEbene1 + PfadEbene2[4] + 'SalzverbrauchGesamt', {name: 'Salzverbrauch Gesamt in kg',type: 'number',role: 'number',desc: 'Salzverbrauch Gesamt in kg',unit: 'kg',def:'0'});
            
            // Salzverbrauch Gesamt 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)
            
            */
            
            const idSalzverbrauchGesamt = instanz + PfadEbene1 + PfadEbene2[4] + 'SalzverbrauchGesamt';
            
            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(idSalzverbrauchGesamt).val;
            
            var SalzverbrauchNeu = (((KapZahl-6)*0.00175)+ 0.025)*Rohwasserhaerte*(Wasserverbrauch/1000)
            
            SalzverbrauchNeu = SalzverbrauchNeu+SalzverbrauchAlt;
            
            setState(idSalzverbrauchGesamt,SalzverbrauchNeu);
            
            if (debug) {console.log(SalzverbrauchAlt +" : "+ SalzverbrauchNeu)}
            
             
            
            });
            
            // Pushnachricht bei Vebrauch > 10 kg
            
            
            on(instanz + PfadEbene1 + PfadEbene2[4] + 'Salzverbrauch', function (obj){ 
            
                const idSalzverbrauch = instanz + PfadEbene1 + PfadEbene2[4] + 'Salzverbrauch';
            
                var Salzverbrauch = getState(idSalzverbrauch).val;
                    
                    if(Salzverbrauch >= 10){
                        
                    sendTo("telegram.0", "send", {text: (['Achtung: ',' Bitte Salz in Weichwasseranlage nachfüllen.Verbraucht wurden',getState(idSalzverbrauch).val,'kg.'].join(''))});
            
                    if (logging) log ('Slazmangel Weichwasseranlage');
                
                }
            
            });   
            
            // Pushnachricht bei Sammelstörung Weichwasseranlage Potentialfreier Kontakt
            
            on({id:'rpi2.1.gpio.23.state',val:false,change:'ne'}, function (obj){
            
            sendTo("telegram.0", "send", {text:'Achtung!!! Weichwasseranlage Sammelstörung. Überprüfen sie die Anlage!'});
            
            sendTo("paw.0",'all',{send:  'say', text:  'Achtung! Weichwasseranlage Sammelstörung . Überprüfen sie die Anlage!'});
            
            if (logging) log ('Sammelstörung Weichwasseranlage');
            });   
            
            // Display einschalten bei Betreten des Raum
            
            on({id:'zigbee.0.00158d0002bfc52d.opened'}, function (obj){
            const idTuer = 'zigbee.0.00158d0002bfc52d.opened';
            var Tuer = getState(idTuer).val;
                if(Tuer){
                    setState('javascript.0.Status.Gruenbeck.SC18.Parameter.D_C_6_1',1);
                            if (logging) log ('Display Weichwasseranlage ein geschaltet');
            
                    }else{
                    setState('javascript.0.Status.Gruenbeck.SC18.Parameter.D_C_6_1',0);
                    if (logging) log ('Display Weichwasseranlage aus geschaltet');
                }
            });  
            
            
            //Regeneration starten wenn niemand zu Hause und Level unterschritten oder Level bei nur 1%
            var logging = true
            
            function Autoregeneration() {
            
            var Anwesend = getState('javascript.0.Anwesenheitssteuerung.BewohnerAnwesend').val;
            
            var Kapazitaet = getState('javascript.0.Status.Gruenbeck.SC18.Allgemein.D_Y_10_1').val;
            
            var Waschmaschine = getState ('javascript.1.Statusmeldungen.Waschmaschine.Status').val;
            
            var Regeneration = getState(idReg).val;
            
            if (Regeneration===0 && Anwesend===false && Waschmaschine===false && Kapazitaet <=5){
            
            setState(idRegStart,true);
            
            if (logging) log ('Regeneration Weichwasseranlage wegen geringer Restkapazität während der Abwesenheit gestartet');
            
                     }else{
                
                        if(Regeneration===0 && Kapazitaet<=2 && Kapazitaet >1){
                    
                        setState(idRegStart,true);
            
                        if (logging) log ('Regeneration Weichwasseranlage kurz vor Kapazitätsende gestartet');
                    }
                }
            }
            
            on({id:'javascript.0.Anwesenheitssteuerung.BewohnerAnwesend',val:false,change:'ne'}, function (obj){
            Autoregeneration();    
            });
            
            on({id:'javascript.0.Status.Gruenbeck.SC18.Allgemein.D_Y_10_1',change:'ne'}, function (obj){
            Autoregeneration(); 
            });
            
            1 Reply Last reply Reply Quote 0
            • A
              ArnoD last edited by

              @smartboart du bist mir zu schnell 😀

              Ich habe das Problem mit der Schnittstelle noch nicht gelöst 😉
              Ich habe immer noch das Problem das der Fehler "send flag true" vereinzelt auftritt und ich mir nicht mehr erklären kann warum. 🤔
              Ich habe jetzt das Script noch mal umgebaut. Es gibt nur noch eine Funktion, die Daten an die SC18 sendet.
              Nach dem Senden der Daten starte ich einen Timer, der nach vier sek. ohne Rückmeldung abbricht und die Daten werden noch mal gesendet.
              Es werden nach dem Senden alle weiteren Anfragen ignoriert, bis die Schnittstelle entweder in den 4 sek. antwortet oder nach 4 sek. über Timeout beendet wird.
              Mit diesen Änderungen hoffe ich, dass es besser wird.
              @smartboart deine Vorschläge habe ich übernommen bis auf Telegramm. Ich will ich erst die Schnittstelle so weit haben, dass diese stabil läuft , bevor ich was Neues beginne.

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

                @ArnoD ich will dich nicht hetzen.. Es sind ja nur Vorschläge und ich bin auch nicht eingeschnappt wenn etwas nicht den Weg in dein Script findet 😁
                also bei mir läuft das script seit meiner letzten fehlerberichterstattung 3tage Keine Ahnung ohne Fehler!
                Ach so es hat sich ein Schreibfehler eingeschlichen... Du hast aus Ausseneingriff Ausseneigriff gemacht.. 😂😂😂
                Die zusaetzlichen if abfragen finde ich grundsätzlich gut... Nachteil ist halt wenn die Bedingung nicht erfüllt ist es nicht automatisch durchgeführt wird wenn es dann erfüllt ist...
                ich bin kein java Profi... Alles was ich weiß habe ich mit try and error selbst raus gefunden...
                ich wuerde hier bei wichtigen Funktionen mit der Regeneration zum Beispiel dann mit Merker arbeiten... Sobald die Bedingung nicht erfüllt ist wird ein Merker gesetzt... Und sobald die Bedingung dann wieder gut triggert sie die Funktion und wenn der Merker noch gesetzt ist wird die Funktion ausgeführt... Natürlich wenn die anderen Bedingungen noch erfüllt sind.
                Wenn du willst kann ich morgen was am Beispiel Regeneration schreiben... Hoffe ich kriege es hin...

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

                  Uuups 😂 der Ausseneigriff soll aber auch wichtig sein. 😂 😂
                  Habe den Fehler korrigiert.

                  Was habt ihr eigentlich für einen Softwarestand, bei der SC18 ?? Meiner ist V1.01.02

                  Das Script läuft ohne Probleme, bis die W-Lan Verbindung zur SC18 abbricht.
                  Habe noch nicht rausgefunden, an was das liegt und warum dann das Script mit dem Fehler "send flag true" stoppt.

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

                    Welche if Abfragen meinst du ?

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

                      Meinst du die "Keine Rueckmeldung" ?
                      An eine Art Merker habe ich auch schon gedacht, aber diese müsste man dann wieder zyklisch abfragen und
                      der Reihe nach abarbeiten. Man könnte natürlich auch ein Array als Merker erstellen und in einer Schleife abarbeiten.
                      In der Zeit wird natürlich die zyklische Abfrage aller anderen Werte angehalten.
                      Da ich auch kein Profi bin, was Javascript angeht und ich gerade erst den Umgang damit lerne, bin ich für jede Hilfe dankbar. 😀 👍

                      smartboart 2 Replies Last reply Reply Quote 0
                      • S
                        schmid_no1 last edited by

                        V01. 00. 37
                        Und ich versteh nur Bahnhof was ihr da kreiert😅

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

                          V01. 01.02... Das mit WLAN kann schon sein... Ich habe im Keller ein separates WLAN fuer smart home geraete... Fast ohne fremdeinwirkung bzw. Stoerfrequenzen.. Und der Router Fritte 7590 ist nur 4m weg im Büro... Vlt. Ist ein stabiles WLAN von Vorteil... Hab da auch nur 6 - 7 Teilnehmer drinnen... Nicht so wie im EG... Da hab ich aufgehört zu zählen...

                          1 Reply Last reply Reply Quote 0
                          • S
                            schmid_no1 last edited by

                            Ich hab die Anlage schon seit fast 3 Jahren hatte auch mal ein Script das funktionierte aber zu deiner arbeit ist das kein Vergleich

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

                              @ArnoD ich haette schwören können du bist Profi... Fuer meine Verhältnisse auf jeden Fall...
                              Apropo WLAN.. Ich hatte hier mit wlan mesh jedemenge Probleme... Bis ich es deaktiviert hatte und 2 WLAN Netzwerke aufgebaut habe.. Seit dem war ruhe... Vlt hat du ja auch wlan mesh aktiv

                              1 Reply Last reply Reply Quote 0
                              • S
                                schmid_no1 last edited by

                                Und bei mir läuft alles fehlerfrei seit 4 Tagen

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

                                  @schmid_no1 3 Jahre... Wie sind die Erfahrungen? Ich hab die erst eine Woche im Betrieb... Macht nen guten Eindruck... Muss dazu sagen der threat hier hat mir die Kaufentscheidung leichter gemacht... Sollte unbedingt mit iob können.

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    schmid_no1 last edited by

                                    Die Anlage läuft ohne Probleme bei 2 Personen und 2 Kleinkinder bei einem durschnittsverbrauch von ca. 220 Liter aktuell. Wie gesagt finde ich voll cool das sich dem entlich einer annimmt

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

                                      @schmid_no1 220 Liter mit 4 Personen? Muss wohl doch an meiner Frau liegen.. 🙂 Welche Rohwasserhärte habt ihr? Bei mir sind es 22-23°dH Läuft fast alles durch die Anlage. Das Beimischventil ist nur minimal offen... Schwankt zwischen 250 und 350 Liter zu 2.

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        schmid_no1 last edited by

                                        Habe 22°dH hat alles Mein flaschner eingerichtet zieh aber den Kalk nicht komplett aus dem Wasser also es bleiben 8° dH. Wenn die kleinen ein bisschen größer sind werde ich nochmals absenken(für meine Frau) 😉

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

                                          @ArnoD Hallo Arno, so kompliziert würde ich das mit dem Merker garnicht angehen.
                                          Ich habe mal ein Bespiel für die Funktion Regenerationsstart eingebaut, welche sicher stellen sollte, dass der Befehl auch abgesetzt wird, sobald keineRückmedlung wieder flase ist nachdem durch einen Fehlerfall der Befehlt für manuellen start nicht durch ging...
                                          Könnte man auch in den Fehlerspeicher abrufen so einbauen. Oder überall wo du die Bedingung für manuellen abruf bei keineRückmeldung = true unterbindest.
                                          im Beispiel unten müsstest du noch die Zeile RegenerationStart(); an der Stelle einbauen wo du KeineRückmeldung wieder false setzt...
                                          Unschön ist halt, das die Funktion nun je nach const constPollingCycle = 60 getriggert wird...

                                          //manuelle Regeneration Int 1=Start
                                          
                                          function RegenerationStart() {
                                              if (debug) {console.log('Trigger Regenerationstart Prüfung aktiv')}
                                              var Regeneration = getState(idReg).val;
                                              var Trigger = getState(idRegStart).val;
                                              setStateDelayed(idRegStart,false,1*1000);
                                              if ((KeineRueckmeldung === false && Regeneration === 0 && Trigger === true)||(KeineRueckmeldung === false && merker === true && Regeneration === 0)){
                                              ShowState ("edit=D_B_1>1&id=3369~")
                                              merker = false;
                                              if (debug) {console.log('Befehl zum Regeneratiosstart wurde abgesetzt')}
                                              }else{
                                          		if(KeineRueckmeldung == true){
                                          			merker = true;
                                          	        if (debug) {console.log('Befehl zum Regeneratiosstart ging wegen fehlender Rückmeldung nicht durch')}
                                                  
                                                  } 
                                          
                                              }
                                          
                                          }
                                          
                                          var merker = false
                                          on({id:idRegStart,val:true,change:'ne'}, function (obj){
                                          RegenerationStart();
                                          });
                                           
                                          
                                          
                                          
                                          // RegenerationStart(); eingefügt
                                          // 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;
                                          
                                                              RegenerationStart();
                                          
                                          				}
                                          
                                          			
                                          
                                          		}
                                          
                                          		
                                          
                                              }	
                                          
                                              else {return}
                                          
                                          }
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • smartboart
                                            smartboart @schmid_no1 last edited by

                                            @schmid_no1 Ja ich habe es auf 5°dH eingestellt.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            902
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            16
                                            138
                                            20329
                                            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