In the process of switching over my Gnuplot graphs to RRD, I needed to re-do the SQL function I used for calculating wind chill into RPN notation. Quite straight forward in sql:
[code lang=”sql”]
CREATE OR REPLACE FUNCTION apparent_temp( float, float, float )
RETURNS float AS ‘
DECLARE
tempf ALIAS FOR $1;
relh ALIAS FOR $2;
speed ALIAS FOR $3;
aptemp float;
BEGIN
IF tempf >= 80 AND relh >= 40 THEN
aptemp = -42.379 + 2.04901523*tempf + 10.14333127*relh
– 0.22475541*tempf*relh – 0.00683783*(tempf^2)
– 0.05481717*(relh^2) + 0.00122874*(tempf^2)*relh
+ .00085282*tempf*(relh^2) – 0.00000199*(tempf^2)*(relh^2);
ELSIF speed >= 3 AND tempf <= 50 THEN
aptemp = 35.74 + .6215*tempf – 35.75*(speed^.16)
+ .4275*tempf*(speed^.16);
ELSE
aptemp = tempf;
END IF;
RETURN aptemp;
END;
‘ LANGUAGE plpgsql IMMUTABLE STRICT;
[/code]
Could not find anything quickly in Google for doing this in RRD, so I had to think on my own. The calculation is not quite as obvious in RRD RPN notation, but doable. It’s complicated by not having the power function in RRD:
DEF:ot=weather.rrd:outsidetemp:AVERAGE
DEF:ws=weather.rrd:windspeedaverage1:AVERAGE
CDEF:chill=ot,50,GE,ot,ws,3,LE,ot,35.74,.6215,ot,*,+,ws,LOG,.16,*,EXP,DUP,ot,*,.4275,*,EXC,35.75,*,-,+,IF,IF
ot – outside temperature in fahrenheit
ws – windspeed in miles per hour
This calculation will present the current temperature if the temperature is > 50 degrees fahrenheit or the windspeed < 3 mph.
Heat index comes next.