Jeg ønsker å bruke en sinusfunksjon til å manipulere/transformere lux-verdi som styrer screens. Ideen er at sinusfunksjonen skal gjøre sånn at screens går ned på en lavere lux-verdi på vinteren (når sola står lavere) og på en høyere lux-verdi på sommeren. Det matematiske uttrykket blir noe sånt som dette:
2500 x SIN(2 x 3.14 / 12 x (Current_month - 3))
Selve matematikken er ikke poenget her, men en kort forklaring er vel på sin plass:
2500 er amplituden på sinusfunksjonen og angir hvor mange lux den skal variere med i positiv og negativ retning (total variasjon på 5000 lux). Perioden er 12 måneder, og i løpet av denne tida gjennomgår- sinusen en full rotasjon (2*pi radianer, eller 360 grader om du vil). “current_month” er en global variabel som angir gjeldende måned (nåtid langs tidsaksen) og -3 er en korreksjon for å ha nullpunktene ved høstjevndøgn (september) og vårjevndøgn (mars). Oppløsninga er per måned. Utrykket returnerer dermed 0 i september, 2500 i desember 0 i mars og -2500 i juni. Når jeg legger til denne verdien til registrert luxverdi før den sammenlignes med gitt grenseverdi (42500 lux) så vil screens gå ned “tidligere” desember (ved 40000 lux) og “senere” i juni (ved 45000 lux).
Spørsmålet er:
Går det an å bruke sinus i transform (calculate) blokka?
Hvordan gjør jeg i så fall det?
Alt annet i uttrykket angitt over fungerer fint, men jeg har ikke funnet en måte å angi sinus-funksjonen på…
Denne type funksjon er ikke tilgjengelig i transform (govaluate) mener jeg. Mulig du kan benytte en annen metode via script funksjonen, men det vil nokk fort bli mer avansert
Spanande lesing - artig å sjå ein gjennomtenkt og matematisk strategi for solskjerming, men du er nok kanskje betre tent med å bruka diskrete variablar vha. ein serie If-nodar. IF current_month=september THEN 0 ELSE IF current_month=october THEN…
Takk for svar! Jeg har laget et utkast med if-switcher, slik du beskriver, Jon. Må bare få tid på meg til å få det til å fungere… Kan legge ut et bilde her når jeg kommer i mål.
Note:
Jeg var inne på tanken å ha en oppløsning på dager istedenfor måneder, men fordi dag i året ikke er like tilgjengelig som måned så lot jeg det være med måneder - det er godt nok uansett. Men om jeg skulle ha en slik funksjon med høyere oppløsning så ville serien med if-satser bli veldig stor. Antar at jeg da kunne laget et script eller noe (som jeg ikke er kapabel til per nå) hvor en har litt flere matematiske funksjoner å benytte?
Tenkjer kanskje det greiaste vil vera å henta data frå offentleg API (feks Astro position frå timeanddate.com eller alternativt kjøra script på separat server (Node Red). Interface for TPflow vert då via MQTT eller HTTP request…
Da har jeg laget ei løsning som ser ut til å virke. Har ikke testa resultatet ut på screensa enda, men jeg får i allefall definert variabelen slik jeg ønsker her:
du kan jo regne ut hva verdien skal være for hver måned , legge i excel og kjøre en tilnærming til det med ett polynom … da får du en y= xk1 + xxk2 etc + k3 formel som du kan legge i en formel.