If your code works well, than all is well. If I may offer advice: whenever 
you have repeated code, separate it into a funciton. When testing, one test 
must include >= or <= e.g. if heat_index is 45, nothing will get done. If 
rain is 0,9 or lower, it will be ignored. As lazy as I am, I hate criptic 
things like '${vars[41]}'. Luckily, your script does not need complex logic 
but a simple stright flow of not multiply correlated rules.

You may find it usefull how parsing WeeWX variables is done in my script. 
My parsing directly produces integers when needed, fixes the above problem 
with the rain below 0,99 being ignored plus leaves items which should be 
left alone. I will mostly not translate Croatian words to avoid creating 
mistakes, but that should not present a problem.

I did manual install of WeeWX to RPi Zero and use RPi Zero as a root user, 
so paths and rights may need to be adjusted for others. Most will say it is 
impossible to set bash variables from awk, but I do not care. Nor about 
comments on eval. Nor about using root account on Zero. Such comments are 
not how security is assured.

1) prepare a WeeWX report we will be parsing. I modified this file, but can 
be any skin:

/home/weewx/skins/Seasons/skin.conf

and added there
    [[VremStanica]]
        encoding = strict_ascii
        template = VremStanica.txt.tmpl

then I created the file:
/home/weewx/skins/Seasons/VremStanica.txt.tmpl

and placed into it data I want extracted from WeeWX; adjust as needed. Name 
in the first colument will automatically become the variable name in the 
script. Note raw (epoch) times and lack of labels. It simplifes parsing 
when labels are stuck to the numbers.

Time        $current.dateTime.raw
InTemp      $current.inTemp.format(add_label=False)
OutTemp     $current.outTemp.format(add_label=False)
Dewpoint    $current.dewpoint.format(add_label=False)
Humidity    $current.outHumidity.format(add_label=False)
WindSpeed   $current.windSpeed
WindCardinal    $current.windDir.ordinal_compass
WindDirection    $current.windDir
RainRate    $current.rainRate.format(add_label=False)
Sunrise     $almanac.sun.rise.raw
Sunset      $almanac.sun.set.raw

After every report generation, we have the file with the last set of data 
created. For my manual install, it is located at:

/home/weewx/public_html/VremStanica.tx

2) parse generated data into variables in a bash script.

Oneliner awk with just the single last else print statement from bellow 
will parse all the WeeWx data from above and automatically assign variable 
names from that same file. My locale is using comma as a decimal separator. 
I round up RainRate so a 0,1 does not get integered to 0 - no rain. 
Cardinal wind directions I leave unchanged (as letters). All other values 
get converted to integers (no decimal separator).

eval $(awk '
{
    if ($1 == "RainRate" && $2 > "0,0")
        print ""$1"=\""int ($2+1)"\""
    else if ($1 == "WindCardinal") # leave original
        print ""$1"=\""$2"\""
    else    # convert to integer
        print ""$1"=\""int ($2)"\""
}' /home/weewx/public_html/VremStanica.txt)

The above converts the entire VremStanica.txt into bash variables with the 
same names. We can use them normally in the script without any extra work. 

3) automate based on the parsed data. SmartHome needs complicated rules 
wich must work together: 5 rules can close a shutter and overlap (closed 
manually, it is raining, it is sunset, it is cold, strong wind...). Which 
rule and when is allowed to lift the shutter? They all must cooperate 
perfectly. That would be out of scope in this group.

The following system can be well used for lower amount of events that need 
tracking. Easy to read and use.

# setup initial location for the flag file RoletaKisaFlag
RoletaKisaFlag="/root/RoletaKisaFlag"

# write the single piece of data $RoletaDignuta into a flag file, creating 
it; Filename stands for its function (in my case: ShuttersRainFlag). File 
iself can also be used as a timestamp for the action. After the } a 
distinguishing addition (1,2,3 or a,b,c, or Kitchen, Balcony...) can be 
made for similar flags.
echo "$RoletaDignuta" > "${RoletaKisaFlag}"

# make a timestamp when (a RoletaKisa rule was activated and) the 
particular flag used
touch "${RoletaKisaFlag}"

# read in the timestamp from the particular flag
RoletaKisaFlagAge=$(date -r "${RoletaKisaFlag}" +%s)

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to weewx-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/8ede0467-3f26-4543-a5bc-9fe4ead26540%40googlegroups.com.

Reply via email to