Hoymiles HM-300 WR mit Ahoy DTU - Leistung begrenzen mit curl

  • Hallo


    Ich möchte die Leistung am Hoymiles HM-300 begrenzen. Im Internet habe ich einencurl String gefunden. Der String schaut so aus:

    curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data '{"id": 1, "cmd": "limit_nonpersistent_absolute", "val": 200}' 10.0.0.70/api/ctrl


    Funktioniert nicht. Die Antwort schaut so aus:

    curl: (3) URL using bad/illegal format or missing URL

    curl: (3) URL using bad/illegal format or missing URL

    curl: (3) URL using bad/illegal format or missing URL

    curl: (3) URL using bad/illegal format or missing URL

    curl: (3) unmatched close brace/bracket in URL position 4:

    200}'


    Wo liegt der Fehler?

  • Mit der Ahoy Oberfläche funktioniert es.


    Hintergrund ist die Automatisierung für eine Null-Einspeisung.

    Ein selbstgeschriebenes Programm ermittelt mit Shelly 3M den aktuellen Eigenverbrauch und die Leistungsentnahme von einer Batterie regulieren. Der WR soll auf aktuell gebruchte Zusatzleistung eingestellt werden.


    Sollte mit dem curl String funtionieren, kommt leider dieser Fehler zurück.

  • Ich konnte das Problem lösen.

    Auf einer Internetseite habe ich gelesen, dass curl String Syntax unter Windows so nicht funktioinert (die Anweisungen sind eigentlich als mehrzeilige Anweisungen gedacht, die mit \ getrennt sind).


    Alte Anweisung

    curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data '{"id": 1, "cmd": "limit_nonpersistent_absolute", "val": 200}' 10.0.0.70/api/ctrl


    Neue Anweisung funktioniert

    curl -g -i -H "Accept: application/json" -H "content-Type:application/json" --data"{\"id\":0, \"cmd\":\"limit_nonpersistent_absolute\", \"val\":800}" -X POST http://10.0.0.70/api/ctrl


    Parameter -g ergänzen, Databereich eingeschlossen mit " anstatt mit ' und in diesem Bereich bei " ein \ voranstellen - dann funktioniert es auch mit Windows.

  • Kleine Klugscheisser-Korrektur: Das Ersetzen von " durch \" ist nicht der Zeilenumbruch speziell für Windows sondern ein Escaping des Zeichens ". Hintergrund: Alles was zwischen zwei " steht wird normalerweise als Gesamtstring interpretiert und nicht gesondert von der jeweiligen Shell wie hier Windows ausgewertet. Das Problem ist dann natürlich, wenn man Innerhalb dieses Strings auch das Zeichen " verwenden möchte. Damit dies nicht als Beenden des Strings gewertet wird, kann man dieses Zeichen "escapen" durch Voranstellen von \.

  • Hallo krameger,

    ich hab fast genau den selben Befehl per Terminal am Mac gegeben, nur 0 statt 1 nach id und es hat funktioniert. Seltsam!


    curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data '{"id": 0, "cmd": "limit_nonpersistent_absolute", "val": 50}' http://192.168.178.75/api/ctrl








  • Hallo Leute,


    ich habe den Curl-Befehl so eingegeben, wie beschrieben, aber da muß bei mir immer noch ein Fehler drinnen sein:


    curl -g -i -H "Accept: application/json" -H "content-Type:application/json" --data"{\"id\":0, \"cmd\":\"limit_nonpersistent_absolute\", \"val\":800}" -X POST http://192.168.0.133/api/ctrl


    Antwort:


    curl: option --data{"id":0, "cmd":"limit_nonpersistent_absolute", "val":800}: is unknown

    curl: try 'curl --help' for more information


    Habt Ihr da noch nen Tip für mich?


    Danke und Gruß!