@pix:
Hallo Marco,
@Marcolotti:
Zahlen sind Werte ` das war mir eh klar! :lol:
Da ich den Adapter mit den entsprechenden Werten nicht habe, konnte ich das Skript nicht testen. Ich bin einfach davon ausgegangen, dass alle Werte reine Zahlen sind und ich keine Strings umwandeln musste.
/* PV Eigenverbrauch
Skript errechnet den Eigenverbrauch aus den Daten des modbus Adapters
erstellt: 09.11.2015 von Pix
*/
// Objekt erstellen
createState('PV_Anlage.Eigenverbrauch',0, {
name: 'PV-Anlage: Eigenverbrauch',
desc: 'Eigenverbrauch = PV-Leistung - Einspeisung',
read: true,
write: true,
type: 'number',
unit: 'kWh'
});
var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung',
idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung',
idEigenverbrauch = 'PV_Anlage.Eigenverbrauch';
// Berechnung mit aktuellen Daten, wenn Leistung >0
on({
id: idPVLeistung,
change: 'ne',
valGt: 0
}, function (data) {
var einspeisung = getState(idEinspeisung).val,
eigenverbrauch; // zu errechnen
eigenverbrauch = data.newState.val - einspeisung;
log('PV-Anlage - Eigenverbrauch: ' + eigenverbrauch + 'kWh');
setState(idEigenverbrauch, eigenverbrauch);
});
Ein neues Objekt wird erstellt und konfiguriert (Einheit kWh - ist das richtig?),
die komplizierten Objektnamen mit der Adapterinstanz vorneweg werden in "leichtere" Variablen id*** gespeichert,
der Datenpunkt PV_Leistung wird überwacht (wenn Änderung und neuer Wert > 0, dann Berechnung mit aktuellen Zahlen ausführen und in State schreiben).
Drittletzte Zeile (log****) kannst du später auskommentieren oder löschen, sonst müllt sie dir bei jeder Änderung der PV-Leistung das log zu.
Die Einheit kWh ist nicht als Text im Objekt gespeichert. Du kannst also trotzdem weiter mit dem Wert rechnen.
Gib mir bescheid, ob es läuft.
Gruß
Pix `
Hi,
ich würde auch gerne meinen Eigenverbrauch berechnen. Habe aber das Problem das ich keinen Datenpunkt````
modbus.0.inputRegisters.30867_Einspeisung
Ob ich Energie Einspeise oder Beziehe kann ich nur am "Vorzeichen" meiner Wirkleistung erkennen.
Bei Bezug ist der Wert "positiv" und bei Einspeisung "negativ" (- als Vorzeichen).
Wenn ich das Script jetzt so übernehme und nur den Punkt:
var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung',
gegen meinen Datenpunkt Wirkleistung ersetze:
modbus.3.holdingRegisters.20498_Wirkenergie_Total
Bleibt der neu angelegte Datenpunkt "Eigenverbrauch" auf "0" stehen obwohl ich ja aktuell Bezug/Verbrauch habe.
Kann mir bitte jemand helfen das Script entsprechend zu ändern?
Ich kann leider kein Javascript und habe aktuell keinen Schimmer warum bei Eigenverbrauch nichts angezeigt wird.
Vielen Dank
Mirko