NEWS
Werte positiv in negativ und negativ in positiv ändern
-
Hallo,
bin neu in diesem Gebiet und möchte die Werte die vom Solaredge Modbus für den Strom Bezug ändern damit der Soyoscource das auch passend verarbeiten kann.
Jetzt speist er Strom ein wenn der Wert vom Modbus positiv ist, und bei negativen nichts.Komme nicht mehr weiter.
-
@carsten-4
Einfache Mathematik Wert * -1 kehrt immer das Vorzeichen um. -
@tt-tom und wie binde ich das in node red ein?
wie gesagt bin neu dabei -
@carsten-4
habe es jetzt mit Blockly probiert
-
@carsten-4 bei Node red musst du mal @mickym fragen. Kenn ich nicht. Ansonsten gibt es die Möglichkeit ein Alias anzulegen und dort den Wert konvertieren „val * -1“ oder per Script/Blockly.
-
@carsten-4 sagte in Werte positiv in negativ und negativ in positiv ändern:
@carsten-4
habe es jetzt mit Blockly probiert
Sollte funktionieren
-
@tt-tom danke
vielleicht reicht ja mein Blockly
-
@tt-tom Du multiplizierst einfach die payload mit -1.
Also einfach einen ChangeNode benutzen und dazwischen klemmen.
-
@mickym Danke hat geklappt
-
Gelöscht
-
@tt-tom sagte: Wert * -1 kehrt immer das Vorzeichen um.
Eine Subtraktion ist für eine CPU einfacher als eine Multiplikation:
0 - Wert
-
@carsten-4
Hallo Carsten,
das ist bei mir jetzt schon eine Weile her, aber war das nicht so, dass du bei dem SolarEdge die dynamische Skalierung bei der Berechnung berücksichtigen musstest?
Ich habe hier aus dem Forum vor langer Zeit mal ein JavaScript kopiert und für mich angepasst, mit dem das gemacht wird. Das Script sieht bei mir so aus:function convertValue(value, factor) { if (value === null) return; if (factor === null) factor = 0; setState('0_userdata.0.Solar.Wechselrichter.PVLeistungAktuell', value * Math.pow(10, factor), true); } createState('0_userdata.0.Solar.Wechselrichter.PVLeistungAktuell', { name: 'PVLeistungAktuell', unit: 'W', min: 0, type: 'number', role: 'value.energy' }, function () { on('modbus.0.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/, function(obj) { var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/); convertValue(obj.state.val, factorState ? factorState.val : 0); }, 100); }); var factorState = getState('modbus.0.holdingRegisters.40084_I_AC_Leistung_SF'/*AC-Leistung Skalierungsfaktor*/); var valueState = getState('modbus.0.holdingRegisters.40083_I_AC_Leistung'/*AC-Leistungswert*/); convertValue(valueState ? valueState.val : null, factorState ? factorState.val : 0); });
Kann es sein, dass du eigentlich das berücksichtigen musst?
Schau mal in deine Modbus-Register, die du bekommst, ob du da auch den Skalierungsfaktor hast. -
@pd_mueller
Ich habe die ganzen scripte aus dem
[Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana
Hier aus dem Forum.