Transform - bruk av sinus / trigonometriske funksjoner

Hei

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å…

1 Like

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 :sweat_smile:

1 Like

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…

1 Like

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…

1 Like

Ok, det blir litt over hodet på meg :stuck_out_tongue:

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:

2 Likes

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.

2 Likes

Det finnes jo også mange approximasjoner til sinus funksjonen som sikkert er nøyaktige nok.
For eksempel Approximating the Sine Function

1 Like