Ja mam tak zrobione
Mam sterownik Iryd620 Pellet inni można też palić ekogroszkiem, palnik tylko przełożyłem
Niestety aby dane wyciągnąć ze sterownika pokusiłem się o moduł Internetowy MI-95 i ze strony www.aikacja.prond.pl po zalogowaniu się do mojego modułu powyviagalem z niego dane jakie się tylko dało i na ich podstawie zrobiłem sobie dashboard Kocioł a w nim, mam poziom w % podajnika, wszelkie temperatury , a dzięki temu mogłem z AI dorobić resztę , czyli właśnie spalanie na dobę, przewidywanie końca opału w podajniku, dorobiłem sobie też kafelek z magazynem i na podstawie spalania dobowego również mi wylicza na ile wystarczy opału z magazynu 
Np kod do mojego spalania w podajniku
Do tego są jeszcze stworzone sensory które to zliczaja i wyświetlają info w odpowiedniej formie
zurzycie_dobowe_pellet_groszek.yaml (3,8 KB)
square: false
type: grid
columns: 3
cards:
- type: custom:button-card
template: prond_small_style
entity: sensor.prond_stan_opalu
triggers_update:
- sensor.aktualny_tryb_kotla
name: Opał podajnika
icon: mdi:barrel
state_display: |
[[[
if (entity.state == 'unavailable' || entity.state == 'unknown') return '--';
var tryb = states['sensor.aktualny_tryb_kotla'] ? states['sensor.aktualny_tryb_kotla'].state : 'Ekogroszek';
var procent = parseFloat(entity.state) || 0;
var max_kg = (tryb == 'Pellet') ? 90 : 140;
var waga = Math.round((procent / 100) * max_kg);
return procent + '% / ' + waga + 'kg';
]]]
styles:
card:
- position: relative
- background-image: |
[[[
if (entity.state == 'unavailable' || entity.state == 'unknown') return 'none';
const v = parseFloat(entity.state) || 0;
// Zwiększone nasycenie (0.3) dla lepszej widoczności
let color = v > 50 ? 'rgba(76, 175, 80, 0.3)' : (v > 25 ? 'rgba(255, 152, 0, 0.3)' : 'rgba(244, 67, 54, 0.3)');
// Dodajemy "kreskę" na górze (linear-gradient z twardym przejściem 2px), żeby widzieć poziom
return `linear-gradient(to top, ${color} ${v}%, rgba(255,255,255,0.05) ${v}%, rgba(255,255,255,0.05) ${v + 1}%, transparent ${v + 1}%)`;
]]]
icon:
- color: |
[[[
if (entity.state == 'unavailable' || entity.state == 'unknown') return 'grey';
const v = parseFloat(entity.state) || 0;
if (v > 50) return '#4caf50';
if (v > 25) return '#ff9800'; // Wyrazisty pomarańczowy
return '#f44336'; // Wyrazisty czerwony
]]]
state:
- font-size: 13px
- font-weight: bold
- type: custom:button-card
template: prond_small_style
entity: sensor.prond_spalanie_cache
name: Spalanie / 24h
icon: mdi:fire-circle
state_display: |
[[[
if (entity.state == 'unavailable' || entity.state == 'unknown') return '--';
var tryb = states['sensor.aktualny_tryb_kotla']
? states['sensor.aktualny_tryb_kotla'].state
: 'Ekogroszek';
var val = parseFloat(entity.state) || 0;
var max_kg = (tryb == 'Pellet') ? 90 : 140;
var waga = Math.round((Math.abs(val) / 100) * max_kg);
return waga + ' kg';
]]]
styles:
card:
- box-shadow: 0 0 10px rgba(255, 152, 0, 0.15)
icon:
- color: |
[[[
if (entity.state == 'unavailable' || entity.state == 'unknown') return 'grey';
return '#ff9800';
]]]
state:
- font-size: 13px
- white-space: nowrap
- type: custom:button-card
template: prond_small_style
entity: sensor.przewidywany_koniec_opalu
name: "Braknie dnia:"
icon: mdi:timer-sand
state_display: |
[[[
if (!entity.state || entity.state == 'unavailable' || entity.state == 'unknown') return '...';
return entity.state.replace(/\\n/g, '<br>').replace(/\n/g, '<br>');
]]]
styles:
card:
- box-shadow: 0 0 10px rgba(171, 71, 188, 0.15)
icon:
- color: |
[[[
if (!states['sensor.prond_zuzycie_ostatnie_24h']) return 'grey';
var statState = states['sensor.prond_zuzycie_ostatnie_24h'].state;
var val = parseFloat(statState) || 0;
if (val > 0) return '#4caf50';
return '#ab47bc';
]]]
state:
- font-size: 10px
- line-height: 1.2
title: Spalanie w podajniku