Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
wetter:ws500:wetter.cgi_konfiguration [04.01.2011 15:16. ] – Formatierung angepasst michiwetter:ws500:wetter.cgi_konfiguration [31.10.2023 18:28. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Konfiguration von wetter.cgi ======
 +
 +Zur Darstellung der Messdaten verwendete ich das wetter.cgi aus dem Paket WS **2500** von Rainer Krinke.
 +
 +Speziell für die Darstellung der Sonnenscheinwerte (sofern man bei dieser Station davon sprechen kann :-/ ) hat Rainer eine spezielle Version des wetter.cgi Scriptes geschrieben. Bei Bedarf einfach bei ihm Anfragen.
 +
 +Der Konfigurationsteil aus dem Script für meine Station war:
 +<code># -------- START CONFIG VARIABLES ---------------------------------------------
 +#
 +
 +$driver="mysql";
 +$sysDbName="mysql";
 +$dbServer="sqlhost";
 +$dbUser="sqluser";
 +$dbPassword="sqlpassword";
 +$database="database";
 +$defaultPort="3306";
 +
 +# This variable controls if the *output* is in GMT or in Local time
 +# Internally very date and time value is in GMT. User input is converted to GMT.
 +$timeIsGMT=0; # This variable controls if the script time 
 + # input as well as output is in
 + # GMT or in Local time. Internally every date and
 + # time value is in GMT. User input is converted
 + # to GMT if needed.
 +$colGrfxTable=2; # Number of columns in HTML table for graphics
 +$initialDisplayDays=7;  # range ofdays to be initially displayed
 +$doAutoBaseData=185;    # If the date range to be displayed has more than
 + # this number of days we automatically use average
 + # values on hourly basis for display. If you don't
 + # want this, set this variable to 0
 +$navPanelPos="top";     # Position where the navigation panel (Darstellungsparameter) is 
 +                        # displayed. May be "top" (above graphics) or "bottom" (beneath graphics)
 +
 +# If you assign a URL to this variable the target (should be a .css text file)
 +# is used to get all the css definitions instead of the internal definitions
 +# made below (search for variable $docCss). If you leave $externalCssUrl
 +# empty the internal definitions are used.
 +#$externalCssUrl="https://localhost/mypath/wetter.css";     
 +#$externalCssUrl="";     
 +
 +# Unit of Windspeed to be displayed
 +# 0: km/h, 1: Knots, 10: Knots and Km/h
 +$latestWindSpeedType="0";
 +# TH=Temp/Hum; PR=Pressure; WI=Wind; LI=Light; RA=Rain; PY=Pyranometer
 +# Which sensor to display in Latest data section of display 
 +# Only add Sensors you really have!!!
 +# eg: $latestSens="TH,PR,WI,RA,LI,LD";
 +# By default for each sensor the sensor with its default Id is used
 +# usually "1". If you want to display the latest data of another 
 +# sensor (except for the type TH) with a
 +# different sensorId, then set the Variable %latestSensId like:
 +#   $latestSensId{"RA"}=2
 +# meaning, that the rain sensor with the sensorId 2 will be displayed 
 +# instead of the rain sensor with id 1. For a TH-sensor see $latest_th below.
 +#$latestSens="TH,WI,PR,RA,LI";
 +$latestSens="TH,WI,PR,RA,LD";
 +$latest_th=[1];  
 +$latestSensId{"WI"}=30;
 +$latestSensId{"PR"}=20;
 +$latestSensId{"RA"}=40;
 +$latestSensId{"LD"}=50;
 +
 +
 +# If you secifies sensor type TH above, you can say here which T/H sensors
 +# should be displayed inlatest sensor display
 +$latest_th=[10,9,2,1];
 +#$latest_th=[10,9,2,1];           # LATEST T/H VALS only from inside sens (id: 17)
 +                           # You may list more ids here like
 +                           # $latest_th=[1,17,2,3,4,5,6,7,8]
 +    # *** You HAVE TO specify sens ids that ***
 +    # *** really exist                      *** 
 +
 +# Some options that can be used to display data that is calculated from the
 +# original data values. The value on the right side is a list of logical names
 +# that can be calculated like WindChill and Dewpoint.
 +# The latest_do variable defines for the sensor type and sensor id that is noted on 
 +# the left side, what shall be calculated with which another additional sensor id 
 +# noted on the right side.  .
 +# So  $latest_do->{"wind"}->{"1"}="WindChill(1)"; means that we want to display the 
 +# windchill temperature for the windsensor with id 1, based on the temperature
 +# sensor (right side) with sensor id 1
 +# $latest_do->{"th"}->{"1"}="DewPoint,absHum"; means that we want to calculate 
 +# dewpoint and the abolute humidity based on data of temp/hum sensor 1.
 +undef %latest_do;
 +#$latest_do->{"wind"}->{"1"}="WindChill(1)";
 +#$latest_do->{"th"}->{"1"}="DewPoint,absHum";
 +$latest_do{"30"}="WindChill(9)";
 +$latest_do{"9"}="DewPoint,absHum";
 +
 +# This variable lets you omit some values from the latest data display of one sensor
 +# If you want eg not to display the Humidity value of a TH sensor but only the 
 +# temperature in the latest data section of this sensor
 +# the following will do the job for a sensor with sensor id 1 
 +# The value ("H") is the name of the database column to be omitted.
 +#$latest_omit{"1"}="H";
 +$latest_omit{"1"}="H";
 +
 +# For rain and pressure sensors you can activate the trendData display. Doing this
 +# shows at *most* 3 older values from these sensors (as well as the current value anyway) 
 +# in the latest display. Note: Only *3* values are allowed since there is no more room for more
 +# values. You have to specify the number of hours for each of the three values of each sensor.
 +# If you e.g. say: 1h,6h,12h this means that for this sensor the value one/six/12 hour(s) ago will be
 +# displayed. Please keep the format: eg "6h" not "6" nor "360Minutes"!!! If you do not want these
 +# values to be displayed say eg: $latest_trendRain=[ ]; 
 +$latest_trendRain=[ "1h", "12h", "24h" ];
 +$latest_trendPressure=[ "3h", "12h", "24h" ];
 +$latest_trendLight=[ "1h", "3h", "5h" ];
 +
 +#
 +# Watch out this is for a trend sign (up or downarrow) for temperature/humidity
 +# sensors. The left value is the sensorid, the right value the time in *MINUTES*
 +# to look back in order to compare this value with the current one. 
 +# So "17:10" means that for temp/hum sensor with id 17 we look for a value that
 +# is 10 minutes old. For each sensor only one value is allowed here.
 +# Be sure to choose a time that is long enough. If eg your station collects data at an 
 +# interval of 15 minutes it does not make sense to use eg 10 minutes below.
 +# You can define it here for all sensors it will be used only for those you
 +# add below using  addSensor()
 +$latest_trendTemp=[ "17:30", "1:30", "2:30", "3:30", "4:30", "5:30", "6:30", "7:30", "8:30"];
 +
 +# The threshold values for sensors which show trends by an arrow sign. If the difference 
 +# of the current value of such a sensor and an older value is larger than the first value 
 +# given below an arrow (up or down) will be displayed. 
 +# The values given below define ranges for the value difference. For example the 
 +# values 0.1, 0.2, 0.4 define three ranges:  0.1->0.2[, 0.2->0.4[, 0.4 ->.... 
 +# Differencevalues smaller than the first value (here:0.1) will not be decorated 
 +# with a trend sign. Depending on which range the current difference fits in, a different 
 +# symbol for "small change", "more change" and "big change" will be displayed. 
 +# Exactly three  values a,b,c (defining three ranges) are allowed.
 +$latest_trendThresholdT=["0.1", "0.3", "0.5"];  # Tempdifference values little, some, a lot
 +$latest_trendThresholdH=["1", "3", "5"];    # Humidity difference
 +$latest_trendThresholdPres=["1", "2", "3"];     # Pressure difference
 +
 +
 +# The trend-symbol definition. There are three up and three down symbols that indicate 
 +# a week, average and a strong thrend up or down.
 +$latest_trendSymbDown= ['<FONT color="black">&darr;</FONT>',     # a  little
 +                        '<FONT color="darkRed">&darr;</FONT>',   # somewhat more     
 +                        '<FONT color="red">&darr;</FONT>' ]; # a lot 
 +#
 +$latest_trendSymbUp=['<FONT color="black">&uarr;</FONT>',       # a  little
 +                     '<FONT color="darkRed">&uarr;</FONT>', # somewhat more
 +                     '<FONT color="red">&uarr;</FONT>' ]; # a lot 
 +
 +# You may choose if a trend symbol or the symbol and the difference value or
 +# only the difference value without a symbol should be printed.
 +$latest_trendSymbMode="symbol+value";
 +#$latest_trendSymbMode="symbol";
 +#$latest_trendSymbMode="value";
 +#
 +# The colors for different amounts of the difference. Corresponds to 
 +# $latest_trendSymbDown[123] and $latest_trendSymbUp[123] 
 +$latest_trendSymbTextCol=["black", "darkRed","red"];
 +# Relative text size: Allowed are values like -1, -2, ... which makes the text size
 +# used for printing the value one, two, ... steps smaller than regular text.
 +$latest_trendSymbTextSize="-2";
 +    
 +# This variable controls whether in the latest data output a sensors errors
 +# will be displayed. If its !=0 then if a sensor had more dropouts in the last
 +# hours (given by $latestAlertHours) the sensors name will be printed in 
 +# the color $latestAlertColor, to show the user that this sensor had 
 +# to much errors (==drop outs) in this period of time. 
 +# The numbers of errors is taken from the error table in the database.
 +# So, for example
 +# you could say, that if any of sensors displayed in the latest data section
 +# had more than 10 errors in the last 12 hours then display its name in red:
 +#
 +$latestAlertErrCount=10;
 +$latestAlertHours=12;     # 
 +$latestAlertColor="red";  # Value has to be html conform
 +
 +
 +$tmpName="$$";
 +# Path where the created images are stored
 +#$basePath="/home/admin/www/wetter";
 +$basePath="/srv/www/htdocs/weather";
 +
 +#$imgPath="$basePath/images";
 +$imgPath="$basePath/Graphiken";
 +# URL to access the images in Path "$imgPath" via the web-server
 +#$baseImgUrl="https://www.uni-koblenz.de/~krienke/wetter/images";
 +$baseImgUrl="https://ws500.dynalias.org/weather/Graphiken";
 +
 +# Default Id for wether station. 1 ist the id for the first one
 +# You may add a different station ID to each individual sensor description
 +# created by addSensor() below by simply adding eg: "stationId" => 2
 +# to the addSensor call. 
 +$defaultStationId=1;
 +
 +# Next you define all the sensor graphics that will be displayed in a HTML table
 +# For each sensor you want to add, you have to write down a addSensor() call
 +# with appropriate paramters. Bevor the first call to addSensor() you have to create
 +# an object of Class "sensDisplayData". This is done by exactly using the first line
 +# see below) with sensDisplayData->new() before the first addSensor() demo call. 
 +# This has to be done excatly ONE time, and then you can place calls to addSensor()
 +# using the just created object. The minimum of information in the first parameter 
 +# (the first hash, surrounded by {}) in addSensor() is the sensor
 +# type which may be one of TH, PR, WI, WD, WA, RA, LI. 
 +# TH is a Temperature Himidity display
 +# PR is the air pressure display
 +# WI is the wind display sowing the windspeed over time
 +# WD is the wind display, showing the direction and speed in a polar
 +#    coordinate system
 +# WA is the winddisplay showing the winddirection and varince over time
 +# LI is the light display.
 +#All Parameters are given in a anonymous 
 +# hash ({"NAME1"=>"value1", "NAME2"="VALUE2", ...}). Besides the type of sensor you
 +# can specify all the parameters defined in the set??defaults() functions defined below, 
 +# where ?? is one of the Types from above (TH, ...). You probably want to specify 
 +# the sensorid of the sensor to be displayed, else the default sensorId for each 
 +# type is used. To specify one or more sensorids for one graphics simply add 
 +# the ids like {"sensType"=>"TH", "sensIds" => [1,2,17]}. This example would then
 +# display T/H sensors with id 1,2 and 17 in one graphic.
 +# Especially for TH sensors where temperature and humidity can be printed
 +# it might be useful to be able to display just one of both or even none of
 +# both but just the windchill value (a virtual sensor) based on this sensor.
 +# To do so just set the omit array to the values that should not be printed. eg:
 +# "omit"=>["T", "H"] would not display temp and hum of a TH sensor. So if there was no
 +# virtual sensor defined you would'nt see anything but an error message the there are 
 +# no output values to be displayed! So always take care that there is at least one value left
 +# one of a T, H value or a virtual sensor value.
 +#
 +# For some sensors it might be useful to let gnuplot automatically calculate
 +# the Y-range. Usually the lower value is set by the script to a fix value.
 +# For TH-Sensors this is eg 0". If you would like to let gnuplot
 +# determine the Y bounds by itself set "lowYbounds"=>"auto" in the
 +# addsensor() call like shown below.
 +
 +# If you do not like the default sizes of the graphics you can modify them for each sensor
 +# by adding non default values to the addSensorCall like 
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [3]},
 +#   "xSmallScale"=>0.75, "ySmallScale"=>0.75,
 +#   "xNormalScale"=>1.5, "yNormalScale"=>1.5,
 +# {  } ); 
 +# the Smallscale Variables desscribes the relative size of a graphic in the overview, whereas
 +# the NormalScale Variables determine the relative size in the detailed sensor graphics
 +# The default for SmallScale is 0.5, the default for  NormalScale is 1.1.  These values are multiplied
 +# with the default width/height that gnuplot generates. So a value of 0.5 means "half of the normal size"
 +# The "normal" size is given by what gnuplot generates for the PNG terminal.
 +#
 +# By default all sensors (exepct WA, WD) defined by addSensor() will also be used in the
 +# statisticsMode. This may lead to a strange looking statistics table in 
 +# case that one real sensor is shown in two graphics for example with 
 +# different virtual sensor values. In the statistics display this would lead to the fact 
 +# that the same sensor beeing shown twice with the same statistic values since
 +# the statistic display  only shows stats of real sensor values not of virtual.
 +# If a sensor that is defined by addSensor shall NOT be visible in the statistics overview
 +# then one may set the attribute "statistics" => "0" like this:
 +#
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [3]},
 +#   "statistics"=>"0", 
 +#                         "xSmallScale"=>0.75, "ySmallScale"=>0.75,
 +#   "xNormalScale"=>1.5, "yNormalScale"=>1.5,
 +# {  } );
 +
 +# It is even possible to define sensors only for statistic evaluation that will
 +# never be displayed in a graphics. This can be done by setting the "graphics"
 +# flag to "0" like in:
 +#
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [3]},
 +#   "graphics"=>"0",  {} );
 +#
 +# In this case the sensor will not be visible as a graphics but will appear in the 
 +# statistics display.
 +#
 +# In such a case the sensor is shown in the graphics mode but is hidden in the 
 +# statistics mode.
 +#
 +# The addSensor() function actually has two Parameters. The first one has been descibed just above. 
 +# The second one describes which virtual sensors (if there are any defined in the 
 +# set*defaults() functions) should be active.
 +# At the moment only for TH-sensors there are virtual sensors for windchill, 
 +# absolute humidity and dewpoint calculation. To activate one of them for a 
 +# TH-sensor the second parameter for addSensor() is a hash like:
 +# {"windChill"  =>"1", "absHumidity"=>"1", "dewPoint"   =>"1" }
 +# In this hash virtual sensors can be turned on by assigning them a "1" as showed above.
 +# If left undefined ({}) or even omitted no virtual sensors will be displayed.
 +# Please take care of the spelling of the virtual sensor names given above
 +# Only  one or all in the three (windChill, absHumidity, dewPoint) can be used.
 +#
 +# The wind sensor can be configured to plot data in kts instead of km/h
 +# To do so simply put the directive "windSpeedType"=>1 in the definition of the windsensor. 
 +# The example below. "windSpeedType"=>0 is the default and means plot in km/h. 
 +# You can set this option for every WI (Windspeed) and WD (Winddirection/speed)
 +# plot type individually.
 +#
 +# Attention. Either define the sensors here NOT using a config file or
 +# comment out the demo defs below and put the real definitions into 
 +# your config file. But DONT put addSensor()-calls  and the creation of 
 +# the sensDisplayData object in both the script and
 +# your config file, since this will result in nonesense or even an error!
 +# Values you might find useful to change are marked as USER in function
 +# setTHdefaults(). The same is of course true for the other sensor types not 
 +# only for T/H.
 +
 +#$sensorData=sensDisplayData->new($imgPath, $baseImgUrl, $tmpName);
 +#
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [17,2], 
 +#   "grfxName" => "My graphics Name"},
 +#   "lowYbounds"=>"auto",
 +# {     );   # No virtual sensors activated
 +#  
 +# Now we want to define a TH sensor with virtual sensors windChill and 
 +# dewPoint activated:
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [1]},
 +# {"windChill"  =>"1", "dewPoint"   =>"1" } ); # Virtual Sensors
 +# The same like above but we only want to print the virtual sensor values
 +# not temperature or Humidity
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [1], "omit"=>["T", "H"] },
 +# {"windChill"  =>"1", "dewPoint"   =>"1" } ); # Virtual Sensors
 +#  
 +# Defined a TH sensor with sensid 3 but do not activate any virtual sensors
 +# for it, so only temp and humidity will be displayed
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [3]}, {  } ); 
 +#$sensorData->addSensor( {"sensType" => "PR"}, {} );
 +#$sensorData->addSensor( {"sensType" => "WI"}, {} );                     # Plot unit is km/h
 +#$sensorData->addSensor( {"sensType" => "WI", "windSpeedType"=>1}, {} ); # Plot unit is kts
 +#$sensorData->addSensor( {"sensType" => "WI"}, {} );
 +#$sensorData->addSensor( {"sensType" => "RA"}, {} );
 +#$sensorData->addSensor( {"sensType" => "WD"}, {} );
 +#$sensorData->addSensor( {"sensType" => "WA"}, {} );
 +#$sensorData->addSensor( {"sensType" => "LI"}, {} );
 +
 +
 +$sensorData=sensDisplayData->new($imgPath, $baseImgUrl, $tmpName);
 +
 +
 +$tmp=$sensorData->addSensor( {"sensType"=>"TH", "sensIds"=>[9], "grfxName" => "Temperatur/Feuchte Au&szlig;en (in 2m H&ouml;he)"},
 +                      {"dewPoint"=>"1"} );
 +$sensorData->setVirtSensAttrib($tmp, "dewPoint", "doPrintMma", 2);
 +      
 +#$sensorData->addSensor( {"sensType" => "TH", "sensIds" => [1], "statistics"=>"0", "grfxName" => "Au&szlig;entemperatur (-80cm)" }, { } );
 +      
 +$tmp=$sensorData->addSensor( {"sensType"=>"TH", "sensIds"=>[9], "omit"=>["H"], "mmaOmit"=>["H"], "statistics" => "0", "grfxName" =>
 +                              "Temp/Windchill Au&szlig;en/Feuchte"}, {"windChill"  =>"1", "absHumidity"=>"1", });
 +$sensorData->setVirtSensAttrib($tmp, "absHumidity", "doPrintMma", 2);
 +$sensorData->setVirtSensAttrib($tmp, "windChill", "doPrintMma", 2);
 +   
 +$tmp=$sensorData->addSensor( {"sensType"=>"TH", "sensIds"=>[2], "statistics" => "0", "grfxName" =>
 +                              "Temperatur/Feuchte Saustall"}, {"absHumidity"=>"1", });
 +        
 +$tmp=$sensorData->addSensor( {"sensType"=>"TH", "sensIds"=>[10], "statistics" => "0", "grfxName" =>
 +                              "Temperatur/Feuchte Innen"}, {"absHumidity"=>"1", });
 +$sensorData->setVirtSensAttrib($tmp, "absHumidity", "doPrintMma", 2);
 +     
 +$sensorData->addSensor( {"sensType" => "PR", "sensIds" => [20], "lowYbounds"=>"auto", "grfxName" => "rel. Luftdruck" }, { } );
 +     
 +#$sensorData->addSensor( {"sensType" => "LI", "sensIds" => [50], "lowYbounds"=>"auto", "grfxName" => "Sonnenschein" }, { } );
 +$sensorData->addSensor( {"sensType"=>"LD", "sensIds"=>[50]}, {} );
 +$sensorData->addSensor( {"sensType" => "RA", "sensIds" => [40], "lowYbounds"=>"auto", "grfxName" => "Niederschl&auml;ge" }, { } );
 +     
 +$sensorData->addSensor( {"sensType" => "WI", "sensIds" => [30], "lowYbounds"=>"auto", "grfxName" => "Windgeschwindigkeiten" }, { } );
 +$sensorData->addSensor( {"sensType" => "WD", "sensIds" => [30], "lowYbounds"=>"auto", "grfxName" => "Windgeschwindigkeiten / -richtungen" }, { } );
 +$sensorData->addSensor( {"sensType" => "WA", "sensIds" => [30], "grfxName" => "Windrichtungen / -schwankungen" }, { } );
 +     
 +
 +$position="Standort: Pliening, 502m &uuml;ber NN.\n";
 +$pageTitle="Wetterdaten aus PLIENING";
 +$pageAuthors='krienke@uni-koblenz.de,tdressler@tdressler.net,joerg@alcatraz.shacknet.nu,philip.marien@pandora.be';
 +$pageDescription="linux ws500 based weather data display";
 +
 +
 +#$position="Standort: Koblenz Lay, 125m &uuml;ber NN.\n";
 +#$pageTitle="Wetterdaten aus Koblenz";
 +#$pageAuthors='krienke@uni-koblenz.de,tdressler@tdressler.net,joerg@alcatraz.shacknet.nu,philip.marien@pandora.be';
 +#$pageDescription="linux ws2500 based weather data display";
 +# Your contact address
 +$contact='Kontakt: Django <A href="mailto:django@mnet-mail.de">django@mnet-mail.de</A>';
 +$pageMetaKeywords="wetter, Pliening";
 +$pageBackgroundPicture="../wetter/sky.jpg";
 +
 +#$contact='Kontakt: Mr. X <A href="mailto:mrx@y.de">mrx@y.de</A>';
 +#$pageMetaKeywords="wetter, Koblenz";
 +#$pageBackgroundPicture="sky.jpg";
 +$pageBackgroundColor="#F0F8FF";
 +$pageTextColor="#000000";
 +$pageLinkColor="red";
 +$pageVisitedLinkColor="blue";
 +# Gnuplot background colors for graphics
 +$bgColorNormal="xEAF0FF";
 +$bgColorAverage="xE3e8F8";
 +# DST config, values are set by checkDst()  no need to change this
 +$dstStart="2004-03-29 02:00:00";  # When dst starts
 +$deltaIsDst=2;   # Difference in h from GMT->DST time
 +$dstEnd="2004-10-31 03:00:00";   # When DST ends
 +$deltaNoDst=1;   # Difference in h from GMT-> localtime
 +
 +# Some queries may be optimized by using SQL subqueries. Subqueries are 
 +# available since MYSQL Server Version 4.1. They seem to work really
 +# efficiently starting with MYSQL 5.0
 +# The variable below determines if the script should use subqueries 
 +# for MMA determination. Usually this variable is set automatically
 +# to 0 or 1 depending on the MYSQL server version. If this is > 5.0 it 
 +# is set to 1 else to 0. You can however overwrite this automatic here by 
 +# manually setting this variable to either 0 or 1.  
 +# If you want to use the automatic 
 +# setting put a comment sign (#) at the beginning of the line.
 +# Note: You need at leaset MYSQL version 4.1 if you want to use subqueries
 +# else you will see SQL errors.
 +# $useSqlSubQueries=1;
 +
 +
 +# *** You can copy all the variables between START CONFIG and END CONFIG
 +# *** into a file that can be reached by your web-server unter the path
 +# *** given below in $configpath. $configPath is set to the value of the 
 +# *** scriptname (eg wetter.cgi) with ".conf" appended. The scriptname
 +# *** and path are retrieved from the webservers environment variable
 +# *** named SCRIPT_FILENAME. apache on linux does provide this variable.
 +# *** If the given file exists and is readable
 +# *** the scripts config will be read from there overriding the variables
 +# *** set above. So  then you do not have to modify
 +# *** further entries in the script itself e.g. for new versions.
 +# *** Take care that your config file contains a valid perl-script if
 +# *** unsure use perl -c wetter.cgi.conf to check the syntax, because
 +# *** running wetter.cgi you won't see an error if your config file is
 +# *** wrong!!!!! You will just see, that wetter.cgi is not showing any
 +# *** output.
 +# *** Please take care that your config file is readable only by you and your
 +# *** web server but not to anyone else!
 +# *** If this method fails you can still hard code a value for
 +# *** $configPath in the last else-branch of the if staement.
 +# R.K. 
 +#
 +#$scriptBasename=`basename $0`;
 +#chomp($scriptBasename);
 +#if( defined($ENV{"SCRIPT_FILENAME"}) && -r $ENV{"SCRIPT_FILENAME"} ){
 +# $configPath=$ENV{"SCRIPT_FILENAME"}. ".conf";
 +#}elsif( defined($ENV{"SCRIPT_NAME"}) && -r $ENV{"SCRIPT_NAME"} ){
 +# $configPath=$ENV{"SCRIPT_NAME"} . ".conf";
 +#}else{
 +# if( -r "${scriptBasename}.conf" ){
 +# $configPath="${scriptBasename}.conf"
 +# }elsif(-r "/etc/ws2500/wetter.cgi.conf" ){
 +# $configPath="/etc/ws2500/wetter.cgi.conf";
 +# }else{
 +# $configPath="/home/krienke/wetter/wetter.cgi.conf"
 +# }
 +#}
 +
 +$scriptBasename=`basename $0`;
 +chomp($scriptBasename);
 +if( defined($ENV{"SCRIPT_FILENAME"}) && -r $ENV{"SCRIPT_FILENAME"} ){
 +        $configPath=$ENV{"SCRIPT_FILENAME"}. ".conf";
 +}elsif( defined($ENV{"SCRIPT_NAME"}) && -r $ENV{"SCRIPT_NAME"} ){
 +        $configPath=$ENV{"SCRIPT_NAME"} . ".conf";
 +}else{
 +        if( -r "${scriptBasename}.conf" ){
 +                $configPath="${scriptBasename}.conf"
 +        }elsif(-r "/etc/ws2500/wetter.cgi.conf" ){
 +                $configPath="/etc/ws2500/wetter.cgi.conf";
 +        }else{
 +                $configPath="/home/krienke/wetter/wetter.cgi.conf"
 +        }
 +}
 +
 +#
 +# -------- END CONFIG VARIABLES ---------------------------------------------</code>
 +
 +[[wetter:ws500:start|Inhaltsverzeichnis der WS500 Beschreibung]]