@labersack Nochmal Wow. Das ging ja ebenfalls flott. Vielen Dank und ein schönes Weihnachtsfest.
NEWS
Best posts made by kdtcat
-
RE: Angebot für Reparatur des "C26-Problems"
-
RE: Angebot für Reparatur des "C26-Problems"
@labersack Heute kam der Erste Deiner reparierten HM-LC-Sw1PBU-FM zum Einsatz. Funktioniert einwandfrei. Ersetzt wurde ein Schalter, der jetzt wohl auch das C26 Problem hat. Wenn sich noch einer verabschiedet, komme ich wieder auf Dich zu. Ich hoffe Du hast noch lange Spaß an Deinem vorzüglichen Service.
-
RE: Angebot für Reparatur des "C26-Problems"
@labersack Paket ist soeben angekommen. Nochmals vielen Dank für Deinen Klasse Service!
Latest posts made by kdtcat
-
RE: Daten mit Blockly aus InfluxDB abrufen
@kdtcat ```
var parm1, parm2, result, BatteryLevel, PowerConsumptionTotal, PowerProductionTotal, EnergyProductionTotalDay, EnergyConsumptionTotalDay, EnergyExternalTotalOutDay, EnergyBatteryChargeDay, EnergyStorageTotalOutDay, StromverbrauchAnteilSolarTag, STromverbrauchAlleTag; // Beschreibe diese Funktion … async function iq(parm1, parm2) { // Beschreibe diese Funktion var ergebnis, fparm, fparm2; fparm = 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == ' + parm1 + ') |> aggregateWindow(every: 2m, fn: mean)'; fparm2 = '0_userdata.0.Enpal.' + parm2; sendTo('influxdb.0', 'query', fparm, async (result) => { test0 = (await jsonataExpression(result,'*[0]._value ')); setStateDelayed(fparm2, test0, true, parseInt(((0) || '').toString(), 10), false); }); return ergebnis; } schedule("*/2 * * * *", async () => { result = await iq('"Energy.Battery.Charge.Level"', 'BatteryLevel'); await wait(3000); BatteryLevel = Math.round(getState('0_userdata.0.Enpal.BatteryLevel').val * 100) / 100; setStateDelayed('0_userdata.0.Enpal.BatteryLevel', { val: BatteryLevel, ack: false }, parseInt(((0) || '').toString(), 10), false); result = await iq('"Power.Consumption.Total"', 'PowerConsumptionTotal'); await wait(3000); PowerConsumptionTotal = getState('0_userdata.0.Enpal.PowerConsumptionTotal').val; result = await iq('"Power.Production.Total"', 'PowerProductionTotal'); await wait(3000); PowerProductionTotal = getState('0_userdata.0.Enpal.PowerProductionTotal').val; result = await iq('"Energy.Production.Total.Day"', 'EnergyProductionTotalDay'); await wait(3000); EnergyProductionTotalDay = getState('0_userdata.0.Enpal.EnergyProductionTotalDay').val; result = await iq('"Energy.Consumption.Total.Day"', 'EnergyConsumptionTotalDay'); await wait(3000); EnergyConsumptionTotalDay = getState('0_userdata.0.Enpal.EnergyConsumptionTotalDay').val; result = await iq('"Energy.External.Total.Out.Day"', 'EnergyExternalTotalOutDay'); await wait(3000); EnergyExternalTotalOutDay = getState('0_userdata.0.Enpal.EnergyExternalTotalOutDay').val; result = await iq('"Energy.Battery.Charge.Day"', 'EnergyBatteryChargeDay'); await wait(3000); EnergyBatteryChargeDay = getState('0_userdata.0.Enpal.EnergyBatteryChargeDay').val; result = await iq('"Energy.Storage.Total.Out.Day"', 'EnergyStorageTotalOutDay'); await wait(3000); EnergyStorageTotalOutDay = getState('0_userdata.0.Enpal.EnergyStorageTotalOutDay').val; StromverbrauchAnteilSolarTag = EnergyProductionTotalDay - EnergyExternalTotalOutDay; StromverbrauchAnteilSolarTag = StromverbrauchAnteilSolarTag - EnergyBatteryChargeDay; setStateDelayed('0_userdata.0.Enpal.StromverbrauchAnteilSolarTag', { val: StromverbrauchAnteilSolarTag, ack: false }, parseInt(((0) || '').toString(), 10), false); STromverbrauchAlleTag = StromverbrauchAnteilSolarTag + EnergyStorageTotalOutDay + EnergyConsumptionTotalDay; setStateDelayed('0_userdata.0.Enpal.StromverbrauchAlleTag', { val: STromverbrauchAlleTag, ack: false }, parseInt(((0) || '').toString(), 10), false); console.info((['1: ',BatteryLevel,', 2: ',PowerConsumptionTotal,', 3: ',PowerProductionTotal,', 4: ',EnergyProductionTotalDay,', 5: ',EnergyConsumptionTotalDay,', 6: ',EnergyExternalTotalOutDay,', 7: ',EnergyBatteryChargeDay,', 8: ',EnergyStorageTotalOutDay,', 9: ',StromverbrauchAnteilSolarTag,', 10: ',STromverbrauchAlleTag].join(''))); });
-
RE: Daten mit Blockly aus InfluxDB abrufen
@tobiddGute Idee mit der Function. Damit habe ich mein Script auch wieder "Blockly fähig" gemacht.
-
RE: Daten mit Blockly aus InfluxDB abrufen
@tobidd sagte in Daten mit Blockly aus InfluxDB abrufen:
@kdtcat
Hallo, kannst du mir eventuell ein Beispiel zeigen, wie du das gelöst hast.
Ich hatte jetzt lange keine Lust mehr dem Thema nachzugehen. Jetzt bin ich wieder etwas motivierter.Grüße Tobi
Hier als Beispiel die beiden ersten Werte meines Scripts:
schedule("*/2 * * * *", async () => { result = !''.length; sendTo('influxdb.0', 'query', 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Energy.Battery.Charge.Level") |> aggregateWindow(every: 2m, fn: mean)', async (result) => { test1 = (await jsonataExpression(result,'*[0]._value ')); setStateDelayed('0_userdata.0.Enpal.BatteryLevel', Math.round(test1 * 100) / 100, true, parseInt(((0) || '').toString(), 10), false); }); await wait(3000); result = !''.length; sendTo('influxdb.0', 'query', 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Power.Consumption.Total") |> aggregateWindow(every: 2m, fn: mean)', async (result) => { test2 = (await jsonataExpression(result,'*[0]._value ')); setStateDelayed('0_userdata.0.Enpal.PowerConsumptionTotal', test2, true, parseInt(((0) || '').toString(), 10), false); }); await wait(3000); });
-
RE: Daten mit Blockly aus InfluxDB abrufen
@tobidd Ich habe jetzt auch festgestellt, dass das Blockly "sendTo" nicht mehr funktioniert. Scheinbar ist durch ein Update die Query Funktion geändert worden. Blockly generiert jetzt immer ein Query Array, welches bei InfluxDb nicht erlaubt ist. Im Javascript Code erkennt man das am { Zeichen.
Meine bis jetzt einzige Lösung ist das Script als Native Script weiterzuführen.
-
RE: InfluxDB auslesen (Enpal)
@conector777 Falls Du noch nicht weiter bist, hätte ich noch ein paar Tipps. Ich war jetzt erfolgreich beim Zugriff auf die Influxdb in der Enpal Box.
Als erstes habe ich den Influxdb Adapter installiert und für den Zugriff auf Enpal konfiguriert. Alle notwendigen Parameter findet man auf der Webseite Seiner Enpal Box.
Als nächstes habe ich ein Javascript mit Blockly gebastelt, um gezielt einzelne Werte zu holen und diese als Iobroker Objekt abzulegen(userdata.0). Dieses Script läuft z.B. alle 3 Minuten und schreibt immer den aktuellen Wert ins Objekt.var result, test1, test2; schedule("*/3 * * * *", async () => { result = 'Anfang'; sendTo('influxdb.0', 'query', 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Energy.Battery.Charge.Level")', async (result) => { test1 = (await jsonataExpression(result,'*[0]._value ')); }); setStateDelayed('0_userdata.0.Enpal.BatteryLevel', Math.round(test1 * 100) / 100, true, parseInt(((0) || '').toString(), 10), false); result = !''.length; sendTo('influxdb.0', 'query', 'from(bucket: "solar") |> range(start: -1m) |> filter(fn: (r) => r["_field"] == "Power.Consumption.Total")', async (result) => { test2 = (await jsonataExpression(result,'*[0]._value ')); }); console.info("influxdb.0: " + ""); setStateDelayed('0_userdata.0.Enpal.PowerConsumptionTotal', test2, true, parseInt(((0) || '').toString(), 10), false); });
Um jetzt noch eine anständige Historie zu erhalten, habe ich ein zweites Script gemacht, welches einen Trigger auf Wertänderung des Objekts setzt und bei Änderung das Ganze in eine beliebige Historien Anwendung übernimmt. In meinem Fall eine CCU.
on({ id: [].concat(['0_userdata.0.Enpal.BatteryLevel']), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setStateDelayed('hm-rega.0.13211', getState('0_userdata.0.Enpal.BatteryLevel').val, false, parseInt(((0) || '').toString(), 10), false); });
Happy Coding.
-
RE: Angebot für Reparatur des "C26-Problems"
@labersack Heute kam der Erste Deiner reparierten HM-LC-Sw1PBU-FM zum Einsatz. Funktioniert einwandfrei. Ersetzt wurde ein Schalter, der jetzt wohl auch das C26 Problem hat. Wenn sich noch einer verabschiedet, komme ich wieder auf Dich zu. Ich hoffe Du hast noch lange Spaß an Deinem vorzüglichen Service.
-
RE: Angebot für Reparatur des "C26-Problems"
@labersack Paket ist soeben angekommen. Nochmals vielen Dank für Deinen Klasse Service!
-
RE: Angebot für Reparatur des "C26-Problems"
@labersack Nochmal Wow. Das ging ja ebenfalls flott. Vielen Dank und ein schönes Weihnachtsfest.
-
RE: Angebot für Reparatur des "C26-Problems"
@labersack Wow, da soll noch mal einer etwas negatives über DHL sagen.