NEWS
Einfach Werte addieren und über MQTT senden
-
Klingt zu einfach:
2 PV-Werte vom Modbus addieren und über MQTT publizieren.
Unter MQTT kann ich manuell keine eigenen Werte anlegen.
Dies ist mein kläglicher Versuch:
-
Wie sieht deine Struktur unter mqtt.0 denn aus. Du musst auch zwei Parameter über geben, "Topic" und "Message".
Wenn es den Datenpunkt unter mqtt.0 schon gibt, nutze "steuere" statt "aktualisiere"
-
@tt-tom Nein, den Datenpunkt gibt es noch nicht. Dieser soll von einem ext. System übernommen werden.
Wo genau übergebe ich denn die beiden Werte?
-
@kemnamol Entweder Du beschreibst einen existierenden Datenpunkt unter mqtt mit steuere oder Du nutzt sendTo - dann brauchst Du aber nur den Wert und das topic schicken.
So wird das nie funktionieren -
Wenn Du sendTo verwenden willst, dann ein topic und einen Wert
In diesem Fall musst Du halt in die Nachricht deine Summe schreiben.
-
@mickym wie gezeigt möchte ich natürlich sendTo nutzen.
Ich habe schon viel Programmiert, aber Blocky und iobroker sind mir noch völlig unbekannt.
Schön wäre ein Tip zum WIE genau. Was ich machen möchte weiss ich ja.
Bei mir gibt es keine Felder topic und message. Und der Wert muss ja auch erst noch berechnet werden. -
@kemnamol Du machst das Zahnrad auf und setzt 2 Parameter:
Den ersten nennst Du topic und den zweiten message.
In die Nachricht bildest Du Deine Summe.
Die Summe bildest Du, wie Du es gemacht hast .
Wie gesagt wenn der Datenpunkt schon existiert kannst Du ihn auch normal mit steuere beschreiben (dann aber ohne SendTo).
Hier mal das gesamte Blockly zum Import:
Wenn Du die originale Doku zum Mqtt-Adapter anschaust, dann muss das Objekt die beiden Eigenschaften topic und message enthalten:
aus: https://github.com/ioBroker/ioBroker.mqtt
Ergebnisse brauchst Du nicht anhaken - weil nichts zurückkommt von dem SendTo.
-
@kemnamol sagte in Einfach Werte addieren und über MQTT senden:
Bei mir gibt es keine Felder topic und message. Und der Wert muss ja auch erst noch berechnet werden.
Ich berechne die Summe doch direkt beim Konstruieren der Nachricht, wie Du aus meinem Screenshot entnehmen kannst.
-
@mickym Vielen Dank! Wieder eine Menge gelernt.
Leider wird kein neuer Datenpunkt erzeugt. Fehler sind im log auch nicht zu sehen.
Ich hätte erwartet dass es grafisch einfacher ist. Vielleicht sollte ich es doch mal direkt in JS probieren.
-
@kemnamol Vielleicht nur mal den Browser refreshen - das hilft oder neu auf und zu machen.
-
@mickym Raspi neu gestartet, anderen Browser benutz, nix...
-
@kemnamol sagte in Einfach Werte addieren und über MQTT senden:
@mickym Raspi neu gestartet, anderen Browser benutz, nix...
Schalte mal um auf JS und vergleiche mal:
sendTo("mqtt.1", "sendMessage2Client", { "topic": 'test/summe', "message": parseFloat(getState("0_userdata.0.Test.Temperaturen.Bad.Temperatur").val) + getState("0_userdata.0.Test.Temperaturen.Wohnzimmer.Temperatur").val });
Wenn es da bis auf die Datenpunkte und topic Abweichungen gibt, dann ggf. korrigieren. Ansonsten weiß ich auch nicht.
-
@mickym erschreckend gleich:
sendTo("mqtt.0", "sendMessage2Client", { "topic": 'Deye-PV/PV-ges', "message": parseFloat(getState("modbus.1.holdingRegisters.40673_PV1_input_power").val) + getState("modbus.1.holdingRegisters.40674_PV2_input_power").val });
Aber bei dir ist mqtt.1
Muss ich zum senden einen extra client installieren? -
@kemnamol Nein musst Du nicht. - Alternativ legst Du den Datenpunkt manuell an und beschreibst ihn normal mit steuere.
-
@mickym das hatte ich versucht, geht aber nicht. Das + ist unter mqtt ausgegraut
Ordner kann ich auch nicht anlegen. -
@kemnamol Expertenmodus einschalten und dann auf mqtt.0 Ebene Cursor
Dann Datenpunkt wie folgt anlegen:
-
@mickym Danke, das geht. Darauf kommt man aber auch wieder niemals alleine.
Mal schnell bisschen iobroker machen.
Allerdings hat er das nur einmalig berechnet. Muss ich die Eingangswerte auf Änderung abfragen, oder geht das auch einfacher? -
@kemnamol Ich würde beide auf Änderung abfragen und den jeweils anderen wert dazu zählen.
-
@mickym said in Einfach Werte addieren und über MQTT senden:
vielen, vielen Dank! So funktioniert das endlich Top!
Nur ist heute wieder keine Zeit mehr für ernsthaftes Programmieren. Immer diese Spieltrieb. -
darf ich mich einmal hier einklinken, ich versuche auch gerade via MQTT aus dem iobroker Daten zur PV und Strom zu senden. Klappt nicht.
Der MQTT Wert in der Deklaration des evcc wird erkannt, abonniert und sogar im iobroker angelegt.
ABER ich bekomme keine Werte übergtragen wenn ich Werte in den Datenpunkt schreibe- nicht manuell und nicht via script.
Ausgelesen werden die Daten zur Steuerung des evcc unter side und loadpunkt auch 1a.lediglich das zurückschreiben geht nicht:
hier meine Deklaration des Grids:meters:
- name: grid1
type: custom
power: #
source: mqtt
topic: mqtt/0/evcc/Neuer_Zustand
Meldung:
[mqtt ] DEBUG 2023/07/04 06:18:32 mqtt/0/evcc/Neuer_Zustand wait for initial valueWärst du so nett und würdest einmal deine Grid-Konfiguration posten.
Du übergibst ja wahrscheinlich auch Grid und PV ? - name: grid1
-
@uschi08 ich glaube, du verwechselst den Pfad mit den Daten die EVCC selber sendet.
Ich habe zum Testen das Programm MQTT-Explorer auf dem PC.
Ich habe einmal die PV-Daten vom Deye mit den vorher in iobroker addieren Werten.
Du könntest diese aber auch getrennt einlesen, EVCC addiert diese.
Als 2. PV habe ich aber noch einen Huawei.- type: custom name: Deye power: source: mqtt topic: Deye/Deye-PV-ges timeout: 70s
Grid hole ich von einem Shelly 3EM und die Akkudaten direkt (auch per MQTT) vom Daly-BMS.
Aber da kannst du ja auch 1:1 die entsprechenden Daten vom DEYE nehmen.- name: battery type: custom power: source: mqtt topic: daly/Pack_Power scale: -1 # scale: 0.001 # floating point factor applied to result, e.g. for Wh to kWh conversion timeout: 70s soc: source: mqtt topic: daly/Pack_SOC timeout: 70s
Ich habe den zu übergebenden Wert (im Experpenmodus!) manuell im iobroker angelegt:
Viel Erfolg.