@haus-automatisierung Ja, es funktioniert für meine Bedürfnisse hervorragend, da es große Flexibiliät beinhaltet. Es müssen nur im loggingTemplate die benötigten tags und fields eingetragen werden.
Vielen Dank für Deine Unterstützung.
Gruß DET
NEWS
Latest posts made by DET
-
RE: http post tagkeys und fieldkeys
-
RE: http post tagkeys und fieldkeys
@haus-automatisierung Du hast recht, es wird etwas anders genutzt. Die Spannungswerte sind nicht so wichtig und müssen auch nicht unbedingt gemeinsam geloggt werden. aber die Powerwerte müssen schon gemeinsam geloggt werden, oder? Sonst bekomme ich doch keine saubere Summenkurve der Power über die Zeit hin. Jetzt sind sie unter verschiedenen Fieldkeys, die würde ich gern unter dem Fieldkey 'Power' speichern wollen um dann mit Hilfe der Tagvalues unterschiedliche Auswertungen durchzuführen. In dem Script sind noch nicht alle Powerwerte vorhanden sondern es kommen noch 3 weiter Wechselrichter mit weiteren MPPT's Power werten dazu.
Ich benutze auch nicht den InfluxDB Adapter, die InfluxDB liegt in einem eigenen Docker-Container und nur über dein Script schreibe ich dort dorten rein. -
http post tagkeys und fieldkeys
Moin Zusammen,
nutzte das Script von @haus-automatisierung zur Befühlung der influxDB// v0.1 const axios = require('axios').default; const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx=='; const measurement = 'PV-Anlage'; const protocol = 'http'; const host = 'xx.yy.zz.ww'; const port = '8086'; const org = 'SmartHome'; const bucket = 'Energieversorgung'; const loggingTemplate = { 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.ELECTRIC_POWER': 'Leistung-West3', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT1-West3.VOLTAGE': 'Spannung-West3', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.ELECTRIC_POWER': 'Leistung-Süd1', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT2-Süd1.VOLTAGE': 'Spannung-Süd1', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.ELECTRIC_POWER': 'Leistung-Ost3', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT3-Ost3.VOLTAGE': 'Spannung-Ost3', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.ELECTRIC_POWER': 'Leistung-Ost4', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR1.MPPT4-Ost4.VOLTAGE': 'Spannung-Ost4', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.ELECTRIC_POWER': 'Leistung-Ost1', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT1-Ost1.VOLTAGE': 'Spannung-Ost1', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.ELECTRIC_POWER': 'Leistung-Ost2', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT2-Ost2.VOLTAGE': 'Spannung-Ost2', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.ELECTRIC_POWER': 'Leistung-West1', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT3-West1.VOLTAGE': 'Spannung-West1', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.ELECTRIC_POWER': 'Leistung-West2', 'alias.0.PV-Anlage.Hauptanlage_Victron.SLR2.MPPT4-West2.VOLTAGE': 'Spannung-West2', }; const loggingObj = {}; async function start() { console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`); // Init loggingObj with current values for (let [objId, key] of Object.entries(loggingTemplate)) { const state = await getStateAsync(objId); if (state && !isNaN(state.val)) { loggingObj[key] = state.val; } else { loggingObj[key] = 0; } } on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => { // Update value in loggingObj const key = loggingTemplate[obj.id]; loggingObj[key] = obj.state.val; // Save Data const data = `${measurement} ${Object.keys(loggingObj) .filter(key => !isNaN(loggingObj[key])) .map((key) => `${key}=${loggingObj[key]}`) .join(',')}`; if (data) { // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`); // console.dir(data); const options = { url: `${protocol}://${host}:${port}/api/v2/write?org=${org}&bucket=${bucket}`, method: 'POST', headers: { 'Authorization': `Token ${token}`, 'Content-Type': "text/plain; charset=utf-8" }, timeout: 0, data } axios(options).catch(error=>console.log(error)) //axios.post(`${protocol}://${host}:${port}/api/v2/write?bucket=${bucket}&org=${org}`, data, { // headers: { // 'Content-Type': 'text/plain', // 'Authorization': `Token ${token}` // } //}).catch(err => { // console.error(err); //}); } }); } start();
Hier werden leider tagkey Informationen in fieldkeys mitverarbeitet. Was für die weitere Verarbeitung sehr hinderlich ist.
Z.B. Leistung-West1 als fieldkey.
Besser wären tagkeys: Ausrichtung=West,MPPT=1
und als fieldkey: Leistung=500.00So könnten man mit der Filterfunktion in influxDB besser weiterarbeiten, zum Beispiel alle Leistungswerte einer bestimmten Ausrichtung addieren oder alle Leistungswerte eines Solarladeregler adieren.
Nun müssen aber auch alle Daten den gleichen timestamp bekommen um sie dann sinnvoll zuverarbeiten.
Im Line Protokoll von influxDB gibt es die Möglichkeit folgende Syntax anzuwenden:
meassurment,tagkey1=tagvalue1,tagkey2=tagvalue2 fieldkey=fieldvalue timestamp
meassurment,tagkey3=tagvalue3,tagkey4=tagvalue4 fieldkey=fieldvalue timestampalles in einer Zeile und soweiter.
Ich würde gern den timestamp weglassen, damit der Server den timestamp setzen kann.Da ich ein Newbie im programmieren bin und versuche mir, mit dieser Aufgabe, gerade JavaScript beizubringen überfordert mich das Ganze. Vielleich kann mir jemand auf die Sprünge helfen.
Am besten wäre das ganze dynamisch zuhalten und nur im loggingTemplate zubestimmen welche und wielviel tags genutzt werden.Gruß DET
-
nodeRED KNX Kopplung "On duty"
Moin,
ich bekomme nach der Installation von NodeRED und der "node-red-contrib-knx-ultimade" Palette keine Infos von den KNX Devices.
Das KNX-Device ist wohl connected und meldet "On duty".
Ich finde keine Information was es bedeutet und vor allem nicht wie ich den Zustand ändern kann. Hier ein Screenshot meines Test flows.
Wenn noch weitere Infos benötigt werden um mir zu helfen, würde ich sie gern zur Verfügung stellen. Vielen Dank für die Unterstützung.
MfG DET