Skip to content

Generated states, messages and log entries ​

Where do I find yesterday, last week, last month (previous states)? ​

In short: Completed periods are stored under sourceanalytix.0.<device>.currentYear.<category> in the states 01_previousDay (yesterday), 02_previousWeek (last week), 03_previousMonth (last month), 04_previousQuarter (last quarter) and 05_previousYear (last year). They are filled at the period rollover at midnight, so only after the first rollover, and only if "Previous period" is switched on in the instance.

Where the states are ​

<category> depends on what you switched on for the datapoint and on whether the price definition describes costs or earnings:

Folder under currentYearContentWhen it exists
consumedConsumption"Calculate consumption" on, price definition of type Costs
deliveredFeed-in or generation"Calculate consumption" on, price definition of type Earnings
costsCosts"Calculate costs" on, price definition of type Costs
earningsEarnings"Calculate costs" on, price definition of type Earnings
meterReadingsMeter reading at the end of the period"Store Meter Values" on

Each of these folders has the same five previous-period states. For example, yesterday's electricity consumption is in sourceanalytix.0.<device>.currentYear.consumed.01_previousDay, and the matching costs are in sourceanalytix.0.<device>.currentYear.costs.01_previousDay. meterReadings doesn't contain consumption but the meter reading (cumulativeReading) at the moment of the rollover.

If "Weekday" is also switched on, you'll find the days of last week individually under currentYear.<category>.previousWeek, e.g. previousWeek.01_Monday to previousWeek.07_Sunday.

The same values are also in the JSON state sourceanalytix.0.<device>.statisticsJson, see JSON with all values.

From v0.7.0, the source detail in the instance settings shows these values in the "Values" table, with the rows "Yesterday", "Last week", "Last month", "Last quarter" and "Last year" for consumption and costs.

When they are filled ​

At the period rollover, SourceAnalytix copies the value of the current period into the matching previous-period state, for example 01_currentDay to 01_previousDay. The current period then starts at 0 again.

StateFirst filled
01_previousDayafter the first midnight
02_previousWeekon the first Monday at 0:00 (weeks start on Monday)
03_previousMonthon the 1st of the next month at 0:00
04_previousQuarteron January 1, April 1, July 1 or October 1 at 0:00
05_previousYearon January 1 at 0:00

Until the first rollover, the states contain 0. That is not an error. The rollover follows the clock of the machine or container that ioBroker runs on.

The value is exactly what the current period held at the time of the rollover. If you enabled a datapoint in the middle of the week and didn't enter start values, the first 02_previousWeek only contains the days since activation.

If ioBroker was down at midnight, SourceAnalytix catches up the rollover at the next start. It also checks every hour whether a rollover is missing. For more, see Catching up the day rollover.

Timestamps ​

Since v0.5.5, the previous-period states don't carry the time of the rollover. They carry 23:59:59 on the last day of the period they belong to. So yesterday's value has the timestamp yesterday 23:59:59. This way, history adapters and charts plot the value in the correct period.

WARNING

If ioBroker was down for several days, 01_previousDay doesn't hold yesterday's consumption after the start, but that of the last day SourceAnalytix still counted. The timestamp is still yesterday 23:59:59. There are no separate values for the days in between. After a longer outage, check the values in the history adapter.

Because the timestamp lies in the past, a history adapter may treat the value differently from an ordinary new value. If the rollover is caught up later in the day, the value still gets the timestamp of yesterday 23:59:59.

If the states are missing or stay empty ​

  1. Open the SourceAnalytix instance settings, "Main settings" tab, "Current year" section.
  2. Check that "Previous period" is switched on (default: on). For the individual weekdays of last week, "Weekday" must also be on.
  3. Check on the source whether "Consumption" or "Costs" is switched on (from v0.7.0 in the source detail, up to v0.6.x in the custom settings dialog of the datapoint under "Calculate consumption" and "Calculate costs"). Previous-period states are only created for these folders.
  4. Wait for the next period rollover. Until then, the state contains 0.

WARNING

If you switch "Previous period" off, SourceAnalytix deletes the previous-period states the next time the instance starts. If you switch it on again, they start at 0 and are only filled again at the next rollover. Recordings in a history adapter are kept.

From v0.6.2: If ioBroker or the datapoint was down over midnight, SourceAnalytix splits the consumption of the gap between both days by time. As soon as the first value arrives after the outage, the share that falls on the old day is added to 01_previousDay afterwards (and, at a week, month or year rollover, to the other previous periods). Up to v0.6.1, the whole gap counted toward the new day (#1260).

From v0.6.2: For power sources in W, the energy up to midnight is credited to the ending day. Up to v0.6.1, it was lost at every rollover, so 01_previousDay was slightly too low (#1254).

See also: Which week, month and quarter states and weekdays are there? · When are values updated: live or at midnight? · What happens at the turn of the year?

Which week, month and quarter states and weekdays are there? ​

In short: Under sourceanalytix.0.<device>.currentYear.<category>, besides day, week, month, quarter and year, you can optionally get the values of each weekday, each calendar week, each month and each quarter of the current year. You choose which ones exist in the instance settings on the "Main settings" tab, in the "Current year" section. Rolling values like "the last 7 days" don't exist.

The tree of the current year ​

text
sourceanalytix.0.<device>
├── cumulativeReading
├── statisticsJson
└── currentYear
    └── <category>
        ├── 01_currentDay … 05_currentYear
        ├── 01_previousDay … 05_previousYear
        ├── currentWeek.01_Monday … 07_Sunday
        ├── previousWeek.01_Monday … 07_Sunday
        ├── weeks.01 … 53
        ├── months.01_January … 12_December
        └── quarters.Q1 … Q4

<category> is consumed or delivered (consumption or feed-in), costs or earnings (costs or earnings) and meterReadings (meter readings). Under meterReadings there are no 0X_current… states. The current reading is in cumulativeReading.

StatesContentOption under "Current year"Reset to 0
01_currentDay to 05_currentYearcurrent day, week, month, quarter, yearalways presentat the period rollover
01_previousDay to 05_previousYearcompleted previous period"Previous period"never, overwritten at the next rollover
currentWeek.01_Monday to 07_Sundayvalue of each day of the current week"Weekday"Mondays at 0:00
previousWeek.01_Monday to 07_Sundayvalue of each day of the previous week"Weekday" and "Previous period"never, overwritten on Mondays
weeks.01 to 53value of the calendar week per ISO 8601, Monday to Sunday"Weeks"on January 1
months.01_January to 12_Decembervalue of the month"Months"on January 1
quarters.Q1 to Q4value of the quarter"Quarters"on January 1

The weekdays are called 01_Monday, 02_Tuesday, 03_Wednesday, 04_Thursday, 05_Friday, 06_Saturday and 07_Sunday, the months 01_January to 12_December. There are always 53 week states, even in years with 52 calendar weeks. The days from December 29 to 31 that already belong to week 01 of the new year are not under weeks, see Why does week 52/53 show values in the new year?.

Keeping values beyond the year ​

On January 1, SourceAnalytix resets weeks, months and quarters under currentYear to 0. To keep the values of previous years, switch on "Weeks", "Months" or "Quarters" in the "Year statistics" section. SourceAnalytix then creates a separate folder for each year, sourceanalytix.0.<device>.<year>.<category>.weeks, .months or .quarters, which is kept. For more, see What happens at the turn of the year?.

The last 7 days ​

SourceAnalytix doesn't calculate a rolling value over the last 7 days. currentWeek.<weekday> holds the days of the current week from Monday, and previousWeek.<weekday> holds the days of the whole previous week. For the last 7 days, take the matching days from both folders. Hourly and rolling values are planned (#424).

When the rollover happens ​

SourceAnalytix switches periods at 0:00 according to the system clock. It also checks every hour and at startup whether a rollover is missing, and catches it up. From v0.7.0 you can also do this by hand with the "Recover periods" action on a source or with the state info.recoverPeriods, see ioBroker was down at midnight.

From v0.6.2: The week archive in the year folder follows the year of the ISO calendar week. Week 01, which already starts at the end of December, ends up in the folder of the new year and no longer overwrites week 01 of the old year (#1256).

See also: Where do I find yesterday, last week, last month (previous states)? · Which instance settings are there (periods, decimals)? · Why do week, month, quarter and year values differ?

Is there a JSON with all values (for VIS)? ​

In short: Yes. Every source has the state sourceanalytix.0.<device>.statisticsJson. It contains all values of the current year as one JSON: consumption, costs and meter readings, each for the current periods, the previous periods, and the weekdays, weeks, months and quarters. You don't have to switch anything on for it.

Structure ​

A shortened example for an electricity source:

json
{
  "schemaVersion": 1,
  "year": 2026,
  "source": { "id": "<datapoint ID>", "name": "Strom Haus", "unit": "kWh" },
  "quantity": {
    "type": "consumed",
    "current": { "day": 4.2, "week": 31.7, "month": 120.4, "quarter": 410.9, "year": 2950.3 },
    "previous": { "day": 5.1, "week": 33.2, "month": 140.8, "quarter": 420.5, "year": 3510.6 },
    "periods": {
      "weekdays": { "1": 5.3, "2": 4.2 },
      "previousWeekdays": { "1": 4.9, "2": 5.0, "3": 4.4, "4": 4.6, "5": 4.8, "6": 5.2, "7": 4.3 },
      "weeks": { "45": 33.2, "46": 31.7 },
      "months": { "10": 140.8, "11": 120.4 },
      "quarters": { "3": 420.5, "4": 410.9 }
    }
  },
  "financial": {
    "type": "costs",
    "currency": "€",
    "current": { "day": 1.34, "week": 10.14, "month": 38.53, "quarter": 131.49, "year": 944.1 },
    "previous": { "day": 1.63, "week": 10.62, "month": 45.06, "quarter": 134.56, "year": 1123.39 },
    "periods": { "weekdays": {}, "previousWeekdays": {}, "weeks": {}, "months": {}, "quarters": {} }
  },
  "meterReadings": {
    "current": 48213.4,
    "previous": { "day": 48209.2, "week": 48181.7, "month": 48093, "quarter": 47802.5, "year": 45263.1 },
    "periods": { "weekdays": {}, "previousWeekdays": {}, "weeks": {}, "months": {}, "quarters": {} }
  }
}
FieldContent
schemaVersionVersion of the structure, currently 1
yearthe current year
sourceid of the datapoint, name of the source, unit = target unit
quantityConsumption (type: consumed) or feed-in (delivered); null if "Consumption" is off
financialCosts (costs) or earnings (earnings) with currency; null if "Costs" is off
meterReadingsMeter readings; current is the total from cumulativeReading; null if "Store meter readings" is off
currentcurrent periods day to year, from 01_currentDay to 05_currentYear
previousprevious periods from 01_previousDay to 05_previousYear; null if "Previous period" is off
periods.weekdays, periods.previousWeekdaysweekdays of the current and the previous week, keys 1 (Monday) to 7 (Sunday)
periods.weekscalendar weeks, keys 01 to 53
periods.monthsmonths, keys 01 to 12
periods.quartersquarters, keys 1 to 4

A group under periods is null if the option under "Current year" is off. A value that doesn't exist yet is missing or null. The year archive (<ID>.<year>) is not part of the JSON.

When it is written ​

SourceAnalytix collects the changes of a value and writes the JSON at most every 300 ms, and only if the content has changed. At startup, it rebuilds the JSON from the existing states. If the source is deactivated, the last JSON stays in place but is no longer updated. The state is read-only (role json).

TIP

In a script, read the JSON with JSON.parse(getState('sourceanalytix.0.<device>.statisticsJson').val). That way, a table in VIS needs only one state instead of many individual ones.

See also: How do I visualize the values in VIS, Flot, HabPanel and the history? · How do I read SourceAnalytix values in a script? · Which week, month and quarter states and weekdays are there?

What happens at the turn of the year? ​

In short: On January 1 at 0:00, the year value moves to 05_previousYear, all current periods start at 0, and the weeks, months and quarters under currentYear are reset to 0. The total cumulativeReading keeps running. You only keep the monthly and weekly values of the old year with "Year statistics", in a year folder of their own.

What happens at the rollover ​

  1. Day, week, month, quarter and year roll over at the same time. With "Previous period", SourceAnalytix copies the values to 01_previousDay through 05_previousYear, with the timestamp December 31, 23:59:59.
  2. The start values of all periods are set to the current total. 01_currentDay to 05_currentYear start at 0.
  3. weeks, months and quarters under currentYear are set to 0 for consumption, costs and meter readings.
  4. If "Weeks", "Months" or "Quarters" is on under "Year statistics", SourceAnalytix creates the folder sourceanalytix.0.<device>.<new year> with these states and the annual totals (consumedCumulative, costsCumulative, readingCumulative).
  5. The year folders of previous years stay unchanged.

WARNING

Without "Year statistics", the monthly, weekly and quarterly values of the old year can only be found in a history adapter after the rollover. By default, "Months" is on, and "Weeks" and "Quarters" are off.

You can safely delete old year folders if you no longer need them. SourceAnalytix only writes to the folder of the current year.

Prices at the turn of the year ​

If a price is "Valid from" January 1, SourceAnalytix uses it from 0:00. The basic fee is booked in full on January 1, as on the first of every month. From v0.6.2, priceDefinitions.<category>.currentPrice also jumps to the new price at that moment. Up to v0.6.1, this only happened after a restart (#1259).

If ioBroker was down at the turn of the year, SourceAnalytix catches up the rollover at the next start, see ioBroker was down at midnight.

From v0.6.2: The days from December 29 to 31 that belong to calendar week 01 of the new year end up in the week archive of the new year (#1256).

See also: How do I evaluate values across several years without adjusting everything every year? · Why does week 52/53 show values in the new year? · How do I start over with a datapoint and clean up old years?

How can I read and set prices as states? ​

In short: For every price definition there are states under sourceanalytix.0.priceDefinitions.<category> with the current and the configured price. currentPrice is writable: if you write a new price to it, it applies immediately to all sources of that price definition.

StateContentWritable
priceDefinitions.<category>.currentPricePrice per unit that currently applies, in <currency>/<unit>yes
priceDefinitions.<category>.configuredPrice"Price per unit" from the table, only for "Fixed price"no
priceDefinitions.<category>.configuredPriceValidFromfrom when this price applies, as a timestamp in millisecondsno
priceDefinitions.<category>.configuredBasicPrice"Price per month" from the tableno
priceDefinitions.<category>.configuredBasicPriceValidFromfrom when the basic fee appliesno
priceHistory.<category>Price history as JSON, for example [{"ts":1767222000000,"price":0.32}]no
basicPriceHistory.<category>History of the basic fee as JSONno

In state IDs, SourceAnalytix replaces every character of the category other than letters, digits, _ and - with _. So Strom Haus becomes priceDefinitions.Strom_Haus.currentPrice.

Setting the price via currentPrice ​

  1. Write the new price per unit as a number to sourceanalytix.0.priceDefinitions.<category>.currentPrice, without acknowledgment (ack = false), for example from a script: setState('sourceanalytix.0.priceDefinitions.Strom.currentPrice', 0.29);
  2. SourceAnalytix applies it to all sources of that price definition, stores it with the time in the price history and writes Unit price for <category> was set to <price> through <state> to the log.
  3. If the value is not a number, the old price stays, and the log shows Writable price state <state> received invalid value ….

The new price applies from the moment of writing. It doesn't change costs that have already been calculated. For that, v0.7.0 and later have the "Recalculate costs from date" action, see Are calculated costs recalculated when I change the price, and how do I change it from a certain date?.

NOTE

With "Price source" set to "State value" or "Tariff selector", the next value of the price datapoint overwrites a price you wrote by hand. If you change the "Price per unit" in the table and save, that price applies again.

See also: How is a price definition structured (categories, basic fee, decimal mark)? · How do I use a dynamic electricity price (Tibber, Awattar)? · Which currency does SourceAnalytix use?

Why are meter readings cumulative? ​

In short: Under meterReadings you find meter readings, not consumption. Each state shows the total at the end of its period. That's why the value grows from month to month. You find the consumption of a period under consumed (or delivered).

cumulativeReading and meterReadings ​

StateContent
sourceanalytix.0.<device>.cumulativeReadingThe total: SourceAnalytix's own meter reading in the target unit, unrounded. It is written with every new value.
currentYear.meterReadings.months.<month>, .weeks.<NN>, .quarters.Q<n>, .currentWeek.<weekday>The total, rounded, as last written in this period. It stays in place after the period ends, so it is the reading at the end of the period.
currentYear.meterReadings.01_previousDay to 05_previousYearThe total at the moment of the period rollover
<year>.meterReadings.… and <year>.readingCumulativeThe same in the year archive, if "Year statistics" is on

Example: if meterReadings.months.02_February holds 1,250 kWh and meterReadings.months.03_March holds 1,480 kWh, you consumed about 230 kWh in March. The exact value is in consumed.months.03_March.

The total includes the offset from reset detection. After a device reset, cumulativeReading therefore keeps showing the continuous reading, not the value the device currently reports. The terms are explained in What does "Device reset detected" mean and how does reset detection work?. If you want the total to match your real meter, use the "Align meter reading" action from v0.7.0, see Correcting wrong values.

meterReadings is only created if "Store meter readings" is on for the source. For when the folder stays empty, see What do the datapoint settings do (Costs, Consumption, Meter values)?.

From v0.6.2: A meter reading of exactly 0 is now also written under meterReadings. Up to v0.6.1, the state stayed empty in that case (#1253).

See also: How is consumption calculated, and why is currentYear lower than my meter reading? · How do I apply my real meter reading (cumulativeReading, RAW object)? · JSON with all values

Which currency does SourceAnalytix use? ​

In short: The currency from the ioBroker system settings. If none is set there, SourceAnalytix uses €. There is only one currency for all sources, and SourceAnalytix doesn't convert: the currency is just the unit on the cost states.

  • The currency is the unit on all states under costs and earnings, on the annual totals costsCumulative and earningsCumulative, and appears as <currency>/<unit> on priceDefinitions.<category>.currentPrice.
  • You enter all prices in the price definitions in this currency, per target unit, so for example in €/kWh and not in cents/kWh.
  • A price datapoint must also deliver the price in this currency per target unit. There is no conversion factor, for example from cents to euros. Convert beforehand, for example with an alias or a script.

IMPORTANT

SourceAnalytix only reads the currency at startup. If you change it in the system settings, restart the instance. Amounts that have already been calculated are not converted.

See also: How is a price definition structured (categories, basic fee, decimal mark)? · How can I read and set prices as states?

sendTo commands and info states ​

In short: SourceAnalytix accepts commands via sendTo. The settings page from v0.7.0 uses them itself, and you can also call them from scripts, for example recoverPeriods for a missed period rollover or setCumulative to align the meter reading. There are only two instance states: info.recoverPeriods and info.costRecalculation. There is no info.connection state.

Commands ​

All values are in the target unit of the source. Numbers may use a comma or a dot. source is always the ID of the source datapoint. With dryRun: true, SourceAnalytix only validates and returns a preview without changing anything.

CommandParametersWhat it does
recoverPeriods{source} (optional, from v0.7.0)Catches up missed day, week, month, quarter and year rollovers, with source only for this source, otherwise for all. Response: {recovered: <number of sources>}, for an inactive source {error: 'sourceNotActive'}
getSources / checkProblems–Returns all sources with values, the problems, the price definitions, the units and the currency (both commands return the same)
saveSourcesource, settings, dryRunCreates or changes the SourceAnalytix settings of a datapoint. settings contains only the fields that change, for example {deviceResetLogicEnabled: true}. Takes effect without a restart.
setSourceEnabledsource, enabledActivates (true) or deactivates (false) a source. The data stays.
findCandidatesquerySearches for datapoints with a supported unit (50 at most), for the wizard
setCumulativesource, value, dryRun"Align meter reading": sets the total to value
meterSwapsource, oldEnd, newStart, date, dryRun"Meter swapped": end reading of the old meter, start reading of the new one (empty = 0), date for information only. Not for power sources.
recalcCostssource or priceDefinition, from, dryRun"Recalculate costs from date" for one source or all sources of a price definition. from as a timestamp in ms or a date, not in the future.
deleteSourceDatasource or outputId, dryRun"Delete data": deactivates the source, removes its SourceAnalytix settings and deletes its folder. With outputId, it also works for folders without a datapoint.

SourceAnalytix also answers getPriceDefinitions, getUnits, getStartValueContext, getBasicRateSources and getUsedOutputIds. The wizard uses getUsedOutputIds to check whether a technical ID is already taken. The other commands used to fill selection lists and checks in the custom settings dialog of the datapoint, which from v0.7.0 only contains the switch to enable the source (#1286).

Example: align the meter reading, first as a preview.

js
sendTo('sourceanalytix.0', 'setCumulative', { source: '<datapoint ID>', value: 12475, dryRun: true }, result => {
    log(JSON.stringify(result));
});

If something goes wrong, the response contains error and message, for example sourceNotActive if the source isn't running, invalidValue for an invalid number or invalidDate for a date in the future. For invalid fields, saveSource returns invalidSettings and lists the affected fields under errors.

CAUTION

deleteSourceData without dryRun deletes the folder of the source with all values and years and removes its settings on the datapoint. This cannot be undone.

Info states ​

StateContent
sourceanalytix.0.info.recoverPeriodsButton (role button). If you write true to it, SourceAnalytix catches up missed period rollovers and resets the state to false. This also works while SourceAnalytix is otherwise not calculating.
sourceanalytix.0.info.costRecalculationProgress of "Recalculate costs from date" as JSON: running, done, total, from, sources, ts. Only created the first time you recalculate (from v0.7.0).

SourceAnalytix doesn't create an info.connection state, because there is no connection to a device that it could report. If it's missing from the object list, that is not an error.

See also: ioBroker was down at midnight · How do I read SourceAnalytix values in a script? · How do I correct wrong, too high or negative values after a reset?

Log warnings (output ID, prices) ​

In short: The most important SourceAnalytix messages are listed below with their meaning. <datapoint> is the ID of the source, <category> the name of the price definition. For normal operation, the log level "warn" is enough. You only need info messages during setup or troubleshooting.

Startup and setup ​

MessageLevelMeaning
Found <n> SourceAnalytix enabled statesinfoThis many sources are enabled.
Successfully activated SourceAnalytix for all <n> of <n> states …infoAll sources are running.
Partially activated SourceAnalytix for <n> of <m> states, check error messages!warnSome sources aren't running. The cause is in the errors before this message.
Initialization of <datapoint> failed, check warn messages ! / Cannot handle calculations for <datapoint>, check log messages and adjust settings!errorThis source doesn't start, see Initialization failed.
No unit defined for <datapoint>, cannot execute calculations !errorUnit missing or not recognised, see No unit defined.
Unit <unit> of <datapoint> cannot be converted to unit <unit> of price definition <category>errorThe unit of the source doesn't match the price definition.
No cost type defined for <datapoint> … / Selected Type <category> does not exist in Price DefinitionserrorNo price definition selected, or a deleted one, see No cost type defined.
Unit "<spelling>" of <datapoint> is used as <unit>infoFrom v0.6.2: a spelling such as m3 is read as m³.
Start value <period> (<value>) of <datapoint> is larger than the current total …warnA start value is larger than the total. The values of this period become negative.
The basic fee of price definition <category> is included by <n> sources …infoSeveral sources book the same basic fee (from v0.7.0).

Output ID ​

MessageLevelMeaning
Migrated SourceAnalytix output for <datapoint> from <old> to <new>infoThe technical ID was changed and the folder has been moved.
Cannot use output ID "<ID>" for <datapoint>: <reason>; keeping "<old>"warnThe new ID is invalid, already in use, or the move failed. The old ID stays.
Cannot use output ID … no existing output tree to keeperrorThe ID is unusable and there is no old folder. The source doesn't start.
Removed incomplete output migration for <datapoint>; migration … will be retriedwarnAn interrupted move is retried at startup.

Prices ​

MessageLevelMeaning
Price definition <category> has no valid unit price …, using 0 …warnThe price is not a number. Costs stay at 0.
Price source state <state> for <category> has no valid value or tariff, using configured fallback price …warnThe price datapoint is empty or invalid. The "Price per unit" applies.
Price definition <category> uses a state price source but no state ID is configured …warnWith "State value" or "Tariff selector", the "Price state" is missing.
Unit price for <category> changed from <old> to <new>infoThe price has changed. With the addition (valid from date reached) when a "Valid from" date has been reached (from v0.6.2).
Stored unit price <price> for <category> at <time> / Stored monthly basic price …infoA new price was written to the price history.

Calculation, reset and period rollover ​

MessageLevelMeaning
Initiating <datapoint> for the first time in SourceAnalytixinfoFirst value of a new source.
Value … of <datapoint> is not a number, reading ignoredwarnThe source delivers text that isn't a number, see Text instead of number.
[calculationHandler] Waiting for another reading before confirming a possible device reset …infoPossible reset. SourceAnalytix waits for the next value.
Device reset detected for <datapoint>; preserving cumulative value …warnReset confirmed. The total keeps running.
Rejected a possible device reset … / Rolled back the device reset …warnThe low value was an outlier, see Device reset detected.
Known valueAtDeviceReset … is larger than the known cumulative value … / Realigned valueAtDeviceReset …warnOffset larger than the total. SourceAnalytix aligns it itself (from v0.6.2).
No new power value from <datapoint> for <n> min, longer than the maximum gap …infoFrom v0.7.0: a gap in a power source is not counted.
Processing calendar rollover for <datapoint>: … / Processed calendar rollover for <n> source(s), triggered by …infoA period rollover was processed, either regularly or caught up.
Reading gap of <datapoint> from … to …: booking …infoFrom v0.6.2: the consumption of a gap over midnight is split between both days.

Actions on the settings page (from v0.7.0) ​

MessageMeaning
Created … / Changed SourceAnalytix settings of <datapoint> from the settings pageSource created or changed
Activated … / Deactivated <datapoint> from the settings pageSource activated or deactivated
Meter reading of <datapoint> aligned from <old> to <new> …"Align meter reading" was run
Meter swap for <datapoint> applied: … / First reading … of the new meter received …"Meter swapped" was run, first value of the new meter has arrived
Costs of <datapoint> recalculated from <date> for <n> periods"Recalculate costs from date" finished
Deleted the data of <datapoint>: <n> states in <folder>"Delete data" was run

All messages about an error in the code start with [<function>] error: and include the stack. If the Sentry plugin is active, the error is also sent to the developer (Error sent to Sentry, thank you for collaborating!). From v0.6.2, the error is always in the log, even without Sentry (#1261).

See also: Log messages and errors during setup · High CPU/memory load and too much log output

Migrating from older versions and legacy settings ​

In short: SourceAnalytix takes over data from older versions by itself at startup. You don't have to do anything. Some old settings still exist in the instance, but they no longer have any effect.

What SourceAnalytix changes at startup ​

WhatWhat happens
Technical ID (output ID)If a source doesn't have one yet, SourceAnalytix uses the previous ID (datapoint ID with __ instead of dots) and writes it to the settings of the source. The folder stays where it is.
DecimalsIf a source has no decimals of its own, it gets the instance template once and keeps it afterwards, see Decimals.
Total from very old versionsIf cumulativeReading is missing or 0, SourceAnalytix reads the reading from <ID>.Current_Reading or <ID>.Meter_Readings.Current_Reading of old versions.
Cost memoryAn old cost memory that included the basic fee is converted so that the basic fee isn't counted twice after a restart (Migrated dynamic cost memory for <datapoint> to variable-cost schema version 2).

Moving the technical ID ​

If you change the technical ID, SourceAnalytix copies the folder, checks the copy and then deletes the old folder, see How do I name the datapoint (alias, output ID)?. If the instance stops in the middle, SourceAnalytix removes an incomplete copy at the next start and tries again (Removed incomplete output migration … will be retried), or it cleans up the old folder after a verified copy (Completed pending output migration cleanup …).

Old settings without effect ​

The instance data still contains store_days, store_years, store_period, keep_days, keep_weeks, keep_months, keep_quarters, keep_years, impuls and status_logging. No user interface shows them, and SourceAnalytix doesn't read them. Options such as "Status messages to log" or "Number of days" from old forum posts no longer exist. From v0.7.0, you set up pulse counters on the source, see Pieces and pulses.

From v0.6.2: The old stored value valueAtDeviceInit is no longer needed (#1263). From v0.7.0, the settings page hides it, valueAtDeviceReset and pendingMeterSwap, and never overwrites them. Only SourceAnalytix itself or an action such as "Align meter reading" changes these values.

Messages about day, week or month rollovers from versions before 0.5 are obsolete since the period rework in 0.5. If you're still running a version that old, update, see How do I update SourceAnalytix (and what is a downgrade)?.

See also: Known bugs in older versions · After an update or restore, values are 0

Other (unfinished/internal functions) ​

In short: A few things in the code are internal or unfinished. What matters to you: there is no separate VIS widget JSON, use statisticsJson. Debug output of the price and unit definitions doesn't go to the ioBroker log but to the console of the process.

FunctionStatus
VIS widget JSONCommented-out code only. All values for VIS are in statisticsJson.
Debug outputAt startup, SourceAnalytix writes the loaded units and prices with console.debug to the standard output of the process, for example to the Docker or systemd log, regardless of the log level. It doesn't appear in the ioBroker log.
Error reports (Sentry)SourceAnalytix reports errors in the code to the developer through the ioBroker Sentry plugin, if the plugin is active.
Pulse countersUp to v0.6.x only a placeholder in the code. From v0.7.0 there are piece, piece/min and "Pulses per unit of the price definition", see Pieces and pulses.
Cleaning up old foldersThere is no automatic cleanup. From v0.7.0 you delete the folder of a source with the "Delete data" action. Folders whose datapoint is missing are shown in the "Overview" as "Folder without datapoint" (#1265).
Custom periodsA placeholder in the code (reading_start = 0) is meant for freely selectable billing periods. They are not implemented but planned (#595).
Monitoring all objectsSourceAnalytix subscribes to changes of all objects. That way it notices without a restart when you enable or change a source.

See also: JSON with all values · How do I switch off a datapoint or remove sources and states? · Log warnings

Knowledge has no value unless you use and share it