NEWS
UDP Api Abfragen in Blocky exec "echo -e" / Marstek Venus
-
Hallo,
ich möchte gern eine UDP Api Abfrage machen. Leider komme ich nicht weiter.
--> Ich möchte gern einen UDP Paket absenden und die direkt Antwort empfangen.
--> Ich muss folgendes als UDP senden: { "id": 1, "method": "Bat.GetStatus", "params": { "id": 0 } }
--> und dann die UDP Antwort an Blockly bekommen..Ich bin besitzer einer Marstek Venus v3 (Batteriespeicher) welches so abgefragt wird. (Es gibt noch keinen Adapter dazu hier.)
Da blockly kein UPD kann verwende "exec" mit einem externen command und werte die Rückgabe aus.
Als externes Hilfsprogramm habe ich mir Netcat ausgesucht. (NC)
Netcat wird aus dem bash per "echo" Ausgabe verwendet. Problem 1 waren die " (Gänsefüsschen). Echo kann " nur per -e und dann als Hexcode \x22.Nun endlich zum Problem:
Direkt aus der Kommandozeile passiert folgendes:Command:
echo -e "{ \x22id\x22: 0, \x22method\x22: \x22Bat.GetStatus\x22, \x22params\x22: { \x22id\x22: 0 } }"| nc -u -w 1 192.168.178.xyz 30000Antwort:
{
"id": 0,
"src": "VenusE 3.0-009b08axyz",
"result": {
"id": 0,
"soc": 47,
"charg_flag": true,
"dischrg_flag": true,
"bat_temp": 24.0,
"bat_capacity": 2421.0,
"rated_capacity": 5120.0
}
}**Wenn ich das ganze nun per blockly über exec ausführe wird das -e ignoriert und als text übertragen. Dementsprechend ist das gesendete UDP Paket
-e "{ \x22id\x22: 0, \x22met..**
Das versteht mein Marstek Venus leider nicht und Antwortet mit parse error.
Hat jemand eine gute Idee wie ich das hinbekomme ?Blockly wäre toll zur Not gehts sicher auch anders...
Vorab vielen Dankdks
-
Hallo,
ich möchte gern eine UDP Api Abfrage machen. Leider komme ich nicht weiter.
--> Ich möchte gern einen UDP Paket absenden und die direkt Antwort empfangen.
--> Ich muss folgendes als UDP senden: { "id": 1, "method": "Bat.GetStatus", "params": { "id": 0 } }
--> und dann die UDP Antwort an Blockly bekommen..Ich bin besitzer einer Marstek Venus v3 (Batteriespeicher) welches so abgefragt wird. (Es gibt noch keinen Adapter dazu hier.)
Da blockly kein UPD kann verwende "exec" mit einem externen command und werte die Rückgabe aus.
Als externes Hilfsprogramm habe ich mir Netcat ausgesucht. (NC)
Netcat wird aus dem bash per "echo" Ausgabe verwendet. Problem 1 waren die " (Gänsefüsschen). Echo kann " nur per -e und dann als Hexcode \x22.Nun endlich zum Problem:
Direkt aus der Kommandozeile passiert folgendes:Command:
echo -e "{ \x22id\x22: 0, \x22method\x22: \x22Bat.GetStatus\x22, \x22params\x22: { \x22id\x22: 0 } }"| nc -u -w 1 192.168.178.xyz 30000Antwort:
{
"id": 0,
"src": "VenusE 3.0-009b08axyz",
"result": {
"id": 0,
"soc": 47,
"charg_flag": true,
"dischrg_flag": true,
"bat_temp": 24.0,
"bat_capacity": 2421.0,
"rated_capacity": 5120.0
}
}**Wenn ich das ganze nun per blockly über exec ausführe wird das -e ignoriert und als text übertragen. Dementsprechend ist das gesendete UDP Paket
-e "{ \x22id\x22: 0, \x22met..**
Das versteht mein Marstek Venus leider nicht und Antwortet mit parse error.
Hat jemand eine gute Idee wie ich das hinbekomme ?Blockly wäre toll zur Not gehts sicher auch anders...
Vorab vielen Dankdks
Versuch mal
printf '%s' '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000oder
printf '%s\n' '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000 -
Vielen dank für die Hilfe !
Hat direkt geklappt. Jetzt kannich den Speicher notdürftig aus Blockly raus steuern.Das Problem wurde mit ' ' (einfachen Anführungszeichen) gelöst.
Hatte ich auch schon probiert nur mit den falschen :-)
(Akzent oben rechts auf der Tastatur).
So ganz verstehe ich nicht warum das geht. Ich hab mal gelernt ' ' = Char / " " = stringecho oder printf geht übrigens beides mit einfachen Anführungszeiochen und macht den Link viel besser lesbar.
Ich nutze jetzt exec mit:
echo '{"id":1,"method":"Bat.GetStatus","params":{"id":0}}' | nc -u -w 1 192.168.178.xyz 30000Vielen vielen Dank !