Register 119 DEYE SUN12K Niedervolt

Moin

beim Auslesen des Registerbereich 601-619 kommt es bei der Spule
619 regelmäßig zu Werte über 65xxx W.
619 ist P_GRID_CT_TOTAL

Die anderen Werte passen und es tuacht 65xxx nicht auf

Ist etwas nervig und macht die Steuerung mit dem Wert kaputt :frowning:
Jemand ne Idee ?

IObroker - deyeidc Adapter
sieht dann in daten Daten so aus :frowning:

Iobrocker 7.8.23
deyeidc 0.3.1
WR FW: HMI - 1001-C04F // Netz : 2005-1170-1807

gabylein

Register 619 ist nur das Low-Word. Du musst noch das Register 708 (High-Word) mit auswerten.

Oh .. das habe ich noch nicht gehört ..
WIe baut man das denn zusammen ?

Google, allmächtiger, wie rechnet man Low und High Word zusammen?

Um zwei 16-Bit-Wörter (High- und Low-Word) zu einem 32-Bit-Wert (z. B. DWORD oder REAL) zusammenzurechnen, müssen Sie das High-Word an seine korrekte Stelle verschieben (um \(16\) Bit nach links) und anschließend mit dem Low-Word bitweise verknüpfen (Addition oder ODER-Verknüpfung).Die mathematische Formel für diese Berechnung lautet
Gesamtwert = (High-Word × 65536) + Low-Word.

Sorry, das konnte ich mir nicht verkneifen.

Moin
Danke - soweit war ich auch schon.
Hast Du das selber mal versucht.
Habe verschiedenste Dinge versucht, dies im IO Broker darzustellen.
Mir ist das nicht gelungen.

Hat das jemand schonmal gemacht und kann mir die Augen öffnen ?

gabylein

Ich benutze keinen IO-Broker, sondern Home Assistant. In HA muss ich nichts zusammenrechnen, das wird in der Solarman-Integration irgendwo berechnet. Ich habe es mit dem Taschenrechner ausgerechnet, allerdings ein wenig anders. Ich habe mit den Hex-Zahlen gerechnet und sie dann in Dezimalzahlen umgerechnet. High-Word um vier Stellen nach links schieben und dann Low-Word einfügen.

Ich denke aber, dass du ein ganz anderes Problem hast. Entstehen die Probleme beim Einspeisen? Beim Einspeisen ist der Wert negativ und muss anders berechnet werden. Ich bin jetzt auf der Arbeit und kann nicht nachgucken. Vielleicht schaffe ich es heute Abend, ich verspreche es aber nicht.

KI hat die Formel für ioBroker (z. B. JavaScript-Adapter) ausgespuckt. Die Register- und Modbusadressen musst du jedoch anpassen. Ob die Formel funktioniert, kann ich nicht sagen.

let high = getState("modbus.0.holdingRegisters.40001").val;
let low  = getState("modbus.0.holdingRegisters.40002").val;

let value = ((high << 16) | low) >> 0;

setState("0_userdata.0.myValue", value);

und die Formel für HA


template:
  - sensor:
      - name: "Modbus 32bit Signed"
        state: >
          {% set high = states('sensor.modbus_high') | int %}
          {% set low  = states('sensor.modbus_low')  | int %}
          {% set value = (high << 16) + low %}
          {% if value >= 2147483648 %}
            {{ value - 4294967296 }}
          {% else %}
            {{ value }}
          {% endif %}

Um die Anzeige in kW zu erhalten, muss der Wert durch 1 000 geteilt werden.

Moin

das hatte ich auch schon ..
Und jenachdem an welchen Tag mal fragt, kommen andere DInge raus wie es zusammen
gesetzt und dann berechnet wird. :slight_smile:

mal * 65532 oder jetzt wie bei Dir im HA

Das war bisher nicht zielführend.

Meine Umgebung soll ohne Cloud auskommen .. der Deye spricht nicht mit der Cloud.

wegen mir kein Stress .. habe die Werte so schon länger …

danke

gabylein

Ich mache mir keinen Stress. Mich würde auch interessieren, wie die Umrechnung funktioniert. Mit dem Taschenrechner hat es mit den positiven Werten funktioniert, das möchte ich noch mit den negativen Werten ausprobieren.

Du bist nicht der Erste, der danach fragt.

Moin

habe nochmal was gespielt ..

Das High Word ist immer 0 oder -1 , damit kommt da immer Müll raus.

Dann bin ich irgendwie drauf gestoßen, dass es doch kein high und low word sein könnte,
sondern ein INT16 ….
Dann könnte wenn größer als 32767, es zu einem Abzug von 65536 zu einen realen Wert kommen.

KI sagt:

function calcCT() {
let value = getState('deyeidc.0.2766066377.P_GRID_CT_TOTAL').val;

if (value > 32767) { value -= 65536; }

setState('0_userdata.0.Berechnungen.CT_Grid_Total', value);}

on({id: 'deyeidc.0.2766066377.P_GRID_CT_TOTAL', change: 'any'}, calcCT);

Damit kommen zur Zeit noch sinnvolle Werte bei raus.

gabylein

1 „Gefällt mir“