Modul pro Conky zobrazující předpověď počasí pro ČR.
Skript modulu stačí vložit na konec již uveřejněného základního nastavení LUA skriptu a do tabulky ‚modul‘ zadat název modulu. Název modulu naleznete za nápovědou v proměnné:
local name = "pocasi"
Skript modulu:
function modul_pocasi() ------------------------------------------------------------ -- VLKODLAK -- 2015 ver 0.1 ------------------------------------------------------------ -- předpověď počasí na 5 dní -- --########################################################## -- -- pro svou činnost potřebuje: funkce --[[ kurzor() pozadi(poz,vyska) conky_wget() --]] -- -- pro svou činnost potřebuje: globální tabulky (před hlavní funkcí - conky_main()) --[[ wget = {} update = { ["pocasi"] = nil, } interval = { ["pocasi"] = 10, } klik_menu = { ["pocasi"] = 0, } --]] -- -- pro svou činnost potřebuje: globální proměnné (před hlavní funkcí - conky_main()) --[[ pozadi_menu --nastavuje pozadí pro menu pozadi_panel --nastavuje pozadí pro panel pozadi_barva --nastavuje barvu pozadí rozmer_panelu_x --rozměr panelu v pixelech, musí se shodovat s nastavením --hodnoty 'minimum_size' v conky.rc pocasi_obr --adresář s obrázky pocasi_soubor --umístění a název souboru s daty pocasi_hodnoty --data s předpovědí pocasi_url --url adresa pro stahování dat --]] -- -- pro svou činnost potřebuje: nainstalované aplikace --[[ wget --pro stažení dat imlib2 --knihovna pro zobrazení obrázků (sudo apt-get install libimlib2) --]] ------------------------------------------------------------ --proměnná pro identifikaci modulu local name = "pocasi" --vymazání tabulky pro stahování souborů wget = {} ---------------------------------------- --podmínky pro interval dat modulu ---------------------------------------- if tonumber(update[tostring(name)]) == nil then--první průchod skriptem --nastavení intervalu update[tostring(name)] = updates + tonumber(interval[tostring(name)]) ---------------------------------------- --tabulka pro nastavení modulu pocasi_tab = { ["tl"] = 0,--pro aktualizaci dat po ručním stažení souboru ["akt"] = nil,--stav aktuálnosti dat ["soubor"] = 0,--pro přítomnost souboru s daty ["brana"] = 0, --dostupnost brány ["pozice_y"] = nil,--pozice 'y' pro modul ["vyber"] = nil, --pro výběr předpovědi } --smyčka pro nastavení pozice modulu for a = 1,#modul.name do local text = tostring(modul.name[a]) if string.match(text, "(%S*)") == tostring(name) then pocasi_tab.pozice_y = a break end--if string.match(text, "(%S)") == tostring(name) then end--for a = 1,#modul.name do ---------------------------------------- --definování tabulky pro data pocasi = {} --hlavní tabulka ---------------------------------------- --test přítomnosti souboru local data = io.popen("ls --full-time "..pocasi_soubor.." 2> /dev/null") local line = data:read("*l") data:close() if line == nil then pocasi_tab.soubor = 0 --soubor neexistuje else pocasi_tab.soubor = 1 --soubor je přítomen end ---------------------------------------- --test aktuálnosti dat v přítomném souboru if pocasi_tab.soubor == 1 then for line in io.lines(pocasi_soubor) do --uložení řádku s daty z,k,vyber = string.find(line, "var%sdata%s%p%s([%S%s]*)</script>") if vyber ~= nil then pocasi_hodnoty = vyber break end--if vyber ~= nil then end--for line in io.lines(pocasi_soubor) do --podtabulka pro jednotlivé dny for a = 1,6 do pocasi[tonumber(a)] = {} end --datum ze souboru pro jednotlivé dny if pocasi_hodnoty ~= nil then z,k,den1 = string.find(pocasi_hodnoty,"(%d+_%d+)") pocasi[1].datum = den1 z,k,den2 = string.find(pocasi_hodnoty,"(%d+_%d+)",k) pocasi[2].datum = den2 z,k,den3 = string.find(pocasi_hodnoty,"(%d+_%d+)",k) pocasi[3].datum = den3 z,k,den4 = string.find(pocasi_hodnoty,"(%d+_%d+)",k) pocasi[4].datum = den4 z,k,den5 = string.find(pocasi_hodnoty,"(%d+_%d+)",k) pocasi[5].datum = den5 z,k,den6 = string.find(pocasi_hodnoty,"(%d+_%d+)",k) pocasi[6].datum = den6 --uložení a následné odstranění rekordů rekordy = nil z,k,rekordy = string.find(pocasi_hodnoty, "%p%p%p%p%p(%d+_%d+[%S]*)") pocasi_hodnoty = string.gsub(pocasi_hodnoty, ""..rekordy.."" , "") --systémový datum local data = io.popen("date +%d%m") local line = data:read("*l") data:close() local d = string.match(line,"(%d%d)%d%d") local m = string.match(line,"%d%d(%d%d)") if string.match(m,"(%d)%d") == "0" then m = string.gsub (m, "0", "") end if string.match(d,"(%d)%d") == "0" then d = string.gsub (d, "0", "") end local datum = d.."_"..m --porovnání systémového a ze souboru získaného datumu for a = 1,6 do if tostring(pocasi[tonumber(a)].datum) == tostring(datum) then pocasi_tab.akt = tonumber(a) pocasi_tab.vyber = tonumber(a) pocasi_tab.soubor = 2 --soubor existuje a data jsou použitelná break end end--for a = 1,6 do end--if hodnoty ~= nil then end--if pocasi_tab.soubor == 1 then --print(pocasi_tab.akt) ---------------------------------------- --data v souboru jsou aktuální if pocasi_tab.soubor == 2 then --načtení souboru pro uložení názvu dne local data = io.open(pocasi_soubor, "r") local info = data:read("*a") data:close() for a = 1,6 do z,k,dny = string.find(info, "<b%sclass=%pday%p>(%S*)</b>",k) pocasi[tonumber(a)].nazev = dny local upravit = tostring(dny) upravit = string.gsub (upravit, "ě", "e") upravit = string.gsub (upravit, "í", "i") upravit = string.gsub (upravit, "Ú", "U") upravit = string.gsub (upravit, "ý", "y") upravit = string.gsub (upravit, "ř", "r") upravit = string.gsub (upravit, "Č", "C") upravit = string.gsub (upravit, "á", "a") pocasi[tonumber(a)].nazev_znaky = string.len(upravit) end--for a = 1,6 do --tabulka pro rozdělení informací na jednotlivé dny informace_dny = { 'd_0([%S%s]*)d_1', 'd_1([%S%s]*)d_2', 'd_2([%S%s]*)d_3', 'd_3([%S%s]*)d_4', 'd_4([%S%s]*)d_5', 'd_5([%S%s]*)', } --uložení předpovědi do tabulky for a = 1,6 do z,k,data = string.find(pocasi_hodnoty,""..tostring(informace_dny[tonumber(a)]).."") pocasi[tonumber(a)].info = data --jasno, polojasno atd. z,k,stav = string.find(pocasi[tonumber(a)].info,"s%p*(%S*)%p%p%pd") pocasi[tonumber(a)].stav = stav --teplota ve dne z,k,tden = string.find(pocasi[tonumber(a)].info,"%p%p%p(%S*)%p%p%pn",k) pocasi[tonumber(a)].tden = tden --teplota v noci z,k,tnoc = string.find(pocasi[tonumber(a)].info,"%p%p%p(%S*)%p%p%pb",k) pocasi[tonumber(a)].tnoc = tnoc --bio z,k,bio = string.find(pocasi[tonumber(a)].info,"%p%p%p(%d)%p%p%pt",k) pocasi[tonumber(a)].bio = bio --textová předpověď z,k,text = string.find(pocasi[tonumber(a)].info,"%p%p%p([%S%s]*)%p%p%pu",k) --nahrazení znaků textové předpovědi text = string.gsub (text, "\\u017e", "ž") text = string.gsub (text, "\\u0159", "ř") text = string.gsub (text, "\\u011b", "ě") text = string.gsub (text, "\\u010c", "Č") text = string.gsub (text, "\\u010d", "č") text = string.gsub (text, "\\u0160", "Š") text = string.gsub (text, "\\u00e1", "á") text = string.gsub (text, "\\u00e9", "é") text = string.gsub (text, "\\u0148", "ň") text = string.gsub (text, "\\u0161", "š") text = string.gsub (text, "\\u0165", "ť") text = string.gsub (text, "\\u00ed", "í") text = string.gsub (text, "\\u00b0", "°") text = string.gsub (text, "\\u00fd", "ý") text = string.gsub (text, "\\u00fa", "ú") text = string.gsub (text, "\\/", "/") pocasi[tonumber(a)].text = text --rekordní teploty pro jednotlivé dny --rok maximální teploty z,k,rok_max = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*(%d%d%d%d)") pocasi[tonumber(a)].rekord_max_r = rok_max --maximální teplota z,k,t_max = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*%d*%p*%w*%p%p%p(%p?%d+%p%d)") t_max = string.gsub (t_max, "%p", ",") --nahrazení znaku pocasi[tonumber(a)].rekord_max_t = t_max --rok minimální teploty z,k,rok_min = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*%d*%p*%w*%p*%d+%p%d%p*%w*%p*%w*%p*(%d%d%d%d)") pocasi[tonumber(a)].rekord_min_r = rok_min --minimální teplota z,k,t_min = string.find(rekordy,""..tostring(pocasi[tonumber(a)].datum).."%p*%w*%p*%w*%p*%d*%p*%w*%p*%d+%p%d%p*%w*%p*%w*%p*%d*%p*%w*%p%p%p(%p?%d+%p%d)") pocasi[tonumber(a)].rekord_min_t = t_min --smyčka pro rozdělení textu předpovědi slova = {}--tabulka pro jednotlivá slova pocasi[tonumber(a)].radky = {}--podabulka pro řádky local info = pocasi[tonumber(a)].text --naplnění tabulky 'slova' for text in string.gmatch(info, "%S+%s?") do table.insert(slova, text) end local delka = rozmer_panelu_x - 30 --odsazení od okrajů panelu (2*15=30) local pocet_znaku = string.match(tonumber(delka/6),"%d+") local delka_radku = nil local s = 1 local text local start = 1 repeat if delka_radku == nil then text = slova[tonumber(s)] delka_radku = string.len(text) s = s + 1 elseif tonumber(delka_radku) < tonumber(pocet_znaku) then text = text..slova[tonumber(s)] nahradit_text = tostring(text) nahradit_text = string.gsub (nahradit_text, "ě", "e") nahradit_text = string.gsub (nahradit_text, "š", "s") nahradit_text = string.gsub (nahradit_text, "č", "c") nahradit_text = string.gsub (nahradit_text, "ř", "r") nahradit_text = string.gsub (nahradit_text, "ž", "z") nahradit_text = string.gsub (nahradit_text, "ý", "y") nahradit_text = string.gsub (nahradit_text, "á", "a") nahradit_text = string.gsub (nahradit_text, "í", "i") nahradit_text = string.gsub (nahradit_text, "é", "e") nahradit_text = string.gsub (nahradit_text, "ú", "u") nahradit_text = string.gsub (nahradit_text, "ů", "u") nahradit_text = string.gsub (nahradit_text, "ť", "t") nahradit_text = string.gsub (nahradit_text, "ň", "n") nahradit_text = string.gsub (nahradit_text, "Č", "C") nahradit_text = string.gsub (nahradit_text, "°C", "cc") delka_radku = string.len(nahradit_text) if tonumber(delka_radku) < tonumber(pocet_znaku) then s = s + 1 end elseif tonumber(delka_radku) == tonumber(pocet_znaku) then z = start k = tonumber(s) text = "" for b = tonumber(z),tonumber(k) do if tostring(text) == "" then text = slova[tonumber(b)] else text = text..slova[tonumber(b)] end end--for b = tonumber(z),tonumber(k) do table.insert(pocasi[tonumber(a)].radky, text) text = nil delka_radku = nil start = tonumber(s + 1) s = s + 1 elseif tonumber(delka_radku) > tonumber(pocet_znaku) then z = start k = tonumber(s-1) text = "" for b = tonumber(z),tonumber(k) do if tostring(text) == "" then text = slova[tonumber(b)] else text = text..slova[tonumber(b)] end end--for b = tonumber(z),tonumber(k) do table.insert(pocasi[tonumber(a)].radky, text) text = nil delka_radku = nil start = tonumber(s) end--if delka_radku == nil then until tonumber(s) > #slova table.insert(pocasi[tonumber(a)].radky, text) end--for a = 1,6 do end--if pocasi_tab.soubor == 2 then ---------------------------------------- --soubor neexistuje, nebo je zastaralý if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then --test brány local data = io.popen("ip route") while true do local line = data:read("*l") if line == nil then break end z,k,vyber = string.find(line,"default%svia%s(%S+)%s") --ip adresa if vyber ~= nil then brana = vyber break end--if vyber ~= nil then end--while true do data:close() --příkaz pro funkci wget(), pokud je brána dostupná if brana ~= nil then update[tostring(name)] = updates + 15 wget.pocasi = "${texeci 20 wget -q "..pocasi_url.." -O "..pocasi_soubor.." }" pocasi_tab.brana = 1 else pocasi_tab.brana = 0 end--if brana ~= nil then end--if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then elseif tonumber(update[tostring(name)]) <= updates then --nastavení intervalu update[tostring(name)] = updates + tonumber(interval[tostring(name)]) ---------------------------------------- --stav souboru if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then update[tostring(name)] = nil else --systémový datum local d = conky_parse("${time %e}") local m = conky_parse("${time %m}") d = string.gsub (d, " ", "") if string.match(m,"(%d)%d") == "0" then m = string.gsub (m, "0", "") end local datum = d.."_"..m for a = 1,6 do if tostring(pocasi[tonumber(a)].datum) == tostring(datum) then pocasi_tab.akt = tonumber(a) end end--for a = 1,6 do --test brány local data = io.popen("ip route") while true do local line = data:read("*l") if line == nil then break end z,k,vyber = string.find(line,"default%svia%s(%S+)%s") --ip adresa if vyber ~= nil then pocasi_tab.brana = 1 break else pocasi_tab.brana = 0 end--if vyber ~= nil then end--while true do data:close() end--if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then end--if tonumber(update[tostring(name)]) == nil then ---------------------------------------- --odpočet pro ruční aktualizaci dat if pocasi_tab.tl > 0 then pocasi_tab.tl = pocasi_tab.tl - 1 if pocasi_tab.tl == 0 then update[tostring(name)] = nil end end--if pocasi_tab.tl > 0 then ---------------------------------------- --vypis dat modulu ---------------------------------------- local x = 0 local y = modul.pozice[tonumber(pocasi_tab.pozice_y)] --nastavení fontu cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); ---------------------------------------- --vykreslení pozadí pro menu if pozadi_menu == 1 then pozadi(y - 12,15) end ---------------------------------------- --konstrukce pro klikutí na menu local menu = "POČASÍ" local delka = 5.6*7 --linie - první část cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, 12.0); cairo_set_source_rgba (cr, 1,0.7,0,1); local linie1 = (rozmer_panelu_x - delka)/2 - 5 cairo_rectangle (cr, x,y-5,linie1,1);cairo_fill (cr); --pozice kurzoru/kliknutí if mx>=x+linie1+5 and mx<=x+linie1+5+delka+3 and my<=y and my>=y-12 then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); if mx == kx and my == ky and klik_menu[tostring(name)] == 0 then klik_menu[tostring(name)] = 1 elseif mx == kx and my == ky and klik_menu[tostring(name)] == 1 then klik_menu[tostring(name)] = 0 end--kliknutí else cairo_set_source_rgba (cr, 1,0.7,0,1); end--pozice kurzoru cairo_move_to (cr, x+linie1+5, y);cairo_show_text (cr, menu);--text menu --linie - druhá část cairo_set_source_rgba (cr, 1,0.7,0,1); local linie2 = rozmer_panelu_x - (linie1+5+delka+7) cairo_rectangle (cr, x+linie1+5+delka+7,y-5,linie2,1);cairo_fill (cr); ---------------------------------------- --otevřený panel y = y + 3 if klik_menu[tostring(name)] == 1 then cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (cr, 10.0); --soubor neexistuje,nebo je zastaralý if pocasi_tab.soubor == 0 or pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then if pozadi_panel == 1 then pozadi(y+2,50) end y = y + 25 local text = "Soubor "..pocasi_soubor local delka = tonumber(string.len(text)*6) local pozice = (rozmer_panelu_x - delka) / 2 cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_move_to (cr, pozice,y-1);cairo_show_text (cr, text); y = y + 15 if pocasi_tab.soubor == 0 then text = "neexistuje, nebo je poškozený." delka = 30*6 elseif pocasi_tab.akt == 0 or pocasi_tab.akt == 6 then text = "obsahuje zastaralá data předpovědi." delka = 35*6 end local pozice = (rozmer_panelu_x - delka) / 2 cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_move_to (cr, pozice,y-1);cairo_show_text (cr, text); elseif pocasi_tab.akt >= 1 or pocasi_tab.akt <= 5 then--soubor obsahuje dostatečná data if pozadi_panel == 1 then pozadi(y+2,19) end --nastavení tlačítek local tl_r = 2 --rozestup mezi tlačítky local tl_o = 5 --odsazení tlačítka od okraje local tl_d = (rozmer_panelu_x - (tl_o*2) - (tl_r*4)) /5 local tl_z = tl_o --začátek prvního tlačítka --tlačítka dnů cairo_set_font_size (cr, 10.0); y = y + 4 for a = 1,5 do --grafika tlačítka cairo_set_source_rgba (cr, 0.4,0.4,0.4,1); cairo_rectangle (cr, x+tl_z,y,tl_d,15);cairo_fill (cr); --výběr tlačítka if a < tonumber(pocasi_tab.akt) then --print(a) cairo_set_source_rgba (cr, 0.1,0.1,0.1,1); local pozice = (tl_d - (tonumber(pocasi[tonumber(a)].nazev_znaky)*6)) /2 cairo_move_to (cr, tl_z+pozice,y+12);cairo_show_text (cr, pocasi[tonumber(a)].nazev); elseif a >= tonumber(pocasi_tab.akt) then if pocasi_tab.vyber == tonumber(a) then cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); else cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); end--if pocasi_tab.vyber == tonumber(a) then local pozice = (tl_d - (tonumber(pocasi[tonumber(a)].nazev_znaky)*6)) /2 if mx>=tl_z and mx<=tl_z+tl_d and my<=y+15 and my>=y then cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);--barva při najetí kurzoru if mx == kx and my == ky then pocasi_tab.vyber = tonumber(a) end end cairo_move_to (cr, tl_z+pozice,y+12);cairo_show_text (cr, pocasi[tonumber(a)].nazev); end--if a < tonumber(pocasi_tab.akt) then tl_z = tl_z + tl_r + tl_d end--for a = 1,5 do ---------------------------------------- --předpověď na zvolený den local den = tonumber(pocasi_tab.vyber) --pozadí panelu y = y + 15 if pozadi_panel == 1 then pozadi(y+2,125+4) end --datum local text = string.gsub(pocasi[tonumber(den)].datum, "_", ".") cairo_set_font_size (cr, 12.0); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_move_to (cr, x + 10, y + 15);cairo_show_text (cr, text); --stav nahradit_stav = { ["skorojasno-bourky"] = "skorojasno - bouřky", ["prehanky-bourky"] = "přeháňky - bouřky", ["prehanky-dest"] = "dešťové přeháňky", ["obcasny-dest"] = "občasný déšť", ["oblacno"] = "oblačno", ["zatazeno"] = "zataženo", ["snih-dest"] = "déšť se sněhem", ["prehanky-snih-dest"] = "přeháňky - déšť se sněhem", ["prehanky-snih"] = "sněhové přeháňky", } local stav_dne = string.gsub (pocasi[tonumber(den)].stav, "%S+", nahradit_stav) cairo_show_text (cr, " "..stav_dne); --obrázek předpovědi local obrazek = pocasi_obr..pocasi[tonumber(den)].stav..".png" local zobraz = imlib_load_image(obrazek) imlib_context_set_image(zobraz) imlib_render_image_on_drawable(x+10, y+10) --teplota den y = y + 25 cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, rozmer_panelu_x -100, y);cairo_show_text (cr, "Den "); cairo_set_font_size (cr, 20.0);cairo_set_source_rgba (cr, 1,0.7,0,1); cairo_move_to (cr, rozmer_panelu_x - 70, y); if string.match(pocasi[tonumber(den)].tden, "%S") == "-" then cairo_show_text (cr, ""..pocasi[tonumber(den)].tden); else cairo_show_text (cr, " "..pocasi[tonumber(den)].tden); end cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, rozmer_panelu_x -30, y);cairo_show_text (cr, "°C"); --teplota noc y = y + 25 cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, rozmer_panelu_x -100, y);cairo_show_text (cr, "Noc "); cairo_set_font_size (cr, 20.0);cairo_set_source_rgba (cr, 0.8,0.8,0.8,1); cairo_move_to (cr, rozmer_panelu_x - 70, y); if string.match(pocasi[tonumber(den)].tnoc, "%S") == "-" then cairo_show_text (cr, ""..pocasi[tonumber(den)].tnoc); else cairo_show_text (cr, " "..pocasi[tonumber(den)].tnoc); end cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, rozmer_panelu_x -30, y);cairo_show_text (cr, "°C"); --bio y = y + 25 cairo_set_font_size (cr, 12.0);cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, rozmer_panelu_x -100, y);cairo_show_text (cr, "Bio "); cairo_set_font_size (cr, 16.0);cairo_set_source_rgba (cr, 0.8,0.8,0.8,1); cairo_show_text (cr, pocasi[tonumber(den)].bio); --rekordy y = y + 20 cairo_set_font_size (cr, 10.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, rozmer_panelu_x -110, y); local text = string.gsub(pocasi[tonumber(den)].datum, "_", ".") cairo_show_text (cr, "Rekord pro "..text); y = y + 15 local rok = pocasi[tonumber(den)].rekord_max_r cairo_move_to (cr, rozmer_panelu_x -100, y); cairo_show_text (cr, rok); local teplota = pocasi[tonumber(den)].rekord_max_t if string.match(teplota, "%S") == "-" then cairo_show_text (cr, " "..teplota.." °C"); else cairo_show_text (cr, " "..teplota.." °C"); end y = y + 15 cairo_move_to (cr, rozmer_panelu_x -100, y); local rok = pocasi[tonumber(den)].rekord_min_r cairo_move_to (cr, rozmer_panelu_x -100, y); cairo_show_text (cr, rok); local teplota = pocasi[tonumber(den)].rekord_min_t if string.match(teplota, "%S") == "-" then cairo_show_text (cr, " "..teplota.." °C"); else cairo_show_text (cr, " "..teplota.." °C"); end --dělící čára y = y + 4 cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_rectangle (cr, x+10,y,rozmer_panelu_x-20,0.5);cairo_fill (cr); --y = y + 15 --pozadí textové předpovědi if pozadi_panel == 1 then poz = y+2 vyska = tonumber(#pocasi[tonumber(den)].radky * 15) + 1 pozadi(poz,vyska) end --výpis textové přepovědi cairo_set_font_size (cr, 10.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); for a = 1,#pocasi[tonumber(den)].radky do y = y + 15 cairo_move_to (cr, x+10,y-1); cairo_show_text (cr, pocasi[tonumber(den)].radky[tonumber(a)]); end if pocasi_tab.akt > 1 then aktualizace = { "Předpověď je aktuální", "Předpověď je stará 1 den", "Předpověď je stará 2 dny", "Předpověď je stará 3 dny", "Předpověď je stará 4 dny", "Předpověď je stará 5 dnů", } --pozadí aktualizace if pozadi_panel == 1 then pozadi(y+3,15+4) end --dělící čára y = y + 4 cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_rectangle (cr, x+10,y,rozmer_panelu_x-20,0.5);cairo_fill (cr); y = y + 15 --text aktuálnosti předpovědi cairo_move_to (cr, x+80,y-1); cairo_show_text (cr, aktualizace[tonumber(pocasi_tab.akt)]); if pocasi_tab.brana == 1 then if mx>=rozmer_panelu_x-80 and mx<=rozmer_panelu_x-10 and my<=y and my>=y-12 then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); if mx == kx and my == ky then wget.pocasi = "${texeci 20 wget -q "..pocasi_url.." -O "..pocasi_soubor.." }" pocasi_tab.tl = 5 end--kliknutí else cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); end--pozice kurzoru cairo_move_to (cr, rozmer_panelu_x-80, y-1); cairo_show_text (cr, "Aktualizovat"); end--if pocasi_tab.brana == 1 then end--if pocasi_tab.akt > 1 then end--if pocasi_tab.akt >= 1 and pocasi_tab.akt <= 5 then end--if klik_menu[tostring(name)] == 1 then ---------------------------------------- --pozice pro další modul if klik_menu[tostring(name)] == 1 then next_y = y + 17 else next_y = y + 14 end--if klik_menu[tostring(name)] == 1 then modul.pozice[tonumber(pocasi_tab.pozice_y)+1] = next_y return modul end--function modul_pocasi() --############################################################
Jazyk Lua neznám, ale snad se něco přiučím. Díky za skripty, vše mi víceméně funguje, jen u počasí se mi nezobrazují ikony ani "tlačítko" Aktualizovat. Bylo by možné zadat pozici pro předpověď jinak než pomocí IP? Když jsem připojený přes mobil, bere to adresu TMobilu v Praze, což je 160 km daleko :-).
Ikony se vám nezobrazují, neboť ve skriptu žádné nejsou. Musíte si je (kvůli licenci) najít na internetu (google - > wheater icons), stáhnout, přejmenovat je podle názvu u datumu zobrazeného dne a uvést k nim cestu v proměnné:
pocasi_obr = "/absolutní/cesta k adresáři/"
Tuto proměnnou najdete před hlavní funkcí (na začátku celého skriptu, ne modulu).
Tlačítko 'Aktualizovat' se vám zobrazí až další den, kdy je předpověď starší (obrázek pochází z testovací verze) a pouze pokud budete připojen k internetu.
Data se stahují jen jednou na 5 dní, tedy pokud stažený soubor nesmažete, nebo nekliknete na 'Aktualizovat'.
Omlouvám se. Ikony se musí jmenovat podle názvu v hranatých závorkách u tabulky 'nahradit_stav'. Což zjistíte pokud si 'nahradit_stav' necháte vyhledat v textovém editoru. Bohužel se mi nepodařilo podchytit veškeré možné stavy získané ze souboru a tak je potřebné občas nějaký stav a jeho český název doplnit.