Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Stromverbrauch protokollieren (Tag, Woche, Monat, Quartal, Jahr)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Stromverbrauch protokollieren (Tag, Woche, Monat, Quartal, Jahr)

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      michihorn last edited by

      Super, die Daten kommen im LOG an. Es kommt noch eine Fehlermeldung, ist das die von der Du im letzten Post berichtet hast?

      Die Daten sehe ich erst morgen unter Objekte?

      Gibt es eine möglichkeit diese Daten evtl. nach Excel zu exportieren?

      Gruß Michael
      326_1.png

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Nein, das ist eine andere Fehlermeldung.

        Kommentiere mal die drittletzte Zeile aus, wie es im Skript steht. Als einfach zwei // vor die Zeile schreiben.

        Die beiden undefined Fehler sind bekannt, steht auch schon im Code:

        log('Gewerk:       ' + obj.role);   // undefined
        log('Beschreibung: ' + obj.desc);   // undefined
        

        Es gibt in einer neueren Version des Skriptes ein Exportfunktion. Sie speichert die Daten nicht nur im ioBroker Log, sondern auch kommasepariert in einer Datei auf dem Server.

        Ich würde dir aber raten:

        • Warte ab, wie das Skript bei dir läuft.

        • Versuche, es zu verstehen.

        • Nutze den History Adapter (oder SQL-Adapter) für die Aufzeichnung der Werte

        • Mache ein Offline Backup vom lauffähigen Skript mit aktuellen Datum im Dateinamen (Copy&Paste) bevor du was änderst

        Wenn alles klappt, dann können wir uns um das Log auf dem Server kümmern. Dein Server ist sehr ungewöhnlich und es muss auf dem Server ein Pfad benannt werden, wo die externe Logdatei gespeichert werden soll. Da kenne ich mich nicht aus :?

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • D
          DiJaexxl last edited by

          Hallo zusammen,

          auch ich habe das Script versucht anzunehmen.

          ! /* Strom Zaehlerstaende, Verbrauch und Kosten
          ! ioBroker Forum:
          ! http://forum.iobroker.net/viewtopic.php?f=21&t=2262
          ! Skript dient zur Ermittlung des Stromverbrauchs bei Geräten,
          ! die mit den Homematic Zwischenstecker-Schaltaktor mit Leistungsmessung oder den FS20 EM1000 verbunden sind
          ! Zählerstände werden gespeichert jeweils
          ! -jeden Tag
          ! -jede Woche Montag
          ! -jeden Monatsersten
          ! -jeden Quartalsersten
          ! -jedes Neujahr
          ! wenn ein neuer Wert reinkommt.
          ! Der Strompreis wird in die Variable "Strompreis_aktuell" geschrieben.
          ! Änderungen des Strompreispreises müssen rechtzeitig per Cronjob programmiert werden.
          ! Die Stromkosten (Verbrauch * Preis) werden ebenso
          ! -jeden Tag
          ! -jede Woche Montag
          ! -jeden Monatsersten
          ! -jeden Quartalsersten
          ! -jedes Neujahr
          ! genullt und bis dahin durch die Berechnung (der Differenz des aktuellen Zählerstandes - Zählerstand Beginn des Zeitraums) * Strompreis ermittelt
          ! Der kumulierte Zählerstand berücksichtigt evtl. Resets und Überläufe der realen Zählerstände der Geräte.
          ! Todo: Wenn aktueller Zählerstand < letzter Zählerstand, dann push und korrektur
          ! wie hier: http://homematic-forum.de/forum/viewtop … er#p201959
          ! erstellt: 09.02.2016 von pix auf Basis des alten Skriptes
          ! 01.03.2016 Leerzeichen werden aus Gerätenamen gelöscht
          ! */
          ! var logging = false;
          ! var instanz = 'javascript.1'; instanz = instanz + '.';
          ! var pfad = 'Strom.'; // Pfad innerhalb der Instanz
          ! var blacklist= [' Strommessung', ' Küche']; // persönliche Blacklist: Diese Teile werden aus den Homematic Gerätenamen entfernt
          ! // Variablen erstellen, Zählerstände einlesen und Stromkosten errechnen (pro Gerät)
          ! // Strompreis
          ! createState(pfad + 'Preis.aktuell.Arbeitspreis', 0.2495, {
          ! name: 'Strompreis - aktueller Arbeitspreis (brutto)',
          ! unit: '€/kWh'
          ! });
          ! createState(pfad + 'Preis.aktuell.Grundpreis', 3.95, { // wird noch nicht eingerechnet
          ! name: 'Strompreis - aktueller Grundpreis (brutto)',
          ! unit: '€/Monat'
          ! });
          ! var idStrompreis = instanz + pfad + 'Preis.aktuell.Arbeitspreis';
          ! // Einlesen der aktuellen Daten vom Zähler
          ! on({id: /.METER|.ENERGY_COUNTER$/
          ! }, function(obj) {
          ! var idbyname = getIdByName(obj.common.name, true);
          ! if (logging) {
          ! log('–------ Strommesser ---------');
          ! log('RegExp-Funktion ausgelöst');
          ! log('Gewerk: ' + obj.role); // undefined
          ! log('Beschreibung: ' + obj.desc); // undefined
          ! log('id: ' + obj.id);
          ! log('Name: ' + obj.common.name); // Waschmaschine Küche:2.ENERGY_COUNTER !!!!! Mac mini Strommessung.METER
          ! log('channel ID: ' + obj.channelId); // hm-rpc.0.MEQ0170864.2
          ! log('channel Name: ' + obj.channelName); // Waschmaschine Küche:2
          ! log('device ID: ' + obj.deviceId); // hm-rpc.0.MEQ0170864
          ! log('device name: ' + obj.deviceName); // Küche Waschmaschine
          ! log('neuer Wert: ' + obj.newState.val); // 16499.699982
          ! log('alter Wert: ' + obj.oldState.val); // 16499.699982
          ! log('Einheit: ' + obj.common.unit); // Wh
          ! log('IDbyNameFunktion: ' + idbyname[0]); // hm-rpc.0.MEQ0170864.2.ENERGY_COUNTER
          ! }
          ! // Gerätenamen erstellen
          ! var geraetename = entferneDatenpunkt(obj.common.name);
          ! geraetename = geraetename.replace(/\s/g, ""); // per Regexp Leerzeichen entfernen
          ! if (logging) log('Gerätename: ' + geraetename);
          ! // States erstellen (CreateStates für dieses Gerät)
          ! erstelleStates (geraetename);
          ! // prüfe eingehende Daten
          ! // nicht nötig, da subscribe eh nur anspringt, wenn gelieferte Daten = oder > sind als alte (gt)
          ! // zweiter subscribe übernimmt das
          ! // prüfe und schreibe Daten
          ! var idKumuliert = instanz + pfad + geraetename + '.Zaehlerstand.kumuliert',
          ! idBackup = instanz + pfad + geraetename + '.Zaehlerstand.Backup';
          ! if (obj.newState.val >= obj.oldState.val) { // neuer Wert größer alter wert -> alles gut
          ! setState(idKumuliert, obj.newState.val + getState(idBackup).val); // Kumulierten Wert mit Ist-Wert (inkl. Backup) synchronisieren
          ! } else { // neuer Wert kleiner als alter Wert -> Achtung Zähler im Gerät übergelaufen oder genullt
          ! var differenz = obj.oldState.val - obj.newState.val; // Differenz berechnen
          ! setState(idBackup, getState(idBackup).val + differenz); // und Differenz und Backup addieren "und den Werteabriss ausgleichen"
          ! setState(idKumuliert, data.newState.val + getState(idBackup).val); // damit neuer kumulierter Wert stetig weiter wächst
          ! meldung = 'Achtung!\n\n'
          ! + 'Der Stromzählerstand (' + geraetename + ') ist übergelaufen oder gelöscht worden (ggf. Stromausfall).\n'
          ! + 'Der letzte Zählerstand vor dem Reset wird nun zum Neuen addiert. Bitte unbedingt die Werte prüfen. \n\n '
          ! + 'ioBroker';
          ! betreff = 'ioBroker Meldung';
          ! prio = getState(OptinPushPrio).val;
          ! meldung_push(meldung, betreff, prio);
          ! log('Zählerstand (' + geraetename + ') übergelaufen oder genullt. Backup wird ab jetzt verwendet.', 'error');
          ! }
          ! // aktualisiere den Verbrauch und die Kosten
          ! berechneVerbrauchKosten(geraetename, (getState(idKumuliert).val / 1000).toFixed(3), getState(idStrompreis).val); // in kWh
          ! // ETAPPENWERTE SPEICHERN und RESETS DER WERTE #################################
          ! // Verzögerungen eingebaut. Resets, wenn die ersten Werte der neuen Etappe reinkommen
          ! if ( zeit(obj.oldState.ts).Stunde > zeit(obj.newState.ts).Stunde ) { // neue Stunde kleiner als alte Stunde (Mitternacht)
          ! setTimeout(function() {
          ! resetKostenVerbrauch(geraetename, 'Tag');
          ! }, 1000);
          ! setTimeout(function() {
          ! schreibeZaehlerstand(geraetename, 'Tag');
          ! }, 1500);
          ! }
          ! if ( zeit(obj.oldState.ts).Wochentag === 0 && zeit(obj.newState.ts).Wochentag === 1) { // So auf Mo
          ! setTimeout(function() {
          ! resetKostenVerbrauch(geraetename, 'Woche');
          ! }, 2000);
          ! setTimeout(function() {
          ! schreibeZaehlerstand(geraetename, 'Woche');
          ! }, 2500);
          ! }
          ! if ( zeit(obj.oldState.ts).Tag > zeit(obj.newState.ts).Tag ) { // wenn alter Tag größer als neuer Tag (am 1. eines Monats)
          ! setTimeout(function() {
          ! resetKostenVerbrauch(geraetename, 'Monat');
          ! }, 3000);
          ! setTimeout(function() {
          ! schreibeZaehlerstand(geraetename, 'Monat');
          ! }, 3500);
          ! }
          ! // wenn obj.oldState.ts im März [3] und obj.newState.ts im April [4] oder
          ! // obj.oldState.ts im Juni [6] und obj.newState.ts im Juli [7] oder
          ! // obj.oldState.ts im Sept [9] und obj.newState.ts im Okt [10] oder
          ! // obj.oldState.ts im Dez [12] und obj.newState.ts im Jan [1], dann Quartal
          ! if ( (zeit(obj.oldState.ts).Monat === 3 && zeit(obj.newState.ts).Monat === 4) ||
          ! (zeit(obj.oldState.ts).Monat === 6 && zeit(obj.newState.ts).Monat === 7) ||
          ! (zeit(obj.oldState.ts).Monat === 9 && zeit(obj.newState.ts).Monat === 10) ||
          ! (zeit(obj.oldState.ts).Monat === 12 && zeit(obj.newState.ts).Monat === 1) ) {
          ! setTimeout(function() {
          ! resetKostenVerbrauch(geraetename, 'Quartal');
          ! }, 4000);
          ! setTimeout(function() {
          ! schreibeZaehlerstand(geraetename, 'Quartal');
          ! }, 4500);
          ! }
          ! // wenn obj.oldState.ts im alten Jahr liegt, dann Jahr
          ! if (zeit(obj.oldState.ts).Jahr < zeit(jetzt).Jahr) {
          ! setTimeout(function() {
          ! resetKostenVerbrauch(geraetename, 'Jahr');
          ! }, 5000);
          ! setTimeout(function() {
          ! schreibeZaehlerstand(geraetename, 'Jahr');
          ! }, 5500);
          ! }
          ! if (logging) log('–---------- ENDE ------------');
          ! });
          ! function schreibeZaehlerstand(geraet, zeitraum) {
          ! var idKumuliert = instanz + pfad + geraet + '.Zaehlerstand.kumuliert',
          ! idZaehlerstand = instanz + pfad + geraet + '.Zaehlerstand.' + zeitraum;
          ! // Zählerstand für übergebene Zeitraum und das Gerät in Wh auslesen
          ! setState(idZaehlerstand, (getState(idKumuliert).val / 1000).toFixed(3)); // und in kWh (mit drei Dezimalstellen) speichern (also durch 1000)
          ! // hier externe Protokollierung in Datei einbauen
          ! log('Zählerstände für das Gerät ' + geraet + ' (' + zeitraum + ') gespeichert');
          ! }
          ! function resetKostenVerbrauch(geraet, zeitraum) {
          ! setState(instanz + pfad + geraet + '.Kosten.' + zeitraum, 0); // Reset der Stromkosten für den übergebenen Zeitraum
          ! setState(instanz + pfad + geraet + '.Verbrauch.' + zeitraum, 0); // Reset des Stromverbrauchs für den übergebenen Zeitraum
          ! log('Stromkosten und Stromverbrauch für das Gerät ' + geraet + ' (' + zeitraum + ') zurückgesetzt');
          ! }
          ! function zeit (time) {
          ! jetzt = new Date(formatDate(time,"JJJJ.MM.TT SS:mm:ss"));
          ! var jahr = jetzt.getFullYear();
          ! var monat = (jetzt.getMonth()+1 < 10) ? '0' + (jetzt.getMonth()+1) : jetzt.getMonth()+1;
          ! var tag = (jetzt.getDate() < 10) ? '0' + jetzt.getDate() : jetzt.getDate();
          ! var wochentag = jetzt.getDay(); // startet am Sonntag mit 0
          ! var stunde = (jetzt.getHours() < 10) ? '0' + jetzt.getHours() : jetzt.getHours();
          ! var minute = (jetzt.getMinutes() < 10) ? '0' + jetzt.getMinutes() : jetzt.getMinutes();
          ! var sekunde = (jetzt.getSeconds() < 10) ? '0' + jetzt.getSeconds() : jetzt.getSeconds();
          ! return {
          ! 'Jahr' : jahr,
          ! 'Monat' : monat,
          ! 'Tag' : tag,
          ! 'Wochentag' : wochentag,
          ! 'Stunde' : stunde,
          ! 'Minute' : minute,
          ! 'Sekunde' : sekunde
          ! };
          ! }
          ! function berechneVerbrauchKosten(geraet, zaehler, preis) { // bei jedem eingehenden Wert pro Gerät
          ! // Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] –- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
          ! setState(instanz + pfad + geraet + '.Verbrauch.Tag', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3)); // Verbrauch an diesem Tag in kWh
          ! setState(instanz + pfad + geraet + '.Kosten.Tag', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3)); // Kosten an diesem Tag in €
          ! // Woche
          ! setState(instanz + pfad + geraet + '.Verbrauch.Woche', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3));
          ! setState(instanz + pfad + geraet + '.Kosten.Woche', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3));
          ! // Monat
          ! setState(instanz + pfad + geraet + '.Verbrauch.Monat', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3));
          ! setState(instanz + pfad + geraet + '.Kosten.Monat', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3));
          ! // Quartal
          ! setState(instanz + pfad + geraet + '.Verbrauch.Quartal', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3));
          ! setState(instanz + pfad + geraet + '.Kosten.Quartal', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3));
          ! // Jahr
          ! setState(instanz + pfad + geraet + '.Verbrauch.Jahr', (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3));
          ! setState(instanz + pfad + geraet + '.Kosten.Jahr', ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3));
          ! if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert', 'info');
          ! }
          ! function erstelleStates (geraet) {
          ! // Kumulierter Zählerstand (wird nie kleiner)
          ! createState(pfad + geraet + '.Zaehlerstand.kumuliert', 0, {name: 'Kumulierter Zählerstand (' + geraet + ') inkl. Backups', type: 'number', unit:'Wh'});
          ! // Zählerstand
          ! createState(pfad + geraet + '.Zaehlerstand.Tag', 0, {name: 'Zählerstand Tagesbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Zaehlerstand.Woche', 0, {name: 'Zählerstand Wochenbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Zaehlerstand.Monat', 0, {name: 'Zählerstand Monatsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Zaehlerstand.Quartal', 0, {name: 'Zählerstand Quartalsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Zaehlerstand.Jahr', 0, {name: 'Zählerstand Jahresbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! // Backup Zählerstand
          ! createState(pfad + geraet + '.Zaehlerstand.Backup', 0, {
          ! name: 'Zählerstand Backup ('+ geraet + '), Differenz aus altem und neuem Wert nach Überlauf oder Reset',
          ! desc: 'wird beim Umspringen des Original-Zählerstandes (' + geraet + ') zu diesem addiert',
          ! type: 'number',
          ! unit: 'Wh'});
          ! // Verbrauch
          ! createState(pfad + geraet + '.Verbrauch.Tag', 0, {name: 'Verbrauch seit Tagesbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Verbrauch.Woche', 0, {name: 'Verbrauch seit Wochenbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Verbrauch.Monat', 0, {name: 'Verbrauch seit Monatsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Verbrauch.Quartal', 0, {name: 'Verbrauch seit Quartalsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! createState(pfad + geraet + '.Verbrauch.Jahr', 0, {name: 'Verbrauch seit Jahresbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
          ! // Stromkosten
          ! createState(pfad + geraet + '.Kosten.Tag', 0, {name: 'Stromkosten heute (' + geraet + ')', type: 'number', unit:'€' });
          ! createState(pfad + geraet + '.Kosten.Woche', 0, {name: 'Stromkosten Woche (' + geraet + ')', type: 'number', unit:'€' });
          ! createState(pfad + geraet + '.Kosten.Monat', 0, {name: 'Stromkosten Monat (' + geraet + ')', type: 'number', unit:'€' });
          ! createState(pfad + geraet + '.Kosten.Monat', 0, {name: 'Stromkosten Monat (' + geraet + ')', type: 'number', unit:'€' });
          ! createState(pfad + geraet + '.Kosten.Quartal', 0, {name: 'Stromkosten Quartal (' + geraet + ')', type: 'number', unit:'€' });
          ! createState(pfad + geraet + '.Kosten.Jahr', 0, {name: 'Stromkosten Jahr (' + geraet + ')', type: 'number', unit:'€' });
          ! if (logging) log('States in der Instanz ' + instanz + pfad + ' erstellt');
          ! }
          ! function checkBlacklist (name) { // Unterfunktion von entferneDatenpukt
          ! for(var i = 0; i < blacklist.length; i++) { // Blacklist durchgehen
          ! if (name.indexOf(blacklist__) != -1) { // wenn vorhanden (nicht nicht vorhanden)
          ! return( name.substring(0, name.indexOf(blacklist__)) ); // Zeichenketten aus der Blacklist löschen
          ! }
          ! }
          ! }
          ! function entferneDatenpunkt(geraet) {
          ! var rueckgabe;
          ! if (geraet.indexOf(":2.ENERGY_COUNTER") != -1) {
          ! rueckgabe = geraet.substring(0, geraet.indexOf(":2.ENERGY_COUNTER"));
          ! } else
          ! if (geraet.indexOf(".METER") != -1) {
          ! rueckgabe = geraet.substring(0, geraet.indexOf(".METER"));
          ! }
          ! // Rückgabe sollte keine Sonderzeichen oder Leerzeichen enthalten. Wenn doch, werden die entfernt oder ersetzt
          ! // todo
          ! rueckgabe = checkBlacklist(rueckgabe); // Wenn man keine Blacklist braucht, kann man diesen Teil auskommentieren
          ! return rueckgabe;
          ! }____ __Ich betreibe es in der Instanz 1 (also die 2) und habe die Zeile

          var instanz = 'javascript.1';  instanz = instanz + '.';
          ````angepasst auf die Angezeigte 1
          
          Ich habe die Zwischenstecker mit Leistungsmessung, sowie den Stromzähler.
          
          Bei der Suche nach Energy_Counter wird mir dieses angezeigt
          
          >! ENERGY_COUNTER state Küche Kühlschrank:2.ENERGY_COUNTER
          >! ENERGY_COUNTER state Waschküche Steckdose:2.ENERGY_COUNTER
          >! ENERGY_COUNTER state Küche Kaffee:2.ENERGY_COUNTER
          >! ENERGY_COUNTER state Stromzähler:1.ENERGY_COUNTER
          >! ENERGY_COUNTER state Garage Steckdose:2.ENERGY_COUNTER
          
          Im Log wird mir nun folgendes angezeigt
          
          >! javascript.1 2016-06-11 09:41:59.393 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
          >! javascript.1 2016-06-11 09:41:59.390 error message hm-rpc.0.MEQ0273558.2.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
          >! javascript.1 2016-06-11 09:41:31.225 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
          >! javascript.1 2016-06-11 09:41:31.223 error message hm-rpc.0.MEQ0272352.2.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
          >! TypeError: 2016-06-11 09:41:24.295 error at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)
          >! TypeError: 2016-06-11 09:41:24.295 error at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2036:80)
          >! TypeError: 2016-06-11 09:41:24.295 error at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17)
          >! TypeError: 2016-06-11 09:41:24.295 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17)
          >! TypeError: 2016-06-11 09:41:24.295 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2644:28)
          >! TypeError: 2016-06-11 09:41:24.295 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2644:28)
          >! TypeError: 2016-06-11 09:41:24.295 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2625:17)
          >! TypeError: 2016-06-11 09:41:24.295 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48
          >! TypeError: 2016-06-11 09:41:24.295 error at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48)
          >! TypeError: 2016-06-11 09:41:24.295 error at Object. (script.js.Test.Langzeit_Strommessung:79:30)
          >! TypeError: 2016-06-11 09:41:24.295 error Cannot read property 'replace' of undefined
          >! message 2016-06-11 09:41:24.279 error hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
          >! javascript-1 2016-06-11 09:40:30.955 info script.js.Test.Langzeit_Strommessung: registered 1 subscription and 0 schedules
          
          Was läuft schief?__
          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo Dirk,

            kannst du bitte mal die Zeile

            rueckgabe = checkBlacklist(rueckgabe);
            
            

            auskommentieren zu

            // rueckgabe = checkBlacklist(rueckgabe);
            

            Ausserdem hast du einen Stromzähler, der ENERGY.COUNTER auf Kanal 1 hat. Ich habe so ein Gerät nicht. Eigentlich dürfte das kein Problem sein. Aber ist halt nicht getestet.

            Und stelle bitte logging auf true für mehr Details

            Wie es aussieht, läuft das Skript nicht bei allen sauber durch. IIch habe es damals für mich mit der genauen Abfrage der von mir verwendeten Stromzähler gebaut. Dann sollte es universell laufen, ohne weitere Eingaben. Und das habe ich hier dann mal veröffentlicht. Ich werde mich noch einmal dran setzen.

            Könnte auch gut einen Adapter ergeben. Dazu ist aber das dynamische Anlegen der States notwendig (ich weiß ja nicht, wieviele Geräte der Nutzer hat) und das habe ich bisher noch nicht gemacht. Ich habe beim Entwickler https://github.com/Pmant/ioBroker.harmony/blob/master/harmony.js aber schon gesehen. Mal sehen, ob ich das schaffe.

            Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • D
              DiJaexxl last edited by

              Hallo Pix,

              danke für de schnelle Rückmeldung!

              Die gezeigten Fehler sind raus, und es werde auch Datapoints erstellt.

              Es gibt jetzt nur noch die Fehler

              ! javascript.1 2016-06-11 11:48:44.336 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
              ! javascript.1 2016-06-11 11:48:44.335 error message hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
              Ansonsten sieht es gut aus

              ! javascript.1 2016-06-11 11:46:29.610 info javascript.1 script.js.Test.Langzeit_Strommessung: Gerätename: WaschkücheSteckdose
              ! javascript.1 2016-06-11 11:46:29.610 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:29.610 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
              ! javascript.1 2016-06-11 11:46:29.609 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 13016
              ! javascript.1 2016-06-11 11:46:29.609 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 13016
              ! javascript.1 2016-06-11 11:46:29.609 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Waschküche Steckdose
              ! javascript.1 2016-06-11 11:46:29.608 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0272365
              ! javascript.1 2016-06-11 11:46:29.608 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Waschküche Steckdose:2
              ! javascript.1 2016-06-11 11:46:29.607 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0272365.2
              ! javascript.1 2016-06-11 11:46:29.607 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Waschküche Steckdose:2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:29.607 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:29.606 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
              ! javascript.1 2016-06-11 11:46:29.606 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
              ! javascript.1 2016-06-11 11:46:29.605 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
              ! javascript.1 2016-06-11 11:46:29.604 info javascript.1 script.js.Test.Langzeit_Strommessung: –------ Strommesser ---------
              ! javascript.1 2016-06-11 11:46:28.742 info javascript.1 script.js.Test.Langzeit_Strommessung: ------------ ENDE ------------
              ! javascript.1 2016-06-11 11:46:28.742 info javascript.1 script.js.Test.Langzeit_Strommessung: Stromverbrauch und -kosten (GarageSteckdose) aktualisiert
              ! javascript.1 2016-06-11 11:46:28.742 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Jahr: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.741 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Jahr: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.741 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Quartal: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.741 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Quartal: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.740 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Monat: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.740 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Monat: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.739 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Woche: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.739 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Woche: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.739 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Kosten.Tag: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.738 warn javascript.1 Wrong type of javascript.1.Strom.GarageSteckdose.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:28.738 info javascript.1 script.js.Test.Langzeit_Strommessung: States in der Instanz javascript.1.Strom. erstellt
              ! javascript.1 2016-06-11 11:46:28.738 info javascript.1 script.js.Test.Langzeit_Strommessung: Gerätename: GarageSteckdose
              ! javascript.1 2016-06-11 11:46:28.737 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.NEQ0386228.2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:28.737 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
              ! javascript.1 2016-06-11 11:46:28.736 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 129
              ! javascript.1 2016-06-11 11:46:28.736 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 129
              ! javascript.1 2016-06-11 11:46:28.735 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Garage Steckdose
              ! javascript.1 2016-06-11 11:46:28.735 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.NEQ0386228
              ! javascript.1 2016-06-11 11:46:28.734 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Garage Steckdose:2
              ! javascript.1 2016-06-11 11:46:28.720 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.NEQ0386228.2
              ! javascript.1 2016-06-11 11:46:28.720 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Garage Steckdose:2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:28.719 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.NEQ0386228.2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:28.719 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
              ! javascript.1 2016-06-11 11:46:28.718 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
              ! javascript.1 2016-06-11 11:46:28.718 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
              ! javascript.1 2016-06-11 11:46:28.716 info javascript.1 script.js.Test.Langzeit_Strommessung: -------- Strommesser ---------
              ! javascript.1 2016-06-11 11:46:21.735 info javascript.1 script.js.Test.Langzeit_Strommessung: ------------ ENDE ------------
              ! javascript.1 2016-06-11 11:46:21.734 info javascript.1 script.js.Test.Langzeit_Strommessung: Stromverbrauch und -kosten (WaschkücheSteckdose) aktualisiert
              ! javascript.1 2016-06-11 11:46:21.734 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Jahr: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.734 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Jahr: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.733 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Quartal: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.733 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Quartal: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.733 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Monat: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.732 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Monat: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.732 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Woche: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.731 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Woche: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.731 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Tag: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.731 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:21.730 info javascript.1 script.js.Test.Langzeit_Strommessung: States in der Instanz javascript.1.Strom. erstellt
              ! javascript.1 2016-06-11 11:46:21.730 info javascript.1 script.js.Test.Langzeit_Strommessung: Gerätename: WaschkücheSteckdose
              ! javascript.1 2016-06-11 11:46:21.730 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:21.729 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
              ! javascript.1 2016-06-11 11:46:21.729 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 13015.799988
              ! javascript.1 2016-06-11 11:46:21.728 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 13016
              ! javascript.1 2016-06-11 11:46:21.728 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Waschküche Steckdose
              ! javascript.1 2016-06-11 11:46:21.728 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0272365
              ! javascript.1 2016-06-11 11:46:21.727 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Waschküche Steckdose:2
              ! javascript.1 2016-06-11 11:46:21.727 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0272365.2
              ! javascript.1 2016-06-11 11:46:21.727 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Waschküche Steckdose:2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:21.726 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0272365.2.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:21.726 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
              ! javascript.1 2016-06-11 11:46:21.725 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
              ! javascript.1 2016-06-11 11:46:21.718 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
              ! javascript.1 2016-06-11 11:46:21.716 info javascript.1 script.js.Test.Langzeit_Strommessung: -------- Strommesser ---------
              ! javascript.1 2016-06-11 11:46:18.031 error TypeError: Cannot read property 'replace' of undefined at Object. (script.js.Test.Langzeit_Strommessung:79:30) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascrip
              ! javascript.1 2016-06-11 11:46:18.030 error message hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
              ! javascript.1 2016-06-11 11:46:18.030 info javascript.1 script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:18.030 info javascript.1 script.js.Test.Langzeit_Strommessung: Einheit: Wh
              ! javascript.1 2016-06-11 11:46:18.029 info javascript.1 script.js.Test.Langzeit_Strommessung: alter Wert: 101116.599976
              ! javascript.1 2016-06-11 11:46:18.029 info javascript.1 script.js.Test.Langzeit_Strommessung: neuer Wert: 101133.299927
              ! javascript.1 2016-06-11 11:46:18.029 info javascript.1 script.js.Test.Langzeit_Strommessung: device name: Stromzähler
              ! javascript.1 2016-06-11 11:46:18.028 info javascript.1 script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0380660
              ! javascript.1 2016-06-11 11:46:18.028 info javascript.1 script.js.Test.Langzeit_Strommessung: channel Name: Stromzähler:1
              ! javascript.1 2016-06-11 11:46:18.027 info javascript.1 script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0380660.1
              ! javascript.1 2016-06-11 11:46:18.027 info javascript.1 script.js.Test.Langzeit_Strommessung: Name: Stromzähler:1.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:18.026 info javascript.1 script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER
              ! javascript.1 2016-06-11 11:46:18.026 info javascript.1 script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
              ! javascript.1 2016-06-11 11:46:18.026 info javascript.1 script.js.Test.Langzeit_Strommessung: Gewerk: undefined
              ! javascript.1 2016-06-11 11:46:18.025 info javascript.1 script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
              ! javascript.1 2016-06-11 11:46:18.023 info javascript.1 script.js.Test.Langzeit_Strommessung: –------ Strommesser ---------
              ! javascript.1 2016-06-11 11:46:13.649 info javascript.1 script.js.Test.Langzeit_Strommessung: ------------ ENDE ------------
              ! javascript.1 2016-06-11 11:46:13.649 info javascript.1 script.js.Test.Langzeit_Strommessung: Stromverbrauch und -kosten (WaschkücheSteckdose) aktualisiert
              ! javascript.1 2016-06-11 11:46:13.648 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Jahr: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.648 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Jahr: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.647 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Quartal: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.647 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Quartal: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.647 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Monat: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.646 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Monat: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.646 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Woche: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.645 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Woche: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.645 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Kosten.Tag: "string". Please fix, while deprecated and will not work in next versions.
              ! javascript.1 2016-06-11 11:46:13.645 warn javascript.1 Wrong type of javascript.1.Strom.WaschkücheSteckdose.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.

              Wie verrechnest du eigentlich die Grundgebühr?

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                Die Fehler wurden durch den Neustart des Skripts beseitigt.

                Grundgebühr? Ach ja. Gar nicht. Kannste weglassen.

                Pix

                Gesendet mit Tapatalk

                1 Reply Last reply Reply Quote 0
                • M
                  michihorn last edited by

                  Hallo Pix

                  ich habe in meinem Skript eine Fehlermeldung.

                  Wenn meinen 3 Strommessern wurde nur einer in den Objekten angelegt. Dieser Strommesser hat in den Objekten nur Nullen, obwohl das Skript seit Sonntag Werte sammeln sollt.

                  Kannst du noch mal schauen? Danke

                  Michael
                  326_3.png

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

                    Hallo Pix

                    ich erhalte folgende Warnung im LOG

                    > javascript.0 2016-06-24 08:36:38.107 warn javascript.0 Wrong type of javascript.0.Strom.HM-ES-PMSw1-PlLEQxxxxxxx.Verbrauch.Tag: "string". Please fix, while deprecated and will not work in next versions.

                    Sind die Datenpunkte falsch angelegt? Was müsste man an den Datenpunkten verändern damit diese Warnungen nicht angezeigt werden?

                    Gruß

                    Adrian

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      Ja, diese Warnung kommt seit einem der letzten Updates und warnt davor, dass der Typ der Variable, die beschrieben werden soll, nicht zum Typ des Inhalts passt. In diesem Fall: Zeichenkette/String soll in Typ Zahl geschrieben werden.

                      Der createStates-Befehl erzeugt für die Zählerstände und Verbräuche eine Zahl mit Einheit (type: number, unit). Das sollte so bleiben.

                      Beim Schreiben der Variablen wird die Zahl auf drei Nachkommastellen begrenzt. Das passiert mit dem Befehl toFixed(3). Dieser Befehl macht aber aus einer Zahl eine Zeichenkette. Daher muss anschließend diese Zeichenkette wieder in eine Zahl (mit Dezimalstellen) gewandelt werden. Das mache ich mit parseFloat().

                      Tausche dafür die Funktion berechneVerbrauchKosten gegen diese aus:

                      function berechneVerbrauchKosten(geraet, zaehler, preis) {                      // bei jedem eingehenden Wert pro Gerät
                          // Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] --- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
                          setState(instanz + pfad + geraet + '.Verbrauch.Tag',     parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3) ) );           // Verbrauch an diesem Tag in kWh
                          setState(instanz + pfad + geraet + '.Kosten.Tag',        parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3) ) );  // Kosten an diesem Tag in €
                          // Woche    
                          setState(instanz + pfad + geraet + '.Verbrauch.Woche',   parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Woche',      parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3) ) );
                          // Monat    
                          setState(instanz + pfad + geraet + '.Verbrauch.Monat',   parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Monat',      parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3) ) );
                          // Quartal    
                          setState(instanz + pfad + geraet + '.Verbrauch.Quartal', parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Quartal',    parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3) ) );
                          // Jahr    
                          setState(instanz + pfad + geraet + '.Verbrauch.Jahr',    parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Jahr',       parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3) ) );  
                          if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert');
                      }
                      

                      Gruß

                      Pix

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

                        @pix:

                        Ja, diese Warnung kommt seit einem der letzten Updates und warnt davor, dass der Typ der Variable, die beschrieben werden soll, nicht zum Typ des Inhalts passt. In diesem Fall: Zeichenkette/String soll in Typ Zahl geschrieben werden.

                        Der createStates-Befehl erzeugt für die Zählerstände und Verbräuche eine Zahl mit Einheit (type: number, unit). Das sollte so bleiben.

                        Beim Schreiben der Variablen wird die Zahl auf drei Nachkommastellen begrenzt. Das passiert mit dem Befehl toFixed(3). Dieser Befehl macht aber aus einer Zahl eine Zeichenkette. Daher muss anschließend diese Zeichenkette wieder in eine Zahl (mit Dezimalstellen) gewandelt werden. Das mache ich mit parseFloat().

                        Tausche dafür die Funktion berechneVerbrauchKosten gegen diese aus:

                        function berechneVerbrauchKosten(geraet, zaehler, preis) {                      // bei jedem eingehenden Wert pro Gerät
                            // Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] --- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
                            setState(instanz + pfad + geraet + '.Verbrauch.Tag',     parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3) ) );           // Verbrauch an diesem Tag in kWh
                            setState(instanz + pfad + geraet + '.Kosten.Tag',        parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3) ) );  // Kosten an diesem Tag in €
                            // Woche    
                            setState(instanz + pfad + geraet + '.Verbrauch.Woche',   parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Woche',      parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3) ) );
                            // Monat    
                            setState(instanz + pfad + geraet + '.Verbrauch.Monat',   parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Monat',      parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3) ) );
                            // Quartal    
                            setState(instanz + pfad + geraet + '.Verbrauch.Quartal', parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Quartal',    parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3) ) );
                            // Jahr    
                            setState(instanz + pfad + geraet + '.Verbrauch.Jahr',    parseFloat(  (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3) ) );
                            setState(instanz + pfad + geraet + '.Kosten.Jahr',       parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3) ) );  
                            if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert');
                        }
                        

                        Gruß

                        Pix `

                        Danke Pix, für die gute Erklärung und für das verändern der Funktion

                        Somit habe ich jetzt keine Warnungen mehr im LOG

                        1 Reply Last reply Reply Quote 0
                        • C
                          cybertron last edited by

                          Hallo Pix,

                          ich habe soweit alles aus dem Thread in meinem Script mit eingebracht. (hoffe ich zumindest)

                          bekomme aber immerwieder folgende Fehlermeldung:

                          12:06:58.192 [error] TypeError: Cannot read property 'val' of null at Object. (script.js.common.Statusabfragen.Stromverbrauch:100:68) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48 at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2665:45) at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28) at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17) at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2054:80) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) 
                          

                          Das Script sieht derzeit so aus…

                          ! ```
                          `/* Strom Zaehlerstaende, Verbrauch und Kosten
                          ! Skript dient zur Ermittlung des Stromverbrauchs bei Geräten,
                          die mit den Homematic Zwischenstecker-Schaltaktor mit Leistungsmessung oder den FS20 EM1000 verbunden sind
                          ! Zählerstände werden gespeichert jeweils
                          -jeden Tag
                          -jede Woche Montag
                          -jeden Monatsersten
                          -jeden Quartalsersten
                          -jedes Neujahr
                          wenn ein neuer Wert reinkommt.
                          ! Der Strompreis wird in die Variable "Strompreis_aktuell" geschrieben.
                          Änderungen des Strompreispreises müssen rechtzeitig per Cronjob programmiert werden.
                          ! Die Stromkosten (Verbrauch * Preis) werden ebenso
                          -jeden Tag
                          -jede Woche Montag
                          -jeden Monatsersten
                          -jeden Quartalsersten
                          -jedes Neujahr
                          ! genullt und bis dahin durch die Berechnung (der Differenz des aktuellen Zählerstandes - Zählerstand Beginn des Zeitraums) * Strompreis ermittelt
                          ! Der kumulierte Zählerstand berücksichtigt evtl. Resets und Überläufe der realen Zählerstände der Geräte.
                          ! Todo: Wenn aktueller Zählerstand < letzter Zählerstand, dann push und korrektur
                          wie hier: http://homematic-forum.de/forum/viewtopic.php?f=27&t=23688&p=201954&hilit=HM+ES+PMSw1+Pl+Zähler#p201959
                          ! erstellt: 09.02.2016 von pix auf Basis des alten Skriptes
                          01.03.2016 Leerzeichen werden aus Gerätenamen gelöscht
                          */
                          ! var logging = false;
                          var instanz = 'javascript.' + instance;
                          //var instanz = 'javascript.2'; instanz = instanz + '.';
                          var pfad = 'Status.Zähler.Strom.'; // Pfad innerhalb der Instanz
                          var blacklist= []; // persönliche Blacklist: Diese Teile werden aus den Homematic Gerätenamen entfernt
                          ! // Variablen erstellen, Zählerstände einlesen und Stromkosten errechnen (pro Gerät)
                          // Strompreis
                          createState(pfad + 'Preis.aktuell.Arbeitspreis', 0.2495, {
                          name: 'Strompreis - aktueller Arbeitspreis (brutto)',
                          unit: '€/kWh'
                          });
                          createState(pfad + 'Preis.aktuell.Grundpreis', 3.95, { // wird noch nicht eingerechnet
                          name: 'Strompreis - aktueller Grundpreis (brutto)',
                          unit: '€/Monat'
                          });
                          ! var idStrompreis = instanz + pfad + 'Preis.aktuell.Arbeitspreis';
                          ! // Einlesen der aktuellen Daten vom Zähler
                          on({id: /.METER|.ENERGY_COUNTER$/
                          }, function(obj) {

                          var idbyname = getIdByName(obj.common.name, true);
                          if (logging) {   
                              log('-------- Strommesser ---------');
                              log('RegExp-Funktion ausgelöst');
                          

                          // log('Gewerk: ' + obj.role); // undefined
                          // log('Beschreibung: ' + obj.desc); // undefined
                          log('id: ' + obj.id);
                          log('Name: ' + obj.common.name); // Waschmaschine Küche:2.ENERGY_COUNTER !!!!! Mac mini Strommessung.METER
                          log('channel ID: ' + obj.channelId); // hm-rpc.0.MEQ0170864.2
                          log('channel Name: ' + obj.channelName); // Waschmaschine Küche:2
                          log('device ID: ' + obj.deviceId); // hm-rpc.0.MEQ0170864
                          log('device name: ' + obj.deviceName); // Küche Waschmaschine
                          log('neuer Wert: ' + obj.newState.val); // 16499.699982
                          log('alter Wert: ' + obj.oldState.val); // 16499.699982
                          log('Einheit: ' + obj.common.unit); // Wh
                          log('IDbyNameFunktion: ' + idbyname[0]); // hm-rpc.0.MEQ0170864.2.ENERGY_COUNTER
                          }

                          ! // orgina von Pix
                          // // Gerätenamen erstellen
                          // var geraetename = entferneDatenpunkt(obj.common.name);
                          // geraetename = geraetename.replace(/\s/g, ""); // per Regexp Leerzeichen entfernen
                          // if (logging) log('Gerätename: ' + geraetename);
                          ! //geänderte Version lt. JeeCee vom 04.05.2016
                          // Gerätenamen erstellen
                          var geraetename = entferneDatenpunkt(obj.common.name);
                          if (logging) log('Gerätename: ' + geraetename);
                          !
                          // States erstellen (CreateStates für dieses Gerät)
                          erstelleStates (geraetename);

                          // prüfe eingehende Daten
                            // nicht nötig, da subscribe eh nur anspringt, wenn gelieferte Daten = oder > sind als alte (gt)
                            // zweiter subscribe übernimmt das
                          
                          // prüfe und schreibe Daten  
                          var idKumuliert =  instanz + pfad + geraetename + '.Zaehlerstand.kumuliert',
                              idBackup =     instanz + pfad + geraetename + '.Zaehlerstand.Backup';
                          
                          if (obj.newState.val >= obj.oldState.val) {                                     // neuer Wert größer alter wert -> alles gut
                              setState(idKumuliert, obj.newState.val + getState(idBackup).val);           // Kumulierten Wert mit Ist-Wert (inkl. Backup) synchronisieren
                          } else {                                                                        // neuer Wert kleiner als alter Wert -> Achtung Zähler im Gerät übergelaufen oder genullt
                              var differenz = obj.oldState.val - obj.newState.val;                        // Differenz berechnen
                              setState(idBackup, getState(idBackup).val + differenz);                     // und Differenz und Backup addieren "und den Werteabriss ausgleichen"
                              setState(idKumuliert, data.newState.val + getState(idBackup).val);          // damit neuer kumulierter Wert stetig weiter wächst
                              meldung = 'Achtung!\n\n' 
                                      + 'Der Stromzählerstand (' + geraetename + ') ist übergelaufen oder gelöscht worden (ggf. Stromausfall).\n'
                                      + 'Der letzte Zählerstand vor dem Reset wird nun zum Neuen addiert. Bitte unbedingt die Werte prüfen. \n\n '
                                      + 'ioBroker';
                              betreff = 'ioBroker Meldung';
                              prio = getState(OptinPushPrio).val;
                              meldung_push(meldung, betreff, prio);
                              log('Zählerstand (' + geraetename + ') übergelaufen oder genullt. Backup wird ab jetzt verwendet.', 'error');
                          }
                          
                          // aktualisiere den Verbrauch und die Kosten
                          berechneVerbrauchKosten(geraetename, (getState(idKumuliert).val / 1000).toFixed(3), getState(idStrompreis).val); // in kWh
                          
                          // ETAPPENWERTE SPEICHERN und RESETS DER WERTE #################################
                          // Verzögerungen eingebaut. Resets, wenn die ersten Werte der neuen Etappe reinkommen
                          if ( zeit(obj.oldState.ts).Stunde > zeit(obj.newState.ts).Stunde ) { // neue Stunde kleiner als alte Stunde (Mitternacht)
                              setTimeout(function() {
                                  resetKostenVerbrauch(geraetename, 'Tag');
                              }, 1000);
                              setTimeout(function() {
                                  schreibeZaehlerstand(geraetename, 'Tag');
                              }, 1500);
                          }  
                          if ( zeit(obj.oldState.ts).Wochentag ===  0 && zeit(obj.newState.ts).Wochentag === 1) { // So auf Mo
                              setTimeout(function() {
                                  resetKostenVerbrauch(geraetename, 'Woche');
                              }, 2000);
                              setTimeout(function() {
                                  schreibeZaehlerstand(geraetename, 'Woche');
                              }, 2500);
                          }   
                          if ( zeit(obj.oldState.ts).Tag > zeit(obj.newState.ts).Tag ) { // wenn alter Tag größer als neuer Tag (am 1\. eines Monats)   
                              setTimeout(function() {
                                  resetKostenVerbrauch(geraetename, 'Monat');
                              }, 3000);
                              setTimeout(function() {
                                  schreibeZaehlerstand(geraetename, 'Monat');
                              }, 3500);
                          }    
                          // wenn obj.oldState.ts im März [3] und obj.newState.ts im April [4] oder
                          //      obj.oldState.ts im Juni [6] und obj.newState.ts im Juli [7] oder
                          //      obj.oldState.ts im Sept [9] und obj.newState.ts im Okt [10] oder
                          //      obj.oldState.ts im Dez [12] und obj.newState.ts im Jan [1], dann Quartal
                          if ( (zeit(obj.oldState.ts).Monat === 3 && zeit(obj.newState.ts).Monat === 4)  || 
                               (zeit(obj.oldState.ts).Monat === 6 && zeit(obj.newState.ts).Monat === 7)  || 
                               (zeit(obj.oldState.ts).Monat === 9 && zeit(obj.newState.ts).Monat === 10)  || 
                               (zeit(obj.oldState.ts).Monat === 12 && zeit(obj.newState.ts).Monat === 1) ) {
                              setTimeout(function() {
                                  resetKostenVerbrauch(geraetename, 'Quartal');
                              }, 4000);
                              setTimeout(function() {
                                  schreibeZaehlerstand(geraetename, 'Quartal');
                              }, 4500);
                          }
                          // wenn obj.oldState.ts im alten Jahr liegt, dann Jahr
                          if (zeit(obj.oldState.ts).Jahr < zeit(jetzt).Jahr) {
                              setTimeout(function() {
                                  resetKostenVerbrauch(geraetename, 'Jahr');
                              }, 5000);
                              setTimeout(function() {
                                  schreibeZaehlerstand(geraetename, 'Jahr');
                              }, 5500);
                          }
                          if (logging) log('------------ ENDE ------------');
                          

                          });

                          ! function schreibeZaehlerstand(geraet, zeitraum) {
                          var idKumuliert = instanz + pfad + geraet + '.Zaehlerstand.kumuliert',
                          idZaehlerstand = instanz + pfad + geraet + '.Zaehlerstand.' + zeitraum;
                          // Zählerstand für übergebene Zeitraum und das Gerät in Wh auslesen
                          setState(idZaehlerstand, (getState(idKumuliert).val / 1000).toFixed(3)); // und in kWh (mit drei Dezimalstellen) speichern (also durch 1000)

                              // hier externe Protokollierung in Datei einbauen
                          
                              log('Zählerstände für das Gerät ' + geraet + ' (' + zeitraum + ') gespeichert');
                          

                          }

                          ! function resetKostenVerbrauch(geraet, zeitraum) {
                          setState(instanz + pfad + geraet + '.Kosten.' + zeitraum, 0); // Reset der Stromkosten für den übergebenen Zeitraum
                          setState(instanz + pfad + geraet + '.Verbrauch.' + zeitraum, 0); // Reset des Stromverbrauchs für den übergebenen Zeitraum
                          log('Stromkosten und Stromverbrauch für das Gerät ' + geraet + ' (' + zeitraum + ') zurückgesetzt');
                          }
                          ! function zeit (time) {
                          jetzt = new Date(formatDate(time, "YYYY.MM.DD SS:mm:ss"));
                          var jahr = jetzt.getFullYear();
                          var monat = (jetzt.getMonth()+1 < 10) ? '0' + (jetzt.getMonth()+1) : jetzt.getMonth()+1;
                          var tag = (jetzt.getDate() < 10) ? '0' + jetzt.getDate() : jetzt.getDate();
                          var wochentag = jetzt.getDay(); // startet am Sonntag mit 0
                          var stunde = (jetzt.getHours() < 10) ? '0' + jetzt.getHours() : jetzt.getHours();
                          var minute = (jetzt.getMinutes() < 10) ? '0' + jetzt.getMinutes() : jetzt.getMinutes();
                          var sekunde = (jetzt.getSeconds() < 10) ? '0' + jetzt.getSeconds() : jetzt.getSeconds();
                          return {
                          'Jahr' : jahr,
                          'Monat' : monat,
                          'Tag' : tag,
                          'Wochentag' : wochentag,
                          'Stunde' : stunde,
                          'Minute' : minute,
                          'Sekunde' : sekunde
                          };
                          }
                          ! function berechneVerbrauchKosten(geraet, zaehler, preis) { // bei jedem eingehenden Wert pro Gerät
                          // Tag [Verbrauchskosten = (Zähler_ist - Zähler_Tagesbeginn) * Preis ] --- zaehler muss immer größer sein als Tages, Wochen, etc.-Wert
                          setState(instanz + pfad + geraet + '.Verbrauch.Tag', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val).toFixed(3) ) ); // Verbrauch an diesem Tag in kWh
                          setState(instanz + pfad + geraet + '.Kosten.Tag', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Tag').val) * preis).toFixed(3) ) ); // Kosten an diesem Tag in €
                          // Woche
                          setState(instanz + pfad + geraet + '.Verbrauch.Woche', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Woche', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Woche').val) * preis).toFixed(3) ) );
                          // Monat
                          setState(instanz + pfad + geraet + '.Verbrauch.Monat', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Monat', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Monat').val) * preis).toFixed(3) ) );
                          // Quartal
                          setState(instanz + pfad + geraet + '.Verbrauch.Quartal', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Quartal', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Quartal').val) * preis).toFixed(3) ) );
                          // Jahr
                          setState(instanz + pfad + geraet + '.Verbrauch.Jahr', parseFloat( (zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val).toFixed(3) ) );
                          setState(instanz + pfad + geraet + '.Kosten.Jahr', parseFloat( ((zaehler - getState(instanz + pfad + geraet + '.Zaehlerstand.Jahr').val) * preis).toFixed(3) ) );
                          if (logging) log('Stromverbrauch und -kosten (' + geraet + ') aktualisiert');
                          }
                          ! function erstelleStates (geraet) {
                          // Kumulierter Zählerstand (wird nie kleiner)
                          createState(pfad + geraet + '.Zaehlerstand.kumuliert', 0, {name: 'Kumulierter Zählerstand (' + geraet + ') inkl. Backups', type: 'number', unit:'Wh'});

                          // Zählerstand
                          createState(pfad + geraet + '.Zaehlerstand.Tag',     0, {name: 'Zählerstand Tagesbeginn ('       + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Zaehlerstand.Woche',   0, {name: 'Zählerstand Wochenbeginn ('      + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Zaehlerstand.Monat',   0, {name: 'Zählerstand Monatsbeginn ('      + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Zaehlerstand.Quartal', 0, {name: 'Zählerstand Quartalsbeginn ('    + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Zaehlerstand.Jahr',    0, {name: 'Zählerstand Jahresbeginn ('      + geraet + ')', type: 'number', unit:'kWh'});
                          
                          // Backup Zählerstand
                          createState(pfad + geraet + '.Zaehlerstand.Backup',  0, {
                              name: 'Zählerstand Backup ('+ geraet + '), Differenz aus altem und neuem Wert nach Überlauf oder Reset',
                              desc: 'wird beim Umspringen des Original-Zählerstandes (' + geraet + ') zu diesem addiert',
                              type: 'number',
                              unit: 'Wh'});
                          
                          // Verbrauch 
                          createState(pfad + geraet + '.Verbrauch.Tag',        0, {name: 'Verbrauch seit Tagesbeginn ('    + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Verbrauch.Woche',      0, {name: 'Verbrauch seit Wochenbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Verbrauch.Monat',      0, {name: 'Verbrauch seit Monatsbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Verbrauch.Quartal',    0, {name: 'Verbrauch seit Quartalsbeginn (' + geraet + ')', type: 'number', unit:'kWh'});
                          createState(pfad + geraet + '.Verbrauch.Jahr',       0, {name: 'Verbrauch seit Jahresbeginn ('   + geraet + ')', type: 'number', unit:'kWh'});
                          
                          // Stromkosten
                          createState(pfad + geraet + '.Kosten.Tag',           0, {name: 'Stromkosten heute ('             + geraet + ')', type: 'number', unit:'€'  });
                          createState(pfad + geraet + '.Kosten.Woche',         0, {name: 'Stromkosten Woche ('             + geraet + ')', type: 'number', unit:'€'  });
                          createState(pfad + geraet + '.Kosten.Monat',         0, {name: 'Stromkosten Monat ('             + geraet + ')', type: 'number', unit:'€'  });
                          createState(pfad + geraet + '.Kosten.Monat',         0, {name: 'Stromkosten Monat ('             + geraet + ')', type: 'number', unit:'€'  });
                          createState(pfad + geraet + '.Kosten.Quartal',       0, {name: 'Stromkosten Quartal ('           + geraet + ')', type: 'number', unit:'€'  });
                          createState(pfad + geraet + '.Kosten.Jahr',          0, {name: 'Stromkosten Jahr ('              + geraet + ')', type: 'number', unit:'€'  });
                          
                          if (logging) log('States in der Instanz ' + instanz + pfad + ' erstellt');   
                          

                          }

                          ! function checkBlacklist (name) { // Unterfunktion von entferneDatenpukt
                          for(var i = 0; i < blacklist.length; i++) { // Blacklist durchgehen
                          if (name.indexOf(blacklist[i]) != -1) { // wenn vorhanden (nicht nicht vorhanden)
                          return( name.substring(0, name.indexOf(blacklist[i])) ); // Zeichenketten aus der Blacklist löschen
                          }
                          }
                          }
                          // Orginal function lt.Pix
                          //function entferneDatenpunkt(geraet) {
                          // var rueckgabe;
                          // if (geraet.indexOf(":2.ENERGY_COUNTER") != -1) {
                          // rueckgabe = geraet.substring(0, geraet.indexOf(":2.ENERGY_COUNTER"));
                          // } else
                          // if (geraet.indexOf(".METER") != -1) {
                          // rueckgabe = geraet.substring(0, geraet.indexOf(".METER"));
                          // }
                          // // Rückgabe sollte keine Sonderzeichen oder Leerzeichen enthalten. Wenn doch, werden die entfernt oder ersetzt
                          // // todo
                          // rueckgabe = checkBlacklist(rueckgabe); // Wenn man keine Blacklist braucht, kann man diesen Teil auskommentieren
                          // return rueckgabe;
                          //}
                          ! //geänderte function lt. JeeCee vom 04-05-2016
                          function entferneDatenpunkt(geraet) {
                          var rueckgabe;
                          ! if (geraet.indexOf("ENERGY_COUNTER") != -1) {
                          rueckgabe = geraet.substring(0, geraet.indexOf("ENERGY_COUNTER"));
                          } else
                          if (geraet.indexOf(".METER") != -1) {
                          rueckgabe = geraet.substring(0, geraet.indexOf(".METER"));
                          }
                          ! // Rückgabe sollte keine Sonderzeichen oder Leerzeichen enthalten. Wenn doch, werden die entfernt oder ersetzt
                          // todo
                          if ((blacklist.length) !== 0) {
                          rueckgabe = checkBlacklist(rueckgabe);
                          }
                          ! try {rueckgabe = rueckgabe.replace(/./g, "");} // per Regexp punkte ersetzen
                          catch(e) {}
                          try {rueckgabe = rueckgabe.replace(/\s/g, "
                          ");} // per Regexp Leerzeichen ersetzen
                          catch(e) {}
                          try {rueckgabe = rueckgabe.replace(/_$/g, "");} // per Regexp _ am Ende entfernen
                          catch(e) {}
                          ! return rueckgabe;
                          }`
                          ! Hast Du eventuell noch eine Idee ?
                          ! Danke & gruss
                          ! Silvio[/i][/i]

                          1 Reply Last reply Reply Quote 0
                          • P
                            pix last edited by

                            Hallo,

                            ich habe das Skript noch in der ursprünglichen Version laufen und keine Probleme. Die Änderungen von JeyCee machen aber Sinn.

                            Ich kann allerdings nicht sagen, wo das Problem bei dir liegt.

                            Welche Geräte benutzt du denn für die Strommessung?

                            Das Skript wurde geschrieben für den Leistungsmesserzwischenstecker von HM und den EM1000 Leistungsmesser von FS20, angeschlossen via CUxD.

                            Ich würde das Skript ja zu einem Adapter umbauen, aber mir ist noch nicht klar, wie ich einzelne Geräte vom User auswählbar machen kann, damit deren Werte verwendet werden :roll: :?: . Ich meine eine Tabelle, in der man seine relevanten Datenpunkte per Auswahl zufügt und der Adapter reagiert dann nur auf diese Geräte.

                            Gruß

                            Pix

                            1 Reply Last reply Reply Quote 0
                            • C
                              cybertron last edited by

                              Hallo Pix,

                              ich benutze folgende Geräte:

                              3x Zwischenstecker (HM-LC-Sw1-Pl-DN-R1)

                              2x Zählersensor (HM-ES-TX-WM)

                              1x HM-Funkschaltaktor mit Leistungsmessung für Aussenbereich

                              Der Zählersensor hat ein anderes Bild der verfügbaren Datenpunkt..
                              426_2016-07-05_13_01_45-iobroker.admin_-_internet_explorer.jpg

                              Dort gäbes es nur

                              ENERGY_COUNTER

                              {
                                "type": "state",
                                "common": {
                                  "def": 0,
                                  "type": "number",
                                  "read": true,
                                  "write": false,
                                  "min": 0,
                                  "max": 838860.699219,
                                  "unit": "Wh",
                                  "name": "FEZ_Strom_Ingrid:1.ENERGY_COUNTER"
                                },
                                "native": {
                                  "CONTROL": "POWERMETER_IGL.ENERGY_COUNTER",
                                  "DEFAULT": 0,
                                  "FLAGS": 1,
                                  "ID": "ENERGY_COUNTER",
                                  "MAX": 838860.699219,
                                  "MIN": 0,
                                  "OPERATIONS": 5,
                                  "TAB_ORDER": 2,
                                  "TYPE": "FLOAT",
                                  "UNIT": "Wh"
                                },
                                "_id": "hm-rpc.0.MEQ0704960.1.ENERGY_COUNTER",
                                "acl": {
                                  "object": 1638,
                                  "state": 1638
                                }
                              }
                              

                              und POWER

                              {
                                "type": "state",
                                "common": {
                                  "def": 0,
                                  "type": "number",
                                  "read": true,
                                  "write": false,
                                  "min": 0,
                                  "max": 838860.699219,
                                  "unit": "Wh",
                                  "name": "FEZ_Strom_Ingrid:1.ENERGY_COUNTER"
                                },
                                "native": {
                                  "CONTROL": "POWERMETER_IGL.ENERGY_COUNTER",
                                  "DEFAULT": 0,
                                  "FLAGS": 1,
                                  "ID": "ENERGY_COUNTER",
                                  "MAX": 838860.699219,
                                  "MIN": 0,
                                  "OPERATIONS": 5,
                                  "TAB_ORDER": 2,
                                  "TYPE": "FLOAT",
                                  "UNIT": "Wh"
                                },
                                "_id": "hm-rpc.0.MEQ0704960.1.ENERGY_COUNTER",
                                "acl": {
                                  "object": 1638,
                                  "state": 1638
                                }
                              }
                              

                              Macht dieser eventuell die Probleme ?

                              Danke & Gruss

                              Silvio

                              1 Reply Last reply Reply Quote 0
                              • P
                                pix last edited by

                                Hallo Silvio,

                                ENERGY_COUNTER ist eigentlich ja perfekt.

                                Im Skript horcht die Zeile

                                on({id: /\.METER|\.ENERGY_COUNTER$/
                                

                                eben genau auf diese Datenpunkte.

                                Ein Anpassung musst du ausprobieren.

                                POWER ist wohl nicht korrekt, da es den derzeitigen Verbrauch anzeigt. Es geht hier nur um die Zählerstände. Die wachsen und wachsen. Und jeden Tag um Mitternacht, jeden Montag um Mitternacht, jeden 1. des Monats um Mitternacht usw. werden die aktuellen Zählerstände dann in die passende Variable (Tag, Woche, Monat, Quartal, Jahr) gespeichert. Läuft der Zählerstand dann weiter, wird für die Ermittlung des Verbrauchs eines Zeitraums der aktuelle Zählerstand mit dem jeweils zum Zeitraum passenden gespeicherten Zählerstand verglichen.

                                Besonderheit: Die Zwischenstecker setzen ihren Zählerstand auf 0, wenn sie stromlos werden. Deshalb wird der Stand bei jeder Aktualisierung in eine "mitlaufende" Variable für dieses Gerät gespeichert. Wenn das Gerät mal stromlos ist und der neuest Werte kleiner als der letzte alte Wert, wird ab da immer der zuletzt gelieferte Zählerstand zu dem aus der mitlaufenden Variable dazu addiert. So erhält man immer eine stetig steigenden virtuellen Zähler für das Gerät.

                                Gruß

                                Pix

                                1 Reply Last reply Reply Quote 0
                                • D
                                  DiJaexxl last edited by

                                  Hallo Pix,

                                  die Diskusion hat mich animiert doch noch einmal das Script zu starten und zu schauen was geht, und was nicht.

                                  Ich glaube dein Script kommt mit dem "Stromzähler:1.ENERGY_COUNTER" doch nicht so ganz zurecht.

                                  Der Reiz ist nur, es handelt sich um den Zähler für den Stromzähler am Hausanschluss. Das wäre schon was.

                                  Derzeit wird er nicht als Objekt abgelegt.

                                  Könntest du da noch einmal Hand anlegen. Bitte Bitte

                                  Logauszug:

                                  ! javascript-0 2016-07-06 21:27:54.435 info script.js.Test.Langzeit_Strommessung: –------ Strommesser ---------
                                  ! TypeError: 2016-07-06 21:27:01.442 error at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2036:80)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2640:17)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48
                                  ! TypeError: 2016-07-06 21:27:01.442 error at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48)
                                  ! TypeError: 2016-07-06 21:27:01.442 error at Object. (script.js.Test.Langzeit_Strommessung:79:30)
                                  ! TypeError: 2016-07-06 21:27:01.442 error Cannot read property 'replace' of undefined
                                  ! message 2016-07-06 21:27:01.439 error hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                  ! javascript-0 2016-07-06 21:27:01.437 info script.js.Test.Langzeit_Strommessung: IDbyNameFunktion: hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER
                                  ! javascript-0 2016-07-06 21:27:01.436 info script.js.Test.Langzeit_Strommessung: Einheit: Wh
                                  ! javascript-0 2016-07-06 21:27:01.436 info script.js.Test.Langzeit_Strommessung: alter Wert: 453375
                                  ! javascript-0 2016-07-06 21:27:01.435 info script.js.Test.Langzeit_Strommessung: neuer Wert: 453391.599609
                                  ! javascript-0 2016-07-06 21:27:01.434 info script.js.Test.Langzeit_Strommessung: device name: Stromzähler
                                  ! javascript-0 2016-07-06 21:27:01.433 info script.js.Test.Langzeit_Strommessung: device ID: hm-rpc.0.MEQ0380660
                                  ! javascript-0 2016-07-06 21:27:01.432 info script.js.Test.Langzeit_Strommessung: channel Name: Stromzähler:1
                                  ! javascript-0 2016-07-06 21:27:01.431 info script.js.Test.Langzeit_Strommessung: channel ID: hm-rpc.0.MEQ0380660.1
                                  ! javascript-0 2016-07-06 21:27:01.430 info script.js.Test.Langzeit_Strommessung: Name: Stromzähler:1.ENERGY_COUNTER
                                  ! javascript-0 2016-07-06 21:27:01.424 info script.js.Test.Langzeit_Strommessung: id: hm-rpc.0.MEQ0380660.1.ENERGY_COUNTER
                                  ! javascript-0 2016-07-06 21:27:01.423 info script.js.Test.Langzeit_Strommessung: Beschreibung: undefined
                                  ! javascript-0 2016-07-06 21:27:01.422 info script.js.Test.Langzeit_Strommessung: Gewerk: undefined
                                  ! javascript-0 2016-07-06 21:27:01.421 info script.js.Test.Langzeit_Strommessung: RegExp-Funktion ausgelöst
                                  ! javascript-0 2016-07-06 21:27:01.420 info script.js.Test.Langzeit_Strommessung: –------ Strommesser ---------

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    pix last edited by

                                    Hallo,

                                    habe heute das Skript noch einmal durchgesehen.

                                    Zuerst ist mir aufgefallen, dass ein neues QUartal nicht korrekt erkannt wird. Das lag mal wieder an einer Vermischung von string und number.

                                    Bitte diese Zeilen verwenden:

                                    ! ````
                                    var old_month = parseInt(zeit(obj.oldState.ts).Monat,10);
                                    var new_month = parseInt(zeit(obj.state.ts).Monat, 10);
                                    // wenn obj.oldState.ts im März [3] und obj.newState.ts im April [4] oder
                                    // obj.oldState.ts im Juni [6] und obj.newState.ts im Juli [7] oder
                                    // obj.oldState.ts im Sept [9] und obj.newState.ts im Okt [10] oder
                                    // obj.oldState.ts im Dez [12] und obj.newState.ts im Jan [1], dann Quartal
                                    //log('Monat (alt): ' + old_month);
                                    //log('Monat (neu): ' + new_month);
                                    if ( (old_month === 3 && new_month === 4) || (old_month === 6 && new_month === 7) || (old_month === 9 && new_month === 10) || (old_month === 12 && new_month === 1) ) {
                                    setTimeout(function() {
                                    resetKostenVerbrauch(geraetename, 'Quartal');
                                    }, 4000);
                                    setTimeout(function() {
                                    schreibeZaehlerstand(geraetename, 'Quartal');
                                    }, 4500);
                                    }

                                    Die drei Gleichheitszeichen haben ein Wert gleichen Typs wie Zahl verlangt, es kam aber meist ein String. Ist jetzt korrigiert.
                                    
                                    Die anderen Probleme schaue ich mir auch noch an.
                                    
                                    Pix
                                    1 Reply Last reply Reply Quote 0
                                    • P
                                      pix last edited by

                                      @Jey Cee:

                                      Hallo pix,

                                      danke für dieses tolle skript.

                                      Leider hatte ich etwas Start Schwierigkeiten damit, mir wurden Ständig Fehlermeldungen ausgeworfen wegen der Leerzeichen Ersetzung, weil es keine gab.

                                      Und die Blacklist hat ebenfalls Probleme gemacht. Daher habe ich das ganze etwas angepasst.

                                      1. Es wird versucht die Leerzeichen zu ersetzen, wenn keine da sind wird einfach weiter gemacht. Außerdem werden sie jetzt durch Unterstriche ersetzt.

                                      2. Wenn die Blacklist leer ist (var blacklist= [];) wird sie einfach ignoriert.

                                      3. Neu dazu gekommen ist die Ersetzung von Punkten durch Unterstriche.

                                      Hier die geänderten Stellen im Quellcode:

                                       // Gerätenamen erstellen
                                          var geraetename = entferneDatenpunkt(obj.common.name);
                                          if (logging) log('Gerätename: ' + geraetename); 
                                      
                                      function entferneDatenpunkt(geraet) {
                                          var rueckgabe;
                                          
                                          if (geraet.indexOf("ENERGY_COUNTER") != -1) {
                                              rueckgabe = geraet.substring(0, geraet.indexOf("ENERGY_COUNTER"));
                                          } else 
                                          if (geraet.indexOf(".METER") != -1) {
                                              rueckgabe = geraet.substring(0, geraet.indexOf(".METER"));
                                          }
                                      
                                          // Rückgabe sollte keine Sonderzeichen oder Leerzeichen enthalten. Wenn doch, werden die entfernt oder ersetzt
                                          // todo
                                          if ((blacklist.length) !== 0) {
                                              rueckgabe = checkBlacklist(rueckgabe);
                                          }
                                          
                                          try {rueckgabe = rueckgabe.replace(/\./g, "_");}        // per Regexp punkte ersetzen
                                              catch(e) {}
                                          try {rueckgabe = rueckgabe.replace(/\s/g, "_");}        // per Regexp Leerzeichen ersetzen
                                                  catch(e) {}
                                          try {rueckgabe = rueckgabe.replace(/_$/g, "");}         // per Regexp _ am Ende entfernen
                                                catch(e) {}
                                              
                                          return rueckgabe;
                                      }
                                      

                                      Gruß Jey Cee `
                                      Ich habe diese Änderung als Ursache für den Fehler ausgemacht. In der alten Version wurden meine Datenpunkte korrekt angelegt und befüllt. Mit dieser Änderung habe ich Probleme. Bei JeyCee ist es andersherum. Vermutlich hängt das individuell mit den unter Homematic WebUI vergebenen Gerätenamen zusammen.

                                      Ich denke, man muss das eben ausprobieren.

                                      Ich kann hier leider mein Skript nicht groß ändern, da sonst meine Jahresstatistik wieder über den Haufen geworfen wird.

                                      Wie gesagt, wenn ich mal gelernt habe, wie man einzelne Datenpunkte in Adapter EInstellungen auswählbar macht, dann schreibe ich gern einen Adapter für dieses Skript. Es ist ja schließlich auch für Gas, Wasser und Anrufe, Klingel, … verwendbar.

                                      Gruß

                                      Pix

                                      1 Reply Last reply Reply Quote 0
                                      • F
                                        Fitti last edited by

                                        Hi pix,

                                        wie immer hast Du schon eine Lösung für mein Problem oder Wunsch 😄

                                        Ich habe es mal eingesetzt und habe ebenfalls den Fehler mit dem .replace. Wo wird der denn überhaupt definiert? Also ich meine die Zeile:

                                         geraetename = geraetename.replace(/\s/g, ""); // per Regexp Leerzeichen entfernen
                                        

                                        Ich hatte wie weiter oben die Zeile````
                                        //rueckgabe = checkBlacklist(rueckgabe);

                                        auskommentiert, da ich auch keine Blacklist im Moment verwende.
                                        
                                        Was kann ich hier tun?
                                        
                                        Danke im Voraus,
                                        
                                        Fitti
                                        
                                        "Mein Logauszug"
                                        
                                        >! ````
                                         javascript.0	2016-07-08 20:33:00.411	error	TypeError: Cannot read property 'val' of null at Object. (script.js.Stromverbrauch:91:68) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:
                                        javascript.0	2016-07-08 20:33:00.410	error	message hm-rpc.0.LEQ0272133.2.ENERGY_COUNTER [object Object] Cannot read property 'val' of null
                                        javascript.0	2016-07-08 20:33:00.410	warn	javascript.0 State "javascript.1.Strom.GartenSchuppenvorneHeizlüfterFrostschutz.Zaehlerstand.Backup" not found
                                        javascript.0	2016-07-08 20:33:00.410	info	javascript.0 script.js.Stromverbrauch: States in der Instanz javascript.1.Strom. erstellt
                                        javascript.0	2016-07-08 20:33:00.410	info	javascript.0 script.js.Stromverbrauch: Gerätename: GartenSchuppenvorneHeizlüfterFrostschutz
                                        javascript.0	2016-07-08 20:33:00.409	info	javascript.0 script.js.Stromverbrauch: IDbyNameFunktion: hm-rpc.0.LEQ0272133.2.ENERGY_COUNTER
                                        javascript.0	2016-07-08 20:33:00.409	info	javascript.0 script.js.Stromverbrauch: Einheit: Wh
                                        javascript.0	2016-07-08 20:33:00.409	info	javascript.0 script.js.Stromverbrauch: alter Wert: 0
                                        javascript.0	2016-07-08 20:33:00.409	info	javascript.0 script.js.Stromverbrauch: neuer Wert: 0
                                        javascript.0	2016-07-08 20:33:00.408	info	javascript.0 script.js.Stromverbrauch: device name: Garten Schuppen vorne Heizlüfter Frostschutz
                                        javascript.0	2016-07-08 20:33:00.408	info	javascript.0 script.js.Stromverbrauch: device ID: hm-rpc.0.LEQ0272133
                                        javascript.0	2016-07-08 20:33:00.408	info	javascript.0 script.js.Stromverbrauch: channel Name: Garten Schuppen vorne Heizlüfter Frostschutz:2
                                        javascript.0	2016-07-08 20:33:00.408	info	javascript.0 script.js.Stromverbrauch: channel ID: hm-rpc.0.LEQ0272133.2
                                        javascript.0	2016-07-08 20:33:00.408	info	javascript.0 script.js.Stromverbrauch: Name: Garten Schuppen vorne Heizlüfter Frostschutz:2.ENERGY_COUNTER
                                        javascript.0	2016-07-08 20:33:00.407	info	javascript.0 script.js.Stromverbrauch: id: hm-rpc.0.LEQ0272133.2.ENERGY_COUNTER
                                        javascript.0	2016-07-08 20:33:00.407	info	javascript.0 script.js.Stromverbrauch: Beschreibung: undefined
                                        javascript.0	2016-07-08 20:33:00.407	info	javascript.0 script.js.Stromverbrauch: Gewerk: undefined
                                        javascript.0	2016-07-08 20:33:00.406	info	javascript.0 script.js.Stromverbrauch: RegExp-Funktion ausgelöst
                                        javascript.0	2016-07-08 20:33:00.405	info	javascript.0 script.js.Stromverbrauch: -------- Strommesser ---------
                                        TypeError:	2016-07-08 20:32:25.076	error	at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)
                                        TypeError:	2016-07-08 20:32:25.076	error	at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2036:80)
                                        TypeError:	2016-07-08 20:32:25.076	error	at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17)
                                        TypeError:	2016-07-08 20:32:25.076	error	at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17)
                                        TypeError:	2016-07-08 20:32:25.076	error	at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28)
                                        TypeError:	2016-07-08 20:32:25.076	error	at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28)
                                        TypeError:	2016-07-08 20:32:25.076	error	at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2640:17)
                                        TypeError:	2016-07-08 20:32:25.076	error	at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48
                                        TypeError:	2016-07-08 20:32:25.076	error	at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48)
                                        TypeError:	2016-07-08 20:32:25.076	error	at Object. (script.js.Stromverbrauch:76:30)
                                        TypeError:	2016-07-08 20:32:25.076	error	Cannot read property 'replace' of undefined
                                        message	2016-07-08 20:32:25.070	error	hm-rpc.0.MEQ0705025.1.ENERGY_COUNTER [object Object] Cannot read property 'replace' of undefined
                                        javascript-0	2016-07-08 20:32:25.064	info	script.js.Stromverbrauch: IDbyNameFunktion: hm-rpc.0.MEQ0705025.1.ENERGY_COUNTER
                                        javascript-0	2016-07-08 20:32:25.063	info	script.js.Stromverbrauch: Einheit: Wh
                                        javascript-0	2016-07-08 20:32:25.063	info	script.js.Stromverbrauch: alter Wert: 185209.399902
                                        javascript-0	2016-07-08 20:32:25.062	info	script.js.Stromverbrauch: neuer Wert: 185303.099854
                                        javascript-0	2016-07-08 20:32:25.061	info	script.js.Stromverbrauch: device name: Stromzähler
                                        javascript-0	2016-07-08 20:32:25.061	info	script.js.Stromverbrauch: device ID: hm-rpc.0.MEQ0705025
                                        javascript-0	2016-07-08 20:32:25.060	info	script.js.Stromverbrauch: channel Name: Stromzähler:1
                                        javascript-0	2016-07-08 20:32:25.059	info	script.js.Stromverbrauch: channel ID: hm-rpc.0.MEQ0705025.1
                                        javascript-0	2016-07-08 20:32:25.058	info	script.js.Stromverbrauch: Name: Stromzähler:1.ENERGY_COUNTER
                                        javascript-0	2016-07-08 20:32:25.058	info	script.js.Stromverbrauch: id: hm-rpc.0.MEQ0705025.1.ENERGY_COUNTER
                                        javascript-0	2016-07-08 20:32:25.057	info	script.js.Stromverbrauch: Beschreibung: undefined
                                        javascript-0	2016-07-08 20:32:25.056	info	script.js.Stromverbrauch: Gewerk: undefined
                                        javascript-0	2016-07-08 20:32:25.055	info	script.js.Stromverbrauch: RegExp-Funktion ausgelöst
                                        javascript-0	2016-07-08 20:32:25.053	info	script.js.Stromverbrauch: -------- Strommesser ---------
                                        javascript-0	2016-07-08 20:32:20.466	info	script.js.Stromverbrauch: registered 1 subscription and 0 schedules
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • F
                                          Fitti last edited by

                                          Bin etwas weiter. Die Umlaute scheinen einige Fehler hervorzurufen.

                                          Habe alle Aktoren umbenannt. Sowohl in CCU als auch in ioBroker.

                                          Leider keine Ahnung, wie man das automatische Umbenennen in ioBroker automatisieren könnte. Ein Haken bei "Neu Einlesen" im hm-rpc.0 und ein 12h Warten brachte nichts.

                                          Umlaute im Skript ersetzen (so wie die Kommentare sind) ging auch nicht, da ja der Name des Objektes nicht verändert werden darf. Sonst findet er den ja nicht mehr.

                                          Jetzt geht es fast bei allen, ein Aktor macht noch Schwierigkeiten.

                                          ! ````
                                          08:28:15.600 [info] javascript.1 script.js.Stromverbrauch: -------- Strommesser ---------
                                          08:28:15.609 [info] javascript.1 script.js.Stromverbrauch: RegExp-Funktion ausgelöst
                                          08:28:15.610 [info] javascript.1 script.js.Stromverbrauch: Gewerk: undefined
                                          08:28:15.611 [info] javascript.1 script.js.Stromverbrauch: Beschreibung: undefined
                                          08:28:15.611 [info] javascript.1 script.js.Stromverbrauch: id: hm-rpc.0.LEQ0539263.2.ENERGY_COUNTER
                                          08:28:15.612 [info] javascript.1 script.js.Stromverbrauch: Name: Buegeleisen.ENERGY_COUNTER
                                          08:28:15.613 [info] javascript.1 script.js.Stromverbrauch: channel ID: hm-rpc.0.LEQ0539263.2
                                          08:28:15.614 [info] javascript.1 script.js.Stromverbrauch: channel Name: LEQ0539263:2
                                          08:28:15.614 [info] javascript.1 script.js.Stromverbrauch: device ID: hm-rpc.0.LEQ0539263
                                          08:28:15.615 [info] javascript.1 script.js.Stromverbrauch: device name: LEQ0539263
                                          08:28:15.616 [info] javascript.1 script.js.Stromverbrauch: neuer Wert: 23421.399994
                                          08:28:15.617 [info] javascript.1 script.js.Stromverbrauch: alter Wert: 23421.399994
                                          08:28:15.618 [info] javascript.1 script.js.Stromverbrauch: Einheit: Wh
                                          08:28:15.619 [error] TypeError: Cannot read property '0' of undefined at Object. (script.js.Stromverbrauch:72:21) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48 at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2640:17) at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28) at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2659:28) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17) at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2036:80) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)

                                          Die angesprochen Zeile 72:21 ist schlicht der ID Name:
                                          

                                          log('IDbyNameFunktion: ' + idbyname[0]); // hm-rpc.0.MEQ0170864.2.ENERGY_COUNTER

                                          Ist doch ein Array, oder? Hat er damit vielleicht probleme?
                                          
                                          Aber: Werte schreibt er immer noch nicht in die Variablen. Ist alles leider mit 0 angelegt worden. :?
                                          1 Reply Last reply Reply Quote 0
                                          • Jey Cee
                                            Jey Cee Developer last edited by

                                            Hi Fitti,

                                            die namen werden vom hm-rega Adapter gelesen. Wenn du den einmal neu startest holt er die neuen Namen aus der CCU2.

                                            Zur Ersetzung von Zeichen und Umlauten: Soweit ich mich noch erinnern kann hab ich die Funktion eingebaut/angepasst weil es bei der Erstellung der Objekte sonst zu Problemen kam. Das hat aber keine Auswirkung darauf ob der Leistungsmesser gefunden wird.

                                            "idbyname" ist ein array, das ist richtig.

                                            Gesendet von meinem Jolla mit Tapatalk

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            731
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            42
                                            148
                                            46233
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo