Погода в Conky

Браузеры, почтовые клиенты, офисные пакеты, файловые менеджеры, редакторы и т.п.
Ответить
konstantinovms
Сообщения: 32
Зарегистрирован: 13.08.2022

#

sinclaus: У меня погоду показывает conky, без проблем
А откуда берёте данные? Weather.com давненько обрезал эту возможность. А теперь так и вообще зайти не позволяет:
This content is no longer available in your area
P.S. По поводу погоды в коньках можно было бы вообще отдельную тему создать. С подробным описанием того, как это дело реализовать. Уж больно удобная это штука. Была. Когда работала. А теперь приходится meteo-qt юзать.
vall
Аватара пользователя
Администрация
Сообщения: 553
Зарегистрирован: 09.08.2022

#

konstantinovms: По поводу погоды в коньках можно было бы вообще отдельную тему создать.
И логично было бы. Поскольку это не совсем о возможностях обустройства именно в KDE. И средствами KDE. Conky универсальный инструмент для DE и отдельная большая тема.
eugenez
Сообщения: 18
Зарегистрирован: 23.08.2022

#

konstantinovms: А откуда берёте данные? Weather.com давненько обрезал эту возможность
accuweather работает. Скриптом вида
# !/usr/bin/bash
METRIC=1 #Should be 0 or 1; 0 for F, 1 for C
if [ -z $1 ]; then
    echo "USAGE: weather.sh <locationcode>"
    exit 0;
fi

wget -q http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}\&locCode\=$1 -O - | awk \
 '/Currently:/ {CurWeather=$0}
  /[0-9] Forecast<\/title>/ {nr=NR+3}
  NR==nr    {postIndx[++x]=$0}
  # x>2    {exit}

END{
    split(CurWeather,tmp,"Currently: ")
    split(tmp[2],tmp1,"C<")
    split(tmp1[1],tmp2,": ")
    CurWeather=sprintf("%s°C %s",tmp2[2],tmp2[1])
    sub(":",",",CurWeather)
    for(x in postIndx){
    split(postIndx[x],tmp,";|&")
    split(tmp[1],tmp,">")
    split(tmp[2],statement," C ") # substitute C for F if metric differs
    split(tmp[2],temp)
    forecast[++y]=sprintf("%d..%d°C %-15s",temp[5],temp[2],statement[3])
    }
        printf("Сейчас: %s\nСегодня: %s\nЗавтра: %s\n",CurWeather,forecast[1],forecast[2])

вызывается из коньков
WEATHER
${voffset -20}
${hr}
${voffset -10}${execi 1800 ~/bin/weather1.sh "ASI|RU|RS043|BARNAUL" > ~/tmp/liveweather.tmp}
${offset 20}${execi 60 cat /home/eugene/tmp/liveweather.tmp | grep Сейчас:}
${offset 20}${execi 60 cat /home/eugene/tmp/liveweather.tmp | grep Сегодня:}
${offset 20}${execi 60 cat /home/eugene/tmp/liveweather.tmp | grep Завтра:}
но вывод английский. Можно наверное было подстановками перевести, но они там шибко креативные и одна и та же погода описывается разными словами, творчески.

текущая погода выглядит так:
$ cat liveweather.tmp 
Сейчас: 18°C Intermittent Clouds
Сегодня: 7..21°C Partly sunny, nice and warm 
Завтра: 11..19°C Partly sunny and pleasant 

konstantinovms
Сообщения: 32
Зарегистрирован: 13.08.2022

#

vall:
И логично было бы. Поскольку это не совсем о возможностях обустройства именно в KDE. И средствами KDE. Conky универсальный инструмент для DE и отдельная большая тема.
Давайте попросим модераторов перенести три последних сообщения, включая (особенно!) сообщение eugenez в отдельную тему с (примерным) названием "Погода в Conky". Некогда эта тема была очень популярна, и терять её не хотелось бы.
eugenez:
accuweather работает
Большое спасибо! Очень полезная информация!
vall
Аватара пользователя
Администрация
Сообщения: 553
Зарегистрирован: 09.08.2022

#

konstantinovms: Давайте попросим модераторов перенести три последних сообщения, включая (особенно!) сообщение eugenez в отдельную тему с (примерным) названием "Погода в Conky".
Сделано.
sinclaus
Аватара пользователя
Сообщения: 47
Зарегистрирован: 27.08.2022

#

Погоду беру как уже говорил с wttr, в начале отображаемой части скрипта conky две строки:
${execi 600 curl wttr.in/Tomsk_tqp0.png --output tmsk.png}
${image ~/tmsk.png -f 10}
Для других городов - другие аргументы.
ALiEN
Аватара пользователя
Сообщения: 66
Зарегистрирован: 23.08.2022

#

Беру с норвежского сайта https://yr.no/
${execi 7200 curl -s \
'https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=69.016856&lon=33.115506&altitude=96' |
grep -Pom1 '("air_temperature":)\K[-0-9]*' | head -1 } °C
Вместо lat (latitude - широта), lon (longitude - долгота), alt (altitude - высота) подставляем свои значения.
Выводит в json, распарсить не проблема. Так как мне нужна только одна температура, обошёлся grep.

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

sinclaus
Аватара пользователя
Сообщения: 47
Зарегистрирован: 27.08.2022

#

Wttr отдаёт более содержательную информацию
Изображение
ugras
Аватара пользователя
Сообщения: 73
Зарегистрирован: 11.09.2022

#

curl https://wttr.in/Surgut\?format\=1
⛅️ +5°C
curl https://wttr.in/Surgut\?format\=2
⛅️ 🌡️+5°C 🌬️↑22km/h
curl https://wttr.in/Surgut\?format\=3
Surgut: ⛅️ +5°C
curl https://wttr.in/Surgut\?format\=4
Surgut: ⛅️ 🌡️+5°C 🌬️↑22km/h
eugenez
Сообщения: 18
Зарегистрирован: 23.08.2022

#

У меня эти конструкции в conky не отображаются. Т.е. текст я вижу, и на него наслаиваются коды картинок, видимо. Картинок не видно. Надо парсить. Вы как парсили, если парсили (строка в конфиге коньков)?

я вот так пытался
${offset 20}${execi 60 curl https://wttr.in/Barnaul\?format\=2}
ugras
Аватара пользователя
Сообщения: 73
Зарегистрирован: 11.09.2022

#

Это просто пример вывода, но нужны шрифты, которые отображают иконки, напр., RobotoMono Nerd Font.
У меня коньков нет, но в waybar я вывожу погоду таким скриптом ( обновляет с параметром upgrade):
~/.bin/wb-weather
#!/usr/bin/bash

# Font used: RobotoMono Nerd Font
# 02.10.2022
# Найдите свой город на http://www.accuweather.com и замените URL-адрес в следующем скрипте URL-адресом вашего города.
write_panel()
{
    if ! [ -d ~/.tmp/ ]; then
        mkdir ~/.tmp
    fi
       
    # динамика температуры (стрелка)
    file="/tmp/thist"
    if [ -f "$file" ]; then
        # текущая температура будет в последней строке
        curtemp="$(tail -n1 $file)"
        
        shist="$(cat $file | head -n5 | awk '{s += $1} END {print s}')"
        dintemp=$(bc <<< "scale=2; $shist / 5")
        
        if (( $(echo "$curtemp > $dintemp" | bc -l) ))
        then
          artemp=""
        elif (( $(echo "$dintemp > $curtemp" | bc -l) ))
        then
          artemp=""
        else
          artemp=""
        fi
    else
      artemp=""
    fi
    # ↑↓  ꜛꜜ 
    
    # температура
    WTEMP="$(grep ° ~/.config/.curweath-web | cut -d ':' -f 15 | sed 's/"//g' | sed 's/,realFeel//g')"
    
    # погода
    WCONDI="$(grep -A1 'div class="phrase"' ~/.config/.curweath-web | head -1 | sed 's/^[[:space:]]*//g' | cut -c 21- | rev | cut -c 7- | rev)"
    echo $WCONDI >> ~/.tmp/wcondi # для сбора на случай появления новых значений
    #cat ~/.tmp/wcondi | sort -u
    
    # направление ветра и скорость ветра м/с
    numwing="$(echo "$(grep -n '<div>Wind</div>' ~/.config/.curweath-web | gawk '{print $1}' FS=":") + 1" | bc)"
    WSP="$(head -n $numwing  ~/.config/.curweath-web | tail -n 1 | grep -E -o "[0-9].*$" | cut -d ' ' -f 1)"
    
    if grep -q Calmly  ~/.config/.curweath-web
    then 
      WSPEED=""
      WWINGH="С"
    elif [ "$WSP" == "0" ]
    then
      WSPEED=""
      WWINGH="С"
    else
      wsms=$(bc <<< "scale=1; $WSP * 1000 / 3600")
      fswsms="$(echo "$wsms" | cut -c 1)"
      # выводить ноль, т.е. 0.5 m/s, а не .5 m/s
      if [ "$fswsms" == "." ]
      then
        WSPEED="$(echo " 0$wsms м/с")"
      #  WSPEED="$(echo " 0$wsms")"
      else
      # не выводить десятые доли, если есть целое число
        wpwsms="$(echo $wsms | cut -d '.' -f 1)"
        WSPEED="$(echo " $wpwsms м/с")"
      #  WSPEED="$(echo " $wpwsms")"
      fi
      WWINGH="$(head -n $numwing ~/.config/.curweath-web | tail -n 1 | cut -c 11- | cut -d ' ' -f 1)"
    fi

    # давление мм/рт.ст
    numpress="$(echo "$(grep -n '<div>Pressure</div>' ~/.config/.curweath-web | gawk '{print $1}' FS=":") + 1" | bc)"
    WPRESS="$(echo "$(head -n $numpress ~/.config/.curweath-web | tail -n 1 | cut -c 20- | rev | cut -c 9- | rev) * 750064 / 1000000" | bc)"
    
    # давление растет/парадает
    simbarrow="$(head -n $numpress ~/.config/.curweath-web | tail -n 1 | cut -c 14- | cut -c 1-4)"
    
    if [[ "$simbarrow" == "2191" ]]
    then 
       WPREST=""
    elif [[ "$simbarrow" == "2193" ]]
    then
       WPREST=""
    else
       WPREST=""
    fi
    
    #влажность %
    numwetnes="$(echo "$(grep -n '<div>Humidity</div>' ~/.config/.curweath-web | gawk '{print $1}' FS=":") + 1" | bc)"
    
    WETNES="$(head -n $numwetnes ~/.config/.curweath-web | tail -n 1 | cut -c 11- | rev | cut -c 8- | rev)"

    # N — обозначает северный 煮, Е — восточный, S — южный, W — западный, С — затишье (нет ветра).
    # NE — северо-восток, SE — юго-восток, SW — юго-запад, NW — северо-запад.
    # NNE — обозначает северо-северо-восток, ENE — востоко-северо-восток, ESE — востоко-юго-восток и т. д.
    WI=("N" "E" "S" "W" "С" "NE" "SE" "SW" "NW" "NNE" "ENE" "ESE" "SSE" "SSW" "WSW" "WNW" "NNW" "*")
    WR=("С" "В" "Ю" "З" "С" "СВ" "ЮВ" "ЮЗ" "СЗ" "ССВ" "ВСВ" "ВЮВ" "ЮЮВ" "ЮЮЗ" "ЗЮЗ" "ЗСЗ" "ССЗ" "*")
    WO=("煮 " "煮 " "煮 " "煮 " "" "煮 " "煮 " "煮 " "煮 "  "煮 " "煮 " "煮 " "煮 " "煮 " "煮 " "煮 " "煮 " "↔")
    
    #        
    
    for i in $(seq 0 ${#WI[@]}); do 
        if [[ "$WWINGH" == "${WI[$i]}" ]]; then
          WINGICON="${WO[$i]}"
        fi
    done
 
    TIMESDAY="ITSNIGHT"
    HOUR=$(date +"%-H")
    MONTH=$(date +"%-m")
    
    # определение времени суток для отрисовки значков
    # время актуально для 61 параллели, для других мест необходимо установить 
    # подходящее время восхода и захода солнца для каждой пары месяцев в году 
    if [[ 6 = "$MONTH" || 7 = "$MONTH" ]]; then
      if (( $HOUR >= 3 && $HOUR <= 22 )); then
        TIMESDAY="ITSDAY"
      fi
    elif [[ 5 = "$MONTH" || 8 = "$MONTH" ]]; then
      if (( $HOUR >= 4 && $HOUR <= 20 )); then
        TIMESDAY="ITSDAY"
      fi
    elif [[ 4 = "$MONTH" || 9 = "$MONTH" ]]; then
      if (( $HOUR >= 5 && $HOUR <= 18 )); then
        TIMESDAY="ITSDAY"
      fi
    elif [[ 3 = "$MONTH" || 10 = "$MONTH" ]]; then
      if (( $HOUR >= 6 && $HOUR <= 17 )); then
        TIMESDAY="ITSDAY"
      fi
    elif [[ 2 = "$MONTH" || 11 = "$MONTH" ]]; then
      if (( $HOUR >= 7 && $HOUR <= 16 )); then
        TIMESDAY="ITSDAY"
      fi
    else [[ 1 = "$MONTH" || 12 = "$MONTH" ]]
      if (( $HOUR >= 8 && $HOUR <= 15 )); then
        TIMESDAY="ITSDAY"
      fi
    fi

    II=("Mostly clear" "Mainly clear" "Clear" "Sunny" "Light fog" "Foggy" "Dense fog" "Ground fog" "Light snow and fog" "Light snow shower" "Light snow" "Heavy snow" "Snow shower" "Heavy snow shower" "Flurries" "Snow and rain" "Rain and snow" "Snow/rain" "Snow" "Cloudy" "Partly cloudy" "Clouds and sun" "Mostly cloudy" "Partly sunny" "Blowing snow" "Rain" "Thundershower" "Rain shower" "Light rain shower" "Light rain" "Thunderstorm" "Mist" "Some clouds" "*")
    
    # for tooltip
    IR=("Преимущественно ясно" "В основном ясно" "Ясно" "Солнечно" "Слабый туман" "Туман" "Плотный туман" "Низовой туман" "Слабый снег и туман" "Слабый снегопад" "Слабый снег" "Сильный снегопад" "Сильный снег" "Сильный и плотный снег" "Шквал" "Снег и дождь" "Дождь со снегом" "Снег с дождём" "Снег" "Облачно" "Переменная облачность" "Облачно с просветами" "Преимущественно облачно" "Переменная облачность" "Метель" "Дождь" "Ливень с грозой" "Мелкий дождь" "Моросящий дождь" "Слабый дождь" "Гроза" "Туман" "Немного облачно" "*")
    
    S2="ITSDAY"
    if [ $TIMESDAY = $S2 ]; then
    IO=("" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "ﰕ" "" "" "ﭼ" "" "" "ﭼ" "" "" "")
    else
    IO=("" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "ﰕ" "" "" "ﭼ" "" "" "ﭼ" "" "" "")
    fi
    
    for i in $(seq 0 ${#II[@]}); do
        if [[ "$WCONDI" == "${II[$i]}" ]]; then
          WICON="${IO[$i]}"
        fi
    done
    
    for i in $(seq 0 ${#II[@]}); do
        if [[ "$WCONDI" == "${II[$i]}" ]]; then
          WICONR="${IR[$i]}"
        fi
    done

    echo " $WICON  $WTEMP$artemp" > /tmp/.weather
    echo "$WICONR  $WETNES $WINGICON $WSPEED  $WPRESS$WPREST" >> /tmp/.weather
}

if [[ "$1" == "upgrade" ]]; then
    write_panel 
    # Search for your city at http://www.accuweather.com and replace the URL in the following script with the URL for your city
    if ping -c 1 -w 5 8.8.8.8 &> /dev/null; then
      wget -q -U Mozilla -O ~/.config/.curweath-tmp "https://www.accuweather.com/en/ru/surgut/288459/current-weather/288459" && cp ~/.config/.curweath-tmp ~/.config/.curweath-web
    else
      echo "Network unavailable..."
      echo "n/a" > /tmp/.weather
      echo "network unavailable... check internet connection" >> /tmp/.weather
      exit 0
    fi
    # динамика температуры
    # история последних 5 температур + строка с текущей
    curtemp="$(grep ° ~/.config/.curweath-web | cut -d ':' -f 15 | sed 's/"//g' | sed 's/,realFeel//g' | rev | cut -c 3- | rev)"
    file="/tmp/thist"
    touch $file
    lines=$(wc -l < $file)
    # в файле должно быть 6 строк, если их меньше или файл пустой
    # определим сколько строк нужно добавить
    numadd=$( expr 6 - $lines )
    # если их не хватает, добавим до 6 текущей температурой
    if [ "$numadd" -gt "0" ]
    then
    for ((i=1; i <= "$numadd"; i++))
    do
      echo "$curtemp" >> $file
    done
    fi
    # независимо от предыдущего результата запишем последней строкой текущую температуру
    echo $curtemp >> $file
    # обрежем верхние старые строки, чтобы всего было 6
    echo "$(tail -n6 $file)" > $file
    write_panel 
else
    write_panel 
fi
exit 0
Погода выводится в файл /tmp/.weather и оттуда читается 1 строка в панель и 2 строка в tooltip
ugras
Аватара пользователя
Сообщения: 73
Зарегистрирован: 11.09.2022

#

Запускается скриптом
~/.bin/start-wb-weather
#!/usr/bin/bash

while true
    do
        ~/.bin/wb-weather upgrade
    sleep 300
done
ugras
Аватара пользователя
Сообщения: 73
Зарегистрирован: 11.09.2022

#

Коли уж начал про waybar, то закончу)) может кому пригодится...
Сам модуль в
~/.config/waybar/config.jsonc
"custom/weather": {
    "format": "{}",
    "return-type": "json",
    "interval": 5,
    "exec": "~/.bin/weather.sh",
    "on-click": "xdg-open https://www.accuweather.com/en/ru/surgut/288459/current-weather/288459"
    },
и скрипт
~/.bin/weather.sh
#!/bin/sh

if [ ! -f "/tmp/.weather" ]; then
    count="err"
    tooltip="module error, file ~/.bin/wb-weather running?"
else
    count=$(head -1 /tmp/.weather | tail -n 1)
    tooltip=$(tail -n +2 /tmp/.weather)
fi
echo {\"text\":\"$count\"\,\"tooltip\":\"$tooltip\"\,\"class\":\"$count\"\,\"alt\":\"$count\"}
VyacheslavS
Сообщения: 6
Зарегистрирован: 02.09.2022

#

sinclaus: Погоду беру как уже говорил с wttr, в начале отображаемой части скрипта conky две строки:
А как её вывести в самый низ коньков?

PS: сам нашел -
${image ~/nsk.png -p -1,890}
VyacheslavS
Сообщения: 6
Зарегистрирован: 02.09.2022

#

Окончательно остановился на таком варианте:

Изображение
-ветер указан в м/c, тк в км/ч я не понимаю. :wink:
${execi 600 curl wttr.in/Novosibirsk_0tq_M.png --output ~/.conky/nsk.png}
${image ~/.conky/nsk.png -p 2,890 -f 600}
Если нужен вывод на русском языке:

Изображение
${execi 600 curl wttr.in/Novosibirsk_0tq_M_lang=ru.png --output ~/.conky/nsk2.png}
${image ~/.conky/nsk2.png -p 2,890 -f 600}
Ответить