NEWS
Bezug/Einspeisung Vorzeichenwechsel
-
Hallo zusammen,
kann mir bitte jemand helfen.
Ich greife am Smartmeter per Modbus Bezug/Einspeisung in Watt ab. Bei minus Vorzeichen wird eingespeist, bei plus Vorzeichen bezogen.Jetzt würde ich gerne nur die negativen Werte erfassen, sprich wenn der Datenpunkt einen negativen Wert liefert, dass Vorzeichen auf + zu wechseln und wenn positiver Wert > 0 soll einfach 0 Watt angezeigt werden.
Es handelt sich um diesen Wert:
const inputRegisters = { powerOut: 'modbus.0.holdingRegisters.200.40087_W'/*Total Real Power*/, }Wie mache ich das am geschicktesten?
Danke!
VG
-
Hallo zusammen,
kann mir bitte jemand helfen.
Ich greife am Smartmeter per Modbus Bezug/Einspeisung in Watt ab. Bei minus Vorzeichen wird eingespeist, bei plus Vorzeichen bezogen.Jetzt würde ich gerne nur die negativen Werte erfassen, sprich wenn der Datenpunkt einen negativen Wert liefert, dass Vorzeichen auf + zu wechseln und wenn positiver Wert > 0 soll einfach 0 Watt angezeigt werden.
Es handelt sich um diesen Wert:
const inputRegisters = { powerOut: 'modbus.0.holdingRegisters.200.40087_W'/*Total Real Power*/, }Wie mache ich das am geschicktesten?
Danke!
VG
-
@diamand2k22 sagte: Wie mache ich das am geschicktesten?
Mit einem Alias-Datenpunkt mit Lesekonvertierung:
val < 0 ? -val : 0danke Paul, geht das auch ohne Alias direkt im Skript in der Zeile?
powerOut: 'modbus.0.holdingRegisters.200.40087_W'/*Total Real Power*/,Gruß
-
danke Paul, geht das auch ohne Alias direkt im Skript in der Zeile?
powerOut: 'modbus.0.holdingRegisters.200.40087_W'/*Total Real Power*/,Gruß
@diamand2k22 sagte: geht das auch ohne Alias direkt im Skript
on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState('0_userdata.0.zaehler.einspeisung', dp.state.val < 0 ? -dp.state.val : 0, true); });Mit Alias spart man sich die Umsetzung per Skript.
-
@diamand2k22 sagte: geht das auch ohne Alias direkt im Skript
on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState('0_userdata.0.zaehler.einspeisung', dp.state.val < 0 ? -dp.state.val : 0, true); });Mit Alias spart man sich die Umsetzung per Skript.
Hallo Paul,
hab das mal so eingebaut, jetzt bekomme ich bei jedem Wert Wechsel eine Warnung.var powerOut; powerOut = 0; on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState(powerOut, dp.state.val < 0 ? -dp.state.val : 0);javascript.0 2024-02-04 19:27:13.269 warn State "0" not found javascript.0 2024-02-04 19:27:13.271 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1819:20) javascript.0 2024-02-04 19:27:13.271 warn at Object.<anonymous> (script.js.common.Tibber_Test_2.Batterie_Regelung_0_1:35:5) javascript.0 2024-02-04 19:27:13.272 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1269:38) javascript.0 2024-02-04 19:27:13.272 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:641:29) javascript.0 2024-02-04 19:27:13.272 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11200:62) javascript.0 2024-02-04 19:27:13.272 warn at processImmediate (node:internal/timers:476:21) -
Hallo Paul,
hab das mal so eingebaut, jetzt bekomme ich bei jedem Wert Wechsel eine Warnung.var powerOut; powerOut = 0; on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState(powerOut, dp.state.val < 0 ? -dp.state.val : 0);javascript.0 2024-02-04 19:27:13.269 warn State "0" not found javascript.0 2024-02-04 19:27:13.271 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1819:20) javascript.0 2024-02-04 19:27:13.271 warn at Object.<anonymous> (script.js.common.Tibber_Test_2.Batterie_Regelung_0_1:35:5) javascript.0 2024-02-04 19:27:13.272 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1269:38) javascript.0 2024-02-04 19:27:13.272 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:641:29) javascript.0 2024-02-04 19:27:13.272 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11200:62) javascript.0 2024-02-04 19:27:13.272 warn at processImmediate (node:internal/timers:476:21)@diamand2k22 sagte in Bezug/Einspeisung Vorzeichenwechsel:
setState(powerOut, dp.state.val < 0 ? -dp.state.val : 0);
und powerOut ist bei dir 0
@paul53 sagte in Bezug/Einspeisung Vorzeichenwechsel:
setState('0_userdata.0.zaehler.einspeisung',
-
Hallo Paul,
hab das mal so eingebaut, jetzt bekomme ich bei jedem Wert Wechsel eine Warnung.var powerOut; powerOut = 0; on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState(powerOut, dp.state.val < 0 ? -dp.state.val : 0);javascript.0 2024-02-04 19:27:13.269 warn State "0" not found javascript.0 2024-02-04 19:27:13.271 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1819:20) javascript.0 2024-02-04 19:27:13.271 warn at Object.<anonymous> (script.js.common.Tibber_Test_2.Batterie_Regelung_0_1:35:5) javascript.0 2024-02-04 19:27:13.272 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1269:38) javascript.0 2024-02-04 19:27:13.272 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:641:29) javascript.0 2024-02-04 19:27:13.272 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11200:62) javascript.0 2024-02-04 19:27:13.272 warn at processImmediate (node:internal/timers:476:21)@diamand2k22
powerOutmuss die ID eines existierenden Ziel-Datenpunktes enthalten. Beispiel:const powerOut = '0_userdata.0.zaehler.einspeisung'; // Typ: Zahl, Einheit: W on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState(powerOut, dp.state.val < 0 ? -dp.state.val : 0, true); }); -
@diamand2k22
powerOutmuss die ID eines existierenden Ziel-Datenpunktes enthalten. Beispiel:const powerOut = '0_userdata.0.zaehler.einspeisung'; // Typ: Zahl, Einheit: W on('modbus.0.holdingRegisters.200.40087_W', function(dp) { setState(powerOut, dp.state.val < 0 ? -dp.state.val : 0, true); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden