Heating Analytics - Thermodynamic ML Heating Forecasts

I don’t understand how I can add here more sensors. I have added the heat meter of my heat pump (1 for complete house) and the fireplace I trigger with switch.heating_analytics_auxiliary_untracked_heating_active.

My target indoor is 22.6°C. In winter time I only close the blind for each room if room temp is >23.3. If it’s getting then <23.1 they open again to get free heat.
I could change the Solar Correction in tha way that if 20% of the blinds are closed, I change the value to 80%. Is that correct?

The 2/3 of the windows are headed south (I added 160° in the integration). But the 1/3 are headed west. They also get affected by the sun in afternoon/evening.
How can I handle this?
I also cannot add the window area.

One last question: Where can I find the advanced sensors?

In your dashboard I think you use some custom sensors. A lot of entities connot be found in your dashboard.

Sorry a lot of questions :smiley:

Hi @jhilkert90,

No need to apologize for the questions at all! This kind of feedback is incredibly valuable, especially as I am constantly tuning the documentation. Let’s go through them one by one:

1. Adding more sensors If you only have one energy meter for the entire house (the heat pump), that’s perfectly fine! You just add that single entity. You don’t need per-room sensors for the integration to work. The fireplace switch is also set up exactly right as an auxiliary source. The system will simply learn a single, highly accurate global model for your whole house based on that one meter.

2. Solar Correction and blinds

I could change the Solar Correction in that way that if 20% of the blinds are closed, I change the value to 80%. Is that correct?

Yes, exactly right! That is a great way to automate it. Just note that if this slider was set too low (or to 0%) while the blinds were actually open during the initial learning phase, the system might have cancelled out much of the initial solar learning. It might be worth resetting the solar learning once your automation is in place, so it can learn the correct impact over a few sunny days.

3. Mixed window orientations (South + West) This is actually great timing. I have a release coming out later today or tomorrow that replaces the single azimuth input with a brand new 2D solar vector system. Instead of configuring one global orientation, the system will independently learn the directional solar coefficient for your house strictly through observation. A room (or a whole house) that gets afternoon sun will automatically adapt its internal vector towards the west without any manual configuration. Note: Because of this update, the Azimuth field is being completely removed from the UI. Your system will transition automatically, but the 4-hour solar learning buffer will be cleared as a side effect since the new vector format is completely different.

4. Window area Good catch! There is no window_area field in the integration anymore — that was removed in a very early version because the system now learns the scale of the impact automatically. I realized the README still mentioned it in a few places, but I have just updated the documentation to remove those stale references. Sorry for the confusion!

5. Advanced sensors & Missing Dashboard entities There are no hidden entities you need to enable. The reason you can’t find some of the “advanced” sensors or entities from the dashboard is that a lot of the rich data actually lives as attributes on the main sensors, rather than as separate entities. You’ll find things like forecast accuracy breakdowns, specific weather data, solar coefficients, and the hourly log there.

  • To view them in the dashboard: Click on the sensor, click the three dots in the top right corner of the pop-up, and select “Attributes”.
  • To view everything at once: Go to Developer Tools → States in HA, search for heating_analytics, and click on any sensor to expand its attribute list. (If you are building custom dashboard cards, like the Plotly graphs, you can also extract them directly in YAML using attribute: your_attribute_name).

Regarding the dashboard in the tools folder: I am currently moving away from providing a full, monolithic ready-made dashboard. Instead, I will be publishing individual, modular graph cards (like the Plotly heating demand curve, wind bucket comparisons, etc.) in the tools folder. These are much easier to drop into your existing dashboards and adapt to your specific setup without getting “entity not found” errors.

2 Likes
Attribute

Daily summary

Windy weather (+39.8 kWh vs last year)

Current model kwh

39,8

Last year model kwh

0

Last year actual kwh



Unbekannt

Reference temperature

Unbekannt

Current temperature

3,2 °C

Temperature delta

Unbekannt

Reference effective wind

Unbekannt

Current effective wind

3,1

Wind delta

Unbekannt

Reference solar kwh

0

Current solar kwh

0,5

Solar delta

0,5

Zustandsklasse

Messwert

Unit of measurement

kWh

Icon

mdi:chart-timeline-variant

Friendly name

Heating Analytics Model Comparison Day

@thuemah
I’m running now the newest version and reseted the solar values 2 days ago.

Why are here some values “unknown”.

    "aux_coefficients_per_unit": {},
    "learning_buffer_global": {},
    "learning_buffer_aux_per_unit": {},
    "solar_coefficients_per_unit": {},
    "learning_buffer_solar_per_unit": {
      "sensor.wth_heizen2": {
        "5": [],
        "7": [],
        "9": [
          [
            0.08684120480120547,
            -0.06648253790276387,
            0.3780333333333335
          ]
        ],
        "10": [],
        "11": [
          [
            0.11104763051028983,
            -0.14165178774547862,
            0.3530666666666668
          ]
        ],
        "-1": [
          [
            0.09928986930487342,
            0.19074736461133124,
            0.0
          ]
        ],
        "0": [
          [
            0.22809003343481876,
            0.2721750971463094,
            0.18718333333115067
          ]
        ],
        "1": [
          [
            0.338291121833406,
            0.24094306063807622,
            3.6839999999999957
          ]
        ],
        "4": [
          [
            0.11299835284100002,
            0.028675205925148783,
            0.8926666666666666
          ]
        ],
        "6": [
          [
            0.2189504779667815,
            0.004977141415676434,
            1.1250000000000013
          ]
        ],
        "8": [
          [
            0.20859223557273432,
            -0.06253947236256684,
            0.4170000000000005
          ]
        ]
      }
    },
    "unit_modes": {},
    "solar_optimizer_data": {
      "model": {
        "maximize_solar": {
          "150": {
            "30": 50.0
          },
          "180": {
            "30": 50.0
          },
          "210": {
            "20": 50.0
          },
          "90": {
            "10": 100.0
          },
          "120": {
            "20": 100.0
          }
        },
        "insulate": {
          "210": {
            "20": 100.0
          },
          "240": {
            "10": 50.0,
            "0": 100.0
          },
          "90": {
            "0": 100.0
          }
        }
      }
    }
  }
}

I think the model is learning?

The “unknown” values in the Model Comparison Day sensor appear because there is no reference data from the equivalent period last year in your system yet. The sensor compares current conditions to the same date/period last year — without that historical baseline, temperature, wind and consumption deltas cannot be calculated.

To fix this, you can import historical weather data from open-meteo covering the past 1–2 years. Make sure to only import dates not already present in your log, and disable model training during the import — this fills in the historical weather context without overwriting your existing learned model.

true (default): imports data into history/graphs AND trains the correlation model — use this for a full cold-start import.
false : imports data into history and graphs ONLY, leaving your existing learned model completely untouched. Set to false when filling in missing historical periods (e.g. weather reference data for the Model Comparison sensor) so that the import does not overwrite correlations your model has already learned from live data.

Regarding solar: the learning buffer is working as expected. Once enough hours accumulate per temperature key, the solar coefficients will be averaged and moved to solar_coefficients_per_unit. Given you reset 2 days ago and this time of year has few solar hours per temperature band, it will take a little time to build up. Looking good so far!