Conky a LUA - počasí

8. 3. 2016 7:36 (aktualizováno) Vladislav Konopík

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()
--############################################################

Sdílet