4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Linedancer10
Beiträge: 74
Registriert: 03.05.2016, 13:34
Danksagung erhalten: 2 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von Linedancer10 » 03.07.2018, 19:49

Hallo Gemeinde,

den Link im iobroker Forum find ich grade nicht, aber hier ist das Script um Weatherman oder Pulsecounter mit iobroker zu lesen.

Pfadname und IP Adresse anpassen und fertisch:

Code: Alles auswählen

var request = require("request");

var pfad    = "PUSLCOUNTER" + ".";
var url     = 'http://192.168.178.30/?json:';



// TODO:
//


function timeLastData() {
    return formatDate(new Date(), "DD.MM, hh:mm:ss");
}

function parseJson(text) {
    if (text === "") return {};
    try {
        json = JSON.parse(text);
    } catch (ex) {
        json = {};
    }
    if(!json) json = {};
    return json;
}

function readJson(url, callback) {
    request(url, function (err, state, body){
        if (body) {
            var json = parseJson(body);
            callback(null, json);
        } else {
            var error = "(" + err + ") ERROR bei Abfrage von: " + url;
            log(error, "warn");  
            callback(error, null);
        }
    });
}



function readVars() {
    readJson(url, function(err,json) {
        if(!err) {
            var myJson = json;
            var dPname, init;
            var anzahlVars = myJson.vars.length;
            for (var i = 1; i < anzahlVars; i++) {
                dPname = pfad + myJson.vars[i].homematic_name;
                init = myJson.vars[i].value;
                setState(dPname, init);
            }
            for (var systeminfo in myJson.Systeminfo) {
                dPname = pfad + "Systeminfo." + systeminfo;
                init = myJson.Systeminfo[systeminfo];
                setState(dPname, init);
            }
            setState(pfad + "LetzteAbfrage",timeLastData());
            var statusNe = getState(pfad + "Last_State_Count").val;
            if (statusNe < 0) {
                setState(pfad + "Last_State_Count",0);
            } else {
                setState(pfad + "Last_State_Count",statusNe + 1);
            }
            log("WIFFI Daten aktualisiert: " + url,"debug");
        } else {
            log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","warn");
            if (statusNe > 0) {
                setState(pfad + "Last_State_Count",0);
            } else {
                setState(pfad + "Last_State_Count",statusNe - 1);
            }
        }
    });
}


function createDpFromJson(myJson) {
    var dpname = "";
    var name = "";
    var forceCreation = true;
    var common;
    var init;
    var type, desc, unit;
    var anzahlVars = myJson.vars.length;
    for (var i = 1; i < anzahlVars; i++) {
        dPname = pfad + myJson.vars[i].homematic_name;
        init = myJson.vars[i].value;
        type = myJson.vars[i].type;
        desc = myJson.vars[i].desc;
        name = desc;
        unit = myJson.vars[i].unit.replace('grad','°');
        common = '{"desc":"' + desc + '","type":"' + type + '","unit":"' + unit + '","role":"value"' +',"name":"' + name + '"}'; 
        common = JSON.parse(common);
        createState(dPname, init , forceCreation, common);
        //createState(dPname, init);
        log("neuer Datenpunkt: " + dPname + ": " + init +", common: " + common,"info");
    }
    for (var systeminfo in myJson.Systeminfo) {
        dPname = pfad + "Systeminfo." + systeminfo;
        init = myJson.Systeminfo[systeminfo];
        common = '{"name":"'+systeminfo+'","desc":"'+systeminfo+'","role":"value"}';
        common = JSON.parse(common);
        log("neuer Datenpunkt: " + dPname + ": " + init +", common: " + common,"info");
        createState(dPname, init , forceCreation, common);
    }
    createState(pfad + "System.Modultyp",myJson.modultyp);
    createState(pfad + "System.url",url.replace("json:","xpert:0:"));
    createState(pfad + "Last_State_Count",0,true);
    createState(pfad + "LetzteAbfrage"  ,timeLastData());
    createState(pfad + "Skriptstart"    ,timeLastData()),true;
    createState(pfad + "Control_GetData",false,true,        {"name":"Daten mit true manuell abrufen","type":"boolean","role":"value"});
}



function createDp() {
    readJson(url, function (err,json) {
        if(!err) {
            var myJson = json;
            createDpFromJson(myJson);
            log("PULSCOUNTER Datenpunkte angelegt/aktualisiert");
        } else {
            log("Fehler beim Auslesen des JSON. Keine Daten erhalten.","error");
            log("Keine Datenpunkte angelegt. Skript beendet","error");
            return;
        }
    });
}

function createOn() {
    var dpId = "javascript." + instance + "." + pfad + "Control_GetData"; 
    on({id: dpId ,change:'any'}, function (obj) {
        log(obj.state.val,"warn");
        if(obj.state.val) {
            readVars();
        }
    });

    schedule("*/30 * * * * *", function () { // jede Minute die Werte abfragen
        readVars();
    });

}


function main() {
    readVars();
}


// Skriptstart

createDp();
setTimeout(createOn,    3000);
setTimeout(main,        3000);
--
Ciao
Gerhard

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von darkbrain85 » 03.07.2018, 20:28

Linedancer10 hat geschrieben:Hallo Gemeinde,

den Link im iobroker Forum find ich grade nicht, aber hier ist das Script um Weatherman oder Pulsecounter mit iobroker zu lesen.
Das habe ich tatsächlich auch nicht gefunden! Danke! Tatsächlich habe ich nur die IP geändert und schon läuft es!

Dir mal gerade ein FETTES Dankeschön für den Hinweis! Ich war schon gerade dabei mit meinen rudimentären JS Kenntnissen was zu basteln. Das wäre aber nicht annähernd so gut geworden! ;-)

Edit:
Hat jemand noch einen Hinweis für mich, wie ich das Script öfter ausführen lassen kann? Cron kann ja nur maximal jede Minute, oder?

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von Homoran » 03.07.2018, 21:03

darkbrain85 hat geschrieben:Cron kann ja nur maximal jede Minute, oder?
Oder!
6 Stellen nutzen, dann ist der erste Wert die Sekunde, aber:
funkleuchtturm hat geschrieben:ich würde minütlich oder besser 2-minütlich abfragen.
Gruß Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

hobbycamper
Beiträge: 153
Registriert: 03.01.2018, 21:49
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von hobbycamper » 04.07.2018, 17:09

Hallo,

vorab, ich weiß, es gehört zwar ins iobroker-Forum, vielleicht hat ja trotzdem jemand ne Ahnung warum es bei mir scheitert, da das Skript ja bei einigen funktioniert.


Wenn ich o.g. Skript starte (IP-Adresse ist angepasst), im Browser kommen auch Werte rein, dann kommen folgende Fehlermeldungen im Log:

Code: Alles auswählen

javascript.0	2018-07-04 16:59:00.188	info	starting. Version 3.6.4 in /opt/iobroker/node_modules/iobroker.javascript, node: v6.14.1
javascript.0	2018-07-04 16:59:00.111	info	States connected to redis: 127.0.0.1:6379
host.ioBroker-Pi	2018-07-04 16:58:55.760	info	instance system.adapter.javascript.0 started with pid 19659
host.ioBroker-Pi	2018-07-04 16:58:25.664	info	Restart adapter system.adapter.javascript.0 because enabled
host.ioBroker-Pi	2018-07-04 16:58:25.663	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
Caught	2018-07-04 16:58:25.663	error	by controller[0]: at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/request/request.js:1085:12)
Caught	2018-07-04 16:58:25.663	error	by controller[0]: at Request.emit (events.js:188:7)
Caught	2018-07-04 16:58:25.663	error	by controller[0]: at emitOne (events.js:96:13)
Caught	2018-07-04 16:58:25.662	error	by controller[0]: at Request.<anonymous> (/opt/iobroker/node_modules/request/request.js:1163:10)
Caught	2018-07-04 16:58:25.662	error	by controller[0]: at Request.emit (events.js:191:7)
Caught	2018-07-04 16:58:25.662	error	by controller[0]: at emitTwo (events.js:106:13)
Caught	2018-07-04 16:58:25.662	error	by controller[0]: at Request.self.callback (/opt/iobroker/node_modules/request/request.js:186:22)
Caught	2018-07-04 16:58:25.662	error	by controller[0]: at Request._callback (script.js.common.Pulscounter:32:13)
Caught	2018-07-04 16:58:25.660	error	by controller[0]: at script.js.common.Pulscounter:122:13
Caught	2018-07-04 16:58:25.658	error	by controller[0]: at createDpFromJson (script.js.common.Pulscounter:86:33)
Caught	2018-07-04 16:58:25.650	error	by controller[0]: TypeError: Cannot read property 'length' of undefined
javascript.0	2018-07-04 16:58:25.591	info	terminating
Scheinbar schmiert da der scriptcontroller komplett ab und wird neugestartet.
Den Parameter 12 des pulscounter habe ich mit 0 (CCU-Betrieb) oder auch 2 (JSON mit html-Header) getestet. Das gleiche Ergebnis.
Laut dem orig. Beitrag https://forum.iobroker.net/viewtopic.ph ... ilit=wiffi kann der auf 0 bleiben.
Irgendjemand eine Idee?

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von darkbrain85 » 04.07.2018, 21:16

Homoran hat geschrieben:
darkbrain85 hat geschrieben:Cron kann ja nur maximal jede Minute, oder?
Oder!
6 Stellen nutzen, dann ist der erste Wert die Sekunde, aber:
Verrückt! Das scheint ja dann innerhalb von JS doch zu funktionieren! Läuft!
funkleuchtturm hat geschrieben:ich würde minütlich oder besser 2-minütlich abfragen.
Diese Empfehlung hatte ich gelesen, aber ich verlange Eugens Hardware immer alles ab was geht! ;-)
Ich hatte vorher auch alle 10 Sekunden in die CCU schreiben lassen. Das lief ohne Probleme.

Nach ersten Tests läuft das auch mit der JSON Abfrage über ioBroker problemlos.

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von darkbrain85 » 04.07.2018, 21:18

hobbycamper hat geschrieben:
Wenn ich o.g. Skript starte (IP-Adresse ist angepasst), im Browser kommen auch Werte rein, dann kommen folgende Fehlermeldungen im Log:

Scheinbar schmiert da der scriptcontroller komplett ab und wird neugestartet.
Den Parameter 12 des pulscounter habe ich mit 0 (CCU-Betrieb) oder auch 2 (JSON mit html-Header) getestet. Das gleiche Ergebnis.
Laut dem orig. Beitrag https://forum.iobroker.net/viewtopic.ph ... ilit=wiffi kann der auf 0 bleiben.
Irgendjemand eine Idee?
Hi!

Hast du das Skript vorher vielleicht in einem nicht geeigneten Editor bearbeitet? Der Windows Editor ist nicht geeignet!
Ist jetzt aber nur ganz grob geraten...

hobbycamper
Beiträge: 153
Registriert: 03.01.2018, 21:49
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von hobbycamper » 04.07.2018, 21:22

Nein, notepad++, wie alle anderen homematic und iobroker Skripte...

Benutzeravatar
Hubobel
Beiträge: 123
Registriert: 10.05.2016, 11:49
Wohnort: Exilplauner in Oggersheim

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von Hubobel » 11.07.2018, 09:21

Hallo und guten Morgen,

ich bin am überlegen, mir auch einen PULSECOUNTER zu bestellen. Eine prinzipielle Frage stellt sich mir jedoch: Mein gesamtes Netzwerk arbeitet im IP-Bereich 10.0.1.1/24. Lässt sich der PULSECOUNTER dort auch problemlos in Betrieb nehmen? Ich würde nur sehr ungern (auch nicht nur zeitweise für die Erstinbetriebnahme) meinen IP-Bereich ändern müssen.

Vielen Dank und Grüße sendet
Carsten
Gruß, Carsten
--------------------------------------------
RaspberryMatic 2.29.22.20171007 @ RPi3
--------------------------------------------
102 Kanäle in 39 Geräten und 4 CUxD-Geräten
Programme: 59 - Skripte: 67 - Variabelnamen: 30
--------------------------------------------

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von darkbrain85 » 11.07.2018, 11:57

Hubobel hat geschrieben:
11.07.2018, 09:21
ich bin am überlegen, mir auch einen PULSECOUNTER zu bestellen. Eine prinzipielle Frage stellt sich mir jedoch: Mein gesamtes Netzwerk arbeitet im IP-Bereich 10.0.1.1/24. Lässt sich der PULSECOUNTER dort auch problemlos in Betrieb nehmen? Ich würde nur sehr ungern (auch nicht nur zeitweise für die Erstinbetriebnahme) meinen IP-Bereich ändern müssen.
Ja natürlich geht das. Euegens Hardware holt sich nach Konfiguration grundsätzlich eine IP vom DHCP Server im LAN. Eine feste IP lässt sich da auch nicht konfigurieren (leider). Eugen hat da eine andere Sichtweise :-D

Nur die Erstkonfiguration im Hotspot Modus muss mit einer bestimmte IP passieren. Genaueres steht in der Anleitung!

Bandit2001
Beiträge: 11
Registriert: 24.12.2014, 15:32

Re: 4fach PULSECOUNTER für Strom, Gas, Wasser und Solar

Beitrag von Bandit2001 » 25.07.2018, 19:21

Hallo,

irgendwie habe ich zur Zeit mit dem PulseCounter komische Effekte, die ich mir nicht erklären kann.
Ich habe irgendwie das Gefühl es hängt mit dem "wiffi_counter_10"-Update zusammen, vorher war alles Ok.

Doch der Reihe nach.

Die Anzeige meines Zählers zählt irgendwie nicht, obwohl der verbaute "Impulszähler 2.0" sowie der zugehörige Eingang bei Impuls blinken.
Und wie ist die Datumsanzeig zu verstehen? Heute wäre doch der 25. ...
Bild

Schaue ich mir die Tages- / Monatswerte an, passen die Zeitstempel teilweise nicht.

Bild Bild

Irgendwas läuft hier total schief...

mfg
Ralph
piVCCU3 mit FW 3.47.22 und ioBroker auf RasPi4 4GB mit HM-MOD-RPI-PCB

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“