Balkonkraftwerk 0-Einspeisung mit OpenDTU

0
152
ioBroker-Java
ioBroker-Java

In diesem Beispiel wird ein Hoymiles HM- 800W Wechselrichter eingesetzt, welcher über die OpenDTU in Verbindung mit Node-Red im ioBroker gesteuert wird.

Die Regelung funktioniert sehr stabile, ist aber etwas träger als die DCDC Steuerung.

Wie man die OpenDTU einrichtet, wird unter https://github.com/tbnobody/OpenDTU beschrieben und man kann dort auch das Programm für den ESP32 downloaden. (Wir haben diesen ESP32 https://amzn.to/44DFXwm verwendet)

Den Wechselrichter gibt es hier: https://amzn.to/3K9ERQU

Zusätzlich wird ein Stromzähler verwendet und zu messen, wie viel man aktuell einspeisen soll. Wir haben den Shelly 3EM verwendet. https://amzn.to/473qNC8

Die Node Red Regelung:

ioBroker-Node-Red

Auch hier übernimmt Node-Red im ioBroker die Regelung.

Der Code von Node-Red

 

 

[
    {
        "id": "009574d9d629b495",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "bf4d77b50fafe2e7",
        "type": "ioBroker in",
        "z": "009574d9d629b495",
        "name": "InstantPower",
        "topic": "shelly.0.SHEM-3#485519D799FB#1.Total.InstantPower",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "fireOnStart": "false",
        "outFormat": "MQTT",
        "x": 70,
        "y": 560,
        "wires": [
            [
                "f15b92430ca639eb"
            ]
        ]
    },
    {
        "id": "516dc4403af4b41e",
        "type": "change",
        "z": "009574d9d629b495",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "800",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 650,
        "y": 520,
        "wires": [
            [
                "3f207c5fbbdff87c",
                "10be03f6926f0f9f"
            ]
        ]
    },
    {
        "id": "2f7449f8402f353d",
        "type": "ioBroker in",
        "z": "009574d9d629b495",
        "name": "DTU Limit",
        "topic": "mqtt.0.solarOpenDTU.114183083323.status.limit_absolute",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "fireOnStart": "false",
        "outFormat": "MQTT",
        "x": 80,
        "y": 480,
        "wires": [
            [
                "2aa238e89b7e8768"
            ]
        ]
    },
    {
        "id": "3f207c5fbbdff87c",
        "type": "calculator",
        "z": "009574d9d629b495",
        "name": "",
        "inputMsgField": "payload",
        "outputMsgField": "payload",
        "operation": "mult",
        "constant": "1.05",
        "round": true,
        "decimals": 0,
        "x": 840,
        "y": 480,
        "wires": [
            [
                "83644cddf6b12ec6",
                "8c0bcab8b61c5fbc"
            ]
        ]
    },
    {
        "id": "f15b92430ca639eb",
        "type": "smooth",
        "z": "009574d9d629b495",
        "name": "",
        "property": "payload",
        "action": "mean",
        "count": "6",
        "round": "0",
        "mult": "single",
        "reduce": false,
        "x": 220,
        "y": 560,
        "wires": [
            [
                "2aa238e89b7e8768"
            ]
        ]
    },
    {
        "id": "e4f80c1af7c3a840",
        "type": "ioBroker out",
        "z": "009574d9d629b495",
        "name": "",
        "topic": "0_userdata.0.DTU-SET-WERT",
        "ack": "false",
        "autoCreate": "false",
        "stateName": "",
        "role": "",
        "payloadType": "",
        "readonly": "",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 830,
        "y": 820,
        "wires": []
    },
    {
        "id": "2aa238e89b7e8768",
        "type": "sum",
        "z": "009574d9d629b495",
        "name": "",
        "topic": "",
        "x": 290,
        "y": 420,
        "wires": [
            [
                "597fc5cfad0ff328",
                "4288fb14e1877800"
            ]
        ]
    },
    {
        "id": "83644cddf6b12ec6",
        "type": "rbe",
        "z": "009574d9d629b495",
        "name": "",
        "func": "deadbandEq",
        "gap": "2",
        "start": "",
        "inout": "in",
        "septopics": true,
        "property": "payload",
        "topi": "topic",
        "x": 710,
        "y": 680,
        "wires": [
            [
                "1579282b6884c72e"
            ]
        ]
    },
    {
        "id": "1579282b6884c72e",
        "type": "smooth",
        "z": "009574d9d629b495",
        "name": "",
        "property": "payload",
        "action": "mean",
        "count": "2",
        "round": "0",
        "mult": "single",
        "reduce": false,
        "x": 700,
        "y": 760,
        "wires": [
            [
                "10be03f6926f0f9f",
                "7bfb3e491220fa08"
            ]
        ]
    },
    {
        "id": "10be03f6926f0f9f",
        "type": "delay",
        "z": "009574d9d629b495",
        "name": "",
        "pauseType": "rate",
        "timeout": "30",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "17",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "allowrate": false,
        "outputs": 1,
        "x": 450,
        "y": 820,
        "wires": [
            [
                "e4f80c1af7c3a840"
            ]
        ]
    },
    {
        "id": "fa3cd5f513fdc2be",
        "type": "debug",
        "z": "009574d9d629b495",
        "name": "Mitte",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 630,
        "y": 1220,
        "wires": []
    },
    {
        "id": "597fc5cfad0ff328",
        "type": "switch",
        "z": "009574d9d629b495",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "lt",
                "v": "800",
                "vt": "num"
            },
            {
                "t": "gt",
                "v": "800",
                "vt": "num"
            },
            {
                "t": "lt",
                "v": "50",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 450,
        "y": 420,
        "wires": [
            [
                "3f207c5fbbdff87c"
            ],
            [
                "516dc4403af4b41e"
            ],
            [
                "af8c9b5a611b5240"
            ]
        ]
    },
    {
        "id": "7c015547b8a25127",
        "type": "debug",
        "z": "009574d9d629b495",
        "name": "Mitte",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 790,
        "y": 1220,
        "wires": []
    },
    {
        "id": "8c0bcab8b61c5fbc",
        "type": "debug",
        "z": "009574d9d629b495",
        "name": "debug 1",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 900,
        "y": 620,
        "wires": []
    },
    {
        "id": "7bfb3e491220fa08",
        "type": "debug",
        "z": "009574d9d629b495",
        "name": "debug 3",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 920,
        "y": 720,
        "wires": []
    },
    {
        "id": "4288fb14e1877800",
        "type": "debug",
        "z": "009574d9d629b495",
        "name": "debug 4",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 500,
        "y": 340,
        "wires": []
    },
    {
        "id": "af8c9b5a611b5240",
        "type": "change",
        "z": "009574d9d629b495",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "50",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 450,
        "y": 600,
        "wires": [
            [
                "10be03f6926f0f9f"
            ]
        ]
    }
]

Danach holt sie Das Java Script den Sollwert ab und übergibt diesen Per Web API an die OpenDTU

ioBroker-Java
ioBroker-Java

Hier der Code dazu

 

<block xmlns="https://developers.google.com/blockly/xml" type="on" id=",nIGBN,ZwCDD=SVK3esv" x="-937" y="-237">
  <field name="OID">0_userdata.0.DTU-SET-WERT</field>
  <field name="CONDITION">any</field>
  <field name="ACK_CONDITION"></field>
  <statement name="STATEMENT">
    <block type="controls_if" id=".3Np+/vC[4NBRp}L-(]*">
      <value name="IF0">
        <block type="get_value" id="jpBQ~oa2FG]rq3*sJ{K|">
          <field name="ATTR">val</field>
          <field name="OID">0_userdata.0.DTU-SET-WERT</field>
        </block>
      </value>
      <statement name="DO0">
        <block type="exec" id="D7_A#;ye9^?W-BBO~Lxs">
          <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
          <field name="WITH_STATEMENT">FALSE</field>
          <field name="LOG"></field>
          <value name="COMMAND">
            <shadow type="text" id="@?k,?u$u;)Kx(M?+^YPH">
              <field name="TEXT">curl -u "admin:hermann1" http://10.1.1.98/api/limit/config -d 'data={"serial":"114183083323", "limit_type":0, "limit_value":130}'</field>
            </shadow>
            <block type="text_join" id="wbIpx_V5]`FJ~U:[!=+(">
              <mutation items="3"></mutation>
              <value name="ADD0">
                <block type="text" id="1O~mYlzkg`-X@GfV+X(i">
                  <field name="TEXT">curl -u "admin:xxxxxpasswort" http://10.1.1.98/api/limit/config -d 'data={"serial":"114183083323", "limit_type":0, "limit_value":</field>
                </block>
              </value>
              <value name="ADD1">
                <block type="get_value" id="3*2AfKz7hkFy-mjJQS`|">
                  <field name="ATTR">val</field>
                  <field name="OID">0_userdata.0.DTU-SET-WERT</field>
                </block>
              </value>
              <value name="ADD2">
                <block type="text" id="vEYSonI6NWr3,IVRD*1X">
                  <field name="TEXT">}'</field>
                </block>
              </value>
            </block>
          </value>
        </block>
      </statement>
    </block>
  </statement>
</block>

Fragen bitte unten in die Kommentare!

OpenDTU auf dem ESP32: Einblick in ein spannendes Projekt

Das OpenDTU-Projekt ist eine aufregende Initiative, die sich der Entwicklung und Integration von IoT (Internet of Things)-Technologien verschrieben hat. Das Projekt zielt darauf ab, Open-Source-Hardware und -Software für das IoT zu fördern und bietet eine Vielzahl von Anwendungen, einschließlich Energiemanagement, Umweltüberwachung, Gebäudeautomatisierung und mehr. Eine wichtige Komponente dieses Projekts ist die Implementierung auf dem ESP32, einem leistungsstarken Mikrocontroller, der sich ideal für IoT-Anwendungen eignet.

Der ESP32: Ein Mikrocontroller mit beeindruckenden Fähigkeiten

Der ESP32 ist ein leistungsfähiger Mikrocontroller, der von Espressif Systems entwickelt wurde. Er verfügt über zwei Prozessorkerne, Wi-Fi- und Bluetooth-Konnektivität sowie eine Vielzahl von Ein- und Ausgängen (I/O). Diese Kombination von Funktionen macht den ESP32 zu einer ausgezeichneten Wahl für IoT-Anwendungen, da er in der Lage ist, drahtlose Kommunikation, Sensordatenverarbeitung und Steuerungsfunktionen in einem einzigen Chip zu integrieren.

OpenDTU und der ESP32: Eine perfekte Kombination

Das OpenDTU-Projekt hat den ESP32 als Plattform gewählt, um seine IoT-Lösungen zu entwickeln und zu testen. Diese Entscheidung bietet eine Reihe von Vorteilen:

  1. Leistungsfähigkeit: Der ESP32 verfügt über ausreichend Rechenleistung, um komplexe Aufgaben zu bewältigen, wie die Verarbeitung von Sensordaten, die Kommunikation mit anderen Geräten und die Steuerung von Aktuatoren.

  2. Konnektivität: Mit integriertem Wi-Fi und Bluetooth kann der ESP32 nahtlos mit anderen Geräten und dem Internet kommunizieren, was die Vernetzung von IoT-Geräten erleichtert.

  3. Energieeffizienz: Der ESP32 ist so konzipiert, dass er auch in batteriebetriebenen Anwendungen effizient arbeitet. Dies ist entscheidend für IoT-Geräte, die über lange Zeiträume hinweg autark arbeiten müssen.

  4. Open-Source-Unterstützung: Der ESP32 wird von einer aktiven Open-Source-Community unterstützt, die kontinuierlich an der Verbesserung der Firmware und Software arbeitet. Dies passt gut zur Philosophie des OpenDTU-Projekts, Open-Source-Technologien zu fördern.

Anwendungen von OpenDTU auf dem ESP32

Das OpenDTU-Projekt bietet eine breite Palette von Anwendungen, die auf dem ESP32 ausgeführt werden können. Dazu gehören:

  1. Umweltüberwachung: Der ESP32 kann Sensordaten für Luftqualität, Temperatur, Feuchtigkeit und mehr erfassen und an ein zentrales System senden, um Umweltbedingungen zu überwachen.

  2. Energiemanagement: Durch die Verbindung mit intelligenten Stromzählern und Energiemanagementsystemen kann der ESP32 Energieverbrauch und -produktion in Echtzeit überwachen und optimieren.

  3. Gebäudeautomatisierung: Der ESP32 kann in Gebäudeautomatisierungssystemen eingesetzt werden, um Beleuchtung, Heizung, Klimaanlage und andere Geräte zu steuern und zu überwachen.

  4. Agriculture: In der Landwirtschaft kann der ESP32 Sensoren zur Überwachung von Bodenfeuchtigkeit, Temperatur und Licht verwenden, um die Bewässerung und den Anbau von Pflanzen zu optimieren.

Fazit

Das OpenDTU-Projekt nutzt die Leistungsfähigkeit und Vielseitigkeit des ESP32-Mikrocontrollers, um innovative IoT-Lösungen zu entwickeln und zu fördern. Diese Kombination aus Open-Source-Technologie und leistungsstarker Hardware bietet die Möglichkeit, eine Vielzahl von IoT-Anwendungen zu realisieren, die Umweltüberwachung, Energiemanagement, Gebäudeautomatisierung und mehr abdecken. Der ESP32 dient als solide Grundlage für die Umsetzung der Vision des OpenDTU-Projekts und trägt zur Weiterentwicklung des IoT-Bereichs bei.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein