NEWS
Objekt per exec versenden
-
Hallo,
ich würde gerne meinen Momentanverbrauch, welchen ich per SML einlese, mit exec an meine Wallbox zur PV Überschussregelung senden. Ich habe das Vorher per Tasmota Script gemacht und hat einwandfrei funktioniert. Leider bekomme ich das beim besten willen und Stundenlangen Googeln mit Iobroker nicht hin. Kann mir hierbei jemand kurz helfen? Folgendes script habe ich bis jetzt getestet das Funktioniert solange ich einen Festen Wert eingebe. Sobald ich den Wert einer Objekt ID versenden will kommt an der Wallbox nichts an.schedule("*/3 * * * * *", async () => {
const util = require('util');
var uberschuss
var uberschuss = getState("smartmeter.0.1-0:16_7_0__255.value").val;
console.log(util.inspect(uberschuss, { showHidden: true, depth: null }));exec ('wget http://192.168.178.29/api/set?ids={"pGrid":uberschuss}')
});
-
klar, so kommt da nur das wort uberschuss an.
du musst den wert schon mit in den string einbauen.
javascript weiß nicht, das du im string eigentlich die variable meinstdu kannst es mal so probieren. allerdings darf da kein leerzeichen drin vorkommen, sonst mag wget die url nicht
console.log('wget http://192.168.178.29/api/set?ids={"pGrid":${uberschuss}}'); exec('wget http://192.168.178.29/api/set?ids={"pGrid":${uberschuss}}');
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
-
@oliverio
Vielen Dank für deine schnelle Antwort, leider funktioniert es so auch nicht. Hab es jetzt schon in allen möglichen variationen probiert, bei Tasmota war die variable in % davor und dahinter, funktioniert hier aber auch nicht. Ist es überhaut möglich einen Wert von einem Objekt zu versenden? -
Warum muss man das mit exec machen und nutzt nicht ein normalen http Aufruf?
-
@mickym
Ok, hört sich gut an, nur weiß ich nicht wie ich das im iobroker mache. Könntest du mir ein Beispiel nennen? -
@hadde Nun am einfachsten ist mit NodeRed - Du kannst natürlich auch deine Logikmaschinen nehmen, wobei ich da nicht so fit bin. Mit NodeRed ist es halt am einfachsten.
-
@mickym
Puh, mit Node hab ich noch gar nichts gemacht. Muss ich mir mal ansehen obs damit klappt. Danke schon mal für die Vorlage. -
@hadde Ja ich weiß auch nicht ob es ein POST oder eine GET Request mit Body ist - aber damit kannst es am einfachsten probieren. Ich hab Dir ja den Import geschickt, damit Du es ausprobieren kannst.
-
@mickym
Vielen Dank für deine Hilfe, aber damit komme ich überhaut nicht klar. Ich weiß ja nicht mal wie man es startet oder schon läuft???? -
@hadde Na Ok - Du hättest eigentlich nur den Adapter installieren müssen, den Flow importieren müssen und auf die Inject Node drücken, ob es geht - den Rest hätten wir dann zusammen gemacht. Aber vielleicht gibts ja noch eine andere Lösung für Dich.
-
@hadde sagte in Objekt per exec versenden:
Ist es überhaut möglich einen Wert von einem Objekt zu versenden?
ja, leider hast du nicht geschrieben was bspw das log ausgegeben hat.
ich habe davor dir ja noch so ein console log geschrieben und dazu auch einen hinweis gegeben.
auch kann es sein das der user iobroker gar keine berechtigung für wget hat
alternativ kann man natürlich auch ein blockly block mit request nehmen.
da bin ich aber nicht so firm, wie man da einen string zusammenbaut.node-red ist natürlich ebenfalls eine möglichkeit
-
@mickym
Den Adapter hab ich installiert und den Flow importiert. Da bin ich dir dankbar das du mir das so vorgibst. Aber wie setzte ich das ganze nun in gang? Oder läuft es schon und funktioniert nicht? Ich kenne mich mit Node einfach nicht aus. GET und POST hab ich auch schon geändert, aber keine Ahnung ob es funktioniert, es kommt jedenfalls nichts an. -
@oliverio
Das Log gibt alle 3 Sekunden das hier ausjavascript.0
2023-11-26 19:04:57.001 info script.js.Ladesteuerung.Überschuss_Senden: exec: wget http://192.168.178.29/api/set?ids={"pGrid":${uberschuss}}javascript.0
2023-11-26 19:04:57.001 info script.js.Ladesteuerung.Überschuss_Senden: 131javascript.0
2023-11-26 19:04:57.000 info script.js.Ladesteuerung.Überschuss_Senden: getState(id=smartmeter.0.1-0:16_7_0__255.value, timerId=undefined) => {"val":131,"ack":true,"ts":1701021894709,"q":0,"from":"system.adapter.smartmeter.0","user":"system.user.admin","lc":1701021894709Haken bei EXEC erlauben ist gesetzt und funktioniert auch mit einem Fest eingegebenen Wert, nur nicht mit der Variable.
-
ah jetzt,
anstatt anführungszeichen müssen es backticks sein. vergess ich immer wiederconsole.log(`wget http://192.168.178.29/api/set?ids={"pGrid":${uberschuss}}`); exec(`wget http://192.168.178.29/api/set?ids={"pGrid":${uberschuss}}`);
-
@oliverio
DU BIST DER WAHNSINN, das wars, jetzt funktionierts!!!!!
VIELEN DANK.
Macht weiter so, ihr seid spitze!!!
Auch an mickym nochmals danke für deine Zeit. -
OK dann hast Du ja nun eine Lösung.