You are not logged in.

#1 2016-12-03 17:03:46

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

mrpeachy's v9000 lua weather script.

NOTE: To the best of my knowledge all links have been fixed - except the dropbox link to falldowns setup is broken.

This script is OLD, but as of today - still working.  Since I was asked about a conky I have that uses it I thought I would re-post the first two post of the CrunchBang Thread:  weather in conky (LUA scripts) updated 12/26/13! here and then continue on with the conky.

The following, this post and the next are copy / paste efforts.  There are 46 pages to read at CrunchBang to get more help and 'templates' for layouts.  Lots of work for these but so satisfying when done.

= = = The First Post = = =

UPDATED POST UPDATED POST UPDATED POST UPDATED POST

GET THE SCRIPT!
UPDATED!
A recent change to the intellicast website broke parts of the old script
here is an updated version that has taken into account the changes and added new functions
get the latest script and associated files here:
https://dl.dropboxusercontent.com/u/190 … ate.tar.gz
NOTE: if you already have v9000 setup and are looking to fix the current script, to get the update to work you need the new v9000.lua AND the new .v9000_config.lua.

open the archive with archive manager or similar and extract the files to your home/username directory

dont right click and choose "extract here", when i do this a folder called v9000 is created and the files are inside that folder instead f being put into /home/username directly

there is a readme text file inside the v9000 folder


INTRODUCTION
This thread covers the development and use of weather scripts to be used in conky
CURRENTLY the latest script is a lua only weather script aka v9000 smile

There are plenty of other weather scripts out there to use, most try to emulate the functionality of ConkyForecast.  A previous weather script (v6), discussed also in this thread, attempts this approach also.  But I was never happy with the performance of this script.

V9000 is much lighter on system resources, and has some nice features which the lua only method allows.
here are a couple of v9000 displays
nowplus8.jpg
screenshot-1302.png

However, I would not say that v9000 is aimed at the beginner although I believe it is no harder to learn to write the code v9000 requires as it is to learn how to write the code in a conkyrc or write setups using other weather scripts.  It is perhaps a little more daunting if you have little or no exposure to script writing.

If you are looking for conky weather that behaves more like the original ConkyForecast (all configured in the conkyrc for example),
then TeoBigusGeekus has just set up shop in the forum too
go here to take a look: http://crunchbanglinux.org/forums/topic … eathercom/
But if you want to the LUA way then read on!

HOWTO
i have written a how to in several parts regarding the operation of this script
PART 1 - Editing settings.  Set up conkyrc and available data option
http://crunchbang.org/forums/viewtopic. … 82#p177782

PART 2 - how to use the out() function
http://crunchbang.org/forums/viewtopic. … 83#p177783

PART 3 - how to use the image function
http://crunchbang.org/forums/viewtopic. … 85#p177785

PART 4 - how to use the forecast repeat
http://crunchbang.org/forums/viewtopic. … 87#p177787

PART 5 - setting up and using the short conditions option
http://crunchbang.org/forums/viewtopic. … 19#p178119

PART 6 - how to work with a seperate display script and main script
http://crunchbang.org/forums/viewtopic. … 02#p178402
NOTE - the most recent script now uses a separate main script and display script

PART 7 - how to use xout() function
http://crunchbang.org/forums/viewtopic. … 76#p179176

PART 8 - how to use the translate functions
http://crunchbang.org/forums/viewtopic. … 15#p181415

PART 9 - how to get your v9000 to work with a slow conky update_interval setting
http://crunchbang.org/forums/viewtopic. … 77#p186277
NOTE - the most recent script now has these steps implemented

PART 10 - how to display weather alerts
http://crunchbang.org/forums/viewtopic. … 08#p188508
NOTE: weather alerts are only available for US locations

this link is to a collection of weather conditions used by intellicast
http://crunchbang.org/forums/viewtopic. … 62#p191462

here is a link to the interactive weather thread
http://crunchbang.org/forums/viewtopic.php?id=18419

get falldown's setup here (link removed - broken)
see what it does here http://youtu.be/54nZwEuaKA8

UPDATED POST UPDATED POST UPDATED POST UPDATED POST

=====
Added by Sector11: Check out mrpeachy's HOW TO : using lua scripts in conky - over at #! as well (the links in that are fixed as well).


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#2 2016-12-03 17:04:04

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

this post will hold the translation tables for different languages

GERMAN:
con_short table

con_short={--start of table, put entries below in form eg: ["Thunderstorm"]="T.Strm",
["AM Clouds/PM Sun"]="vormittags bewölkt/nachmittags sonnig",
["AM Rain/Snow Showers"]="vormittags Regen-/Schneeschauer",
["AM Showers"]="vormittags Regenschauer",
["AM Snow Showers/Wind"]="vormittags Schneeschauer/windig",
["AM Fog/PM Sun"]="vormittags Nebel/nachmittags Sonne",
["AM Drizzle"]="vormittags Nieselregen",
["PM Light Rain"]="nachmittags leichter Regen",
-- ["PM Drizzle"]
-- ["Drizzle Late"]
-- ["Early Drizzle"]
["Broken Clouds"]="überwiegend bewölkt",
["Drizzle"]="Nieselregen",
["Few Clouds"]="leichte Bewölkung",
["Few Showers"]="wenig Regenschauer",
["Few Snow Showers"]="wenig Schneeschauer",
["Freezing Rain"]="überfrierender Regen",
["Freezing Drizzle"]="überfrierender Nieselregen",
["Partly Cloudy"]="teilweise bewölkt",
["Partly Cloudy/Wind"]="teilweise bewölkt/windig",
["Haze"]="schwül/neblig",
["Heavy Rain"]="starker Regen",
["Heavy Snow"]="starker Schneefall",
["Hot"]="sehr warm",
["Isolated Thunderstorms"]="vereinzelt Gewitter",
["Light Rain"]="leichter Regen",
["Light Rain Late"]="leichter Regen nachmittags",
["Light Rain/Wind"]="leichter Regen/windig",
["Light Snow"]="leichter Schneefall",
["Light Fog"]="leichter Nebel",
["Fog Late"]="dichter Nebel",
["Mixed Rain and Hail"]="verm. Regen und Hagel",
["Mixed Rain and Snow"]="verm. Regen und Schnee",
["Mixed Rain and Sleet"]="verm. Regen und Graupel",
["Mixed Precipitation"]="verschiedener Niederschlag",
["Moderate Fog"]="mäßig neblig",
["Moderate Rain"]="mäßiger Regen",
["Mostly Cloudy"]="meist bewölkt",
["Mostly Sunny"]="meist sonnig",
["Mostly Clear"]="meist klar",
["Rain/Snow"]="Schneeregen",
["Rain Showers"]="Regenschauer",
["Rain/Snow Showers"]="Regen-/Schneeschauer",
["Drifting Snow"]="Treibschnee",
["Scattered Thunderstorms"]="vereinzelt Gewitter",
["Scattered Clouds"]="gering bewölkt",
["Scattered Showers"]="vereinzelt leichter Regen",
["Snow Showers"]="Schneeschauer",
["Snow Showers Late"]="Schneeschauer nachmittags",
["Snow Flurries"]="Schneeaufwirbelung",
["Showers Early"]="leichter Regen",
["Clear"]="klar, heiter",
["Clear/Wind"]="klar/windig",
["Blustery"]="stürmisch",
["Cloudy"]="bewölkt",
["Overcast"]="zunehmend bedeckt",
["Showers"]="Schauer",
["Sprinkles"]="Sprühregen",
["Sunny"]="sonnig",
["Thunderstorm"]="Gewitter / Unwetter",
--["Thunderstorms/Wind"]="T.Storms/Wnd"
["Wind Early"]="früh oder am morgen windig",
["Wind"]="windig", 
}--this bracket closes the table

units

--NOTE ALSO EDIT THESE SETTINGS FOR TRANSLATION PURPOSES
local visibility_unit=" mi"
local wind_mph_unit=" mph"
local wind_km_unit=" km/h"
local wind_kts_unit=" kts"
local ceiling_unit=" ft"
local wind_degrees_unit="°"

other tables

--translate NESW text
neswtext={
S="S",
SSW="SSW",
SW="SW",
WSW="WSW",
W="W",
WNW="WNW",
NW="NW",
NNW="NNW",
N="N",
NNE="NNO",
NE="NO",
ENE="ONO",
E="O",
ESE="OSO",
SE="SO",
SSE="SSO",
}--end of  N E S W text table
--translate time suffix
tsuffix={
AM="AM",
PM="AM",
}--end of time suffix table
--enter translations for uv index text
uvindextext={
["Low"]="gering",
["Moderate"]="mittel",
["High"]="hoch",
["Very High"]="sehr hoch",--format is different because of the space in the text
["Extreme"]="extrem",
}--end of uv text table
--enter translations for moonpahse
moonphases={
["New"]="Neumond", -- Mond steht für uns unsichtbar am Taghimmel
["Waxing Crescent"]="zunehmende Sichel",  -- Mond ab Vormittag bis Abend zu sehen
["First Quarter"]="erstes Viertel (Halbmond)", -- Mond ist ab Mittags bis Mitternacht zu sehen
["Waxing Gibbous"]="zunehmender Mond", -- Mond ist ab Nachmittags bis nach Mitternacht zu sehen
["Full"]="Vollmond", -- Mond ist die ganze Nacht zu sehen
["Waning Gibbous"]="abnehmender Mond", -- Mond ist von vor Mitternacht bis zum Vormittag zu sehen
["Last Quarter"]="letztes Viertel (Halbmond)", -- Mond ist von Mitternacht bis zum Mittag zu sehen
["Waning Crescent"]="abnehmende Sichel", -- Mond ist vom Morgen bis Nachmittags zu sehen
}--end of moon phase table
--enter translations for FULL day names
daynames={
Monday="Montag",
Tuesday="Dienstag",
Wednesday="Mittwoch",
Thursday="Donnerstag",
Friday="Freitag",
Saturday="Samstag",
Sunday="Sonntag",
}--end day names table
--enter translations for SHORT day names
dayshort={
Monday="Mo",
Tuesday="Di",
Wednesday="Mi",
Thursday="Do",
Friday="Fr",
Saturday="Sa",
Sunday="So"
}--end short day names table
--enter translation for FULL month names
monthnames={
January="Januar",
February="Februar",
March="März",
April="April",
May="Mai",
June="Juni",
July="Juli",
August="August",
September="September",
October="Oktober",
November="November",
December="Dezember"
}--end of month name translations
--enter translations for SHORT month names
monthshort={
January="Jan",
February="Feb",
March="März",
April="April",
May="Mai",
June="Juni",
July="Juli",
August="Aug",
September="Sep",
October="Okt",
November="Nov",
December="Dez"
}--end of short month name translations
--enter some additional translations
additional={
NA="t_NA",
Unl="t_Unl"--for ceiling data option
}--end of additional translations
--END OF TRANSLATION TABLES

= = = = =
Added by Sector11 - it ended here, I think I have a Spanish one -- will search and post


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#3 2016-12-03 17:27:05

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

Get the v9000 weather script setup according to the first post.

Now - The Next 24HRs and a Ten Day Forecast (includes today's forecast)
DGnPjGTn.jpg

The conky - be aware my /paths/to/files/and/images will need changing.

Fonts used:
Conky: monofur and LED_mono
Template: monofur and digitalk

S11_v9_10d-24h.conky

## To use #! in a conky use: ${exec echo '#!'}
# pkill -xf "conky -c /media/5/Conky/S11_v9_10d-24h.conky" &
##
## The latest script is a lua only weather script. aka: v9000
## http://crunchbang.org/forums/viewtopic.php?id=16100
##
## the file:
## http://dl.dropbox.com/u/19008369/current%20v9000/v9000.tar.gz
##
## mrppeachys LUA Tutorial
## http://crunchbang.org/forums/viewtopic.php?id=17246
##
##
###  Begin Window Settings  ##################################################
# Create own window instead of using desktop (required in nautilus)
own_window yes
own_window_type normal
own_window_hints skip_taskbar,skip_pager #,undecorated,sticky
own_window_transparent no
own_window_colour 000000
own_window_class Conky
own_window_title Buenos Aires Argentina Current - 24 Hour - 10 Day Weather Forecast

# Use the Xdbe extension? (eliminates flicker)
# It is highly recommended to use own window with this one
# so double buffer won't be so big.
double_buffer yes

### ARGB can be used for real transparency - test when using images!!!!
### NOTE that a composite manager is required for real transparency.
# own_window_argb_visual yes

### When ARGB visuals are enabled, this use this to modify the alpha value
### Valid range is 0-255, where 0 is 0% opacity, and 255 is 100% opacity.
# own_window_argb_value 0

minimum_size 1380 0 ## width | height
maximum_width 1380

gap_x 0        ### left & right
gap_y 50        ### up & down

alignment top_middle
####################################################  End Window Settings  ###
###  Font Settings  ##########################################################
# Use Xft (anti-aliased font and stuff)
use_xft yes
#xftfont Anonymous Pro:size=9
xftfont Monofur:size=12

# Alpha of Xft font. Must be a value at or between 1 and 0 ###
xftalpha 1
# Force UTF8? requires XFT ###
override_utf8_locale yes

draw_shades yes
default_shade_color black

draw_outline no # amplifies text if yes
default_outline_color black

uppercase no
######################################################  End Font Settings  ###
###  Color Settings  #########################################################
default_shade_color gray
default_outline_color black

default_color DCDCDC #220 220 220	Gainsboro
color0 8FBC8F #143 188 143	DarkSeaGreen
color1 778899 #119 136 153	LightSlateGray
color2 D8BFD8 #216 191 216	Thistle
color3 9ACD32 #154 205  50	YellowGreen
color4 FFA07A #255 160 122	LightSalmon
color5 FFDEAD #255 222 173	NavajoWhite
color6 00BFFF #  0 191 255	DeepSkyBlue
color7 5F9EA0 # 95 158 160	CadetBlue
color8 BDB76B #189 183 107	DarkKhaki
color9 CD5C5C #205  92  92	IndianRed
#####################################################  End Color Settings  ###
###  Borders Section  ########################################################
draw_borders no
# Stippled borders?
stippled_borders 0
# border margins
border_inner_margin 5
border_outer_margin 0
# border width
border_width 0
# graph borders
draw_graph_borders no
#default_graph_size 15 40
#####################################################  End Borders Secton  ###
###  Miscellaneous Section  ##################################################
# Boolean value, if true, Conky will be forked to background when started.
background yes

# Adds spaces around certain objects to stop them from moving other things
# around, this only helps if you are using a mono font
# Options: right, left or none
use_spacer none

# Subtract (file system) buffers from used memory?
no_buffers yes

##############################################  End Miscellaneous Section  ###
###  LUA Settings  ###########################################################
###  V9000   #################################################################
#starts the lua weather data gathering function, call once at top of conkyrc
lua_load ~/v9000/v9000.lua
lua_draw_hook_post weather
lua_load /media/5/Conky/templates/S11-10d-24h-template.lua
#######################################################  End LUA Settings  ###
# The all important - How often conky refreshes.
update_interval 1

TEXT
























${color C0C0C0}${font LED_mono:size=40}${goto 50}${time %T}${alignr 50}${time %d:%m:%y}${font}${color}

and the LUA template for this conky: /media/5/Conky/templates/S11-10d-24h-template.lua

--[[
The latest script is a lua only weather script. aka: v9000
 http://crunchbang.org/forums/viewtopic.php?id=16100

the file:
 http://dl.dropbox.com/u/19008369/current%20v9000/v9000.tar.gz

mrppeachys LUA Tutorial
 http://crunchbang.org/forums/viewtopic.php?id=17246

sun_rise_24[n]
sun_set_24[n]
moon_rise_24[n]
moon_set_24[n]
now["time_24"]
now["fc_hour1_time_24"]
now["fc_hour2_time_24"]
now["fc_hour3_time_24"]

]]
_G.weather_script = function()--#### DO NOT EDIT THIS LINE ##############
--these tables hold the coordinates for each repeat do not edit #########
top_left_x_coordinate={}--###############################################
top_left_y_coordinate={}--###############################################
--#######################################################################
--SET DEFAULTS ##########################################################
--set defaults do not localise these defaults if you use a seperate display script
--default_font="monofur"--font must be in quotes
default_font="monofur"--font must be in quotes
default_font_size=14
--default_face="bold"
default_color=0xffffff--white
default_alpha=1--fully opaque
default_image_width=50
default_image_height=50
-- ## New Options ###
default_face="bold"
-- "normal" for normal/normal
-- "bold" for normal/bold
-- "italic" for italic/normal
-- "bolditalic" for italic/bold
--END OF DEFAULTS #######################################################
--START OF WEATHER CODE -- START OF WEATHER CODE -- START OF WEATHER CODE
out({c=0x778899,a=1,x=605,y=430,txt="Fetched "..now["date"].." "..now["month_short"].." @ "..now["time_24"]})
image({x=10,y=20,h=60,w=60,file=now["weather_icon"]})
  --image({x=10,y=20,h=60,w=60,file="/media/5/Conky/images/red+x.png"})
-- Temp / FeelsLike & CONDITIONS TEXT
out({c=0x48D1CC,a=1,f="digitalk",face="normal",fs=50,x=80,y=55,txt=now["temp"]})
out({c=0x00BFFF,a=1,f="digitalk",face="normal",fs=50,x=150,y=55,txt=now["feels_like"]})
out({c=0xA4FFA4,a=1,x=81,y=72,txt="Temp   WC·HI"})

out({c=0x48D1CC,a=1,fs=18,x=10,y=94,txt=now["conditions_short"]})

-- data titles
--    data output ### x = left or right  y = up or down

datay=120 --110  -- y=datay or
datayy=25 --15   -- y=datay+(datayy*1) use 1 or more

out({c=0xFAFAEC,a=1,x=10,y=datay,txt="WC"})
   out({c=0x48D1CC,a=1,x=45,y=datay,txt=now["wind_chill"].."°"})
out({c=0xFAFAEC,a=1,x=110,y=datay,txt="HI"})
   out({c=0xFF8C00,a=1,x=145,y=datay,txt=now["heat_index"].."°"})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*1),txt="Hoy Hi·Lo"})
   out({c=0xFF8C00,a=1,x=115,y=datay+(datayy*1),txt=high_temp[1].."°"})
   out({c=0x48D1CC,a=1,x=160,y=datay+(datayy*1),txt=low_temp[1].."°"})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*2),txt="Wind"})
   out({c=0x48D1CC,a=1,x=60,y=datay+(datayy*2),txt=now["wind_km"]})
--   out({c=0x48D1CC,a=1,x=110,y=datay+(datayy*2),txt=now["wind_nesw"]})
   out({c=0xFAFAEC,a=1,x=140,y=datay+(datayy*2),txt="@"})
   out({c=0x48D1CC,a=1,x=165,y=datay+(datayy*2),txt=now["wind_nesw"]})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*3),txt="Hum"})
   out({c=0x48D1CC,a=1,x=60,y=datay+(datayy*3),txt=now["humidity"].."%"})
out({c=0xFAFAEC,a=1,x=110,y=datay+(datayy*3),txt="DP"})
   out({c=0x48D1CC,a=1,x=145,y=datay+(datayy*3),txt=now["dew_point"].."°"})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*4),txt="Bar"})
   out({c=0x48D1CC,a=1,x=60,y=datay+(datayy*4),txt=now["pressure_mb"]})
--out({c=0xFAFAEC,a=1,x=110,y=datay+(datayy*4),txt="Vis"})
  -- out({c=0x48D1CC,a=1,x=145,y=datay+(datayy*4),txt=now["visibility"]})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*5),txt="Ceil"})
   out({c=0x48D1CC,a=1,x=60,y=datay+(datayy*5),txt=now["ceiling"]})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*6),txt="CR"})
   out({c=0x48D1CC,a=1,x=60,y=datay+(datayy*6),txt=precipitation[1].."%"})
out({c=0xFAFAEC,a=1,x=110,y=datay+(datayy*6),txt="Cld"})
   out({c=0x48D1CC,a=1,x=150,y=datay+(datayy*6),txt=cloud_cover[1].."%"})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*7),txt="UV"})
   out({c=0x48D1CC,a=1,x=60,y=datay+(datayy*7),txt=uv_index_num[1]})
   out({c=0x48D1CC,a=1,x=110,y=datay+(datayy*7),txt=uv_index_txt[1]})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*8),txt="Sun"})
   out({c=0xFAFAEC,a=1,x=60,y=datay+(datayy*8),txt=sun_rise_24[1]})
   out({c=0x48D1CC,a=1,x=120,y=datay+(datayy*8),txt=sun_set_24[1]})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*9),txt="Moon"})
   out({c=0xFAFAEC,a=1,x=60,y=datay+(datayy*9),txt=moon_rise_24[1]})
   out({c=0x48D1CC,a=1,x=120,y=datay+(datayy*9),txt=moon_set_24[1]})
out({c=0xFAFAEC,a=1,x=10,y=datay+(datayy*10),txt="Phase"})
   out({c=0x48D1CC,a=1,x=70,y=datay+(datayy*10),txt=moon_phase[1]})

-- lines
image({x=205,y=5,w=1,h=370,file="/media/5/Conky/images/cyan_1.png"})
--image({x=275,y=5,w=1,h=370,file="/media/5/Conky/images/cyan_1.png"})
--image({x=345,y=5,w=1,h=370,file="/media/5/Conky/images/cyan_1.png"})
image({x=535,y=5,w=1,h=370,file="/media/5/Conky/images/cyan_1.png"})

-- HOUR OUTPUT -------------
-- l|r
hrx=214
htix=210
hrtx=225
hrxx=55
-- u|d
hty=40
htyy=65 -- topy+(topyy*1)
htry=88

out({c=0x48D1CC,a=1,x=270,y=15,txt="Next 24 Hours"})
-- out({c=0x48D1CC,a=1,f="monofur:bold",fs=12,x=220,y=30,txt="Hours"})

-- 1st, to 6th hours
out({c=0xA4FFA4,x=hrx,y=hty,txt=forecast_hour_24[1]..":00"})
--	image({w=45,h=45,x=htix,y=hty+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix,y=hty+5,file=hour_weather_icon[1]})
out({x=hrtx,y=hty+htyy,txt=hour_temp[1] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*1,y=hty,txt=forecast_hour_24[2]..":00"})
--	image({w=45,h=45,x=htix+hrxx*1,y=hty+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*1,y=hty+5,file=hour_weather_icon[2]})
out({x=hrtx+hrxx*1,y=hty+htyy,txt=hour_temp[2] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*2,y=hty,txt=forecast_hour_24[3]..":00"})
--	image({w=45,h=45,x=htix+hrxx*2,y=hty+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*2,y=hty+5,file=hour_weather_icon[3]})
out({x=hrtx+hrxx*2,y=hty+htyy,txt=hour_temp[3] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*3,y=hty,txt=forecast_hour_24[4]..":00"})
--	image({w=45,h=45,x=htix+hrxx*3,y=hty+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*3,y=hty+5,file=hour_weather_icon[4]})
out({x=hrtx+hrxx*3,y=hty+htyy,txt=hour_temp[4] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*4,y=hty,txt=forecast_hour_24[5]..":00"})
--	image({w=45,h=45,x=htix+hrxx*4,y=hty+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*4,y=hty+5,file=hour_weather_icon[5]})
out({x=hrtx+hrxx*4,y=hty+htyy,txt=hour_temp[5] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*5,y=hty,txt=forecast_hour_24[6]..":00"})
--	image({w=45,h=45,x=htix+hrxx*5,y=hty+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*5,y=hty+5,file=hour_weather_icon[6]})
out({x=hrtx+hrxx*5,y=hty+htyy,txt=hour_temp[6] .."°"})

-- 7th to 12th hours
out({c=0xA4FFA4,x=hrx,y=hty+htry,txt=forecast_hour_24[7]..":00"})
--	image({w=45,h=45,x=htix,y=hty+htry+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix,y=hty+htry+5,file=hour_weather_icon[7]})
out({x=hrtx,y=hty+htry+htyy,txt=hour_temp[7] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*1,y=hty+htry,txt=forecast_hour_24[8]..":00"})
--	image({w=45,h=45,x=htix+hrxx*1,y=hty+htry+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*1,y=hty+htry+5,file=hour_weather_icon[8]})
out({x=hrtx+hrxx*1,y=hty+htry+htyy,txt=hour_temp[8] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*2,y=hty+htry,txt=forecast_hour_24[9]..":00"})
--	image({w=45,h=45,x=htix+hrxx*2,y=hty+htry+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*2,y=hty+htry+5,file=hour_weather_icon[9]})
out({x=hrtx+hrxx*2,y=hty+htry+htyy,txt=hour_temp[9] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*3,y=hty+htry,txt=forecast_hour_24[10]..":00"})
--	image({w=45,h=45,x=htix+hrxx*3,y=hty+htry+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*3,y=hty+htry+5,file=hour_weather_icon[10]})
out({x=hrtx+hrxx*3,y=hty+htry+htyy,txt=hour_temp[10] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*4,y=hty+htry,txt=forecast_hour_24[11]..":00"})
--	image({w=45,h=45,x=htix+hrxx*4,y=hty+htry+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*4,y=hty+htry+5,file=hour_weather_icon[11]})
out({x=hrtx+hrxx*4,y=hty+htry+htyy,txt=hour_temp[11] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*5,y=hty+htry,txt=forecast_hour_24[12]..":00"})
--	image({w=45,h=45,x=htix+hrxx*5,y=hty+htry+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*5,y=hty+htry+5,file=hour_weather_icon[12]})
out({x=hrtx+hrxx*5,y=hty+htry+htyy,txt=hour_temp[12] .."°"})

-- 13th to 18th hours
out({c=0xA4FFA4,x=hrx,y=hty+htry*2,txt=forecast_hour_24[13]..":00"})
--	image({w=45,h=45,x=htix,y=hty+htry*2+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix,y=hty+htry*2+5,file=hour_weather_icon[13]})
out({x=hrtx,y=hty+htry*2+htyy,txt=hour_temp[13] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*1,y=hty+htry*2,txt=forecast_hour_24[14]..":00"})
--	image({w=45,h=45,x=htix+hrxx*1,y=hty+htry*2+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*1,y=hty+htry*2+5,file=hour_weather_icon[14]})
out({x=hrtx+hrxx*1,y=hty+htry*2+htyy,txt=hour_temp[14] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*2,y=hty+htry*2,txt=forecast_hour_24[15]..":00"})
--	image({w=45,h=45,x=htix+hrxx*2,y=hty+htry*2+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*2,y=hty+htry*2+5,file=hour_weather_icon[15]})
out({x=hrtx+hrxx*2,y=hty+htry*2+htyy,txt=hour_temp[15] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*3,y=hty+htry*2,txt=forecast_hour_24[16]..":00"})
--	image({w=45,h=45,x=htix+hrxx*3,y=hty+htry*2+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*3,y=hty+htry*2+5,file=hour_weather_icon[16]})
out({x=hrtx+hrxx*3,y=hty+htry*2+htyy,txt=hour_temp[16] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*4,y=hty+htry*2,txt=forecast_hour_24[17]..":00"})
--	image({w=45,h=45,x=htix+hrxx*4,y=hty+htry*2+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*4,y=hty+htry*2+5,file=hour_weather_icon[17]})
out({x=hrtx+hrxx*4,y=hty+htry*2+htyy,txt=hour_temp[17] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*5,y=hty+htry*2,txt=forecast_hour_24[18]..":00"})
--	image({w=45,h=45,x=htix+hrxx*5,y=hty+htry*2+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*5,y=hty+htry*2+5,file=hour_weather_icon[18]})
out({x=hrtx+hrxx*5,y=hty+htry*2+htyy,txt=hour_temp[18] .."°"})

-- 19th to 24th hours
out({c=0xA4FFA4,x=hrx,y=hty+htry*3,txt=forecast_hour_24[19]..":00"})
--	image({w=45,h=45,x=htix,y=hty+htry*3+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix,y=hty+htry*3+5,file=hour_weather_icon[19]})
out({x=hrtx,y=hty+htry*3+htyy,txt=hour_temp[19] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*1,y=hty+htry*3,txt=forecast_hour_24[20]..":00"})
--	image({w=45,h=45,x=htix+hrxx*1,y=hty+htry*3+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*1,y=hty+htry*3+5,file=hour_weather_icon[20]})
out({x=hrtx+hrxx*1,y=hty+htry*3+htyy,txt=hour_temp[20] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*2,y=hty+htry*3,txt=forecast_hour_24[21]..":00"})
--	image({w=45,h=45,x=htix+hrxx*2,y=hty+htry*3+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*2,y=hty+htry*3+5,file=hour_weather_icon[21]})
out({x=hrtx+hrxx*2,y=hty+htry*3+htyy,txt=hour_temp[21] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*3,y=hty+htry*3,txt=forecast_hour_24[22]..":00"})
--	image({w=45,h=45,x=htix+hrxx*3,y=hty+htry*3+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*3,y=hty+htry*3+5,file=hour_weather_icon[22]})
out({x=hrtx+hrxx*3,y=hty+htry*3+htyy,txt=hour_temp[22] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*4,y=hty+htry*3,txt=forecast_hour_24[23]..":00"})
--	image({w=45,h=45,x=htix+hrxx*4,y=hty+htry*3+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*4,y=hty+htry*3+5,file=hour_weather_icon[23]})
out({x=hrtx+hrxx*4,y=hty+htry*3+htyy,txt=hour_temp[23] .."°"})

out({c=0xA4FFA4,x=hrx+hrxx*5,y=hty+htry*3,txt=forecast_hour_24[24]..":00"})
--	image({w=45,h=45,x=htix+hrxx*5,y=hty+htry*3+5,file="/media/5/Conky/images/red+x.png"})
	image({w=45,h=45,x=htix+hrxx*5,y=hty+htry*3+5,file=hour_weather_icon[24]})
out({x=hrtx+hrxx*5,y=hty+htry*3+htyy,txt=hour_temp[24] .."°"})

--start or weather forecast table section
--set start forecast day
start_day=1
--set total forecast days you want to display
number_of_days=10

---   x = left or right  y = up or down
topy=15
topyy=200 --135 -- topy+(topyy*1)

topx=550 --430 --290 --285
topxx=170 --120

--set coordinates for top lef corners for each repeat
top_left_x_coordinate[1],top_left_y_coordinate[1]        =topx            ,topy
   top_left_x_coordinate[2],top_left_y_coordinate[2]     =topx+(topxx*1)  ,topy
top_left_x_coordinate[3],top_left_y_coordinate[3]        =topx+(topxx*2)  ,topy
   top_left_x_coordinate[4],top_left_y_coordinate[4]     =topx+(topxx*3)  ,topy
top_left_x_coordinate[5],top_left_y_coordinate[5]        =topx+(topxx*4)  ,topy
   top_left_x_coordinate[6],top_left_y_coordinate[6]     =topx            ,topy+(topyy*1)
top_left_x_coordinate[7],top_left_y_coordinate[7]        =topx+(topxx*1)  ,topy+(topyy*1)
   top_left_x_coordinate[8],top_left_y_coordinate[8]     =topx+(topxx*2)  ,topy+(topyy*1)
top_left_x_coordinate[9],top_left_y_coordinate[9]        =topx+(topxx*3)  ,topy+(topyy*1)
   top_left_x_coordinate[10],top_left_y_coordinate[10]   =topx+(topxx*4)  ,topy+(topyy*1)
--########################################################################################
for i=start_day,number_of_days-(start_day-1) do --start of day repeat, do not edit #######
tlx=top_left_x_coordinate[i] --sets top left x position for each repeat ##################
tly=top_left_y_coordinate[i] --sets top left y position for each repeat ##################
--########################################################################################
out({c=0xA4FFA4,a=1,x=tlx,y=tly,txt=forecast_day_short[i].."  "..forecast_date[i].."  "..forecast_month_short[i]})
--image({x=tlx,y=tly+5,h=60,w=60,file="/media/5/Conky/images/red+x.png"})
image({x=tlx,y=tly+5,h=60,w=60,file=weather_icon[i]})
out({c=0xFF8C00,a=1,x=tlx+70,y=tly+25,txt=high_temp[i].."°"})
out({c=0x48D1CC,a=1,x=tlx+70,y=tly+50,txt=low_temp[i].."°"})
out({c=0x48D1CC,a=1,x=tlx,y=tly+70,txt=conditions_short[i]})
--image({x=tlx+100,y=tly+5,h=20,w=20,file="/media/5/Conky/images/red+x.png"})
image({x=tlx+100,y=tly+5,h=20,w=20,file=moon_icon[i]})
out({c=0xFAFAEC,a=1,x=tlx,y=tly+90,txt="P: "..precipitation[i].."%"})
   out({c=0xFAFAEC,a=1,x=tlx+80,y=tly+90,txt="UV: "..uv_index_num[i]})
out({c=0xFAFAEC,a=1,x=tlx,y=tly+110,txt="H: "..humidity[i].."%"})
	out({c=0xFAFAEC,a=1,x=tlx+80,y=tly+110,txt=uv_index_txt[i]})
out({c=0xFAFAEC,a=1,x=tlx,y=tly+130,txt="S: "..sun_rise_24[i]})
   out({c=0x48D1CC,a=1,x=tlx+90,y=tly+130,txt=sun_set_24[i]})
out({c=0xFAFAEC,a=1,x=tlx,y=tly+150,txt="M: "..moon_rise_24[i]})
   out({c=0x48D1CC,a=1,x=tlx+90,y=tly+150,txt=moon_set_24[i]})
--########################################################################################
end--of forecast repeat section ##########################################################
--########################################################################################
--END OF WEATHER CODE ----END OF WEATHER CODE ----END OF WEATHER CODE ---
--#######################################################################
end--of weather_display function do not edit this line ##################
--#######################################################################

Also you'll need the /media/5/Conky/images/cyan_1.png image found here
OK, I think that's it.  Have fun!


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#4 2016-12-03 18:19:59

unklar
Back to the roots 1.9
From: #! BL
Registered: 2015-10-31
Posts: 1,581

Re: mrpeachy's v9000 lua weather script.

WOW @S11, thank you for your work. smile

Sorry, the 10 links below HOWTO are all dead.  neutral

Offline

#5 2016-12-03 18:47:15

unklar
Back to the roots 1.9
From: #! BL
Registered: 2015-10-31
Posts: 1,581

Re: mrpeachy's v9000 lua weather script.

Hmm, and, both OLD lua scripts work with me correctly...   hmm

v9000KeinBug.th.jpg

this too

v9001KeinBug.th.jpg

Last edited by unklar (2016-12-03 19:00:44)

Offline

#6 2016-12-03 19:43:47

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

unklar wrote:

WOW @S11, thank you for your work. smile

Sorry, the 10 links below HOWTO are all dead.  neutral

I was asked over in Teo's thread for a few of my conkys ... the v9000 was one of the images he asked about.  This is a newer version than requested and FULL  smile

Between looking through a {cough cough} few hundred conkys and lua scripts, life and sleep it's been a while in coming.

The links above have been fixed now.  I've been here and on #! forums at the same time fixing links for the past few hours. (I type slow, check, fix, check again, OK move on to the next one ...)

Fixed up a couple of mrpeachy's threads that had old links due to #! moving to a different server.
ie: crunchbanglinux.org to crunchbang.org along with some other edits needed.

weather in conky (LUA scripts) updated - the first two posts here are from that thread, and
HOW TO : using lua scripts in conky by mrpeachy since it's rather important as well.

I think you have these text files of the threads at #!:
/media/5/Conky/LUA/mrpeachy/HowTo-Using-LUA-in-Conky.txt
/media/5/Conky/LUA/mrpeachy/HowTo-v9000-weather-in-Conky.txt


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#7 2016-12-03 19:48:17

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

unklar wrote:

Hmm, and, both OLD lua scripts work with me correctly...   hmm

What old script?


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#8 2016-12-03 20:45:21

unklar
Back to the roots 1.9
From: #! BL
Registered: 2015-10-31
Posts: 1,581

Re: mrpeachy's v9000 lua weather script.

^Ok, then we have two old gentlemen past one another. sad

You should have linked to the Teo thread. The user has not reported again.
This sentence misled me:

A recent change to the intellicast website broke parts of the old script
here is an updated version that has taken into account the changes and added new functions
get the latest script and associated files here:

Because I did not understand you the thread from the #! Forum here again.

"Old" is then the update of Dec13 / Jan14,  what I have.  big_smile

Sorry for the misunderstanding.  ops

Last edited by unklar (2016-12-03 20:46:18)

Offline

#9 2016-12-03 21:44:15

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

No apology necessary.  It's a simple OOPS!

I must check Teo's thread

The latest "fix" to the v9000.lua script I have is:  destripator_2015-01-31_v9000.lua.tar.gz

Latest known v9000 scirpt - 1374 lines:

--weather v9000 by mrpeachy 01/10/12; released: Nov 10, 2014
-- destripator - 2015-01-31
require 'cairo'
require 'imlib2'
--*******************************************************************
--***Adjust below your TimeZone compared with UTC (Universal Time),
--***visiting for example <http://www.timeanddate.com/worldclock/timezone/utc>
--***Examples:
--***if you live in Los Angeles (California)--> utc= -8
--***if you live in Caracas --> local utc= -4.5
--***if you live in London ---> local utc= 0
--***if you live in Madrid ---> local utc= 1 (important: you never type the sign + here)
--***if you live in New Delhi --> local utc= 5.5 (important: you never type the sign + here)
--***etc...
--**************************************************************************************************
--************************FILL ONLY THESE FIELDS BELOW!*********************************************
local utc= 0
local maxHours=3     --(you can type here from 3 to 42. Adjust it to your needs (hourly weather))
local username = os.getenv("USERNAME")
--you can enter your username here in case of errors,
--enter username in quotes like this username = "yourname"
local username = username
package.path = '/home/'..username..'/.v9000_config.lua'
--**************************************************************************************************
--**************************************************************************************************
require '.v9000_config'
--INITIALIZE SETTINGS-- need only be run once
get=1
run=1
general_settings,translation_tables,translate=weather_settings()
--GET DAILY WEATHER FUNCTION
function getdaily(l,u)
	if u=="F" then
	web="http://www.intellicast.com/Local/Forecast.aspx?unit=F&location="..l
	elseif u=="C" then
	web="http://www.intellicast.com/Local/Forecast.aspx?unit=C&location="..l
	end
local f=io.popen("curl --max-time 60 '"..web.."' | sed 's/%//g'")
local allweatherdata=f:read("*a")
f:close()
local allweatherdata=string.gsub(allweatherdata,"[\n\r]","")
	if string.find(allweatherdata,">10 Day Forecast&nbsp")~=nil then
	local a,b,allweather=string.find(allweatherdata,">10 Day Forecast&nbsp(.*)MarginBottom")
	local a,b,nowweather=string.find(allweatherdata,">Current Conditions&nbsp(.*)>View detailed Observations")
		if string.find(allweatherdata,"Severe Weather Alert!")~=nil then
		alert=1
		else
		alert=0
		end
	--get location
	local a,b,wl=string.find(allweatherdata,"<title>%s*Intellicast%s%p%s(.*)</title>")
	local weather_location=string.gsub(wl," Extended Forecast in",",")
	if string.len(utc)<=2 or utc==-10 or utc==-11 then
		a,b,UniTime=string.find(allweatherdata,"Universal Time:</strong>&nbsp;[%a%s%d%p]*, (%d*):%d*%s*</div>")
	else
		a,b,UniTime=string.find(allweatherdata,"Universal Time:</strong>&nbsp;[%a%s%d%p]*, (%d*:%d*)%s*</div>")
	end
	return 1,allweather,nowweather,alert,weather_location,UniTime
	else
	return 0,0,0,0,0,0
	end--if testall==1
end--daily
--GET ALERT DATA FUNCTION
function getalert(l)
print ("getting alert data")
local f=io.popen("curl --max-time 60 'http://www.intellicast.com/Storm/Severe/Bulletins.aspx?location="..l.."' | sed 's/%//g'")
local alertdata=f:read("*a")
f:close()
local alertdata=string.gsub(alertdata,"[\n\r]","")
	if string.find(alertdata,"%a")~=nil then
	return alertdata,1
	else
	return 0,0
	end
end--function alert
--GET HOUR DATA FUNCTION
function gethourdata(l,u)
	if u=="F" then
	web="http://www.intellicast.com/Local/Hourly.aspx?unit=F&location="..l
	elseif u=="C" then
	web="http://www.intellicast.com/Local/Hourly.aspx?unit=C&location="..l
	end
--get todays hours
	local f=io.popen("curl --max-time 60 '"..web.."' | sed 's/%//g'")
	local hourlytoday=f:read("*a")
	f:close()
	local hourlytoday=string.gsub(hourlytoday,"[\n\r]","")
	local s,f,day0=string.find(hourlytoday,"Hourly Forecast Report&nbsp(.*)chartFooter")
	--get tomorrows hours
	local f=io.popen("curl --max-time 60 '"..web.."&day=Tomorrow' | sed 's/%//g'")
	local hourlytomorr=f:read("*a")
	f:close()
	local hourlytomorr=string.gsub(hourlytomorr,"[\n\r]","")
	local s,f,day1=string.find(hourlytomorr,"Hourly Forecast Report&nbsp(.*)chartFooter")
		if maxHours<=24 then
			return day0,day1,1
		else
--get next day hours
			local f=io.popen("curl --max-time 60 '"..web.."&day=Next%20Day' | sed 's/%//g'")
			local hournextday=f:read("*a")
			f:close()
			local hournextday=string.gsub(hournextday,"[\n\r]","")
			local s,f,day2=string.find(hournextday,"Hourly Forecast Report&nbsp(.*)chartFooter")
			return day0,day1,day2,1
		end
	end--hourlydata function

--## MAIN FUNCTION ###########
function conky_weather()--##########
--## SETUP CONKY WINDOW ################################
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create(cs)
local updates=tonumber(conky_parse('${updates}'))
--###UNCOMMENT THE BELOW LINE TO ENABLE CPU DELAY##########################################################
--if updates>5 then--###### YOU WILL ALSO HAVE TO UNCOMMENT THE MATCHING end ON LINE 923 ####################
--#########################################################################################################
local testing=0--this setting is for script testing, if not in testing set to 0
--#########################################################################################################
if get<4 then--run the script
--############start of timed section#######################################################################
--#########################################################################################################
local timer=(updates %tonumber(general_settings.update_interval))
if timer==0 or run==1 then--######
--##GET DAILY WEATHER DATA#####################################
local location=general_settings.location
local units=general_settings.units or "F"
local tries=general_settings.tries or 3
print ("gathering data with curl.  Attempt "..get.." of "..tries)
testall,allweather,nowweather,alert,weather_location,UniTime=getdaily(location,units)
--#######################################
	if testall==1 then --curl worked and script should continue
	run=nil
	continue=1
	get=1
	elseif testall==0 then
	get=get+1
	continue=0
	run=1
	runtemplate=0
	end
--##GET ALERT DATA#####################################
alert_check=general_settings.alert_check
	if alert_check==1 and alert==1 and continue==1 then --only works if bit before worked, and alerts are on and there are alerts to get
	alertdata,alerttest=getalert(location)
	--#######################################
		if alerttest==1 then --curl worked and script should continue
		run=nil
		continue=1
		get=1
		elseif alerttest==0 then
		get=get+1
		continue=0
		run=1
		runtemplate=0
		end
	end--alert section
--##GET HOUR DATA#####################################
	if continue==1 then
	print ("getting hourly data")
		if maxHours<=24 then
		day0,day1,htest=gethourdata(location,units)
		else
		day0,day1,day2,htest=gethourdata(location,units)
		end
		if htest==1 then --curl worked and script should continue
		run=nil
		continue=1
		get=1
		elseif htest==0 then
		get=get+1
		continue=0
		run=1
		runtemplate=0
		end
	end
--#########################################################################
end--of timed data gathering section
--#########################################################################
--START PROCESSING ###########################################################################
if continue==1 then--all instances of curl worked
--START PROCESSING ###########################################################################
local weathericons=general_settings.weathericons
local con_short=general_settings.con_short
local visibility_unit=general_settings.visibility_unit
local wind_mph_unit=general_settings.wind_mph_unit
local wind_km_unit=general_settings.wind_km_unit
local wind_kts_unit=general_settings.wind_kts_unit
local ceiling_unit=general_settings.ceiling_unit
local wind_degrees_unit=general_settings.wind_degrees_unit
--#########################################################################
--LOAD TRANSLATE TABLES IF TRANSLATE SETTING = 1
	if translate==1 then
	monthshort=translation_tables.monthshort
	monthnames=translation_tables.monthnames
	dayshort=translation_tables.dayshort
	daynames=translation_tables.daynames
	neswtext=translation_tables.neswtext
	tsuffix=translation_tables.tsuffix
	uvindextext=translation_tables.uvindextext
	moonphases=translation_tables.moonphases
	additional=translation_tables.additional
	else--neswtext,tsuffix,uvindextext,moonphases,daynames,dayshort,monthnames,monthshort
	dayshort={Monday="Mon",Tuesday="Tue",Wednesday="Wed",Thursday="Thu",Friday="Fri",Saturday="Sat",Sunday="Sun"}
	monthshort={January="Jan",February="Feb",March="Mar",April="Apr",May="May",June="Jun",July="Jul",August="Aug",September="Sep",October="Oct",November="Nov",December="Dec"}
	end--end if translate =1
--#########################################################################
--process data tables
--intellicast to conky weather icon conversion
wimage={
wx_65="32",  -- Clear
wx_66="30",  -- Partly Cloudy
wx_67="26",  -- Cloudy
wx_68="32",  -- Clear
wx_69="28",  -- Mostly Cloudy
wx_70="20",  -- Fog
wx_71="32",  -- Clear
wx_72="21",  -- Haze
wx_73="36",  -- Hot
wx_74="14",  -- Light Snow Showers
wx_75="28",  -- Mostly Cloudy
wx_76="18",  -- Sleet
wx_77="14",  -- Light Snow Showers
wx_78="23",  -- Blustery
wx_79="05",  -- Mixed Rain and Snow
wx_80="15",  -- Drifting Snow
wx_81="15",  -- Drifting Snow
wx_82="11",  -- Light Rain
wx_83="16",  -- Snow
wx_84="00",  -- Tornado
wx_85="32",  -- Clear
wx_86="25",  -- N/A
wx_87="09",  -- Drizzle
wx_88="05",  -- Mixed Rain and Snow
wx_89="18",  -- Sleet
wx_90="18",  -- Sleet
wx_91="39",  -- Scattered Showers
wx_92="39",  -- Scattered Showers
wx_93="39",  -- Scattered Showers
wx_94="39",  -- Scattered Showers
wx_95="37",  -- Isolated Thunderstorms
wx_96="37",  -- Isolated Thunderstorms
wx_97="31",  -- Clear
wx_98="29",  -- Partly Cloudy
wx_99="27",  -- Mostly Cloudy
wx_100="47",  -- Isolated Thunderstorms
wx_101="47",  -- Isolated Thunderstorms
wx_102="33",  -- Fair
wx_103="26",  -- Cloudy
wx_104="20",  -- Fog
wx_105="45",  -- Scattered Showers
wx_106="45",  -- Scattered Showers
wx_107="11",  -- Light Rain
wx_108="46",  -- Snow Showers
wx_109="46",  -- Snow Showers
wx_110="06",  -- Mixed Rain and Sleet
wx_111="18",  -- Sleet
wx_112="06",  -- Mixed Rain and Sleet
wx_113="46",  -- Snow Showers
wx_114="46",  -- Snow Showers
wx_115="31",  -- Clear
wx_116="47",  -- Isolated Thunderstorms
}--end w image table
--convert intellicast icons to weather font
wfont={
wx_65="a",
wx_66="c",
wx_67="f",
wx_68="a",
wx_69="d",
wx_70="0",
wx_71="a",
wx_72="9",
wx_73="5",
wx_74="p",
wx_75="d",
wx_76="w",
wx_77="p",
wx_78="6",
wx_79="x",
wx_80="8",
wx_81="8",
wx_82="h",
wx_83="q",
wx_84="m",
wx_85="a",
wx_86="-",
wx_87="h",
wx_88="x",
wx_89="w",
wx_90="w",
wx_91="g",
wx_92="g",
wx_93="g",
wx_94="g",
wx_95="k",
wx_96="k",
wx_97="A",
wx_98="C",
wx_99="D",
wx_100="K",
wx_101="K",
wx_102="B",
wx_103="f",
wx_104="0",
wx_105="G",
wx_106="G",
wx_107="h",
wx_108="O",
wx_109="O",
wx_110="x",
wx_111="w",
wx_112="x",
wx_113="O",
wx_114="O",
wx_115="A",
wx_116="K",
}--end w font table
--conversion day and month tables
moonfontt={
["New"]="@",
["Full"]="=",
["First Quarter"]="T",
["Last Quarter"]="G",
["Waning Gibbous"]="D",
["Waning Crescent"]="J",
["Waxing Crescent"]="Q",
["Waxing Gibbous"]="W",
}--end of moon font table
moonicont={
["New"]=weathericons.."moon_new.png",
["Full"]=weathericons.."moon_full.png",
["First Quarter"]=weathericons.."moon_first_quarter.png",
["Last Quarter"]=weathericons.."moon_last_quarter.png",
["Waning Gibbous"]=weathericons.."moon_waning_gibbous.png",
["Waning Crescent"]=weathericons.."moon_waning_crescent.png",
["Waxing Crescent"]=weathericons.."moon_waxing_crescent.png",
["Waxing Gibbous"]=weathericons.."moon_waxing_gibbous.png",
}--end of moon icon table
windfontt={
S="9",
SSW=":",
SW=";",
WSW="<",
W="=",
WNW=">",
NW="?",
NNW="@",
N="1",
NNE="2",
NE="3",
ENE="4",
E="5",
ESE="6",
SE="7",
SSE="8"
}--end of wind direction font table
--#########################################################################
--#########################################################################
--setup tables for forecast weather
forecast_day={}
forecast_day_caps={}
forecast_day_lc={}
forecast_day_short={}
forecast_day_short_caps={}
forecast_day_short_lc={}
forecast_month={}
forecast_month_caps={}
forecast_month_lc={}
forecast_month_short={}
forecast_month_short_caps={}
forecast_month_short_lc={}
forecast_date={}
weather_icon={}
weather_font={}
high_temp={}
low_temp={}
conditions={}
conditions_caps={}
conditions_lc={}
conditions_short={}
conditions_short_caps={}
conditions_short_lc={}
sun_rise={}
sun_rise_lc={}
sun_rise_time={}
sun_rise_24={}
moon_rise={}
moon_rise_lc={}
moon_rise_time={}
moon_rise_24={}
moon_rise_ampm={}
moon_rise_ampm_lc={}
sun_set={}
sun_set_lc={}
sun_set_time={}
sun_set_24={}
moon_set={}
moon_set_lc={}
moon_set_time={}
moon_set_24={}
moon_set_ampm={}
moon_set_ampm_lc={}
humidity={}
precipitation={}
snow={}
cloud_cover={}
moon_phase={}
moon_phase_caps={}
moon_phase_lc={}
moon_font={}
moon_icon={}
wind_mph={}
wind_km={}
wind_kts={}
wind_font={}
wind_icon={}
wind_deg={}
wind_nesw={}
uv_index_num={}
uv_index_txt={}
uv_index_txt_caps={}
uv_index_txt_lc={}
--#########################################################################
--## FORECAST WEATHER #######################################################################################################################################
--## FORECAST WEATHER #######################################################################################################################################
--## FORECAST WEATHER #######################################################################################################################################
--## FORECAST WEATHER #######################################################################################################################################
--extract information into tables
local start=0
local f=1
while f~=nil do
--match forecast day name and date
local s,f,t=string.find(allweather,"<td%scolspan=%p2%p><strong>([%a,%s%d]*)</strong></td>",start)
	if t~=nil then
	--split name from month and date
	local a,b,day=string.find(t,"(%a*),%s")
	local a,b,month=string.find(t,",%s(%a*)%s")
	local a,b,date=string.find(t,"(%d*)$")
	--ser day names, regular, caps, lowercase and short
	table.insert(forecast_day_short,dayshort[day])
	table.insert(forecast_day_short_caps,string.upper(dayshort[day]))
	table.insert(forecast_day_short_lc,string.lower(dayshort[day]))
		if translate==1 then
		day=daynames[day]
		else
		day=day
		end
	table.insert(forecast_day,day)
	table.insert(forecast_day_caps,string.upper(day))
	table.insert(forecast_day_lc,string.lower(day))
	--set month types
	table.insert(forecast_month_short,monthshort[month])
	table.insert(forecast_month_short_caps,string.upper(monthshort[month]))
	table.insert(forecast_month_short_lc,string.lower(monthshort[month]))
		if translate==1 then
		month=monthnames[month]
		else
		month=month
		end
	table.insert(forecast_month,month)
	table.insert(forecast_month_caps,string.upper(month))
	table.insert(forecast_month_lc,string.lower(month))
	--set date
	table.insert(forecast_date,date)
	end--if t~= nil_
--intellicast weather icon match
local s,f,t=string.find(allweather,"40_clear/(wx_[%d]*).png\"",start)
--convert to conkyweather icon
	if t~=nil then
	table.insert(weather_icon,weathericons..wimage[t]..".png")
	--convert to weather font
	table.insert(weather_font,wfont[t])
	end
--match conditions
local s,f,t=string.find(allweather," /><br />([%a%s%p]*)</td>",start)
	if t~=nil then
	table.insert(conditions,t)
	table.insert(conditions_caps,string.upper(t))
	table.insert(conditions_lc,string.lower(t))
	--set short versions--------------------------------
	local cons=t
	for k,v in pairs(con_short) do
            if cons==k then
            cons=v
            end
        end
	table.insert(conditions_short,cons)
	table.insert(conditions_short_caps,string.upper(cons))
	table.insert(conditions_short_lc,string.lower(cons))
	-----------------------------------------------------
	end
--match high temp
local s,f,t=string.find(allweather,"\"Hi\">([%p%d]*)&deg",start)
table.insert(high_temp,t)
--match low temp
local s,f,t=string.find(allweather,"\"Lo\">([%p%d]*)&deg",start)
table.insert(low_temp,t)
--match sun rise times
local s,f,t=string.find(allweather,"Rise:</strong> (%d*:%d*%s%u%u)</td>",start)
	if t~=nil then
	--get time only
	local a,b,tm=string.find(t,"([%d%p]*)")
	--get suffix only
	local a,b,suf=string.find(t,"(%u%u)")
--###############################
--24 hour conversion
table.insert(sun_rise_24,convert24(tm,suf))
--###############################
		if translate==1 then
		suf=tsuffix[suf]
		else
		suf=suf
		end
	table.insert(sun_rise,tm.." "..suf)
	table.insert(sun_rise_lc,string.lower(tm.." "..suf))
	table.insert(sun_rise_time,tm)
	end
--match sun set times
local s,f,t=string.find(allweather,"Set:</strong> (%d*:%d*%s%u%u)</td>",f)
	if t~=nil then
	--get time only
	local a,b,tm=string.find(t,"([%d%p]*)")
	--get suffix only
	local a,b,suf=string.find(t,"(%u%u)")
--###############################
--24 hour conversion
table.insert(sun_set_24,convert24(tm,suf))
--###############################
		if translate==1 then
		suf=tsuffix[suf]
		else
		suf=suf
		end
	table.insert(sun_set,tm.." "..suf)
	table.insert(sun_set_lc,string.lower(tm.." "..suf))
	table.insert(sun_set_time,tm)
	end
--moon rise
local s,f,t=string.find(allweather,"Rise:</strong> (%d*:%d*%s%u%u)</td>",f)
	if t~=nil then
	--get time only
	local a,b,tm=string.find(t,"([%d%p]*)")
	--get suffix only
	local a,b,suf=string.find(t,"(%u%u)")
--###############################
--24 hour conversion
table.insert(moon_rise_24,convert24(tm,suf))
--###############################
		if translate==1 then
		suf=tsuffix[suf]
		else
		suf=suf
		end
	table.insert(moon_rise,tm.." "..suf)
	table.insert(moon_rise_lc,string.lower(tm.." "..suf))
	table.insert(moon_rise_time,tm)
	table.insert(moon_rise_ampm,suf)
	table.insert(moon_rise_ampm_lc,string.lower(suf))
	end
--moon set
local s,f,t=string.find(allweather,"Set:</strong> (%d*:%d*%s%u%u)</td>",f)
	if t~=nil then
	--get time only
	local a,b,tm=string.find(t,"([%d%p]*)")
	--get suffix only
	local a,b,suf=string.find(t,"(%u%u)")
--###############################
--24 hour conversion
table.insert(moon_set_24,convert24(tm,suf))
--###############################
		if translate==1 then
		suf=tsuffix[suf]
		else
		suf=suf
		end
	table.insert(moon_set,tm.." "..suf)
	table.insert(moon_set_lc,string.lower(tm.." "..suf))
	table.insert(moon_set_time,tm)
	table.insert(moon_set_ampm,suf)
	table.insert(moon_set_ampm_lc,string.lower(suf))
	end
--match uv index
local s,f,tuv=string.find(allweather,"UV Index:</strong>%s*(%d*%s*%([%a%s]*%))%s*<br />",start)
	if tuv~=nil then
	--get just number
	local a,b,unm=string.find(tuv,"(%d*)%s*%([%a%s]*%)")
	--get just text
	local a,b,utx=string.find(tuv,"%d*%s*%(([%a%s]*)%)")
	table.insert(uv_index_num,unm)
		if translate==1 then
		utx=uvindextext[utx]
		else
		utx=utx
		end
	table.insert(uv_index_txt,utx)
	table.insert(uv_index_txt_caps,string.upper(utx))
	table.insert(uv_index_txt_lc,string.lower(utx))
	end
--match humidity
local s,f,t=string.find(allweather,"Humidity:</strong> (%d*)<br />",start)
table.insert(humidity,t)
--match ppt
local s,f,t=string.find(allweather,"Precipitation:</strong> (%d*)<br />",start)
table.insert(precipitation,t)
--match snow %
local s,f,t=string.find(allweather,"Snow Probability:</strong>%s*(%d*)<br />",start)
table.insert(snow,t)
--match cloud coveage
local s,f,t=string.find(allweather,"Cloud Coverage:</strong> (%d*)<br />",start)
table.insert(cloud_cover,t)
--match moon phase
local s,f,t=string.find(allweather,"Moon Phase:</strong> ([%a%s]*) <br />",start)
--set moon phase text
	if t~= nil then
	--set moon phase font and icon
	table.insert(moon_font,moonfontt[t])
	table.insert(moon_icon,moonicont[t])
		if translate==1 then
		t=moonphases[t]
		else
		t=t
		end
	table.insert(moon_phase,t)
	table.insert(moon_phase_caps,string.upper(t))
	table.insert(moon_phase_lc,string.lower(t))
	end
--match wind speeds
local s,f,tmph=string.find(allweather,"Wind Speed:</strong> (%d*)Mph",start)
local tmph=tonumber(tmph)
table.insert(wind_mph,tmph)
local s,f,t=string.find(allweather,"Mph%s*%((%d*)Km,",start)
table.insert(wind_km,t)
local s,f,t=string.find(allweather,"Km,%s*(%d*)Kts%)",start)
table.insert(wind_kts,t)
--match wind direction
local s,f,twd=string.find(allweather,"Wind Direction:</strong> ([%d&;%s%(%a%)]*)%s*</div>",start)
	if twd~=nil then
	local a,b,tdeg=string.find(twd,"(%d*)&deg;")
	table.insert(wind_deg,tdeg)
	--match wind font and nesw
	local a,b,tnesw=string.find(twd,"%((%a*)%)")
	table.insert(wind_font,windfontt[tnesw])
		if tmph>0 and tmph<19 then
		table.insert(wind_icon,weathericons.."green_"..string.lower(tnesw)..".png")
		elseif tmph>18 and tmph<38 then
		table.insert(wind_icon,weathericons.."yellow_"..string.lower(tnesw)..".png")
		elseif tmph>37 and tmph<64 then
		table.insert(wind_icon,weathericons.."orange_"..string.lower(tnesw)..".png")
		elseif tmph>63 then
		table.insert(wind_icon,weathericons.."green_"..string.lower(tnesw)..".png")
		elseif tmph==0 then
		table.insert(wind_icon,weathericons.."no_wind.png")
		end
		if translate==1 then
		tnesw=neswtext[tnesw]
		else
		tnesw=tnesw
		end
	table.insert(wind_nesw,tnesw)
	end
if f==nil then break end
start=f
end--while

--## ALERTS ###############################################################
--## ALERTS ###############################################################
--## ALERTS ###############################################################
--## ALERTS ###############################################################
if alert_check==1 then
--set tables
alert_type={}
alert_issued={}
	if alert==1 then
	alert_icon=weathericons.."icon_alert_1.gif"
	--extract information into tables
	--get alert line
	local start=0
	local f=1
		while f~=nil do
		local s,f,t=string.find(alertdata,"><strong class='Alert'>([%a%s]*)</strong><br/>",start)
			if t~=nil then
			table.insert(alert_type,t)
			end--if t~=nil
		local s,f,t=string.find(alertdata,"<br />([%d%a%s:]*)<br /><br />",start)
			if t~=nil then
			table.insert(alert_issued,t)
			end--if t~=nil
			if f==nil then break end
		start=f
		alert_number=#alert_type
		end--while
	else
	alert_icon=weathericons.."icon_alert_0.gif"
	table.insert(alert_type,"NO ALERTS")
	table.insert(alert_issued,"")
	alert_number=0
	end--alert==1
else
alert_type={}
alert_issued={}
alert_icon=weathericons.."icon_alert_0.gif"
table.insert(alert_type,"alerts turned off")
table.insert(alert_issued,"")
alert_number=0
end--if alert check ###########################################
--#########################################################################
--## HOURLY ###############################################################
--## HOURLY ###############################################################
--## HOURLY ###############################################################
--## HOURLY ###############################################################
--setup tables
forecast_hour={}--number and suffix
forecast_hour_12={}--just number in 12 hour format
forecast_hour_ampm={}--either AM or PM
forecast_hour_24={}--just hour in 24 format
hour_temp={}
hour_windchill={}
hour_heatindex={}
hour_uvindex_num={}
hour_uvindex_txt={}
hour_dewpoint={}
hour_humidity={}
hour_precipitation={}
hour_snow={}
hour_clouds={}
hour_visibility_mi={}
hour_visibility_km={}
hour_wind_nsew={}
hour_wind_mph={}
hour_wind_kmh={}--new variable
hour_weather_icon={}
hour_weather_font={}
hour_conditions={}
hour_conditions_short={}
--NEW CODE
local localtime=">"..fixutc(UniTime,utc).."<"
local webday={day0,day1,day2}
if localtime~=">12 AM<" then
	local s,f,htc=string.find(day0,localtime)
	web=webday[1]
	count=2
	initl=s-20
else
	local s,f,htc=string.find(day1,localtime)
	web=webday[2]
	count=3
	initl=s-20
end
for i=1,maxHours,1 do
  	local s,f,time=string.find(web,"DateTime\">(%d*%s%u+)</td>",initl)
	table.insert(forecast_hour,time)
		local space=string.find(time,"%s")
		local num=string.sub(time,1,space-1)
	table.insert(forecast_hour_12,num)
		local suf=string.sub(time,space+1,string.len(time))
	table.insert(forecast_hour_ampm,suf)
	table.insert(forecast_hour_24,convert24(num,suf))
	local s,f,temp=string.find(web,"<td>([%p%d]*)&deg%p-</td>",f)
	table.insert(hour_temp,temp)
	local s,f,chill=string.find(web,"<td>([%p%d]*)&deg%p-</td>",f)
	table.insert(hour_windchill,chill)
	local s,f,heat=string.find(web,"<td>([%p%d]*)&deg%p-</td>",f)
	table.insert(hour_heatindex,heat)
	local s,f,uvnum=string.find(web,"<td>([%p%d]*)<br",f)
	table.insert(hour_uvindex_num,uvnum)
	local s,f,uvtxt=string.find(web,"/>([%a%s]*)</td",f)
	if translate~=1 then
		uvtxt=uvtxt
	else
		uvtxt=uvindextext[uvtxt]
	end
	table.insert(hour_uvindex_txt,uvtxt)
	local s,f,dew=string.find(web,"<td>([%p%d]*)&deg%p-</td>",f)
	table.insert(hour_dewpoint,dew)
	local s,f,hum=string.find(web,"<td>(%d*)</td",f)
	table.insert(hour_humidity,hum)
	local s,f,ppt=string.find(web,"<td>(%d*)</td",f)
	table.insert(hour_precipitation,ppt)
	local s,f,snow=string.find(web,"<td>(%d*)</td",f)
	table.insert(hour_snow,snow)
	local s,f,cloud=string.find(web,"<td>(%d*)</td",f)
	table.insert(hour_clouds,cloud)
	local s,f,vmi=string.find(web,"<td>(%d*)mi<br",f)
	table.insert(hour_visibility_mi,vmi)
	local s,f,vkm=string.find(web,"/>(%d*)KM</td",f)
	table.insert(hour_visibility_km,vkm)
	local s,f,nsew=string.find(web,"<td>(%u*)<br",f)
	if nsew~=nil then
		if translate~=1 then
			nsew=nsew
		else
			nsew=neswtext[nsew]
		end
	table.insert(hour_wind_nsew,nsew)
	end
	local s,f,wmph=string.find(web,"/>(%d*)mph</td",f)
		 local tosmph=tonumber(wmph)
	table.insert(hour_wind_mph,tosmph)
	table.insert(hour_wind_kmh,tosmph*1.61)
	local s,f,t=string.find(web,"32_clear/(wx_[%d]*).png\"",f)
	table.insert(hour_weather_icon,weathericons..wimage[t]..".png")
	table.insert(hour_weather_font,wfont[t])
	local s,f,cons=string.find(web,"<td>(%a+[%s%a%p]-)</td>",f)
	table.insert(hour_conditions,cons)
		for k,v in pairs(con_short) do
		    if cons==k then
		    cons=v
		    end
		end
	table.insert(hour_conditions_short,cons)
	initl=f
	if forecast_hour[i]~=("11 PM") then
		web=web
	else
		web=webday[count]
		count=count+1
		initl=0
	end
end
--#############################################################
--#########################################################################
--## CURRENT WEATHER #######################################################################################################################################
--## CURRENT WEATHER #######################################################################################################################################
--## CURRENT WEATHER #######################################################################################################################################
--## CURRENT WEATHER #######################################################################################################################################
--format now weather
now={}
monthlong={Jan="January",Feb="February",Mar="March",Apr="April",May="May",Jun="June",Jul="July",Aug="August",Sep="September",Oct="October",Nov="November",Dec="December"}
--<div style="float:right;color:#FFF;">
local s,f,tnow=string.find(nowweather,"As of ([%d%p%a%s]*) %(Local Time%)")
local s,f,t=string.find(tnow,"(%d*%p%d*%s%a*) on")
--get time only
local a,b,ntm=string.find(t,"(%d*%p%d*)")
--get suffix only
local a,b,suf=string.find(t,"(%u%u)")
--###############################
--24 hour conversion
now["time_24"]=convert24(ntm,suf)
--###############################
if translate==1 then
suf=tsuffix[suf]
else
suf=suf
end
now["time"]=ntm.." "..suf
now["time_lc"]=string.lower(ntm.." "..suf)
now["time_num"]=ntm
now["time_ampm"]=suf
now["time_ampm_lc"]=string.lower(suf)
--get day
local s,f,t=string.find(tnow,"on (%a*)%s%d*")
if translate==1 then
day=daynames[t]
else
day=t
end
now["day"]=day
now["day_caps"]=string.upper(day)
now["day_lc"]=string.lower(day)
--short day names
local ds=dayshort[t]
now["day_short"]=ds
now["day_short_caps"]=string.upper(ds)
now["day_short_lc"]=string.lower(ds)
--get date
local s,f,t=string.find(tnow,"%s(%d%d)%s")
now["date"]=t
--get months
local s,f,t=string.find(tnow,"%d%d%s(%a*)%s%d")
if translate==1 then
mnth=monthlong[t]
now["month_short"]=monthshort[mnth]
now["month_short_caps"]=string.upper(monthshort[mnth])
now["month_short_lc"]=string.lower(monthshort[mnth])
mnth=monthnames[mnth]
else
now["month_short"]=t
now["month_short_caps"]=string.upper(t)
now["month_short_lc"]=string.lower(t)
mnth=monthlong[t]
end
now["month"]=mnth
now["month_caps"]=string.upper(mnth)
now["month_lc"]=string.lower(mnth)
--get year
local s,f,t=string.find(tnow,"%a%a%a%s(%d%d%d%d)")
now["year"]=t
--get weather icon
local s,f,t=string.find(nowweather,"40_white/(wx_[%d]*)%ppng%p%stitle=%p")
now["weather_icon"]=weathericons..wimage[t]..".png"
now["weather_font"]=wfont[t]
--class=%pIcon%p /> ([%a%s]*)%s*</td>
local s,f,t=string.find(nowweather,"class=%pIcon%p /> ([%a%s%p]*)%s*%s*</td>%s*<td class=%pEmpty%p>&nbsp;")
local t=t:gsub("^%s*(.-)%s*$", "%1")
now["conditions"]=t
now["conditions_caps"]=string.upper(t)
now["conditions_lc"]=string.lower(t)
--set short versions------------------------
	local cons=t
	for k,v in pairs(con_short) do
            if cons==k then
            cons=v
            end
        end
	now["conditions_short"]=cons
	now["conditions_short_caps"]=string.upper(cons)
	now["conditions_short_lc"]=string.lower(cons)
--------------------------------------------
local s,f,t=string.find(nowweather,"Temperature\">([%p%d]*)&deg")
now["temp"]=t
local s,f,t=string.find(nowweather,">Feels Like: ([%p%d]*)&deg;</a>")
now["feels_like"]=t
local s,f,t=string.find(nowweather,">Wind Chill: </a></td>%s*<td>([%p%d]*)&deg;</td>")
now["wind_chill"]=t
local s,f,t=string.find(nowweather,">Ceiling: </a></td>%s*<td>([%a%d]*)</td>")
	if t~="Unl" then
	local s,f,t=string.find(t,"([%d%p]*)")
	tc=t..ceiling_unit
	else
		if translate==1 then unlset=additional.Unl else unlset=t end
	tc=unlset
	end
now["ceiling"]=tc
now["ceiling_caps"]=string.upper(tc)
now["ceiling_lc"]=string.lower(tc)
--get heat index
local s,f,t=string.find(nowweather,">Heat Index: </a></td>%s*<td>([%p%d]*)&deg;</td>")
now["heat_index"]=t
--get visibility
local s,f,t=string.find(nowweather,">Visibility: </a></td>%s*<td>([%a%d%p]*)</td>")
	if t~="Unl" then
	local s,f,t=string.find(t,"([%d%p]*)")
	tv=t..visibility_unit
	else
		if translate==1 then unlset=additional.Unl else unlset=t end
	tv=unlset
	end
now["visibility"]=tv
now["visibility_caps"]=string.upper(tv)
--get dew point
local s,f,t=string.find(nowweather,">Dew Point: </a></td>%s*<td>([%p%d]*)&deg;</td>")
now["dew_point"]=t
--get wind speed
local s,f,t=string.find(nowweather,">Wind: </a></td>%s*<td>(%d*)mph</td>")
local tmph=tonumber(t)
now["wind_mph"]=t..wind_mph_unit
now["wind_mph_caps"]=string.upper(t..wind_mph_unit)
--convert mph to km and knots #################################################
--[[1 mile per hour = 0.869 international nautical mile per hour (knot)
     1 mile per hour = 1.609 kilometers per hour
     1 mile per hour = 0.4470 meter per second
     1 knot = 1.852 kilometers per hour
     1 knot = 0.5144 meter per second
     1 meter per second = 3.6 kilometers per hour]]
now["wind_km"]=round(tonumber(t)*1.609)..wind_km_unit
now["wind_km_caps"]=string.upper(round(tonumber(t)*1.609)..wind_km_unit)
now["wind_kts"]=round(tonumber(t)*0.869)..wind_kts_unit
now["wind_kts_caps"]=string.upper(round(tonumber(t)*0.869)..wind_kts_unit)
--#############################################################################
local s,f,t=string.find(nowweather,">Humidity: </a></td>%s*<td>(%d*)</td>")
now["humidity"]=t
--get wind direction #######################################################
local s,f,twd=string.find(nowweather,">Direction: </a></td>%s*<td style=[%p%a]*>([%d%p%a%u]*)%s*</td>%s*</tr>")
--check for NA
local a,b,t=string.find(twd,"(%u*)")
local tnesw=t
if tnesw~="NA" then
local a,b,t=string.find(twd,"(%d*)&deg;")
now["wind_deg"]=t..wind_degrees_unit
local a,b,tnesw=string.find(twd,";(%u*)")
		if tmph>0 and tmph<19 then
		now["wind_icon"]=weathericons.."green_"..string.lower(tnesw)..".png"
		elseif tmph>18 and tmph<38 then
		now["wind_icon"]=weathericons.."yellow_"..string.lower(tnesw)..".png"
		elseif tmph>37 and tmph<64 then
		now["wind_icon"]=weathericons.."orange_"..string.lower(tnesw)..".png"
		elseif tmph>63 then
		now["wind_icon"]=weathericons.."green_"..string.lower(tnesw)..".png"
		end
	now["wind_font"]=windfontt[tnesw]
--################################
		if translate==1 then
		tnesw=neswtext[tnesw]
		else
		tnesw=tnesw
		end
--################################
	now["wind_nesw"]=tnesw
	else
		if translate==1 then naset=additional.NA else naset="NA" end
	now["wind_deg"]=naset
	now["wind_icon"]=weathericons.."no_wind.png"
	now["wind_nesw"]=naset
	now["wind_font"]=windfontt["N"]
	end
--END WIND DIRECTION #######################################################
--get pressure
local s,f,t=string.find(nowweather,">Pressure: </a></td>%s*<td>([%d%p]*)\"</td>")
now["pressure"]=t
--convert pressures ########################################################
--[[ 1 inch of mercury = 25.4 mm of mercury = 33.86 millibars
     = 33.86 hectoPascals]]
now["pressure_mb"]=round(tonumber(t)*33.86)
--##########################################################################
local s,f,t=string.find(nowweather,">Gusts: </a></td>%s*<td>([%d%a]*)</td>")
if t~="NA" then
local s,f,t=string.find(t,"(%d*)")
tg=t..wind_mph_unit
tgkm=round(tonumber(t)*1.609)..wind_km_unit
tgkts=round(tonumber(t)*0.869)..wind_kts_unit
else
	if translate==1 then naset=additional.NA else naset="NA" end
tg=naset
tgkm=naset
tgkts=naset
end
now["wind_gusts"]=tg
now["wind_gusts_caps"]=string.upper(tg)
now["wind_gusts_km"]=tgkm
now["wind_gusts_km_caps"]=string.upper(tgkm)
now["wind_gusts_kts"]=tgkts
now["wind_gusts_kts_caps"]=string.upper(tgkts)
--##########################################################################
--##########################################################################
--DEPRECATED CODE -- ONLY FOR MAINTENANCE
--get hourly forecast options hour1--------------------
now["fc_hour1_time_24"]=forecast_hour_24[1]
now["fc_hour1_time"]=forecast_hour[1]
now["fc_hour1_ampm"]=forecast_hour_ampm[1]
now["fc_hour1_ampm_lc"]=string.lower(forecast_hour_ampm[1])
now["fc_hour1_cond"]=hour_conditions[1]
now["fc_hour1_cond_lc"]=string.lower(hour_conditions[1])
now["fc_hour1_cond_caps"]=string.upper(hour_conditions[1])
now["fc_hour1_cond_short"]=hour_conditions_short[1]
now["fc_hour1_cond_short_caps"]=string.upper(hour_conditions_short[1])
now["fc_hour1_cond_short_lc"]=string.lower(hour_conditions_short[1])
now["fc_hour1_wicon"]=hour_weather_icon[1]
now["fc_hour1_wfont"]=hour_weather_font[1]
now["fc_hour1_temp"]=hour_temp[1]
--end of hour1 data gathering--repeat 2 more times
--get hourly forecast options hour2--------------------
now["fc_hour2_time_24"]=forecast_hour_24[2]
now["fc_hour2_time"]=forecast_hour[2]
now["fc_hour2_ampm"]=forecast_hour_ampm[2]
now["fc_hour2_ampm_lc"]=string.lower(forecast_hour_ampm[2])
now["fc_hour2_cond"]=hour_conditions[2]
now["fc_hour2_cond_lc"]=string.lower(hour_conditions[2])
now["fc_hour2_cond_caps"]=string.upper(hour_conditions[2])
now["fc_hour2_cond_short"]=hour_conditions_short[2]
now["fc_hour2_cond_short_caps"]=string.upper(hour_conditions_short[2])
now["fc_hour2_cond_short_lc"]=string.lower(hour_conditions_short[2])
now["fc_hour2_wicon"]=hour_weather_icon[2]
now["fc_hour2_wfont"]=hour_weather_font[2]
now["fc_hour2_temp"]=hour_temp[2]
--end of hour2 data gathering--repeat 1 more times
--get hourly forecast options hour3--------------------
now["fc_hour3_time_24"]=forecast_hour_24[3]
now["fc_hour3_time"]=forecast_hour[3]
now["fc_hour3_ampm"]=forecast_hour_ampm[3]
now["fc_hour3_ampm_lc"]=string.lower(forecast_hour_ampm[3])
now["fc_hour3_cond"]=hour_conditions[3]
now["fc_hour3_cond_lc"]=string.lower(hour_conditions[3])
now["fc_hour3_cond_caps"]=string.upper(hour_conditions[3])
now["fc_hour3_cond_short"]=hour_conditions_short[3]
now["fc_hour3_cond_short_caps"]=string.upper(hour_conditions_short[3])
now["fc_hour3_cond_short_lc"]=string.lower(hour_conditions_short[3])
now["fc_hour3_wicon"]=hour_weather_icon[3]
now["fc_hour3_wfont"]=hour_weather_font[3]
now["fc_hour3_temp"]=hour_temp[3]
--end of hour3 data gathering--finished for all hours
--#########################################################################
--###############end of data processing########################
--###############end of data processing########################
--###############end of data processing########################
--###############end of data processing########################
--###############end of data processing########################
--#############################################################
	if testing==0 then--script not in testing
	continue=0--processing turned off
	runtemplate=1--template turned on
	print ("processing complete")
	elseif testing==1 then
	continue=1
	runtemplate=1
	end--if testing ==0
--##############################################################
end--if continue==1 of data processing section##################
--##############################################################
	if runtemplate==1 then
	_G.weather_script()
	end
--##############################################################
else--if get is greater or equal to 4 then curl did not work
print ("unable to gather data, check connection and try again")
end--if get <4
--###UNCOMMENT THE BELOW LINE TO ENABLE CPU DELAY###############
--end--####### end of if updates>5 #############################
--##############################################################
--clean up
cairo_destroy(cr)
cairo_surface_destroy(cs)
cr=nil
--######################################
end-- end main function ################
--######################################
--######################################
--######################################
--######################################
--######################################
--######################################

function round(num)
	local idp=tonumber(general_settings.decimal_places)
	local mult = 10^(idp or 0)
	return math.floor(num * mult + 0.5) / mult
end--of round function #################################################################

function string:split(delimiter)--######################################################
local result = { }
local from  = 1
local delim_from, delim_to = string.find( self, delimiter, from  )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from  = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from  )
end
table.insert( result, string.sub( self, from  ) )
return result
end--string split #######################################################################

function xout(txj)--c,a,f,fs,x,y,txt,j ##################################################
c=nil
c=(txj.c or default_color)
a=nil
a=(txj.a or default_alpha)
f=nil
f=(txj.f or default_font)
fs=nil
fs=(txj.fs or default_font_size)
x=nil
x=(txj.x or 0)
y=nil
y=(txj.y or 0)
txt=nil
txt=(txj.txt or "set txt")
j=nil
j=(txj.j or "l")
	local function col(c,a)
	return ( (c/0x10000) % 0x100)/255,( (c/0x100) % 0x100)/255,(c % 0x100)/255,a
	end--local function
cairo_select_font_face (cr, f, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, fs)
local text=string.gsub(txt," ","_")
extents=cairo_text_extents_t:create()
cairo_text_extents(cr,text,extents)
local wx=extents.width
cairo_set_source_rgba (cr,col(c,a))
if j=="l" then
cairo_move_to (cr,x,y)
adx=wx
elseif j=="c" then
cairo_move_to (cr,x-(wx/2),y)
adx=wx/2
elseif j=="r" then
cairo_move_to (cr,x-wx,y)
adx=0
end
cairo_show_text (cr,txt)
cairo_stroke (cr)
nextx=nil
nextx=adx+x
return nextx
end--function xout ###################################################################

function out(txj)--c,a,f,fs,face,x,y,txt,hj,vj,ro ##################################################
local extents=cairo_text_extents_t:create()
tolua.takeownership(extents)
--#########################################################################################################
local function color(col,alp)
return ((col / 0x10000) % 0x100) / 255, ((col / 0x100) % 0x100) / 255, (col % 0x100) / 255, alp
end
--#########################################################################################################
local c=txj.c 			or default_color		or 0xffffff
local a=txj.a 			or default_alpha		or 1
local f=txj.f 			or default_font			or "mono"
local fs=txj.fs 		or default_font_size		or 12
local x=txj.x 			or 100
local y=txj.y 			or 100
local txt=txj.txt 		or "set txt"
local hj=txj.hj 		or default_hj			or "l"
local vj=txj.vj 		or default_vj			or "n"
local ro=txj.ro			or defaukt_ro			or 0
local face=txj.face		or default_face			or "normal"
--set face
if face=="normal" then
cairo_select_font_face (cr, f, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
elseif face=="bold" then
cairo_select_font_face (cr, f, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
elseif face=="italic" then
cairo_select_font_face (cr, f, CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_NORMAL);
elseif face=="bolditalic" then
cairo_select_font_face (cr, f, CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_BOLD);
else
print ('face not set correctly - "normal","bold","italic","bolditalic"')
end
cairo_set_font_size (cr, fs)
cairo_text_extents(cr,txt,extents)
local wx=extents.x_advance
local wd=extents.width
local hy=extents.height
local bx=extents.x_bearing
local by=extents.y_bearing+hy
local tx=x
local ty=y
--set horizontal alignment - l, c, r
if hj=="l" then
x=x-bx
rad=0
elseif hj=="c" then
x=x-((wx-bx)/2)-bx
rad=(wx-bx)/2
elseif hj=="r" then
x=x-wx
rad=wx-bx
else
print ("hj not set correctly - l, c, r")
end
--vj. n=normal, nb=normal-ybearing, m=middle, mb=middle-ybearing, t=top
if vj=="n" then
y=y
rad2=0
ry=by
elseif vj=="nb" then
y=y-by
rad2=-by
ry=by
elseif vj=="m" then
y=y+((hy-by)/2)
rad2=((hy-by)/2)
ry=((hy-by)/2)-by
elseif vj=="mb" then
y=y+(hy/2)-by
rad2=(hy/2)-by
ry=((hy-by)/2)-by
elseif vj=="t" then
y=y+hy-by
rad2=hy-by
ry=0+by
else
print ("vj not set correctly - n, nb, m, mb, t")
end
--rotation
if ro~=0 then
local point2=(math.pi/180)*(ro-180)
local x2=tx+rad2*(math.sin(point2))
local y2=ty-rad2*(math.cos(point2))
local point=(math.pi/180)*(ro-90)
local x1=x2+rad*(math.sin(point))
local y1=y2-rad*(math.cos(point))
cairo_save (cr)
cairo_translate (cr,x1,y1)
cairo_rotate(cr,(math.pi/180)*ro)
cairo_set_source_rgba (cr,color(c,a))
cairo_show_text (cr,txt)
cairo_stroke (cr)
cairo_restore (cr)
else
cairo_move_to (cr,x,y)
cairo_set_source_rgba (cr,color(c,a))
cairo_show_text (cr,txt)
cairo_stroke (cr)
end--if ro
end--function out ###################################################################
function image(im)--#################################################################
x=nil
x=(im.x or 0)
y=nil
y=(im.y or 0)
w=nil
w=(im.w or default_image_width)
h=nil
h=(im.h or default_image_height)
file=nil
file=tostring(im.file)
if file==nil then print("set image file") end
---------------------------------------------
local show = imlib_load_image(file)
if show == nil then return end
imlib_context_set_image(show)
if tonumber(w)==0 then
width=imlib_image_get_width()
else
width=tonumber(w)
end
if tonumber(h)==0 then
height=imlib_image_get_height()
else
height=tonumber(h)
end
imlib_context_set_image(show)
local scaled=imlib_create_cropped_scaled_image(0, 0, imlib_image_get_width(), imlib_image_get_height(), width, height)
imlib_free_image()
imlib_context_set_image(scaled)
imlib_render_image_on_drawable(x, y)
imlib_free_image()
show=nil
end--function image ##################################################################
function convert24(tm,suf)
local tmlen=string.len(tm)
local colon=string.find(tm,":")
	if colon~=nil then
	tmhr=string.sub(tm,1,colon-1)
	tmmn=string.sub(tm,colon+1,tmlen)
	else
	tmhr=tm
	tmmn=""
	end
if suf=="PM" and tonumber(tmhr)~=12 then
tmhr=tmhr+12
elseif suf=="PM" and tonumber(tmhr)==12  then
tmhr=12
elseif suf=="AM" and tonumber(tmhr)<10 then
tmhr="0"..tmhr
elseif suf=="AM" and tonumber(tmhr)>=10 and tonumber(tmhr)~=12 then
tmhr=tmhr
elseif suf=="AM" and tonumber(tmhr)==12 then
tmhr="00"
end
if colon~=nil then
return tmhr..":"..tmmn
else
return tmhr
end--if colon~=nil
end--of function
function fixutc(UniTime,utc)
if string.len(UniTime)<=2 then
res=tonumber(UniTime)+utc+1
else
a,b,hours=string.find(UniTime,"(%d*):")
a,b,minutes=string.find(UniTime,":(%d*)")
a,b,utcc=string.find(utc,"(%p*%d*).")
if tonumber(minutes)>=30 and tonumber(utcc)<0 then
res=hours+utcc+1
elseif tonumber(minutes)>=30 and tonumber(utcc)>0 then
res=hours+utcc+2
elseif tonumber(minutes)<=30 and tonumber(utcc)<0 then
res=hours+utcc
elseif tonumber(minutes)<=30 and tonumber(utcc)>0 then
res=hours+utcc+1
end
end
	if res>=1 and res<=11 then
	res=res
	sufi="AM"
	elseif res==12 then
	res=res
	sufi="PM"
	elseif res>=13 and res<=23 then
	res=res-12
	sufi="PM"
	elseif res<0 then
	res=12+res
	sufi="PM"
	elseif res==0 or res==24 then
	res=12
	sufi="AM"
	elseif res>=24 then
	res=res-24
	sufi="AM"
	end
return res.." "..sufi
end
--END OF SCRIPT

The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#10 2016-12-03 22:36:06

unklar
Back to the roots 1.9
From: #! BL
Registered: 2015-10-31
Posts: 1,581

Re: mrpeachy's v9000 lua weather script.

The latest "fix" to the v9000.lua script I have is:  destripator_2015-01-31_v9000.lua.tar.gz

Latest known v9000 scirpt - 1374 lines:


Exactly this is the background of my above pictures of today. So, mrpeachy is fine!  wink

Offline

#11 2016-12-03 23:33:00

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

Well, the script is still going so yea, mrpeachy is fine.


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#12 2016-12-04 23:50:51

rwyarbrough
Member
From: Mesquite, Texas
Registered: 2016-11-26
Posts: 40

Re: mrpeachy's v9000 lua weather script.

The v9000 weather script is not working for me. I receive an error using conky debug that a nil value was returned.

Conky: llua_do_call: function conky_weather execution failed: attempt to call a nil value

I did some digging by manually pulling the urls and by adding

print (allweatherdata)
print (nowweather)

allweatherdata appears to be the entire webpage return, so that is working fine.
nowweather returns "nil".

I can determine from the print output of allweatherdata and by searching for the search terms in the v9000 code that something has changed since those keywords aren't in the output, so it looks like that either for my location something is different http://www.intellicast.com/Local/Foreca … n=USTX0881 with intellicast and the return pages have changed enough that the "greps" are not working.

It looks like it might be easier for me to use weatherunderground https://www.wunderground.com/cgi-bin/fi … query=KHQZ instead of intellicast to gather my data since it looks like my area isn't always populated with all of the data every pull using intellicast. I think I can take the "grep" parts from v9000 script and apply it to the data gathered from weatherunderground to get the data points.

I already have a weatherunderground api key and I saw a few scripts from TeoBigusGeekus in the Conky weather+moon scripts (Accuw/WUndergr/NWS/MoonGiant) section for that here as well I might try to piggyback off of.
WUnderground API - All users - 2b_21-12-15
Companion to the script: 2b_21-12-15_Companion
A full proposal by S11 combining this script and 5 (Moon phases), as well as a weather clock-chronograph.
A maximalistic approach, again by S11, combining scripts 2b and 4 here.

So would it be easier to try to modify the v9000 script to work with intellicast, modify the v9000 script to work with weatherunderground, or use the weatherunderground api scripts?

Last edited by rwyarbrough (2016-12-05 00:44:02)

Offline

#13 2016-12-05 02:17:54

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

Strange  - mine is still working ... but maybe they have gotten around to updating the Buenos Aires page yet.  Hmmmmmmm

My Humble Opinion:  Teo is supporting his scripts.  So use "2b" It's awesome in the information it gives, only misses one thing:  UVI  Grrrrrr!!!!

And that chronograph I have ... still looking for the others.  sad


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

#14 2021-10-11 05:07:14

ohnonot
...again
Registered: 2015-09-29
Posts: 5,568

Re: mrpeachy's v9000 lua weather script.

Hello,
I wonder if the v9000_update.tar.gz archive is still available somewhere? That link is dead.

All I could find was this - the page includes a post of what seems to be the complete collection of scripts (lua & conkyrc) for the v9000 weather conky.

mrpeachy's blog is full of links to crunchbang forum articles. This one is archived but the dropbox link therein is the same as here, and never archived. sad

The lua tutorial is still here) btw. smile


Give to COVAX! Here or here. (explanation)
My Repos: notabug | framagit

Offline

#15 2021-10-11 13:35:04

unklar
Back to the roots 1.9
From: #! BL
Registered: 2015-10-31
Posts: 1,581

Re: mrpeachy's v9000 lua weather script.

^The script's are still available here.  wink

It calls the page www.intellicast.com, which, if I'm not mistaken, no longer exists since 2018 (were swallowed by wunderground). ops

Offline

#16 2021-10-12 05:32:33

ohnonot
...again
Registered: 2015-09-29
Posts: 5,568

Re: mrpeachy's v9000 lua weather script.

^ Thank you unklar.
I'm interested in the lua functions.

Maybe S11 could update post #1 accordingly?


Give to COVAX! Here or here. (explanation)
My Repos: notabug | framagit

Offline

#17 2021-10-12 12:43:11

Sector11
Conky 1.9er Mod Squid
From: Upstairs
Registered: 2015-08-20
Posts: 6,817

Re: mrpeachy's v9000 lua weather script.

@ ohnonot

My v9000 script is not working and I do not know enough about lua to get it working.


The sun will never set if you keep walking towards it. - my son
Being positive doesn't understand physics.
_______________________________
Debian 10 Buster = SharpBang ♯!

Offline

Board footer

Powered by FluxBB