Seite 1 von 1

Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 16:58
von Jensemann_P
Hi an alle,

ich versuche gerade meine cfos-Wallbox anzubinden.
Da mein Wechselrichter nicht nativ unterstützt wird bzw Modbus nciht über IP raus gibt, möchte ich über OH gehen.
Hier liegt ja über SolarAssistant=> MQTT schon alles an.

Ich habe mich schon mit der API der http Zähler befasst.
Mit folgendem Aufruf aus dem Browser bekomme ich auch den entsprechenden Wert im cfos-System gesetzt:
http://192.168.178.239/cnf?cmd=set_ajax ... wer_w=2060

Nun möchte ich das eben gerne auf die entsprechende (JS) Rule umsetzen.
Zunächst wollte ich einfach mal den Wert fest schreiben, bevor ich mit Variablen und Berechnungen anfange.

Code: Alles auswählen

console.info(actions.HTTP.sendHttpPostRequest("http://192.168.178.239/cnf", "application/json", '{"cmd": "set_ajax_meter", "dev_id": "M5", "power_w": "2000"}'));
Führt nur zur Ausgabe "Unauthorized".

Die ganze Rule schaut derzeit so aus:

Code: Alles auswählen

var Verbrauch_Haus, Netzbezug, PV_Leistung, AkkuLeistung, JSONString, temp;
var thread = Java.type('java.lang.Thread')
items.getItem('FlagWallboxSchreibenReady').sendCommand('OFF');
Verbrauch_Haus = items.getItem('SolarAssistant_PV_Verbrauch_Haus').numericState;
Netzbezug = items.getItem('SolarAssistant_PV_Netz_Bezug').numericState;
PV_Leistung = items.getItem('SolarAssistant_PV_Leistung_Solar').numericState;
AkkuLeistung = items.getItem('SolarAssistant_PV_Batterie_Leistung').numericState;
console.error("Test");
//temp = 'http://192.168.178.239/cnf?cmd=set_ajax_meter&dev_id=M5&model=Ertrag%20PV&power_w=';
//temp += String(PV_Leistung);
//console.info(actions.HTTP.sendHttpPostRequest("http://192.168.178.239/cnf", "application/json", '{"cmd": "set_ajax_meter", "dev_id": "M5", "power_w": "2000"}'));
thread.sleep(1000);
items.getItem('FlagWallboxSchreibenReady').sendCommand('ON');
Mir raucht jetzt nach einigen stunden erst mal überhaupt cfos und API verstehen und jetzt knapp 3h an OH rumprobieren echt die Rübe.
Der Fehler den ich mach kann ja nur minimal sein (oder ich habs völlig falsch verstanden). Irgendwie muss das doch halbwegs einfach gehen mal was per post zu setzen?

Re: Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 17:08
von Jensemann_P
Falls es etwas bringt, hier der Auszug aus der cfos-Referenz:

Code: Alles auswählen

HTTP meters and EVSEs
Meter
You can create a meter (device type 'HTTP Input') that is not read by the Charging Manager, but whose current values can be specified externally via HTTP POST or GET:
/cnf?cmd=set_ajax_meter&dev_id=x
x is the device ID as seen in the device configuration, e.g. M1.

The POST body contains a JSON object, as follows:

{
            "model": string,
            "import_vah": number,
            "export_wh": number,
            "voltage": [v1, v2, v3],
            "current": [c1, c2, c3],
            "power_w": number
            "is_va": bool
         }
Here, energy values are given in Wh, voltages in V, currents in mA and powers in W. "model" is the model string as shown in the tiles.

Some of our users (#diebestenuserderwelt) use the tool curl to supply the meter with data, e.g.:
curl -i -X POST -H 'Content-Type: application/json' -d '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }' --user admin:1234abcd 'http://192.168.2.111/cnf?cmd=set_ajax_meter&dev_id=M3'

As HTTP GET the request is written like this:
http://192.168.2.111/cnf?cmd=set_ajax_meter&dev_id=M3&model=TestModell&import_wh=12345&export_wh=23456&voltage=231,232,233&current=10001,10002,10003

Here is another forum post about connecting a smart meter using cFos HTTP input meters and ioBroker.

Re: Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 17:12
von Jensemann_P
Wenn man sich an der cfos Referenz durchhangelt könnte man auch auf folgende Idee kommen, funzt aber auch nicht:

Code: Alles auswählen

console.error(actions.HTTP.sendHttpPostRequest("http://192.168.178.239/cnf?cmd=set_ajax_meter&dev_id=M5", "application/json", '{"power_w": "2000"}'));

Re: Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 17:35
von Jensemann_P
Oh mann, der Wald und die Bäume. Credentials (und die dann auch noch URL-Encoded) helfen natürlich.

Jetzt bin ich so ein halbes Stück weiter.
Ich bekomme als Antwort "OK", allerdings wird der Wert nicht übernommen. Mal sehen ob ich dazu was finde

Re: Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 18:03
von Jensemann_P
Das API gibt quasi immer ok an, wenn es etwas entgegen genommen hat. Auch wenn ich vom Hand im Browser Grütze in die Daten schreibe kommt "ok" zurück, solange grundsätzlich die Verbindung klappt.

Wie komme ich also von

Code: Alles auswählen

http://192.168.178.239/cnf?cmd=set_ajax_meter&dev_id=M7&power_w=3300
Dem hier, das Daten rein liefert zu einer funktionierenden Übergabe in OH?

Aktueller Stand:

Code: Alles auswählen

console.info(actions.HTTP.sendHttpPostRequest("http://xxxxxx:yyyyy@192.168.178.239/cnf?cmd=set_ajax_meter&dev_id=M7", "application/json", '{"power_w": "3800"}'));

Bringt zwar "ok" zurück, aber ändert den Wert nicht

Re: Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 18:29
von udo1toni
Mein erster Tipp wäre, die Anführungszeichen wegzulassen, denn die Zahl ist eine Zahl, kein String. Also eher so:

Code: Alles auswählen

console.info(actions.HTTP.sendHttpPostRequest("http://xxxxxx:yyyyy@192.168.178.239/cnf?cmd=set_ajax_meter&dev_id=M7", "application/json", '{"power_w": 3800}'));

Re: Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Verfasst: 25. Apr 2024 19:07
von Jensemann_P
DANKE! Mann, wie blind man sein kann, wenn man sich mal irgendwo verrannt hat.