NEWS
(gelöst) Datenpunkte per RESTful API senden
-
@jojo58 sagte: kein HTML Code zu sehen.
Dann muss auch nichts bereinigt werden und es kann so gesendet werden.
Weshalb ist jetzt kein HTML-Code mehr enthalten? -
@jojo58 sagte: kein HTML Code zu sehen.
Dann muss auch nichts bereinigt werden und es kann so gesendet werden.
Weshalb ist jetzt kein HTML-Code mehr enthalten?@paul53 Guten Morgen, das hat mir keine Ruhe gelassen und ich habe es jetzt nochmal anders versucht. Zuerst bereinige ich die Daten mit replace und schreibe sie in einen neuen Datenpunkt.
// WarnAndError let jsonWar = getState("logparser.0.filters.WarnAndError.json").val; //log(jsonWar); jsonWar = jsonWar.replace(/<[^>]+>/g, ''); //log(jsonWar); setState('0_userdata.0.LP_JSON.Warn_JSON', jsonWar);Das klappt und im neuen Datenpunkt habe ich dann diesen String stehen:
Das sieht schon mal sehr gut aus. Dann habe ich mit diesem Script die Daten übertragen:
var request = require ('request'); // WarnAndError let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; // WarnAndError request('http://192.168.1.14:8087/set/0_userdata.0.LogParser_Raspi4.WarnAndError.json?value=' +jsonWar);Was dann ankommt, ist nur ein Teil der Daten und die sind wieder irgendwie kaputt:
[EDIT]
Hab die Lösung gefunden. Mache es nach dem Bereinigen wie von @ticaki beschrieben mit axios und dann klappt die Übertragung und ich kann die Daten in VIS anzeigen.// das hier muß einmal im Skript stehen const axios = require("axios") // hiermit sendest du die Daten: sollte selbst erklärend sein postJson("192.168.1.14:8087", "0_userdata.0.LogParser_Raspi4.WarnAndError.json", getState("0_userdata.0.LP_JSON.Warn_JSON").val) //Das hier irgendwo unten wo es nicht stört async function postJson(ip, dp, value) { // WarnAndError let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; try { const {data} = await axios.post('http://'+ip+'/setValueFromBody/'+dp, jsonWar, { headers: { "Content-Type": 'application/json' } } ) } catch(error) { console.warn('Daten nicht übertragen!' + error) } }Also erst mit replace bereinigen und in einen lokalen DP kopieren, dann von dort aus mit axios übertragen. Ist axios eigentlich eine Funktion, oder wie nennt man das?
Gruß Johannes
-
@paul53 Guten Morgen, das hat mir keine Ruhe gelassen und ich habe es jetzt nochmal anders versucht. Zuerst bereinige ich die Daten mit replace und schreibe sie in einen neuen Datenpunkt.
// WarnAndError let jsonWar = getState("logparser.0.filters.WarnAndError.json").val; //log(jsonWar); jsonWar = jsonWar.replace(/<[^>]+>/g, ''); //log(jsonWar); setState('0_userdata.0.LP_JSON.Warn_JSON', jsonWar);Das klappt und im neuen Datenpunkt habe ich dann diesen String stehen:
Das sieht schon mal sehr gut aus. Dann habe ich mit diesem Script die Daten übertragen:
var request = require ('request'); // WarnAndError let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; // WarnAndError request('http://192.168.1.14:8087/set/0_userdata.0.LogParser_Raspi4.WarnAndError.json?value=' +jsonWar);Was dann ankommt, ist nur ein Teil der Daten und die sind wieder irgendwie kaputt:
[EDIT]
Hab die Lösung gefunden. Mache es nach dem Bereinigen wie von @ticaki beschrieben mit axios und dann klappt die Übertragung und ich kann die Daten in VIS anzeigen.// das hier muß einmal im Skript stehen const axios = require("axios") // hiermit sendest du die Daten: sollte selbst erklärend sein postJson("192.168.1.14:8087", "0_userdata.0.LogParser_Raspi4.WarnAndError.json", getState("0_userdata.0.LP_JSON.Warn_JSON").val) //Das hier irgendwo unten wo es nicht stört async function postJson(ip, dp, value) { // WarnAndError let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; try { const {data} = await axios.post('http://'+ip+'/setValueFromBody/'+dp, jsonWar, { headers: { "Content-Type": 'application/json' } } ) } catch(error) { console.warn('Daten nicht übertragen!' + error) } }Also erst mit replace bereinigen und in einen lokalen DP kopieren, dann von dort aus mit axios übertragen. Ist axios eigentlich eine Funktion, oder wie nennt man das?
Gruß Johannes
-
@paul53 Guten Morgen, das hat mir keine Ruhe gelassen und ich habe es jetzt nochmal anders versucht. Zuerst bereinige ich die Daten mit replace und schreibe sie in einen neuen Datenpunkt.
// WarnAndError let jsonWar = getState("logparser.0.filters.WarnAndError.json").val; //log(jsonWar); jsonWar = jsonWar.replace(/<[^>]+>/g, ''); //log(jsonWar); setState('0_userdata.0.LP_JSON.Warn_JSON', jsonWar);Das klappt und im neuen Datenpunkt habe ich dann diesen String stehen:
Das sieht schon mal sehr gut aus. Dann habe ich mit diesem Script die Daten übertragen:
var request = require ('request'); // WarnAndError let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; // WarnAndError request('http://192.168.1.14:8087/set/0_userdata.0.LogParser_Raspi4.WarnAndError.json?value=' +jsonWar);Was dann ankommt, ist nur ein Teil der Daten und die sind wieder irgendwie kaputt:
[EDIT]
Hab die Lösung gefunden. Mache es nach dem Bereinigen wie von @ticaki beschrieben mit axios und dann klappt die Übertragung und ich kann die Daten in VIS anzeigen.// das hier muß einmal im Skript stehen const axios = require("axios") // hiermit sendest du die Daten: sollte selbst erklärend sein postJson("192.168.1.14:8087", "0_userdata.0.LogParser_Raspi4.WarnAndError.json", getState("0_userdata.0.LP_JSON.Warn_JSON").val) //Das hier irgendwo unten wo es nicht stört async function postJson(ip, dp, value) { // WarnAndError let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; try { const {data} = await axios.post('http://'+ip+'/setValueFromBody/'+dp, jsonWar, { headers: { "Content-Type": 'application/json' } } ) } catch(error) { console.warn('Daten nicht übertragen!' + error) } }Also erst mit replace bereinigen und in einen lokalen DP kopieren, dann von dort aus mit axios übertragen. Ist axios eigentlich eine Funktion, oder wie nennt man das?
Gruß Johannes
-
@jojo58 sagte: in einen lokalen DP kopieren, dann von dort aus
Hast Du es mal ohne den zusätzlichen DP mit Axios nach dem Bereinigen versucht?
-
@jojo58 sagte: in einen lokalen DP kopieren, dann von dort aus
Hast Du es mal ohne den zusätzlichen DP mit Axios nach dem Bereinigen versucht?
@paul53 @ticaki Vielen Dank für die Hilfe. :+1: :+1: :+1:
Ich habe jetzt für jeden der drei DP ein Script und das funktioniert. Da ich keine Ahnung habe, kann man Script mit Sicherheit verbessern oder anders aufbauen. Ich bin allerdings froh das es läuft. Das ist das Ergebnis:const axios = require("axios") // ---------- clean and copy ------------ // WarnAndError.json Daten bereinigen und in neuen DP kopieren let jsonWarnAndError = getState("logparser.0.filters.WarnAndError.json").val; jsonWarnAndError = jsonWarnAndError.replace(/<[^>]+>/g, ''); setState('0_userdata.0.LP_JSON.Warn_JSON', jsonWarnAndError); // --------------- senden -------------- // Pfade zu den Objekten // IP = "IP:Port" // dp = "Objekt auf anderer ioBroker Instanz" // value = "lokales Objekt" postJson("192.168.1.14:8087", "0_userdata.0.LogParser_Raspi4.WarnAndError.json", getState("0_userdata.0.LP_JSON.Warn_JSON").val) //Das hier irgendwo unten wo es nicht stört async function postJson(ip, dp, value) { // WarnAndError.json senden let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; try { const {data} = await axios.post('http://'+ip+'/setValueFromBody/'+dp, jsonWar, { headers: { "Content-Type": 'application/json' } } ) } catch(error) { console.warn('Daten nicht übertragen!' + error) } }Grüße aus dem (noch) sonnigen Köln.
JoJo
-
@paul53 @ticaki Vielen Dank für die Hilfe. :+1: :+1: :+1:
Ich habe jetzt für jeden der drei DP ein Script und das funktioniert. Da ich keine Ahnung habe, kann man Script mit Sicherheit verbessern oder anders aufbauen. Ich bin allerdings froh das es läuft. Das ist das Ergebnis:const axios = require("axios") // ---------- clean and copy ------------ // WarnAndError.json Daten bereinigen und in neuen DP kopieren let jsonWarnAndError = getState("logparser.0.filters.WarnAndError.json").val; jsonWarnAndError = jsonWarnAndError.replace(/<[^>]+>/g, ''); setState('0_userdata.0.LP_JSON.Warn_JSON', jsonWarnAndError); // --------------- senden -------------- // Pfade zu den Objekten // IP = "IP:Port" // dp = "Objekt auf anderer ioBroker Instanz" // value = "lokales Objekt" postJson("192.168.1.14:8087", "0_userdata.0.LogParser_Raspi4.WarnAndError.json", getState("0_userdata.0.LP_JSON.Warn_JSON").val) //Das hier irgendwo unten wo es nicht stört async function postJson(ip, dp, value) { // WarnAndError.json senden let jsonWar = getState("0_userdata.0.LP_JSON.Warn_JSON").val; try { const {data} = await axios.post('http://'+ip+'/setValueFromBody/'+dp, jsonWar, { headers: { "Content-Type": 'application/json' } } ) } catch(error) { console.warn('Daten nicht übertragen!' + error) } }Grüße aus dem (noch) sonnigen Köln.
JoJo
@paul53 @ticaki Moin Zusammen, nur eine Info für euch. Das Script hat mir keine Ruhe gelassen, ich wollte es verbessern. Ich habe dann eine KI gefragt, was man verbessern könnte und das kam dabei heraus. Wahrscheinlich habt ihr noch andere Ideen, aber ich finde es schon mal gut, brauche nur die Variablen anpassen.
const axios = require("axios"); // Constante für Quell und Zieldatenpunkte const sourceDP = 'logparser.0.filters.Homematic.json'; const targetDP = '0_userdata.0.LP_JSON.HM_JSON'; // Constante zum Senden an die andere ioBroker Instanz const targetIp = '192.168.1.14:8087'; const targetDp = '0_userdata.0.LogParser_Raspi4.HomeMatic.json'; // Clean and Copy JSON Data function cleanAndCopyJson() { const jsonNew = getState(sourceDP).val.replace(/<[^>]+>/g, ''); setState(targetDP, jsonNew); } // Send JSON Data to Another ioBroker Instance async function sendJsonToOtherInstance() { try { const jsonToSend = getState(targetDP).val; const response = await axios.post( `http://${targetIp}/setValueFromBody/${targetDp}`, jsonToSend, { headers: { "Content-Type": 'application/json' } } ); console.log('Logparser Daten erfolgreich gesendet:', response.data); } catch (error) { console.error('Fehler beim Senden der Logparser Daten:', error.message); } } // Main function function main() { cleanAndCopyJson(); sendJsonToOtherInstance(); } // Run the main function main();Gruß Johannes