NEWS
[Vorlage] Betriebsstundenzähler & Verbrauchsrechner
-
ehm,,, bin selbt mitlerweile verwirrt…
auf dem Zähler steht 96 Umdrehungen = 1kW/h
Eine Umdrehung = 1000 Watt geteil 96 = 10,41Watt/h
demnach um den Momentaverbrauch /min zu bekommen, müsste die Rechnung so aussehen
Umdrehung x 10 x 60 = Wert/min
Beispiel: 2 x 10 x 60 = 1200W/min.
Kann mab das im Script einstellen?
-
jap,
du gibst im Faktor 600 ein.
Wenn du das Ganze als kWh sehen willst dann noch im Divisor 1000 oder eben nichts, wenn es denn wH sein sollen.
Die Umdrehungen der letzten Minute haben wir ja ermittelt. Mehr braucht's doch nicht.
vG Looxer
-
Geil Looxer,
Faktor 600 eingetragen und schon geht es mit Watt/ min. :mrgreen:
Wenn ich noch in Diwisor einen Wert 1000 eintrage, müßte ich dann einen Momentanwert für eine min. bekommen in kWh
Danke Looxer für Deine Arbeit. Bist ein hilsbereiter Typ.
-
Hallo zusammen,
hat wer sich die Daten Day 1 oder before bereits im mobile Adapter anzeigen lassen?
Normal geht es ja so, dass wenn ich den States einen Raum und Funktion zuweise, dass sich diese automatisch sich in Aufzählungen befinden.
Somit dann auch in mobileui.
Leider hat das gestern bei mir nicht funktioniert. Ich denke mal, dass liegt daran, wie das Objekt erstellt wurde. Andere States von meinen anderen Scripten lassen sich in mobileui aufrufen.
Ich muss die Datenpunkte mal mit dem WM-Bus Daten vergleichen, was da anders ist, aber vielleicht hat so schon einer eine Idee.
Gruß
-
Hallo,
die Speicherung der Verbrauchsmenge funktioniert bei mir jetzt prima, leider nicht die Umrechnung auf die Kosten, was mache ich falsch??
Danke.
-
@Mac:die Speicherung der Verbrauchsmenge funktioniert bei mir jetzt prima, leider nicht die Umrechnung auf die Kosten, was mache ich falsch?? `
Hi Mac,gib bitte die "0,26" so ein 0.26
also ohne Anführungszeichen und mit Punkt statt Komma.
vG Looxer
-
Das habe ich gemacht, siehe ScreenPrints, leider bekomme ich immer noch keine Werte ???
Was mach ich da immer noch falsch?
-
Heute musste ich einen shutdown durchführen danach sind leider alle Werte genullt worden, ist natürlich ärgerlich wenn es schon ein Paar Monate läuft.
Hat jemand eine Idee wie ich die alten Verbrauchswerte wiederbekomme oder wie man das verhindern kann das es nochmal Passiert?
Gruß Christian
-
Bei mir das gleiche, ich musste gestern die Wohnung spannungslos schalten.
Nach dem Wiederkehr von iobroker waren leider alle geloggten Werte vom BSZ genullt.
Woran kann das liegen? wie kann man das vermeiden?
Gruß und Danke
-
Ich bekomme folgende Fehlermeldung:
hm-rpc.0 2018-03-19 18:23:52.772 error binrpc -> setValue: no dpType for hm-rpc.0.OEQ0045311.3!
was könnte das sein?
Ich habe einen Homeatic 4fach schaltaktor und möchte bei dem 3 Kanal die Betriebsstunden zählen. Habe alles so gemacht wie im PDF , ( hoff ich zumindest )
-
hm-rpc.0 2018-03-19 18:23:52.772 error binrpc -> setValue: no dpType for hm-rpc.0.OEQ0045311.3! `
Sieht mir nach einem Fehler bei binrpc aus.
Ich glaube nicht, dass das was mit dem Script zu tun hat.
Versuche mal testweise auf XML umzustellen (hmrpc-adapter)
Vg looxer,
-
ich habe mich heute auch mal an den BSZ gesetzt. Ich möchte gern meine Stromzähler auswerten.
ich habe einen DatenPunkt "javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input"
dieser wird fortlaufend hochgezählt. Bei jeder Umdrehung wird der Wert um 1 hochgesetzt. Das klappt auch soweit!
Der Wert entspricht den tatsächlichen Umdrehungen des Zähler also jetzt grad 2409806, bei 75u/kWh also 32130,75 kWh.
folgende Einstellungen habe ich BSZ vorgenommen:
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.Stromzaehler.Normalstrom.Zaehlerstand_input' ,'Normalstrom' ,true ,true ,true ,true ,true ,true ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // kWh Normalzähler Gruppen[ 1] = ['javascript.0.Stromzaehler.Normalstrom.Zaehlerstand_input' ,'Normalstromkosten' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Euro Normalzähler
var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['Normalstrom-kWh' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['Normalstrom-Euro' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
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] = ['3' ,'' ,'' ,'75' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ]; special[1] = ['2' ,'' ,'0.2487' ,'75' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
bekomme aber nur 0 angezeigt…
~~![](</s><URL url=)https://i.imgur.com/L9dHDep.jpg" />
EDIT: geslöst, hatte das mit ack falsch verstanden.~~
-
eine Frage habe ich nocht…
ich habe noch nicht verstanden, wie ich die Zeit zwischen der Änderung des Datenpunktes berechnen kann.
ich habe einen counter für den Stromzähler der immer artig hochzählt um den momentan Verbrauch zu berechnen,
müsste ich die Zeit für eine Umdrehung also die Zeit bis zur nächsten Erhöhung ermitteln...
Aber wie kann ich das realisieren?
-
Danke für das tolle Skript. Ist es damit auch ohne Probleme möglich die Betriebsstunden von Hue Lampen zu protokollieren? Folgende Einstellungen habe ich probiert:
Gruppen[ 4] = ['hue.0.Philips_hue.Eingang_White_I.on' ,'Licht' ,false ,true ,true ,true ,true ,true ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Eingang-Lampe logname[ 4] = ['Eingang-Lampe' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; // Eingang-Lampe special[ 4] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ]; // Eingang-Lampe
Zusatzfrage:
Wie kann ich von Endgeräten an einer Homematic-Steckdose (Datenpunkt POWER) die Betriebsstunden und Counter speichern? Habe folgenden Bereich POWER-Abfrage zusätzlich inkludiert. Damit bekomme ich schon mal die Betriebsstunden. Nur leider noch nicht wie oft wurde das Endgerät eingeschaltet.
!
// TIME Datenpunkt hier POWER Geraet if (objGruppe.match('POWER')) { // ist es ein POWER Geraet ? if (Gruppen[nummer][8] === '') { return; } // Gibt es einen Status in der Gruppentabelle ? wenn nein ciao - es wurd nur spalte 8 abgefragt if (Gruppen[nummer][18] === true) { return; } // Objekt ist mit refresh gekennzeichnet - keine updates LastMSec = Number(getState(objMSec).val); // lese letzten Wert var statusvalue = parseInt(Gruppen[nummer][8],10); // in der Gruppentabelle Spalte 8 wird eine Zahl erwartet für POWER Geraete - in eine integer Zahl umwandeln if (GeraeteStatus >= statusvalue) { // Geraet wurde eingeschaltet - Einschaltzeit setzen if (LastMSec === 0 ) { // Wenn Geraet keine Einschaltzeit hat und der Verbraucher nicht kleiner eingeschaltet wurde als in der Gruppen tabelle unter status, dann ignoriere setState(objMSec,currSec); // merken millisekunden zum Zeitpunkt "Einschalten" FormTimeSingle = TimeCalc(currSec,nummer); // Zeit in lesbarem Format ddd:hh:mm:ss GeraeteStatus = TauschePunktKomma(GeraeteStatus); // Umwandlung von javascript float in 2 decimals mit Komma für die Logausgabe lesbar in Excel //"Datum;Uhrzeit; Type; Activity; nummer HM-ID; Objekt-Text; CurrValue; SystemObj Alt; SysemObj Neu; SystemMSEC Alt ; SystemMSEC NEU; CounterObj ALT; CounterOBJ NEU writelog(nummer,"A","TIME-POWER" + ";" + "SetCurrTime" + ";" +nummer + ";" + Gruppen[nummer][0] + ";" + GeraeteName + ";" + GeraeteStatus + ";" +";" + ";" + LastMSec + ";" + currSec); } } else { // Geraet wurde ausgeschaltet objTime = objTime + '.TIME.' + statusname; LastKumSec = Number(getState(objKum).val); // lese kumulierten Wert if (LastMSec > 0 ) { // Geraet hatte eine Einschaltzeit gespeichert - jetzt rechnen und zurücksetzen lastvalue = Number(getState(objTime).val); // lese kumulierten Wert - letzter umgerechnete Wert if( timeformat || typeof(lastvalue) == "string") { // falls ein timeformat gewaehlt wurde (ddd.hh.mm.ss), dann muss umgewandelt werden in millisek lastvalue = LastKumSec; // der letzte Wert entspricht jetzt dem kumulierten Systemwert lastvalue = lastvalue + addition1; lastvalue = lastvalue * faktor; // Faktor anwenden lastvalue = lastvalue + addition2; } diffvalraw = currSec - LastMSec; // Berechnen der Zeitdifferenz newvalue = diffvalraw; // lese aktuellen Wert aud dem veränderten Datenpunkt if(special[nummer][5] !== '') { // Individualfunktionen newvalue = individual(special[nummer][5].toUpperCase(),nummer,diffvalraw); // hier kommt ein umgerechneter Wertaus der Individualfunktion zurück z.B. KG . individualFunc = true; } // endif Individualfunktion newvalue = newvalue + addition1; newvalue = newvalue * faktor; // Faktor anwenden newvalue = newvalue + addition2; newvalue = lastvalue + newvalue; // neuer umgerechneter Wert für den Counter newkumtime = LastKumSec + diffvalraw; // neuer nicht umgerechneter Wert für den Systembereich setState(objKum,newkumtime); // Schreibe wert in variable setState(objMSec,0); newvalue = runden(newvalue,rundung); // Neuer umgerechneter Gesamtwert mit Rundung für den Counter FormTimeKum = TimeCalc(newvalue,nummer); // Berechne Betriebsstunden Zeitformat von millisekunden in dd:hh:mm:ss = FormTime setState(objTime,FormTimeKum); // Schreibe neuen Wert in variable ValKum2(nummer, day,week,month,year,objKum,objTime,diffvalraw,addition1,addition2,faktor,rundung,individualFunc,true,timeformat); // update der Werte in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht Average(nummer,day,week,month,year,statusname,newvalue,diffvalraw,addition1,addition2,faktor,rundung,false); // update der Werte in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht) MINMAX(nummer,day,week,month,year,statusname,newvalue,diffvalraw,addition1,addition2,faktor,rundung,false) // update der MINMAX Werte in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht setState(objMSec,0); // setzen Millisekunden auf Null um Fehlschaltungen zu vermeiden if(switchupdate) { LastKumSwitch = getState(objSwitch).val; // lese kumulierten Zaehlungen switchdiff = LastKumSwitch + 1; setState(objSwitch,switchdiff); // setzen plus ein Schaltvorgang SwitchKum(day,week,month,year,objSwitch); // update der switches in täglichen, wöchentlichen, monatlichen, jährlichen einheiten wenn so gewünscht } // endif switchupdate lastvalue = TimeCalc(lastvalue,nummer); //Aufbereitung für Log if(typeof(lastvalue) == "number") { lastvalue = TauschePunktKomma(lastvalue); // Umwandlung von javascript float in 2 decimals mit Komma für die Logausgabe lesbar in Excel } if(typeof(FormTimeKum) == "number") { FormTimeKum = TauschePunktKomma(FormTimeKum); // Umwandlung von javascript float in 2 decimals mit Komma für die Logausgabe lesbar in Excel } //"Datum;Uhrzeit; Type; Activity; nummer HM-ID; Objekt-Text; CurrValue; SystemObj Alt; SysemObj Neu; SystemMSEC Alt ;SystemMSEC NEU; CounterObj ALT; CounterOBJ NEU writelog(nummer,"A","TIME-POWER" + ";" + "SetNewTime" + ";" +nummer + ";" + Gruppen[nummer][0] + ";" + GeraeteName + ";" + GeraeteStatus +";" + LastKumSec + ";" + newkumtime + ";" + LastMSec + ";" + "0" + ";" + lastvalue +";" + FormTimeKum); return; } // endif statusname } // Geraet war vorher eingeschaltet return; // ciao - nix mehr zu tun } // endif es ist ein power Geraet !
Gruppen[ 1] = ['hm-rpc.0.xxxx.2.POWER' ,'Strom' ,false ,true ,true ,true ,true ,false ,'10' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Küche-Geschirrspüler logname[ 1] = ['Küche-Geschirrspüler' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; // Küche-Geschirrspüler special[ 1] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; // Küche-Geschirrspüler
Hintergrund:
Die Steckdose ist immer an und wird niemals ausgeschaltet.
vg
Falk
-
Jetzt habe ich eine ganz Banale frage. ich glaub ich seh den Code vor lauter Buchstaben nicht.
Ich nutze das Skript um meine UVC Lampe meines Gartenteiches zu überwachen. Nun bekomme ich aber als Format 000:00:00:00 angezeigt.
Dies kann ich leider nicht für eine schöne Visa benutzen. Ich würde gerne den "odometer" von HQWidgets nutzen. Mich interessieren auch wirklich nur stunden. keine tage, keine Sekunden etc.
Kann mir jemand beim Skript für die Umwandlung helfen? Vielen Dank schonmal.
Gruß Thomas
push hat denn niemand eine Idee?
-
Hallo,
ich möchte die Betriebszeiten von Pumpen protokollieren. Es wird auch die Summe protokolliert, aber das Zurücksetzen bei Tages- Wochenweseln funktioniert irgendwie nicht, was mache ich falsch:
filename="Bildschirmfoto 2018-04-13 um 14.57.54.png" index="0">~~
-
-
Hat keiner eine Idee für die Umwandlung in reine Stunden?
-
Hat keiner eine Idee für die Umwandlung in reine Stunden? `
Hi,Wenn du die Methode "TIME" verwendest, dann wird normalerweise ein Format erzeugt, dass so aussieht "DDD:HH:MM:SS"
Wenn du eine Umrechnung vornimmst, dann wird das Format nicht mehr so dargestellt. Das Programm rechnet immer mit Millisekunden.
Wenn du also in Tabelle "Special" im Divisor 3600000 eingibst, dann wird die Zahl in Stunden dartgestellt. Allerdings dezimal. Dass heisst das 3:30 = 3.5
vG Looxer
-
Hallo zusammen,
habe da ein Problem. Ich habe das Skript für meine Heizung eingebaut. Von meiner Heizung kommt die Meldung Brenner feuert als "true" und "false" Meldung.
Der Datenpunkt sieht so aus "javascript.0.STUNDEN.BRENNER.STATE". Unter Objekte kann ich auch schön sehen wie sich der Zustand ändert. Unter VIS habe ich auch eine entsprechende Grafik die sich dann auch ändert. Es funktioniert also.
Wenn ich diesen Datenpunkt jetzt in den BSZ einsetze passiert nicht. Der Zähler zählt nicht.
Ersetze ich den Datenpunkt durch einen einfachenHM-Schaltaktor, also das ich per Funkschalter schalten kann, wird schön die "gezählte" Zeit im BSZ angezeigt.
Wo mache ich den Fehler? Was wird benötigt?
Grüße
Manfred