Skip to content
/ weathy Public

Python powered bot for sending weather updates

Notifications You must be signed in to change notification settings

t0mer/weathy

Repository files navigation

weathy

wathy is a python powered bot for sending weather forecast on a scheduled time.

wathy

Features

  • Send daily weather forecast

Components and Frameworks used in weathy:

  • Loguru For logging.
  • schedule Python job scheduling for humans.
  • apprise Apprise allows you to send a notification to almost all of the most popular notification services available.
  • weatheril weatheril is an unofficial IMS (Israel Meteorological Service) python API wrapper.

Installation

Before we can start working with weathy, we need to create a new telegram bot.

Create Telegram bot

How to Create a New Bot for Telegram Open Telegram messenger, sign in to your account or create a new one.

Enter @Botfather in the search tab and choose this bot (Official Telegram bots have a blue checkmark beside their name.)

@Botfather

Click “Start” to activate BotFather bot.

@start

In response, you receive a list of commands to manage bots. Choose or type the /newbot command and send it.

@newbot

Choose a name for your bot — your subscribers will see it in the conversation. And choose a username for your bot — the bot can be found by its username in searches. The username must be unique and end with the word “bot.”

@username

After you choose a suitable name for your bot — the bot is created. You will receive a message with a link to your bot t.me/<bot_username>, recommendations to set up a profile picture, description, and a list of commands to manage your new bot.

@bot_username

weathy is a docker based application that can be installed using docker compose:

version: "3.7"

services:

  weathy:
    image: techblog/weathy:latest
    container_name: weathy
    restart: always
    environment:
      - NOTIFIERS= #Apprise notifiers
      - TZ=Asia/Jerusalem
      - LOCATION= # The Location ID of your city.
      - LANGUAGE=he #Currently the only supported language. english will be added soon.
      - SCHEDULE= #Time of the day to send the notification, 80:00, 12:00, 20:00, etc.
    volumes:
      - "/etc/localtime:/etc/localtime:ro"

Environment

  • NOTIFIERS: Apprise notifiers
  • LOCATION: The Location ID of your city from the attached table.
  • LANGUAGE: The forecast language.
  • SCHEDULE: Time of the day to send the notification, 80:00, 12:00, 20:00, etc.

Locations table

Id Location
1 Jerusalem
2 Tel Aviv - Yafo
3 Haifa
4 Rishon le Zion
5 Petah Tiqva
6 Ashdod
7 Netania
8 Beer Sheva
9 Bnei Brak
10 Holon
11 Ramat Gan
12 Asheqelon
13 Rehovot
14 Bat Yam
15 Bet Shemesh
16 Kfar Sava
17 Herzliya
18 Hadera
19 Modiin
20 Ramla
21 Raanana
22 Modiin Illit
23 Rahat
24 Hod Hasharon
25 Givatayim
26 Kiryat Ata
27 Nahariya
28 Beitar Illit
29 Um al-Fahm
30 Kiryat Gat
31 Eilat
32 Rosh Haayin
33 Afula
34 Nes-Ziona
35 Akko
36 Elad
37 Ramat Hasharon
38 Karmiel
39 Yavneh
40 Tiberias
41 Tayibe
42 Kiryat Motzkin
43 Shfaram
44 Nof Hagalil
45 Kiryat Yam
46 Kiryat Bialik
47 Kiryat Ono
48 Maale Adumim
49 Or Yehuda
50 Zefat
51 Netivot
52 Dimona
53 Tamra
54 Sakhnin
55 Yehud
56 Baka al-Gharbiya
57 Ofakim
58 Givat Shmuel
59 Tira
60 Arad
61 Migdal Haemek
62 Sderot
63 Araba
64 Nesher
65 Kiryat Shmona
66 Yokneam Illit
67 Kafr Qassem
68 Kfar Yona
69 Qalansawa
70 Kiryat Malachi
71 Maalot-Tarshiha
72 Tirat Carmel
73 Ariel
74 Or Akiva
75 Bet Shean
76 Mizpe Ramon
77 Lod
78 Nazareth
79 Qazrin
80 En Gedi
200 Nimrod Fortress
201 Banias
202 Tel Dan
203 Snir Stream
204 Horshat Tal
205 Ayun Stream
206 Hula
207 Tel Hazor
208 Akhziv
209 Yehiam Fortress
210 Baram
211 Amud Stream
212 Korazim
213 Kfar Nahum
214 Majrase
215 Meshushim Stream
216 Yehudiya
217 Gamla
218 Kursi
219 Hamat Tiberias
220 Arbel
221 En Afek
222 Tzipori
223 Hai-Bar Carmel
224 Mount Carmel
225 Bet Shearim
226 Mishmar HaCarmel
227 Nahal Me‘arot
228 Dor-HaBonim
229 Tel Megiddo
230 Kokhav HaYarden
231 Maayan Harod
232 Bet Alpha
233 Gan HaShlosha
235 Taninim Stream
236 Caesarea
237 Tel Dor
238 Mikhmoret Sea Turtle
239 Beit Yanai
240 Apollonia
241 Mekorot HaYarkon
242 Palmahim
243 Castel
244 En Hemed
245 City of David
246 Me‘arat Soreq
248 Bet Guvrin
249 Sha’ar HaGai
250 Migdal Tsedek
251 Haniya Spring
252 Sebastia
253 Mount Gerizim
254 Nebi Samuel
255 En Prat
256 En Mabo‘a
257 Qasr al-Yahud
258 Good Samaritan
259 Euthymius Monastery
261 Qumran
262 Enot Tsukim
263 Herodium
264 Tel Hebron
267 Masada
268 Tel Arad
269 Tel Beer Sheva
270 Eshkol
271 Mamshit
272 Shivta
273 Ben-Gurion’s Tomb
274 En Avdat
275 Avdat
277 Hay-Bar Yotvata
278 Coral Beach

Supported Notifications

The section identifies all of the services supported by this library. Check out the wiki for more information on the supported modules here.

Popular Notification Services

The table below identifies the services this tool supports and some example service urls you need to use in order to take advantage of it. Click on any of the services listed below to get more details on how you can configure Apprise to access them.

Notification Service Service ID Default Port Example Syntax
Apprise API apprise:// or apprises:// (TCP) 80 or 443 apprise://hostname/Token
AWS SES ses:// (TCP) 443 ses://user@domain/AccessKeyID/AccessSecretKey/RegionName
ses://user@domain/AccessKeyID/AccessSecretKey/RegionName/email1/email2/emailN
Boxcar boxcar:// (TCP) 443 boxcar://hostname
boxcar://hostname/@tag
boxcar://hostname/device_token
boxcar://hostname/device_token1/device_token2/device_tokenN
boxcar://hostname/@tag/@tag2/device_token
Discord discord:// (TCP) 443 discord://webhook_id/webhook_token
discord://avatar@webhook_id/webhook_token
Emby emby:// or embys:// (TCP) 8096 emby://user@hostname/
emby://user:password@hostname
Enigma2 enigma2:// or enigma2s:// (TCP) 80 or 443 enigma2://hostname
Faast faast:// (TCP) 443 faast://authorizationtoken
FCM fcm:// (TCP) 443 fcm://project@apikey/DEVICE_ID
fcm://project@apikey/#TOPIC
fcm://project@apikey/DEVICE_ID1/#topic1/#topic2/DEVICE_ID2/
Flock flock:// (TCP) 443 flock://token
flock://botname@token
flock://app_token/u:userid
flock://app_token/g:channel_id
flock://app_token/u:userid/g:channel_id
Gitter gitter:// (TCP) 443 gitter://token/room
gitter://token/room1/room2/roomN
Google Chat gchat:// (TCP) 443 gchat://workspace/key/token
Gotify gotify:// or gotifys:// (TCP) 80 or 443 gotify://hostname/token
gotifys://hostname/token?priority=high
Growl growl:// (UDP) 23053 growl://hostname
growl://hostname:portno
growl://password@hostname
growl://password@hostname:port
Note: you can also use the get parameter version which can allow the growl request to behave using the older v1.x protocol. An example would look like: growl://hostname?version=1
Home Assistant hassio:// or hassios:// (TCP) 8123 or 443 hassio://hostname/accesstoken
hassio://user@hostname/accesstoken
hassio://user:password@hostname:port/accesstoken
hassio://hostname/optional/path/accesstoken
IFTTT ifttt:// (TCP) 443 ifttt://webhooksID/Event
ifttt://webhooksID/Event1/Event2/EventN
ifttt://webhooksID/Event1/?+Key=Value
ifttt://webhooksID/Event1/?-Key=value1
Join join:// (TCP) 443 join://apikey/device
join://apikey/device1/device2/deviceN/
join://apikey/group
join://apikey/groupA/groupB/groupN
join://apikey/DeviceA/groupA/groupN/DeviceN/
KODI kodi:// or kodis:// (TCP) 8080 or 443 kodi://hostname
kodi://user@hostname
kodi://user:password@hostname:port
Kumulos kumulos:// (TCP) 443 kumulos://apikey/serverkey
LaMetric Time lametric:// (TCP) 443 lametric://apikey@device_ipaddr
lametric://apikey@hostname:port
lametric://client_id@client_secret
Mailgun mailgun:// (TCP) 443 mailgun://user@hostname/apikey
mailgun://user@hostname/apikey/email
mailgun://user@hostname/apikey/email1/email2/emailN
mailgun://user@hostname/apikey/?name="From%20User"
Matrix matrix:// or matrixs:// (TCP) 80 or 443 matrix://hostname
matrix://user@hostname
matrixs://user:pass@hostname:port/#room_alias
matrixs://user:pass@hostname:port/!room_id
matrixs://user:pass@hostname:port/#room_alias/!room_id/#room2
matrixs://token@hostname:port/?webhook=matrix
matrix://user:token@hostname/?webhook=slack&format=markdown
Mattermost mmost:// or mmosts:// (TCP) 8065 mmost://hostname/authkey
mmost://hostname:80/authkey
mmost://user@hostname:80/authkey
mmost://hostname/authkey?channel=channel
mmosts://hostname/authkey
mmosts://user@hostname/authkey
Microsoft Teams msteams:// (TCP) 443 msteams://TokenA/TokenB/TokenC/
MQTT mqtt:// or mqtts:// (TCP) 1883 or 8883 mqtt://hostname/topic
mqtt://user@hostname/topic
mqtts://user:pass@hostname:9883/topic
Nextcloud ncloud:// or nclouds:// (TCP) 80 or 443 ncloud://adminuser:pass@host/User
nclouds://adminuser:pass@host/User1/User2/UserN
NextcloudTalk nctalk:// or nctalks:// (TCP) 80 or 443 nctalk://user:pass@host/RoomId
nctalks://user:pass@host/RoomId1/RoomId2/RoomIdN
Notica notica:// (TCP) 443 notica://Token/
Notifico notifico:// (TCP) 443 notifico://ProjectID/MessageHook/
Office 365 o365:// (TCP) 443 o365://TenantID:AccountEmail/ClientID/ClientSecret
o365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail
o365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail1/TargetEmail2/TargetEmailN
OneSignal onesignal:// (TCP) 443 onesignal://AppID@APIKey/PlayerID
onesignal://TemplateID:AppID@APIKey/UserID
onesignal://AppID@APIKey/#IncludeSegment
onesignal://AppID@APIKey/Email
Opsgenie opsgenie:// (TCP) 443 opsgenie://APIKey
opsgenie://APIKey/UserID
opsgenie://APIKey/#Team
opsgenie://APIKey/*Schedule
opsgenie://APIKey/^Escalation
ParsePlatform parsep:// or parseps:// (TCP) 80 or 443 parsep://AppID:MasterKey@Hostname
parseps://AppID:MasterKey@Hostname
PopcornNotify popcorn:// (TCP) 443 popcorn://ApiKey/ToPhoneNo
popcorn://ApiKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
popcorn://ApiKey/ToEmail
popcorn://ApiKey/ToEmail1/ToEmail2/ToEmailN/
popcorn://ApiKey/ToPhoneNo1/ToEmail1/ToPhoneNoN/ToEmailN
Prowl prowl:// (TCP) 443 prowl://apikey
prowl://apikey/providerkey
PushBullet pbul:// (TCP) 443 pbul://accesstoken
pbul://accesstoken/#channel
pbul://accesstoken/A_DEVICE_ID
pbul://accesstoken/[email protected]
pbul://accesstoken/#channel/#channel2/[email protected]/DEVICE
Pushjet pjet:// or pjets:// (TCP) 80 or 443 pjet://hostname/secret
pjet://hostname:port/secret
pjets://secret@hostname/secret
pjets://hostname:port/secret
Push (Techulus) push:// (TCP) 443 push://apikey/
Pushed pushed:// (TCP) 443 pushed://appkey/appsecret/
pushed://appkey/appsecret/#ChannelAlias
pushed://appkey/appsecret/#ChannelAlias1/#ChannelAlias2/#ChannelAliasN
pushed://appkey/appsecret/@UserPushedID
pushed://appkey/appsecret/@UserPushedID1/@UserPushedID2/@UserPushedIDN
Pushover pover:// (TCP) 443 pover://user@token
pover://user@token/DEVICE
pover://user@token/DEVICE1/DEVICE2/DEVICEN
Note: you must specify both your user_id and token
PushSafer psafer:// or psafers:// (TCP) 80 or 443 psafer://privatekey
psafers://privatekey/DEVICE
psafer://privatekey/DEVICE1/DEVICE2/DEVICEN
Reddit reddit:// (TCP) 443 reddit://user:password@app_id/app_secret/subreddit
reddit://user:password@app_id/app_secret/sub1/sub2/subN
Rocket.Chat rocket:// or rockets:// (TCP) 80 or 443 rocket://user:password@hostname/RoomID/Channel
rockets://user:password@hostname:443/#Channel1/#Channel1/RoomID
rocket://user:password@hostname/#Channel
rocket://webhook@hostname
rockets://webhook@hostname/@User/#Channel
Ryver ryver:// (TCP) 443 ryver://Organization/Token
ryver://botname@Organization/Token
SendGrid sendgrid:// (TCP) 443 sendgrid://APIToken:FromEmail/
sendgrid://APIToken:FromEmail/ToEmail
sendgrid://APIToken:FromEmail/ToEmail1/ToEmail2/ToEmailN/
ServerChan serverchan:// (TCP) 443 serverchan://token/
SimplePush spush:// (TCP) 443 spush://apikey
spush://salt:password@apikey
spush://apikey?event=Apprise
Slack slack:// (TCP) 443 slack://TokenA/TokenB/TokenC/
slack://TokenA/TokenB/TokenC/Channel
slack://botname@TokenA/TokenB/TokenC/Channel
slack://user@TokenA/TokenB/TokenC/Channel1/Channel2/ChannelN
SMTP2Go smtp2go:// (TCP) 443 smtp2go://user@hostname/apikey
smtp2go://user@hostname/apikey/email
smtp2go://user@hostname/apikey/email1/email2/emailN
smtp2go://user@hostname/apikey/?name="From%20User"
Streamlabs strmlabs:// (TCP) 443 strmlabs://AccessToken/
strmlabs://AccessToken/?name=name&identifier=identifier&amount=0&currency=USD
SparkPost sparkpost:// (TCP) 443 sparkpost://user@hostname/apikey
sparkpost://user@hostname/apikey/email
sparkpost://user@hostname/apikey/email1/email2/emailN
sparkpost://user@hostname/apikey/?name="From%20User"
Spontit spontit:// (TCP) 443 spontit://UserID@APIKey/
spontit://UserID@APIKey/Channel
spontit://UserID@APIKey/Channel1/Channel2/ChannelN
Syslog syslog:// (UDP) 514 (if hostname specified) syslog://
syslog://Facility
syslog://hostname
syslog://hostname/Facility
Telegram tgram:// (TCP) 443 tgram://bottoken/ChatID
tgram://bottoken/ChatID1/ChatID2/ChatIDN
Twitter twitter:// (TCP) 443 twitter://CKey/CSecret/AKey/ASecret
twitter://user@CKey/CSecret/AKey/ASecret
twitter://CKey/CSecret/AKey/ASecret/User1/User2/User2
twitter://CKey/CSecret/AKey/ASecret?mode=tweet
Twist twist:// (TCP) 443 twist://pasword:login
twist://password:login/#channel
twist://password:login/#team:channel
twist://password:login/#team:channel1/channel2/#team3:channel
XBMC xbmc:// or xbmcs:// (TCP) 8080 or 443 xbmc://hostname
xbmc://user@hostname
xbmc://user:password@hostname:port
XMPP xmpp:// or xmpps:// (TCP) 5222 or 5223 xmpp://user:password@hostname
xmpps://user:password@hostname:port?jid=user@hostname/resource
xmpps://user:password@hostname/target@myhost, target2@myhost/resource
Webex Teams (Cisco) wxteams:// (TCP) 443 wxteams://Token
Zulip Chat zulip:// (TCP) 443 zulip://botname@Organization/Token
zulip://botname@Organization/Token/Stream
zulip://botname@Organization/Token/Email