Så ger du ett värde på en virtuell enhet en formel, till exempel medeltemperaturen av två givare eller effekten i kW, så att qtrl.me räknar om det automatiskt när ingångarna ändras.
Ett värde på en virtuell enhet behöver inte skickas in utifrån. Det kan i stället beräknas med en formel ur andra kanaler du har: medelvärdet av två temperaturgivare, skillnaden mellan inne och ute, effekten omräknad till kW eller ett på/av som slår till när flera villkor är uppfyllda. Så fort en kanal i formeln ändras räknas värdet om, och resultatet fungerar som vilken givare som helst i flöden, termostater och på dashboarden.

- Gå till Enheter → Virtuella enheter och skapa en enhet med ett värde av rätt typ, till exempel Temperatur för en medeltemperatur eller Tal med enheten kW. Har du redan en enhet lägger du bara till ett värde på den.
- Klicka på kalkylatorknappen på värdets rad.
- Skriv formeln. Kanaler lägger du enklast till med knappen Kanal, som öppnar samma väljare som i automationerna och skriver in kanalen som
state(id) där markören står.
- Klicka på Testa. Du ser resultatet just nu och vilka kanaler formeln läser, med deras aktuella värden.
- Klicka på Spara. Värdet räknas direkt och sedan varje gång en ingång ändras.
På sidan visas formeln under värdets namn, och pennan för att sätta värdet för hand försvinner: ett beräknat värde kan bara ändras genom sin formel. Vill du skicka in värden igen öppnar du formeln och klickar på Ta bort formel.

| Skriv |
Betyder |
state(12) |
värdet på kanal 12, som text eller tal beroende på sammanhang |
num(12) |
samma, men alltid som tal (45 % blir 45) |
+ - * / % |
räknesätt, med parenteser som vanligt |
> < >= <= == != |
jämförelser; == för lika med |
on off open closed |
lägen för på/av och öppen/stängd |
"text" |
en text, inom citattecken |
Villkor kopplar du ihop med && för och, || för eller och ! för inte.
Funktioner:
| Funktion |
Ger |
min(a, b, …) / max(a, b, …) |
minsta eller största |
avg(a, b, …) |
medelvärdet |
abs(x) |
utan tecken |
round(x, decimaler) / floor(x) / ceil(x) |
avrundning |
clamp(x, lägst, högst) |
x begränsat till ett intervall |
if(villkor, a, b) |
a om villkoret är sant, annars b |
villkor ? a : b |
samma sak, skrivet som i många programspråk |
Tal som kommer från en kanal med enhet tolkas som tal: 21,5 °C räknas som 21,5. Ett värde som saknas räknas som 0 i aritmetik och som tomt i jämförelser. Delning med noll ger inget värde alls, och värdet visas då som tomt.
Exempel
Medeltemperatur av två givare, på ett värde av typen Temperatur:
avg(state(410), state(411))
Skillnad inne och ute, avrundad till en decimal:
round(state(410) - state(412), 1)
Effekt i kW från en effektmätare som rapporterar i W:
round(state(520) / 1000, 2)
Total effekt av tre Shelly-pluggar:
state(520) + state(521) + state(522)
Ett på/av-värde som är på när laddaren går och solen ger mer än 2 kW:
if(state(530) == on && state(540) > 2000, on, off)
Samma sak med frågetecken:
state(530) == on && state(540) > 2000 ? on : off
Batteriets energi kvar i kWh ur laddnivån i procent, för ett 60 kWh-batteri:
round(state(600) * 0.6, 1)
Formler kan bygga på varandra: ett beräknat värde får läsas av en annan formel. Det enda som inte går är en cirkel, där ett värde direkt eller via andra formler läser sig självt. Det stoppas när du sparar.
Bra att veta
- Formeln får bara läsa kanaler på dina egna enheter: hubbar, kopplingar som Shelly och virtuella enheter. Kanal-id:n ser du under Testa, där varje kanal visas med namn och aktuellt värde.
- Resultatet anpassas till värdets typ. Ett värde av typen På/av behöver en formel som ger
on eller off (eller sant/falskt), ett Tal ett tal. Passar resultatet inte typen blir värdet tomt; Testa visar vad formeln ger.
- En formel får vara högst 500 tecken och läsa högst 16 kanaler.
- Värdet räknas om när en ingång rapporterar, inte på klockan. En kanal som rapporterar varje sekund driver alltså formeln lika ofta; som skydd räknas ett värde högst 60 gånger i minuten.
- Formeln körs i molnet med en egen, avgränsad formeltolk. Den kan inte köra kod, nå andra användares enheter eller påverka något annat än värdet den sitter på.