Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Jensemann_P
Beiträge: 155
Registriert: 26. Jul 2021 20:14
Answers: 0

Verzweifle an actions.HTTP.sendHttpPostRequest (unter OH4)

Beitrag 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?

Jensemann_P
Beiträge: 155
Registriert: 26. Jul 2021 20:14
Answers: 0

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

Beitrag 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.

Jensemann_P
Beiträge: 155
Registriert: 26. Jul 2021 20:14
Answers: 0

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

Beitrag 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"}'));

Jensemann_P
Beiträge: 155
Registriert: 26. Jul 2021 20:14
Answers: 0

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

Beitrag 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

Jensemann_P
Beiträge: 155
Registriert: 26. Jul 2021 20:14
Answers: 0

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

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 14001
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

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

Beitrag 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}'));
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Jensemann_P
Beiträge: 155
Registriert: 26. Jul 2021 20:14
Answers: 0

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

Beitrag von Jensemann_P »

DANKE! Mann, wie blind man sein kann, wenn man sich mal irgendwo verrannt hat.

Antworten