NEWS
[Vorlage] Betriebsstundenzähler & Verbrauchsrechner
-
Bei mir hat er nix neues erstellt. Anbei ein Foto von meinem Objekte - Javascript
2120_betriebsstunden.jpg -
@tobih83:Bei mir hat er nix neues erstellt. Anbei ein Foto von meinem Objekte - Javascript `
schickst du mir mal das Programm mit deinen Einstellungen per PN ?
vielen Dank
Looxer
-
Bei mir zählt er was aber keine ahnung was. Die Zeiten stimmen nicht mit dem überein was ich überschlagen habe an Laufzeit.
Und die errechnete Menge kommt garnicht hin.
Muss wohl was andere überlegen um die Menge zu erfassen.
-
Ist es eigentlich möglich auch den Inhalt von JavaScript-Variablen als Datenpunkte zu nutzen?
Hintergrund: ich habe die Verbrauchswerte bereits in Watt vorliegen und würde darüber gerne einen Durchschnitt bilden.
Mein naiver Ansatz war einfach den JS-Datenpunkt einzutragen. Das funktioniert aber leider nicht (Wert ist immer "0")
> Gruppen[ 4] = ['javascript.0.strom.EG_W' ,'Strom' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
Was hingegen ohne Probleme geht ist:
> Gruppen[ 3] = ['modbus.0.holdingRegisters.40071_Hausverbrauch','Strom' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
Stefan.
-
Hallo looxer01,
Vielen Dank für das tolle Script, wie ich das überschauen kann, ist es genau das was ich benötige. Ich würde es also gern für meinen iobroker verwenden/anpassen. Prinzipiell habe ich den Grundaufbau verstanden, was mir fehlt ist der direkte Zugang zur Einrichtung Konfig für meine Homematic Geräte.
Ich sehe, das ich jedes zu loggende Gerät im Script hinterlegen muss.
Eine Beispieldatei mit einem Beispielgerät wär hilfreich für den ersten Zugang zur Einrichtung.
Wäre dankbar für eine Hilfestellung für den ersten Start …
Gruß
crepp
-
Hi Crepp,
Ein paar Bespiele sind ja in der Konfiguration schon enthalten
ich habe mal eine weitere Beispiel- Konfiguration beigefügt.
Ein paar Erklärungen dazu:
Erstes Beispiel: Es wird die Laufzeit eines Verbrauchers in Millisekungen gemessen
Gruppe0 misst einfach die Laufzeit eines Gerätes. Anfang der Messung beginnt dann, wenn das geraet den Status true hat. Das Ende wird erfasst, wenn der Status auf false sich aendert.
Eine Historie brauche ich für die Zeitmessung nicht. Also steht die auf false
logname0 ist der Name der Messung. Hier heisst es Schneckenzeit
special0. Da die Zeit in Millisekungen gemessen werden soll und auch sonst nichts umgerechnet wird gibt es hier keine Einstellungen
–------------------------------------------
Nächstes Beispiel (aufbauend) Errechnung Pelletverbrauch
Umrechnung der Laufzeit in KG (Es geht um eine Pelletverbrauchsrechnung)
Gruppe1 - ist identisch mit Gruppe 0 bis darauf, dass ich auch eine Historie erzeugen möchte.
Die Gruppen sind identisch, weil beide die Laufzeiten der Anlage in Millisekunden messen
logname1 = Hier ist es PelletKG
special1 = hier wird nun eine Umrechnung von Zeit in KG vorgenommen. Dabei wird umgerechnet in Minuten (also millisekunden / 60000) und dann mit 7.5 multipliziert. Das ist hier so, weil die Laufzeit den Pelletaushub bestimmt.
–-------------------------------------------
Nächstes Beispiel (Aussentemperatur Log jeden Mittag)
Gruppe15: Das Thermometer wird mit der Methode CALC abgefragt. Die Methode Calc deswegen, weil ich keine Zeit messe, sondern den Wert des Gerätes direkt verwende. Dabei macht die Messung der Anzahl der Schaltungen keinen Sinn (Switch) und steht deshalb auf false
Logname15 Der Name der Messung ist AussenNoon
special15 Die Rundung steht auf 2 Nachkommastellen, da dies für die Temperturmessung mehr als ausreicht. Ich möchte eine Durchschnittstemperaturmessung mit loggen. Damit kann z.B. die durschnittliche Wochen,Monats Temperatur berechnet werden
Die Messung findet jeden Tag um 12:00 statt.
Minimale und Maximale Temperaturen werden ebenfalls geloggt
Die ermittelten Werte (Temperaturen) werden in eine Excel datei geloggt
Das könnte beliebig fortgesetzt werden. Die Anzahl der Einstellungsmöglichkeiten ist schon recht gross.
Ich hoffe, dass es ein wenig hilft.
[spoiler] var Gruppen = []; // 1.Homematic ID, 2.Feldname(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[0] = ['hm-rpc.0.KEQ0178063.1.STATE' ,'Pellet' ,false ,true ,true ,true ,true ,true ,'false' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Schneckenzeit Gruppen[1] = ['hm-rpc.0.KEQ0178063.1.STATE' ,'Pellet' ,true ,true ,true ,true ,true ,false ,'false' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Kumuliert KG Gruppen[2] = ['hm-rpc.0.KEQ0178063.1.STATE' ,'Pellet' ,true ,true ,true ,true ,true ,false ,'false' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Kumuliert Euro Gruppen[3] = ['hm-rpc.0.KEQ0178063.1.STATE' ,'Pellet' ,false ,false ,false ,false ,false ,false ,'false' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Restbestand KG Gruppen[4] = ['hm-rpc.0.KEQ0178063.1.STATE' ,'Pellet' ,false ,false ,false ,false ,false ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Laufzeiten f.Graphik Gruppen[5] = ['initial' ,'' ,false ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Reserviert fuer Individuallogik Gruppen[6] = ['modbus.0.holdingRegisters.26_FA1_STATE' ,'Oekofen' ,false ,true ,true ,true ,true ,false ,'1' ,'2' ,'3' ,'4' ,'5' ,'7' ,'99' ,'' ,'' ,'' ,false ,false]; Gruppen[7] = ['modbus.0.holdingRegisters.26_FA1_STATE' ,'Oekofen' ,false ,true ,true ,true ,true ,false ,'7' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Oekofen Gruppen[8] = ['initial', '' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[9] = ['initial' , 'Strom' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,false]; // Gruppen[10] = ['initial' ,'Strom' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[11] = ['initial' , 'Strom' ,false ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true, false]; // Gruppen[12] = ['initial' , 'Strom' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,false]; // Gruppen[13] = ['initial' , '' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[14] = ['hm-rpc.0.JEQ0014148.1.TEMPERATURE' , 'Temperaturen' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[15] = ['hm-rpc.0.JEQ0014148.1.TEMPERATURE' , 'Temperaturen' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[16] = ['initial' , '' ,true ,true ,true ,true ,true ,false ,'calc' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[17] = ['initial' , 'Anwesenheit' ,false ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,true]; Gruppen[18] = ['initial' , 'Anwesenheit' ,false ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,true]; Gruppen[19] = ['hm-rpc.0.JEQ0295143.1.STATE' , 'Pool' ,true ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[20] = ['hm-rpc.0.JEQ0055021.1.STATE' , 'Pool' ,true ,true ,true ,true ,true ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[21] = ['initial' , '' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[22] = ['hm-rpc.0.JEQ0038551.1.STATE' , 'Pool' ,true ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; Gruppen[23] = ['initial' , 'Harmony' ,false ,true ,true ,true ,true ,true ,'0' ,'1' ,'2' ,'3' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,false]; Gruppen[24] = ['initial' , 'Harmony' ,false ,true ,true ,true ,true ,true ,'TV' ,'PowerOff','' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,false]; Gruppen[25] = ['initial' , 'Harmony' ,false ,true ,true ,true ,true ,true ,'false' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,true ,false]; /*------------------------------------------------------------------------------- Die folgende Tabelle dient zur Vergabe von Statusnamen zur besseren Lesbarkeit. Standard ist EIN Die ziffern im Array z.B. [0] korrespondieren mit der Gruppentabelle also Gruppen[0] gehört zu logname[0] Wird hier kein Feldname vergeben, dann wird Spalte 9-18 der Gruppentabelle als Feldname verwendet Beispiel: Zustand Lampe = EIN , Beispiel: Status 1 =Start, 2 = Heizung_Zuendung,3 = Softstart 4 = Heizung_Brennen, 5 = Heizung_Nachlauf etc ACHTUNG- keine spaces verwenden */ var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['Schneckenzeit','' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['PelletKG' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[2] = ['PelletEURO' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[3] = ['PelletRest' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[4] = ['SchneckeSchalt','' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[5] = ['EinAus5' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[6] = ['Start' ,'Zuendung' ,'Softstart','Leistungsbrand' ,'Nachlauf' ,'Saugen' ,'Idle' ,'' ,'' ,'']; logname[7] = ['PelletTheor' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[8] = ['EinAus8' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[9] = ['EinAus9' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[10] = ['EinAus10' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[11] = ['EinAus11' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[12] = ['EinAus12' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[13] = ['EinAus13' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[14] = ['Aussen' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[15] = ['AussenNoon' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[16] = ['EinAus16' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[17] = ['AnwRalf' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[18] = ['AnwEllen' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[19] = ['Filter' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[20] = ['PoolHeizung' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[21] = ['EinAus21' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[22] = ['Klimaanlage' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[23] = ['EinAus23' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[24] = ['EinAus24' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[25] = ['EinAus25' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; /* Tabelle "special" : hier werden Rechenregeln und Sonderfunktionen hinterlegt Pos1 Rundung auf Nachkommastellen Pos2 Addition1 mit dem angegebenen Wert erfolgt vor der Multiplikation mit dem Faktor aus Pos3 Pos3 = Faktor für die Multiplikationen - Ein Faktor kann nur sinnvoll eingegeben werden, wenn zu diesem Zeitpunkt alle Werte auf Null stehen. .......Der Faktor kann nicht null sein. In diesem Fall wird 1 angenommen. .......Also entweder bei der Neueinrichtung bzw ein Refresh ist aller Werte ist erforderlich Pos4 = Divisor um den Faktor lesbar zu machen z.B. Millisekunden Divisor für Sekunde = 1000 , Minute = 60000, Stunde = 3600000 .......Die Rechnung ist Faktor/Divisor / Wenn Divisor = blank oder 0, dann wird 1 angenommen Pos5 = Addition2 mit dem angegebenen Wert erfolgt nach der Multiplikation mit dem Faktor aus Pos3 .......Formel: y=((x+add1)*faktor/divisor)+add2 / y = Ergebnis - x = eigehender Wert aus dem überwachten Datenpunkt .......y wird in die Indivduallogik geschickt um weiter zu berechnen Pos6 ist vorgesehen, um Funktionen im Programm zu definieren die dann aufgerufen werden - Programmierung ist erforderlich Pos7 nur fuer Methode Delta und DeltaM - bei Tanksensoren/Energiesensoren kommt es haeufig zu Schwankungen plus und minus - Hier wird die Grenze bestimmt bei der ein Tankvorgang sicher angenommen werden kann z.B. 100 Liter differenz ......der Wert muss in der gemessenen Einheit angegeben werden. Z.B. Ultraschallsensoren senden in Liter. Dann ist die Zahl, die hier eingegeben werden muss ebenfalls Liter. Wenn nichts angegeben wird, dann wird 100 angenommen Pos8.. Sonderfall, wenn unter Gruppe(0) ein Datenpunkt eingetragen wurde der nicht nach update eine Bestaetigung (ack) erhaelt. In diesem Fall sollte 8 auf false stehen Pos9 =Wenn ein gleitender Durchschnitt berechnet werden soll, dann wird hier true eingetragen (noch nicht aktiviert) Pos10 = Zählschwelle für Durchschnittsberechnung. TIME in Millisekunden (bei einer Einschaltzeit unter der Angabe hier wird der Wert nicht in die Durchschnittsberechnung einbezogen) ........Umrechnugnen anhand von addition1 faktor, divisor und addition2 werden dabei nicht berücksichtigt Pos11 = Alternativ zum Auslösen bei Veränderung lassen sich hier Zeiten eingeben an denen die Erfassung des Zustandes der zu loggenden Datenpunkte erfolgt. .........format ist CRON. Beispiele: alle 10 Minuten = * /10 * * * * (leerzeichen vor "/"" bitte entfernen) täglich um 12 Uhr = 0 12 * * * - .........alle 2 Stunden = 0 * /2 * * * etc (leerzeichen vor "/"" bitte entfernen) .........mit der folgenden Web-Seite können die Zeiten generiert werden: http://crontab-generator.org/ .........Zur Ueberpruefung von Cron Expessions bietet sich diese Website an: http://crontab.guru/ .........Das ist nicht fuer die Methode TIME sinnvoll und ist daher ausgeschaltet, falls ein schedule fuer TiME eingegeben wurde Pos12 = Logging für diesen Datenpunkt wird eingeschaltet, wenn ein true eingetragen wird. Damit werden Minimum und Maximum Werte festgehalten Pos13 = Mehrfachstatus loggen ? dann true. In diesem Fall wird ein Status auch dann gesetzt, wenn bereits der gleiche Status vorher gesetzt wurde. das hat zur Folge, dass z.B. die Zeitmessung neu gestartet wird, obwohl der Status im Grunde nicht geändert wurde. Standard ist false Pos14 = Selective Logging - Wenn auf true, dann wird dieser Datenpunkt in einer dedizierten Datei geloggt */ var special = []; // 1.Round 2.add1 3.Faktor 4\. Divisor 5.add2 6.Individuallogik 7: DELTA(M)Grenze 8.Warten auf Bestaetigung 9.Durchschnitt - 10.Zaehlschwelle 11 Schedule 12\. Min/MAX 13\. MehrfachStatus 14\. Selektives Logging special[0] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ]; // Schneckenzeit special[1] = ['2' ,'' ,'7.5' ,'60000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; // Pelletverbrauch in KG special[2] = ['2' ,'' ,'1.725' ,'60000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // Pelletverbrauch in Euro special[3] = ['2' ,'' ,'-7.5' ,'60000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // Pellet Restbestand special[4] = ['' ,'1' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // für die Graphische Auswertungen Ein = 2 / aus = 1 special[5] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ]; special[6] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // Zeiterfassung fuer Stqtus Heizung special[7] = ['2' ,'' ,'-1' ,'' ,'' ,'oekofen' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // Sonderlogik fuer Saugzeiten Oekofen - theoretischer Pelletverbrauch special[8] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[9] = ['' ,'' ,'' ,'1000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // special[10] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // special[11] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // special[12] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // special[13] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[14] = ['2' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ,'' ,'' ,'true' ,'' ,'' ]; special[15] = ['2' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ,'' ,'0 12 * * *' ,'true' ,'' ,'true' ]; special[16] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[17] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[18] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[19] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; special[20] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'true' ]; special[21] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[22] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[23] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[24] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[25] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; [/spoiler]
-
Vielen Dank für deine schnelle Reaktion, Habe jetzt zwei Geräte angelegt (nur Zeiterfassung) aber ich denke da wird noch einiges im Lauf der Zeit hinzukommen.
Gruß crepp
-
Hallo,
Ich hab mich etwas zu früh gefreut, hab noch ein kleines Problem.
Prinzipiell läuft der Zähler mit den zwei Datenpunkten.
Nur meine Darstellung in vis gefällt mir noch nicht so sehr:
Links meine Darstellung, rechts die Darstellung wie ich sie gerne hätte (ohne führende Nullen)Das bekomme ich jedoch mit dem Widget "String Val Text" nicht hin, da es keine Möglichkeit gibt den Wert umzurechnen.
Kannst Du mir einen heissen Tipp geben, welches Widget ich verwenden kann.
Das widget "Number Val" (was ich rechts verwendet habe) kann umrechnen, zeigt mir aber keinen Wert an…
-
Hi Crepp,
Wenn keine Umrechnung eingegeben wird, dann ist das Format DDDDDD:HH:MM:SS hart verdrahtet.
Du kannst aber einfach von Millisekunden umrechnen (Tabelle special) und bekommst dann einen numerischen WEert.
Wenn du z.B. dazu im Divisor 1000 eingibst kannst du im Multiplikator
z.B. 60 eingeben und du erhältst Minuten
oder 3600 und der bekommst Stunden
oder 86400 und bist bei Tagen.
Dass solltest du dann noch mit einer Rundung versehen. z.B 1
vG Looxer
-
hallo
ich nehme mal an, das ich Datenpunkte mit Wert nicht verwenden kann?
Der Gaszähler wird geloggt und als Datenpunkt abgelegt.
Gruppen[ 0] = ['javascript.0.Gaszaehler.Wert' ,'' ,true ,true ,true ,true ,true ,false
LOG:
20:11:03.900 [info] javascript.0 Stop script script.js.common.Betriebsstundenzaehler 20:11:04.483 [info] javascript.0 Start javascript script.js.common.Betriebsstundenzaehler 20:11:04.485 [error] javascript.0 script.js.common.Betriebsstundenzaehler: TypeError: Cannot read property 'common' of null at script.js.common.Betriebsstundenzaehler:323:47 at ContextifyScript.Script.runInContext (vm.js:35:29)
-
Hi Noxx,
doch klar, gerade Werte sollten ja geloggt werden und berechnet.
Schick doch mal deine Einstellungen. Ich schau mal. Könnte ein Einstellungsproblem sein.
vG >Looxer
-
Bisher steht nur in Gruppe[0] was drin
Gruppen[ 0] = ['javascript.0.Gaszaehler.Wert' ,'' ,true ,true ,true ,true ,true ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
-
Sorry aus versehen geloescht
-
hmm, habe den dreh nicht.
Gruppen[ 0] = ['javascript.0.Gaszaehler.Wert' ,'' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
liefert
(vm.js:35:29) 21:51:35.973 [info] javascript.0 Stop script script.js.common.Betriebsstundenzaehler 21:51:36.512 [info] javascript.0 Start javascript script.js.common.Betriebsstundenzaehler 21:51:36.514 [error] javascript.0 script.js.common.Betriebsstundenzaehler: TypeError: Cannot read property 'common' of null at script.js.common.Betriebsstundenzaehler:323:47 at ContextifyScript.Script.runInContext (vm.js:35:29)
Edit
Nun kein Fehler mehr. Anscheinend muss die Spalte 2 gefüllt sein
-
habe nun 2 "geräte" eingestellt, beim Regensensor werden die Werte
übernommen, beim Gaszähler nicht.
Keine Ahnung warum, sind beide gleich eingestellt.
Gruppen[ 0] = ['javascript.0.Gaszaehler.Wert' ,'Heizung' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[ 1] = ['rflink.0.channels.Cresta_2.RAIN' ,'Wetterstation' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
logname[0] = ['Gasuhr' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['Regenmesser' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
special[0] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ]; special[1] = ['' ,'' ,'0.227' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
-
Hi Noxx,
Der Gaszähler steht auf delta. Das ist ok. Ist der Datenpunkt, der den jeweils aktuellen Gesamtverbrauchswert des Gaszählers misst, ein wirklich Javascript-datenpunkt ? -
Wichtig ist, dass der Wert in diesem Datenpunkt ein kontinuierlich aufsteigender Wert ist (eben die aktuelle verbraucht m3 Zahl.) Dann sollte das delta auch gemessen werden. Wie oft wird dieser Datenpunkt denn aktualisiert. Denn bei jeder Akutualisierung wird der Unterschied berechnet. Kann es sein, dass das im Sekundenbereich geschieht. ? Vielleicht ist der Wert dann zu klein. Durch das setzen des schedules in "special" kann auch das Aktualisieren geplant werden.
Bin jetzt bis Montag unterwegs und kann nur lesen.
vG Looxer
-
Hi Noxx,
ewentuell liegt der Fehler im Java-Script was Du mir zukommen lassen hast.
Und zwar genau in der Zeile:
schedule ("* * * * *", function(){ // alle 3 Minuten aufrufen
Wenn das Script alle drei min. die WEB abfragen soll, muß es so aussehen.
schedule ("*/3 * * * *", function(){
Ich baue heute alles nach und berichte ob es bei mir funktioniert!
var request = require('request'); var parseString = require('xml2js').parseString; var url="http://192.168.1.43"; // hier die Adresse der Webseite eintragen var GaszaehlerId = "Gaszaehler.Wert"; // Der Wert steht in "javascript.0." function processData(body){ parseString(body, function (err, result) { // log(JSON.stringify(result.MyHome.ESP8266_GasMeter[0].data[4].$.value)); if (!err) setState(GaszaehlerId,result.MyHome.ESP8266_GasMeter[0].data[4].$.value); }); } createState(GaszaehlerId, 0, false, { type:"number", unit:"m³" }); schedule ("* * * * *", function(){ // alle 3 Minuten aufrufen request({ uri: url, method: "GET", timeout: 10000, followRedirect: true, maxRedirects: 10 }, function(error, response, body) { if (!error) { if (response.statusCode == 200) { processData(body); } } else log("Fehler: "+error); }); })
-
Hi Noxx,
ewentuell liegt der Fehler im Java-Script was Du mir zukommen lassen hast.
Und zwar genau in der Zeile:
schedule ("* * * * *", function(){ // alle 3 Minuten aufrufen
Wenn das Script alle drei min. die WEB abfragen soll, muß es so aussehen. `
Aaah Ok. Der Wert kommt aus einem anderen Script und fuellt die variable. Dann brauchst du die schedule Funktion aus Tabelle Special nicht. Du musst halt darauf achten, dass die Differenz-werte nicht zu klein werden. Auf jeden Fall sollte nicht gerundet werden.
Vg looxer
Gesendet von meinem SM-G935F mit Tapatalk
-
kannst Du helfen?
Ich versuche grade auch ein Gaszähler einzubinden…
Gaszähler läuft und überträgt die Daten mit einem Javascript siehe Bild....
Ich habe nur dies vorerst angepasst. Irgendiwie bleibt alles auf Null, obwohl die Werte am Gaszähler steigen...
var Gruppen = []; // 1.Homematic ID, 2.Thema(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[ 0] = ['javascript.0.' ,'Gaszaehler.Wert' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[ 1] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['Gasuhr' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['EinAus1' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
hier mein LOG, bringt viele Warnungen:
javascript.0 2017-08-17 19:06:01.179 warn at process._tickCallback (internal/process/next_tick.js:104:9) javascript.0 2017-08-17 19:06:01.179 warn at _combinedTickCallback (internal/process/next_tick.js:80:11) javascript.0 2017-08-17 19:06:01.179 warn at endReadableNT (_stream_readable.js:974:12) javascript.0 2017-08-17 19:06:01.178 warn at IncomingMessage.emit (events.js:185:7) javascript.0 2017-08-17 19:06:01.178 warn at emitNone (events.js:91:20) javascript.0 2017-08-17 19:06:01.178 warn at IncomingMessage.g (events.js:292:16) javascript.0 2017-08-17 19:06:01.178 warn at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1091:12) javascript.0 2017-08-17 19:06:01.177 warn at Request.emit (events.js:188:7) javascript.0 2017-08-17 19:06:01.177 warn at emitOne (events.js:96:13) javascript.0 2017-08-17 19:06:01.177 warn at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1171:10) javascript.0 2017-08-17 19:06:01.177 warn at Request.emit (events.js:191:7) javascript.0 2017-08-17 19:06:01.176 warn at emitTwo (events.js:106:13) javascript.0 2017-08-17 19:06:01.176 warn at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:188:22) javascript.0 2017-08-17 19:06:01.176 warn at Request._callback (script.js.common.Gaszaehler:34:17) javascript.0 2017-08-17 19:06:01.175 warn at processData (script.js.common.Gaszaehler:9:4) javascript.0 2017-08-17 19:06:01.175 warn at exports.parseString (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:354:19) javascript.0 2017-08-17 19:06:01.175 warn at Parser.parseString (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:5:59) javascript.0 2017-08-17 19:06:01.174 warn at Parser.exports.Parser.Parser.parseString (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:322:31) javascript.0 2017-08-17 19:06:01.174 warn at Object.write (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:1436:13) javascript.0 2017-08-17 19:06:01.173 warn at closeTag (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:889:7) javascript.0 2017-08-17 19:06:01.173 warn at emitNode (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:629:5) javascript.0 2017-08-17 19:06:01.172 warn at emit (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:624:35) javascript.0 2017-08-17 19:06:01.172 warn at Object.onclosetag (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:261:26) javascript.0 2017-08-17 19:06:01.171 warn at Parser.emit (events.js:188:7) javascript.0 2017-08-17 19:06:01.171 warn at emitOne (events.js:96:13) javascript.0 2017-08-17 19:06:01.170 warn at Parser. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:303:18) javascript.0 2017-08-17 19:06:01.169 warn at script.js.common.Gaszaehler:12:11 javascript.0 2017-08-17 19:06:01.165 warn Wrong type of javascript.0.Gaszaehler.Wert: "string". Please fix, while deprecated and will not work in next versions. host.orangepiplus2e 2017-08-17 19:06:00.044 info instance system.adapter.yr.0 started with pid 14601 host.orangepiplus2e 2017-08-17 19:05:14.758 info instance system.adapter.ical.0 terminated with code 0 (OK) ical.0 2017-08-17 19:05:06.513 info starting. Version 1.3.2 in /opt/iobroker/node_modules/iobroker.ical, node: v6.11.2 host.orangepiplus2e 2017-08-17 19:05:00.124 info instance system.adapter.ical.0 started with pid 14541 javascript.0 2017-08-17 19:03:00.839 warn at process._tickCallback (internal/process/next_tick.js:104:9) javascript.0 2017-08-17 19:03:00.838 warn at _combinedTickCallback (internal/process/next_tick.js:80:11) javascript.0 2017-08-17 19:03:00.838 warn at endReadableNT (_stream_readable.js:974:12) javascript.0 2017-08-17 19:03:00.838 warn at IncomingMessage.emit (events.js:185:7) javascript.0 2017-08-17 19:03:00.837 warn at emitNone (events.js:91:20) javascript.0 2017-08-17 19:03:00.837 warn at IncomingMessage.g (events.js:292:16) javascript.0 2017-08-17 19:03:00.837 warn at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1091:12) javascript.0 2017-08-17 19:03:00.836 warn at Request.emit (events.js:188:7) javascript.0 2017-08-17 19:03:00.836 warn at emitOne (events.js:96:13) javascript.0 2017-08-17 19:03:00.836 warn at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1171:10) javascript.0 2017-08-17 19:03:00.835 warn at Request.emit (events.js:191:7) javascript.0 2017-08-17 19:03:00.835 warn at emitTwo (events.js:106:13) javascript.0 2017-08-17 19:03:00.834 warn at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:188:22) javascript.0 2017-08-17 19:03:00.831 warn at Request._callback (script.js.common.Gaszaehler:34:17) javascript.0 2017-08-17 19:03:00.831 warn at processData (script.js.common.Gaszaehler:9:4) javascript.0 2017-08-17 19:03:00.830 warn at exports.parseString (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:354:19) javascript.0 2017-08-17 19:03:00.830 warn at Parser.parseString (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:5:59) javascript.0 2017-08-17 19:03:00.830 warn at Parser.exports.Parser.Parser.parseString (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:322:31) javascript.0 2017-08-17 19:03:00.829 warn at Object.write (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:1436:13) javascript.0 2017-08-17 19:03:00.829 warn at closeTag (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:889:7) javascript.0 2017-08-17 19:03:00.828 warn at emitNode (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:629:5) javascript.0 2017-08-17 19:03:00.828 warn at emit (/opt/iobroker/node_modules/iobroker.javascript/node_modules/sax/lib/sax.js:624:35) javascript.0 2017-08-17 19:03:00.828 warn at Object.onclosetag (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:261:26) javascript.0 2017-08-17 19:03:00.827 warn at Parser.emit (events.js:188:7) javascript.0 2017-08-17 19:03:00.827 warn at emitOne (events.js:96:13) javascript.0 2017-08-17 19:03:00.826 warn at Parser. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/xml2js/lib/parser.js:303:18) javascript.0 2017-08-17 19:03:00.826 warn at script.js.common.Gaszaehler:12:11 javascript.0 2017-08-17 19:03:00.810 warn Wrong type of javascript.0.Gaszaehler.Wert: "string". Please fix, while deprecated and will not work in next versions.
-
noch etwas als Infooo….
habe jetzt auch so probiert.
var Gruppen = []; // 1.Homematic ID, 2.Thema(no spaces) 3.History 4.DAY 5.Week 6.Month 7.Year 8.Switch 9 - 18 Status to log 19.stop 20.Loesch Gruppen[ 0] = ['javascript.0.Gaszaehler.Wert' ,'' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
Beim Start siemt man unten im JS Adapter das hier:
Log
19:31:05.765 [info] javascript.0 Start javascript script.js.common.Betriebsstdzaehler
19:31:05.767 [error] javascript.0 script.js.common.Betriebsstdzaehler: script.js.common.Betriebsstdzaehler:323
19:31:05.768 [error] javascript.0 at script.js.common.Betriebsstdzaehler:323:47
1526_unbenannt2.png