NEWS
[Vorlage] Betriebsstundenzähler & Verbrauchsrechner
-
Hi zusammen, erst einmal danke für das Script.
ich versuche seit einer Ewigkeit an den Script meinen Stromverbrauch in Euro auszugeben nur leider ist die Umrechnung nie richtig.
Kann sich das mal einer anschauen wo ich einen Fehler mache? Komme wohl alleine nicht mehr weiter.
Meine Gesamt kWh werden wohl richtig umgerechnet aber bei Day, before usw. passt das aber nicht.
! /*….......Betriebsstundenzaehler BSZ Extended Version 0.97
! ............Datum: 04.02.2016
! ............Autor: Looxer01
! ............Forum ioBroker
! ............http://forum.iobroker.com/posting.php?m ... d9c8d74acd
! ............Änderungshistorie
! ............Version 0.25 Fehler in der update core Funktion behoben. Eine neue Spalte "refresh" hinzugefügt. (noch ohne Funktion)
! ............................Das soll spaeter dazu dienen, ein komplettes Set von Variablen zu loeschen und bei "true" und bei "false " neu zu erstellen
! ............Version 0.30 Logging ist implementiert und kann aktiviert werden - hISTORY ist implementiert und kann aktiviert werden fuer Monat und Jahr
! ............................Im Rahmen der History funktion wurde die freie Bezeichnung entfernt, da sie nirgendwo im Programm genutzt wurde
! ............................Refresh variable ist einstellbar. Vorläufige Funktion: Updates werden ignoriert falls auf true
! ............Version 0.40 Periodenabschluss (Nullen - Historiensicherung) und Refresh mit Nullung ueberarbeitet- Fehlerbeseitigung
! ............Version 0.60 Implementierung weiterer Methoden wie DELTA, CALC, ADD, SUB Verallgemeinerung der Routinen um ggf weitere Methoden zu implementieren
! ............Version 0.70 Die Datenpunkte werden jetzt nicht zurückgesetzt sondern geloescht, wenn das loeschkennzeichen gesetzt wird
! ............................bei der Berechnung der Methoden ist ein Divisor eingefügt worden um leichter von Millisekunden auf Verbrauchswerte zu rechnen, oder auch für alternative Darstellungen für Zeitwerte
! ............................DELTAM - Methode hinzugefügt um automatische Tankmessungen zu unterstützen (absteigende gemeldete Werte)
! ............................Zusammenführung der Methoden ADD und SUB in TIME. Das wird durch die Anwendung der Rechenregel auch für TIME gemacht. Damit kann bei negativen faktor SUB - also Bestandsrechnung umgesetzt werden
! ............................Auch kann jederzeit von Darstellung DDDD:HH:MM:SS auf Sekunden/Minuten/Stunden/Tage etc durch Umrechnung umgestellt werden
! ............................Durch Tabelle specials kann eingestellt werden, ob der BSZ für einen Datenpunkt auf ack = true oder false reagieren soll (false sitzt i.d.R. bei selbsdefinierten Datenpunkten)
! ............................Die Anzal der möglichen IDs ist auf 26 erhöht
! ............................Eine Fluktuationsgrenze für Delta und deltaM ist in Tabelle special eingefügt. Bei blank(also '') wird 100 angenommen. Damit können Schwankungen von Messgeraeten ausgeglichen werden (i.d.R sollte 100 ausreichend sein)
! ............................Zur Vermeidung von Eingabefehlern in den Tabellen sind Zahlen in hochkomma erlaubt aber auch Zahlen ohne hochkomma- bei der Angabe von status true/false ist ebenfalls beides möglich
! ............................Es besteht die Möglichkeit eine Individuallogik einzubauen. Beispiel ist hier "oekofen". Der gemessene Wert wird vor Anwendung der Rechenregel an die function individual(funktion,nummer,runtime) gegeben.
! ............................wobei funktion = Name der Individual-Funktion / nummer = nummer des Geraetes aus der ersten Tabelle / runtime = gemessener Wert und Rückgabewert (damit wird der gemessene Wert uebersteuert)
! ............................Tabelle special Nummer 10 eingefügt zur Vorbereitung einer gleitenden Durchschnittsberechnung
! ............................Es wurden Reserveplätze für tabelle specials eingefügt (10 und 11).
! ............................Logging fuer die Aenderung von Datenpunkten wurde erneuert
! ............Version 0.90 Funktion zur gleitenden Durchschnittsberechnung für die Methoden hinzugefügt
! ----------------------------History verlegt unterhalb des Status (level 7)
! ............................Die Perioden starten jetzt mit 1-Day, 2-Week, 3-Month, 4-Year und sind damit nicht mehr kompatibel zu den Vorgängerversionen. Allerdings sind die Namen einstellbar unterhalb der Experteneinstellungen
! ............................Schedule Funktion für Methoden Delta,DeltaM und CALC hinzugefügt
! ............................Alle Lesevorgänge wurden in numerische Werte umgewandelt um die Aenderung in den Objekten zu unterstützen (Nummern werden dort als String gespeichert)
! ............................initial Werte fuer die GruppenTab unabhängig von Gross-und Kleinschreibung gemacht
! ............................Wenn kein Wert in Gruppen Position 2 eingetragen ist, dann wird der name des Geraetes / Datenpunktes als default verwendet
! ............................Falls der Datenpunkt in Gruppen Position1 nicht existiert wird eine logeintrag erzeugt und der Wert wird auf INITIAL gesetzt
! ............................Fehlerkorrektur für Monats/Jahreswechsel
! ............Version 0.95 Selective Logging hinzugefügt. (Bewirkt das logging von Datenpunkten in separaten Dateien)
! .................................Wegen Selective Logging muss die Tabelle special um ein Feld erweitert werten und für die Logging-Dateinamen in Expert-Einstellungen muss ".csv" entfernt werden
! ............................Korrektur für den Fall, dass ein Status mehrfach gemeldet wird und damit kein Wechsel erfolgte. Bisher wurde immer ab der letzten Statusmeldung gemessen (TIME)
! .................................Wegen MehrfachStatus muss die Tabelle special um ein Feld erweitert werten
! ............................Minimum und Maximum Funktion für alle Methoden implementiert
! .................................Wegen MINMAX-Funktion muss die Tabelle special um ein Feld erweitert werten
! ............................Fehler beim anlegen der Struktur für Durschnittsbildung beseigt. Der Jahreswert wurde nicht angelegt
! ...........Version 0.96.....Beim Periodenwechsel Woche kam es zu einem Fehler durch fehlerhafte Parameterübergabe zum Logging
! ...........Version 0.97.....Fehler beim Logging beseitigt. Es wurde immer nur in die Datei 1 geschrieben
! /
! // Part 1. Initiierung
! // Part 1.1 Einstellungen
! / HIER Einstellungen vornehmen............................................................................................
! --------------------------------------------------------------------------------------------
! Position 1 = ist die Geraete-ID bzw Objekt ID - bitte nur gültige objekte eintragen - Es funktionieren alle LEVEL und STATE Geraete und alles was mit true und false belegt werden kann
! .............der Text "initial" muss eingetragen sein fuer nicht genutzte Zeilen
! Position 2 = der Thema unter dem die Betriebszeiten in ioBroker abgelegt werden. - keine Sonderzeichen und keine Spaces verwenden. Statdessen aber Unterstriche eintragen
! Position 3 = History, Bei true werden die zeitabschnitte Monat und Jahr vor der Loeschung per Monat und Jahr gesichert (in ioBroker objekte)
! Position 4 = Variable DAY wird angelegt und kumuliert - täglicher refresh - keine Hochkomma
! Position 5 = Variable WEEK wird angelegt und kumuliert - wöchentlicher refresh - keine Hochkomma
! Position 6 = Variable MONTH wird angelegt und kumuliert - monatlicher refresh - keine Hochkomma
! Position 7 = Variable YEAR wird angelegt und kumuliert - Jährlicher refresh - keine Hochkomma
! Position 8 = Verwendung eines Zaehlers um die Statuswechsel (anzahl Schaltungen) zu zaehlen
! Position 9 = entweder ein Status wie true false etc ODER Sonderfunktionen
! .............bei LEVEL Geraeten eine Zahl zwischen 0 und 100 - Empfehlung 1. Bedeutet alle Level groesser gleich 1 werden als EIN gewertet
! .............delta = Deltamessung einer Zahl (hochzählen) zwischen letztem Wert und aktuellem Wert und fortschreibung dieser Zahl in die Zeitabschnitte (Anwendung z.B. Strommessung)
! .............deltam = Delta Minusmessung. wie delta aber die erwarteten Zahlen nehmen staendig ab
! .............calc = Umwandlung von Boolean Werte durch Anwendung einer Formel oder Zeitmessung und Umwandlung der gemessenen Zeit
! ...................... Lokikwerte (true/false) werden umgerechnet in 0 und 1 und können z.B. mit Addition zu anderen Werten gerechnet werden (dient zur graphischen Darstellung)
! .............Alle Funktionen können mit Rundung versehen werden und mit Faktoren um z.B. den Energieverbrauch zu berechnen (öl und Pellet) oder umrechnen in Euro oder von Wh in KWh etc (Tabelle special)
! Position 9 - 18 - Eingabe was gezaehlt werden soll. Jeder Eintrag erzeugt eine variable in den Objekten. Sobald ein Status des Homematic-ID gesetzt wird, wird die Zeit bzw. die Anzahl der Schaltvorgaenge gespeichert
! Status kann in hochkomma anagegeben werden z.B. '100' oder 100.
! Als eingeschaltet wird alles groesser gleich dem eingegebenen Wert berechnet
! (bei Sonderfunktionen werden die positionen 10 - 18 ignoriert)
! Position 19 = stop Refresh = true Es werden kene Daten mehr aktualsieirt. Solange Refresh auf true steht werden keine neuen Daten aufgezeichnet - standard ist also false
! Position 20 = Loesch Datenpunkte = True Es werden alle Daten geloescht - standard ist also false - damit geloescht wird muss auch stop refresh auf true stehen
! /
! 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] = ["sonoff.0.SonoffPOWTrokner.ENERGY.Total"/SonoffPOWTrokner ENERGY Total/ ,'Stromkosten' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //Euro Trockner
! Gruppen[ 1] = ["sonoff.0.SonoffPOWTrokner.ENERGY.Total"/SonoffPOWTrokner ENERGY Total/ ,'Stromverbrauch' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //kWh Trockner
! Gruppen[ 2] = ["hm-rpc.0.NEQxxxxxxx.1.ENERGY_COUNTER"/HM-ES-TX-WM NEQxxxxxxx:1.ENERGY_COUNTER/,'Stromverbrauch',true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //kWh Gesamt
! Gruppen[ 3] = ["hm-rpc.0.NEQxxxxxxx.1.ENERGY_COUNTER"/HM-ES-TX-WM NEQxxxxxxx:1.ENERGY_COUNTER/ ,'Stromkosten' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //Euro Gesamt
! Gruppen[ 4] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[ 5] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[ 6] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[ 7] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[ 8] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[ 9] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[10] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[11] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[12] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[13] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[14] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[15] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[16] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[17] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[18] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[19] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[20] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[21] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[22] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[23] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[24] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
! Gruppen[25] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,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] = ['Trockner_Euro' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[1] = ['Trockner_kWh' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[2] = ['Gesamt_kWh' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[3] = ['Gesamt_Euro' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[4] = ['EinAus4' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[5] = ['EinAus5' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[6] = ['EinAus6' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[7] = ['EinAus7' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[8] = ['EinAus8' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[9] = ['EinAus9' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[10] = ['EinAus10' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[11] = ['EinAus11' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[12] = ['EinAus12' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[13] = ['EinAus13' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[14] = ['EinAus14' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[15] = ['EinAus15' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[16] = ['EinAus16' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[17] = ['EinAus17' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[18] = ['EinAus18' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[19] = ['EinAus19' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[20] = ['EinAus20' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[21] = ['EinAus21' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! logname[22] = ['EinAus22' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
! 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] = ['2' ,'' ,'0.2966' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ];// kWh in Euro
! special[1] = ['4' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];// kWh
! special[2] = ['4' ,'' ,'' ,'1000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];// kWh
! special[3] = ['2' ,'' ,'0.2966' ,'1000' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];// kWh in Euro
! special[4] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[5] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ];
! special[6] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[7] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[8] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[9] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[10] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[11] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[12] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[13] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[14] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[15] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[16] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[17] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[18] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[19] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' , '' ];
! special[20] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[21] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[22] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[23] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[24] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! special[25] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
! // Es werden zur angegebenen Uhrzeit die Kumulationsvariablen bei beginn einer neuen Periode genullt (DAY,WEEK,MONTH,YEAR)
! // Zu dieser Zeit werden auch die Monatswerte und Jahreswerte gesichert falls History auf true steht
! var TimeSetStunde = "00"; // Bitte Uhrzeit - hier Stunde eingeben im 24 Stunden Format z.B. 00 für Mitternacht
! var TimeSetMinute = "04"; // Bitte Minuten eingeben z.B. 10 - = 00:10 für Null Uhr Zehn
! // logging in eine exterene EXCEL Datei - hier werden alle updates gesichert - wird vor allem zum debugging benoetigt Empfehlung false fuer produktiven Betrieb
! var logflag = false; // wenn auf true dann wird das logging in Datei /opt/iobroker/iobroker-data/BSZLog.csv eingeschaltet bei false vice versa
! // logging in eine exterene EXCEL Datei - hier werden alle Zeitabschnitte vor der Nullung gesichert - Empfehlung true fuer produktiven Betrieb
! var Timelogflag = false; // wenn auf true dann wird das logging in Datei /opt/iobroker/iobroker-data/BSZTimeLog.csv eingeschaltet bei false vice versa
! // fuer OSX und Windows MUSS der volle Pfad eingestellt werden (wenn die log flags auf true stehen)
! // Beispiel: /Users/looxer01/Documents/iobroker/iobroker-data/BSZLog.csv
! var LogPath = "/opt/iobroker/iobroker-data/BSZExtLog.csv"; // Pfad und Dateiname des externen Logs
! var TimeLogPath = "/opt/iobroker/iobroker-data/BSZExtTimeLog.csv"; // Pfad und Dateiname des externen Logs für die Zeitabschnitte täglich, wöchentlich monatlich jährlich
! // Ende Einstellungen …....................................................................................................Gruß Christian
-
Hi Christian,
schaue ich mir an. Könnte aber Morgen werden.
vG Looxer
-
Hi looxer01,
vielen Dank nochmal für dein Script, läuft bereits paar Wochen lang und zählt schön mein Gasverbrauch.
Jetzt habe ich mich heran gemacht und versuche den Strom zu erfassen.
Als Grundlage habe ich wieder ein Sketch für "Gaszähler an Wemo D1 mini" genommen, etwas abgeändert und ein TCRT5000 Reflexionslichtschranke an das gute Teil angeschlossen.
Ich bekomme jetzt jede Umdrehung des Stromzählers einen Wert von 0,1 dazugezählt….
demnach nach 10 Umdrehungen der Scheibe wird eine glatte 1,00 ausgegeben. Die Werte kommen schön in den Iobroker mit Jawascript herein....
Jetzt zur meiner Frage aber.... Laut meinem Stromzähler, ergeben 96 Umdrehungen der Scheibe = 1 KWh.
Um den Tagesverbrauch zu ermitteln, müsste ich normal nur noch die Umdrehungen pro Tag zählen. Das sowiet klar.. Wie komme ich auf den Momentanverbrauch. Da spielt natürlich Zeit im Spiel. Kannst Du mir helfen Looxer01?
-
Hi Christian,
zum Thema korrekter Umrechnung
kannst du mal die Werte aus den unterliegenden Datenpunkten der folgenden Objekte zeigen ?
javascript.0.BSZ.System.Grp02Kum
javascript.0.BSZ.System.Grp02MSec
javascript.0.BSZ.System.Grp03Kum
javascript.0.BSZ.System.Grp03MSec
Hintergrund ist, dass dort die realen Werte ohne Umrechnung gespeichert werden.
Falls dort die Werte stimmen, dann gib in das Runden für kwh und Euro mal jeweils 9 ein.
Mit Rundungen hatte ich mal Probleme. Die Originalwerte aus dem Systembereich verändern sich dabei nicht.
Zum Thema "before" habe ich im Moment noch keine Idee. Da gab es noch nie ein Problem.
"before" wird ja auch nicht gerechnet sondern einfach beim Tageswechsel in den Datenpunkt übertragen.
Ich schaue mir nochmal das Coding an.
vG Looxer
-
Das mit dem runden war bei mir mal ein Problem.
Hattest du dann aber irgendwie gelöst.
Ist diese Verbesserung garnicht als Update in deinem Script eingeflossen?
Gruß
-
Hi
Wie komme ich auf den Momentanverbrauch. Da spielt natürlich Zeit im Spiel. `
Was liefert denn der Zähler genau für Daten ? Darauf kommt es ja an wie eine Lösung aussehen könnte.
Theoretisch kannst du einen annähernden Momentanverbrauch (abhängig von der Laufzeit einer Umrundung) erhalten.
jede Umdrehung = ungefähr 100 Watt . Wenn die Scheibe dafür 60 Sekunden braucht, dann hast du 6 kWh Verbrauch
bei 0,5 kWh Verbrauch dürfte eine Scheibenumdrehung also 12 Minuten brauchen - korrekt ?
Bei diesen Werten ist der Momentanverbrauch also eher ein letzter Verbrauch.
Wie du schon gesagt hast. Du brauchst die letzte Umdrehungszeit. Wenn die geliefert wird, dann kannst du mit dem BSZ einfach umrechnen (Methode CALC)
Wenn aber nur "0,1" geliefert wird, dann wird es eher schwierig für den BSZ, bzw. es bräuchte zusätzliches Coding über den UserExit.
vG Looxer
-
@ple:Ist diese Verbesserung garnicht als Update in deinem Script eingeflossen? `
Nein, es gab noch keine neue Version.vG Looxer
-
Die Aufzeichnung der Verbrauchsdaten läuft jetzt super, danke für das großartige Script BSZ.
Der Name Betriebsstundenzähler legt nahe, dass es möglich ist Startzeiten und Betriebsdauer zu erfassen. ich habe jetzt schon alles mögliche ausprobiert, bekomme es einfach nicht hin.
Ich habe eine Variable(Objekt) angelegt, diese wird durch einen Temperaturwert auf false/True geschaltet. diese habe ich in dem BSZ als Objekt eingefügt, aber dann? Spalte 9 ist ja offenbar für die Berechnungen, bzw die dritte Tabelle. Ich habe aber leider keinen Schimmer wie das zu konfigurieren ist.
Für eine Hilfestellung wäre ich sehr dankbar.
-
Hallo Looxer, hab den Sketch des Wemos umgeschrieben und bekomme jetzt glatte Zahlen pro Umdrehung! siehe Bild. Ich hoffe das es damit einfacher wird zu arbeiten.
Bis dato habe ich ein paar Angaben für Gas und deren Berechnung! Deine obige Rechnung machtSinn…
Aber: ich komme aber bei jeder Umdrehung = ungefähr auf 10 Watt aufgerundet. Wenn ich es mit 100 " Umdrehungen" multipliziere , komme ich auf 1000Watt was 1KW entspricht.... Kann das? Ich habe dir unten meine Tabelle vom deinem Script eingefügt. Kannst Du grob sagen, wie ich es (Methode CALC) bei meinem Beispiel anwenden soll?
Gruß
// 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.GasMeter.Wert' ,'Heizung' ,true ,true ,true ,true ,true ,false ,'delta' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[ 1] = ['javascript.0.BSZ.Counter.Heizung.DELTA.GAS.1-DAY' ,'Heizung_KWh' ,true ,true ,true ,true ,true ,false ,'CALC' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[ 2] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; // Gruppen[ 3] = ['initial' ,'' ,false ,false ,false ,false ,false ,false ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,false ,false]; //
var logname = []; // Stat1 Stat2 Stat3 Stat4 Stat5 Stat6 Stat7 Stat8 Stat9 Stat10 logname[0] = ['GAS' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[1] = ['GAS_KWh' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[2] = ['EinAus3' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'']; logname[3] = ['EinAus3' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''];
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] = ['2' ,'' ,'' ,'' ,'' ,'' ,'' ,'false' ,'' ,'' ,'' ,'' ,'' , '' ]; special[1] = ['2' ,'' ,'11.432' ,'' ,'' ,'' ,'' ,'false' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[2] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ]; special[3] = ['' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ];
-
@ple:Ist diese Verbesserung garnicht als Update in deinem Script eingeflossen? `
Nein, es gab noch keine neue Version.vG Looxer `
Danke für deine Rückmeldung,
@Ple hat mir sein Script zu Verfügung gestellt mit dem läuft es jetzt wie gewünscht allerdings habe ich keine unterscheide in seinem zu meinem Script gefunden.
Da hattest du aber wohl schon irgendwas geändert, deshalb läuft es jetzt.
Gruß Christian
-
Hallo Looxer
nach Neuinstallation von iobroker hab ich 2 *.csv Dateien, eine vom Zeitraum 04/17 bis 12/17 und eine von der aktuellen Installation '(ab28.12.17). Kann man die "zusammenlegen" ? Hatte meine vorherige iobroker installation zerschossen.
-
Hi,
ich nehme an, dass du die Dateien brauchst, um Folgebearbeitungen durchzuführen.
Mache ich auch so mit Excel.
in diesem Fall, ja. CSV Dateien sind reine Textdateien und enthalten keine Formatierungen.
Du kannst sie mit einem Editor einfach zusammenfügen.
vG Looxer
-
Ple hat mir sein Script zu Verfügung gestellt mit dem läuft es jetzt wie gewünscht allerdings habe ich keine unterscheide in seinem zu meinem Script gefunden.
Da hattest du aber wohl schon irgendwas geändert, deshalb läuft es jetzt. `
Dann scheint sich die Aenderung ja zu bewähren.
Ich mache eine neue Version und stelle sie online.
vG Looxer
-
Hallo Looxer,
ich hänge immer noch fest bei der Umrechnung!
Mein Zähler:
96 Umdrehungen = 1000 Watt
1 Umdrehung = 10,42 Watt aufgerundet ( 1000%96=10,42 Watt pro Drehung des Zählers)
Meine Daten werden minütlich an IObroker vom Zähler übetragen.
Demnach mußte für Leistung in Watt/min so rechnen: Umdrehungen x 10,42 Watt x 60 (Zeit-damit ich auf die Minute komme) = Leistung in Watt/min
Beispiel: 2(Umdrehungen) x 10,42 = 20,84 Watt/min x 60 = 1250,4 Watt/min
Für kWh muß man es noch durch 1000 teilen
Also Umdrehung x 10,42 Watt x 60 % 1000
Beispiel: 2x10,42 x60 %1000 = 1,2504 KW
Jetzt das ganze etwas aufgerundeter, damit es nicht zu kompliziert wird…
Ich rechne so wie Du vorgerechnet hast.
1 Umdrehung = 10 Watt
Die Rechnung was ich benötige ist:
Also eine Umdrehung(=10Watt) x 60 (damit ich auf die 1 min. komme) = 600 Watt/min (Momentanverbrauch)
Ich würde gerne noch den Wert in kWh haben.
Also eine Umdrehung(=10Watt) x 60 (damit ich auf die 1 min. komme) = 600 Watt/min % 1000 = 0,6 kW/h
Ich habe jetzt nur mit einer Umdrehung gerechnet. Natürlich sind die Verbrauchswete immer unterschiedlich und werden pro min als Umdrehung des Zählers frisch übetragen.
Kannst Du helfen? Ich würde zum anfang erst mit dem Momentanverbrauch beginnen... Kannst Du sagen, wie dies in der Tabelle einzutragen ist?
PS: hier noch zwei Bilder von dem "Selbsbau" des Stromzählers
1526_2.2.jpg
1526_1.1.jpg -
Hi,
@knopers1:1 Umdrehung = 10 Watt `
ok, das hört sich schon besser an. Mit der Auflösung 10 Watt per Umdrehung kann man da ja was mit anfangen.
Durch die minütliche Übertragung ist das natürlich wieder etwas eingeschränkt aber wohl noch ok. Hängt halt nach.
Könntest du mir die Datenpunkte per JSON Objektliste als PN senden ?
1. IoBroker - Admin
2. Objekte
3. Auf das überlegende Strukturelement navigieren und markieren
4. ICON oben links (das äusserst rechte)
Das File als txt umbenennen.
vG Looxer
-
die PN ist raus:
hier noch zwei Bilder der Konfig!
1526_uifrhi6f.txt
1526_unbenannt.png
1526_unbenannt1.png -
Hi,
also bekommst du die Umdrehungen geliefert.
Im Screen sehe ich einen Wert von 5.00.
Bedeutet das, dass seit dem letzten update des Datenpunktes 5 Umdrehungen gemessen wurden ?
vG Looxer
-
ja, das sind Umdrehungen…
Ich bekomme jede min. den aktuellen Zählerstand. Wenn kein Strom entnommen worden ist, dann bleibt es nach einer Minute weiterhin auf 5. Sonst kommen Werte hinzu. Wie gesagt, jede min. frisch ausgelesen und zu der 5 dazugezählt.
Der Wert ist zwar deshalb so niedrig, da das ganze Zeug noch auf dem Schreibtisch liegt. Das Einbauen wird noch kommen. Der Sensor erkennt aber die Scheibe des Stromzählers ohne Probleme wenn es gut ausgerichtet und über dem Poti eingestellt ist.
In der Praxis, wirt der Wert ständig steigen mit der Entnahme des Stromes.
In der Theorie ist das nur ein dummer Zähler was hoch zählen kann...
-
Hi,
@knopers1:ja, das sind Umdrehungen…
Ich bekomme jede min. den aktuellen Zählerstand. Wenn kein Strom entnommen worden ist, dann bleibt es nach einer Minute weiterhin auf 5. Sonst kommen Werte hinzu. Wie gesagt, jede min. frisch ausgelesen und zu der 5 dazugezählt. `
also ich bin noch nicht klar.
-
Bekommst du einen Zählerstand ? (zusätzlich zu den Umdrehungen ?
-
Mich irritiert, dass dort eine 5 steht. Wenn ständig addiert werden würde, dann müsste die Anzahl der Umdrehungen ja viel groesser sein
-
-
siehe nochmal oben, habe mein Post vorhin editiert!
Das ist ein dummer Zähler, was praktisch hochzählt und den Wert minütlich an IOBroker sendet! Ich bekomme nur die Umdrehungszahl. Die 5 ist an sich ein Zählerstand. Ich könnte es auf Wert 2000 setzen. Nur wofür? Nach einer min. würde er dann eine zB. eine 2002 ausgeben….
Der Wert steigt nur, und ist deshalb so niedrig, da das ganze Zeug noch auf dem Schreibtisch liegt. Um an den Wert für die letzte min. zu kommen, müsste man den alten Wert von dem neuen abziehen. ZB: Wert alt 2000, frisch aktualiesiert 2002.
EDIT:
Betrachte es als ein neuer Zähler was frisch eingebaut ist. Der fängt auch an von 0 hoch zu zählen. Mann könnte sagen dass es ein Zählerstand ist!