wathy is a python powered bot for sending weather forecast on a scheduled time.
- Send daily weather forecast
- 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.
Before we can start working with weathy, we need to create a new 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.)
Click “Start” to activate BotFather bot.
In response, you receive a list of commands to manage bots. Choose or type the /newbot command and send it.
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.”
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.
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"
- 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.
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 |
The section identifies all of the services supported by this library. Check out the wiki for more information on the supported modules here.
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@address.com pbul://accesstoken/#channel/#channel2/email@address.net/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:// | (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¤cy=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:// | (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 |