UNPKG

iobroker.valuetrackerovertime

Version:

Tracks number-changes over timepsans like hours/days/years ...

122 lines (108 loc) 4.67 kB
let UrObjectID = 'sonoff.0.Arbeitsplatz.ENERGY_Total'; let Zielname = 'Stromverbrauch_WohnzimmerArbeitsplatz'; let ZielUnit = 'kWh'; let ZielMulti = 1; console.log('Read out Data'); let UrDP = await getObjectAsync(UrObjectID); // @ts-ignore let Start_day_SA = UrDP.common.custom['sourceanalytix.0'].start_day / ZielMulti; // @ts-ignore let Start_week_SA = UrDP.common.custom['sourceanalytix.0'].start_week / ZielMulti; // @ts-ignore let Start_month_SA = UrDP.common.custom['sourceanalytix.0'].start_month / ZielMulti; // @ts-ignore let Start_quarter_SA = UrDP.common.custom['sourceanalytix.0'].start_quarter / ZielMulti; // @ts-ignore let Start_year_SA = UrDP.common.custom['sourceanalytix.0'].start_year / ZielMulti; UrDP.common.custom['valuetrackerovertime.0'] = { enabled: true, alias: Zielname, output_unit: ZielUnit, output_multiplier: ZielMulti, detailed_days: true, detailed_weeks: true, detailed_months: true, detailed_quarters: false, detailed_years: true, before_minutes: -1, before_hours: -1, before_days: 7, before_weeks: 4, before_months: 12, before_quarters: -1, before_years: 3, counterResetDetection: true, counterResetDetetion_CountAfterReset: 1, }; console.log(`Aktiviere valuetrackerovertime for ${UrObjectID}`); await setObjectAsync(UrDP._id, UrDP); let valueTrackerID = `valuetrackerovertime.0.${Zielname}`; console.log(`valuetrackerovertime aktiviert, warte 10 sek auf erstellen der DP unter ${valueTrackerID}`); await wait(10000); await setStateAsync(`${valueTrackerID}._startValues.start_01_Day`, Start_day_SA, true); await setStateAsync(`${valueTrackerID}._startValues.start_02_Week`, Start_week_SA, true); await setStateAsync(`${valueTrackerID}._startValues.start_03_Month`, Start_month_SA, true); await setStateAsync(`${valueTrackerID}._startValues.start_04_Quarter`, Start_quarter_SA, true); await setStateAsync(`${valueTrackerID}._startValues.start_05_Year`, Start_year_SA, true); let abc = UrDP._id.split('.'); let SA_ID = `sourceanalytix.0.${abc.join('__')}.consumption`; const TimeFramesx = { Day: 'Day', Week: 'Week', Month: 'Month', Quarter: 'Quarter', Year: 'Year', }; let zahler = 0; //SQL für DPs aktivieren for (let oneTimeFrame in TimeFramesx) { console.log(`Übernehme SQL Settings aus den Sourceanalytics-Datenpunkte für ${oneTimeFrame}`); zahler++; let SACurrentID = `${SA_ID}.0${zahler}_current_${oneTimeFrame.toLowerCase()}`; let NewCurrentID = `${valueTrackerID}.0${zahler}_current${oneTimeFrame}`; let SACurrentDay = await getObjectAsync(SACurrentID); if (existsObject(NewCurrentID)) { let NewCurrentDay = await getObjectAsync(NewCurrentID); if (!('custom' in NewCurrentDay.common)) { NewCurrentDay.common.custom = {}; } if ('sql.0' in SACurrentDay.common.custom) { NewCurrentDay.common.custom['sql.0'] = SACurrentDay.common.custom['sql.0']; } if ('influxdb.0' in SACurrentDay.common.custom) { NewCurrentDay.common.custom['influxdb.0'] = SACurrentDay.common.custom['influxdb.0']; } await setObjectAsync(NewCurrentDay._id, NewCurrentDay); console.log(` SQL Settings für ${NewCurrentDay._id}`); } } zahler = 0; console.log('Alle SQL Einstellungen übernommen, warte 10 Sekunden für Ids in Datenbank erstellen'); await wait(20000); for (let oneTimeFrame in TimeFramesx) { zahler++; let SACurrentID = `${SA_ID}.0${zahler}_current_${oneTimeFrame.toLowerCase()}`; let NewCurrentID = `${valueTrackerID}.0${zahler}_current${oneTimeFrame}`; if (existsObject(NewCurrentID)) { console.log(`Kopiere SQL Daten von Sourceanlytics in neuen DP ${NewCurrentID}`); console.log( await getQueryResultAsync(`Insert into iobroker.ts_number SELECT (select id from iobroker.datapoints d2 where name = '${NewCurrentID}') id, t.ts, t.val, t.ack, t._from, t.q FROM iobroker.ts_number t Inner Join iobroker.datapoints d on t.id = d.id where d.name = '${SACurrentID}' ;`), ); console.log(`Daten erfolgreich kopiert nach ${NewCurrentID}`); } } console.log(`finished ${UrObjectID}`); async function getQueryResultAsync(query) { return new Promise((resolve, reject) => { sendTo('sql.0', 'query', query, function (result) { if (!result.error) { resolve(result.result); } else { console.error(result.error); } }); }); }