Op de Ulanzi TC002 met Awtrix NG 1.2.2 firmware hebben we een mooi 52x16 resolutie tot onze beschikking voor het tonen van een grafiek met de komende dynamische energieprijzen:

Hier is een energiegrafiek te zien die om 12:00 op de TC002 is getoond. Omdat er 13 uren aan prijzen getoond kunnen worden en de prijzen voor morgen nog niet bekend zijn, worden de voorspelde prijzen gedimd rechts getoond.
Dit scherm wordt geregeld met 2 scripts: een Homeyscript dat al het rekenwerk doet en eventueel voorspelde prijzen ophaalt en een Berry script op de TC002 dat daadwerkelijk de grafiek toont. Dat is nodig omdat de TC002 met Awtrix NG firmware 1.2.2 (geheel onnodig in dit geval) alles wat via de API schaalt naar 8 pixels hoog. Door alleen de data van de kolommen naar de API te sturen en de TC002 dit zelf te laten tekenen wordt dit voorkomen.
Hieronder de flow die dit regelt:

De prijzen worden via Power by the Hour elk kwartier opgehaald en in tekst variabelen gezet (omdat ze anders niet van elkaar zijn te onderscheiden in de flowkaarten die volgen). Deze variabelen worden in het Homeyscript in de volgende flow kaart gestopt en die levert de payload voor het Berry script op de TC002 op. Dit werkt niet bij een regulier Homeyscript, omdat er geen flow kaart bestaat die een Homeyscript aanroept en het resultaat teruglevert in de flow.
Omdat Power by the Hour de prijzen voor morgen niet automatisch leeg maakt resetten we die rond middernacht:

Benodigde variabelen:
- (a) Grafiek_PbtH_Vandaag
- (a) Grafiek_PbtH_Morgen
Het Homeyscript in de flow kaart ziet er als volgt uit:
|
// ============================================================================ const logicVars = await Homey.logic.getVariables(); // 1. Haal de PBTH variabelen op uit Homey Logic function parsePrices(str) { let todayPrices = parsePrices(todayStr); if (allPrices.length === 0) { // 2. Bepaal automatisch het huidige index-type (Uur vs. Kwartier) let currentIndex = 0; // 3. Venster bepalen: 52 kolommen totaal (4 staven historie + 48 staven toekomst) // Bepaal min en max voor dynamische schaaling binnen het zichtbare venster // 4. Absoluut kleurenschema // 5. Bouw de payload array op voor Awtrix for (let i = 0; i < slicePrices.length; i++) { let normalized = (price - minPrice) / (maxPrice - minPrice); let isCurrent = (globalIndex === currentIndex); payload.push({ return JSON.stringify({"energieData": payload}); |
Het Berry script op de TC002 heet "energiegrafiek" en ziet er als volgt uit:
|
class EnergieGrafiek def draw() for x: 0 .. size(data)-1 |