NEWS
Daten aus einer Website mit Javascript
-
@ArnoD Also habs getestet. habe oben meinen Vorschlag aktualisiert. unten siehe log. Wenn jetzt während der regeneration nochmal gestartet wird, kommt der Hinweis im log bereits gestartet. Eine Regeneration durch das Gerät selbst läuft jetzt ins leere und triggert nicht mehr den Scriptblock...
-
Habe das Script mit deiner Optimierung aktualisiert.
Macht natürlich auch für alle anderen änderbaren Werte sinn eine eigene ID für Änderungen in Vis anzulegen.Habe mir auch überlegt ob wir hier unter "Daten aus einer Webseite mit Javascript" noch richtig sind und es nicht besser wäre ein neues Thema aufzumachen wie "Grünbeck SC18"
-
@ArnoD ja da hast du Recht..mit allem...
Generell ist es besser eigene States zum Triggern zu benutzen, aber bei den anderen steuerbaren states fällt es nicht so auf, da keine Aktion in dem Sinner erfolgt...Ist ja eigentlich nur eine Aktualisierung..Stört mich an den Stellen nicht so...
Ein eigener Threat bietet sich an...Wäre sogar was für einen adapter... -
Hallo Ihr zwei kleine Frage:
- Auf was bezieht sich der Fehlerspeicher bzw. kann man den nutzen um eine Fehlerausgabe in Echtzeit zu basteln, somit wirde man die Potentialfreien nicht brauchen.
- @ArnoD wie hast das mit dem Salzverbrauch in deiner Visu gemacht.
-
Die Anlage speichert jede Störung mit einem Störcode in einem Fehlerspeicher. Das Script liest diesen nur aus.
Man kann diesen sicher dazu nutzen bei einem neuen Fehler ein State auf true zu setzen und durch Quittieren wieder auf false.
Warum nutzt du eigentlich nicht die E-Mail Benachrichtigung der SC18, somit würdest du bei jedem Fehler eine E-Mail bekommen.Ich muss erst noch im Script den Salzverbrauch berechnen, so das man hier eine sinnvolle Anzeige hat, im Moment habe ich nur einen Zähler, der bei jeder Regeneration um eins erhöht wird. Das ist natürlich sehr ungenau, da die Anlage ja nicht immer zu 100% regeneriert.
-
@ArnoD Ich werte dazu den Wasserverbrauch aus. Sobald ich einmal Salz nachgefüllt habe, schaue ich wieviel Wasser durch ging. Mit der Infor bastle ich dann ein script.
@schmid_no1 die Idee von Arno ist garnicht schlecht...Mittels Script könnte man alle Fehler Speicher auslesen mittels oder Verknüpfung würde ein neuer Fehler einen State triggern wie z.B Anlage störung. Mit diesem Sate in vis anzeigen und ne pusch nachricht schicken..Ich werde das so umsetzen..vorausgesetzt wir packen das Auslesen noch in den Schedule...Fraglich ist nur ob das zu viel wird für die Kleine..Ansonsten ist der potentialfreie die bessere Wahl.Hier wird noch die Spannung mit überwacht
Aber das ginge auch über meine smartplug mit welcher ich die Sannung anzeige und den Strom mitlogge.
Email fällt bei mir raus weil alle meine Smarten Geräte fürs internet gesperrt sind...Habe nur das nötigste online..safety first -
Ich brauche ziemlich genau 2 x 25kg Sack Im Jahr bei 100 bis 120 m2. Ich könnte einfach einen Zähler rein machen der mich informieren soll wenns wieder soweit sein sollte. Oder wir bekommen tatsächlich ausgerechnet .
Bin gerade noch dran die Codierung der fehlercods zu bekommen. Aber das mit dem State bei Änderung und dem popup wäre eine schöne Sache. Leider bin ich in Sachen scripte nicht fit und kann euch da nicht unterstützen. -
@schmid_no1 Eine fehlerliste wäre nicht schlecht...Wie kommen denn die Fehler im Script an?
@ArnoD die States sind vom Typ String...Weist du ob diese im Klartext ausgegeben werden oder nur 0 und 1? -
@smartboart "E4_h5883" z.B. im Internet findet man halt leider gar nichts.
-
@schmid_no1 eventuell mal beim Hersteller anfragen.
-
Ich weiß nur das die erste Position E4 der Fehlercode ist und _hxxxx wann der Fehler aufgetreten ist.
Ich habe jetzt die Berechnung Salzverbrauch nach Angaben und Formel der Fa. Grünbeck erstellt. Jetzt müssen wir nur noch 6 Monate warten, um zu sehen, ob diese Berechnung auch stimmt. -
Cool echt klasse!!!! Sehr gute Arbeit... Und wirklich durchdacht. Ohne Anpassung fuer jeden passend! Morgen gleich einpflegen... Dann Hab ich mir die Arbeit und Salz Menge messen ja gespart...
Habe heute Kabel gezogen... Habe mich dazu entschlossen den potentialfreien stoermelde Kontakt im verteiler Schrank einzulesen... Mit dem raspi slave lese ich eh schon Klingel und netzausfall ueber Relais ein.. Hat den Vorteil das stoerung vom Geraet und netzausfall am Geraet Hardware maessig zusaetzlich überwacht sind... Das Kabel ist gut investiert.. Als nächstes wssserzaehler und Heizung noch mit einlesen...Ich werde die Tage ein Script Scheiben um bei Abwesenheit und unter 10% und Waschmaschine nicht an und reg nicht aktiv automatisch die reg gestartet wird.. Sowie wenn nur 1% dann unabhängig der Regel die reg gestartet wird wenn nicht bereits aktiv...
evtl. Ist das ja auch was fuer euch... -
@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. -
@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. -
In dem Fall passt das so für mich danke euch
-
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(); });
-
@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. -
@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... -
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. -
Welche if Abfragen meinst du ?