Compare commits
80 Commits
e11df5be77
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
ae44bf94b0
|
|||
|
71095eb629
|
|||
|
ef5d9031e3
|
|||
|
99951c1fb3
|
|||
|
120fec0843
|
|||
|
361b91fad2
|
|||
|
b98e3b6d34
|
|||
|
d143be1ed0
|
|||
|
a588e2807f
|
|||
|
d173d6904d
|
|||
| 6c96c6efb5 | |||
| b72f95407a | |||
| 315a49fe57 | |||
| 793310303b | |||
| e7448cf7be | |||
| d4818361c2 | |||
| 95b055db9b | |||
| f10f8cb3e4 | |||
| d6bd88d23a | |||
| b69d6335ec | |||
| 1a374005ef | |||
| e7944da8c7 | |||
| 30f7ba26da | |||
| 270874bac7 | |||
| f3a56b21c4 | |||
| 1b0e5ad2d2 | |||
| bfe0a6e67a | |||
| 0afade2057 | |||
| 556fdc21cf | |||
| 70c69b036e | |||
| 782f224f7f | |||
| 7ffc527e78 | |||
| 5adf9e1dd1 | |||
| 7a785deac1 | |||
| 6f24123e5d | |||
| 02c6a11db9 | |||
| fd18087026 | |||
| 3e3bf5d5b8 | |||
| 3daee5433a | |||
| 337c8ac62f | |||
| 973a34fecb | |||
| c0eb6ef02d | |||
| 46a9833d50 | |||
|
9ca0c748b7
|
|||
|
ce1e9bcff7
|
|||
|
b9aea5db34
|
|||
|
61e055ee84
|
|||
|
fa6d73bf48
|
|||
|
4beae61f76
|
|||
|
50c42090d4
|
|||
|
c11d561bba
|
|||
|
0c81f7a1fe
|
|||
|
3cc77a9ead
|
|||
|
652c209fef
|
|||
|
c35dfac2db
|
|||
|
c6e4b5c26a
|
|||
|
b69df2c87f
|
|||
|
60d03dbb13
|
|||
|
ab604a2016
|
|||
|
ba4041feb2
|
|||
|
8f1210e5ef
|
|||
|
2a8f6c9a1f
|
|||
|
68edfdea31
|
|||
|
41b0ef8a45
|
|||
|
e2ecf2c0f5
|
|||
|
dc232ce618
|
|||
|
373ba94277
|
|||
|
06792242e6
|
|||
|
3e536ddbd6
|
|||
|
97704ed648
|
|||
|
b95c26e879
|
|||
|
05be054977
|
|||
|
f86e5f40f0
|
|||
|
f3610beb3f
|
|||
|
960d03d0d5
|
|||
|
f97560c012
|
|||
|
47cd6eddff
|
|||
|
c22cc62460
|
|||
|
3557119852
|
|||
|
21780aa6cf
|
@@ -2,11 +2,14 @@ FROM archlinux
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
# update all
|
||||
RUN pacman -Syu --noconfirm
|
||||
|
||||
# Basic
|
||||
RUN pacman -Sy --noconfirm mpv jq curl bc
|
||||
RUN pacman -S --noconfirm mpv jq curl bc
|
||||
|
||||
# Ookla Speedtest
|
||||
RUN pacman -Sy --noconfirm speedtest-cli
|
||||
RUN pacman -S --noconfirm speedtest-cli
|
||||
|
||||
# LibreSpeed
|
||||
RUN curl -LOJ https://github.com/librespeed/speedtest-cli/releases/download/v1.0.10/librespeed-cli_1.0.10_linux_amd64.tar.gz \
|
||||
@@ -18,6 +21,9 @@ RUN curl -LOJ https://github.com/librespeed/speedtest-cli/releases/download/v1.0
|
||||
RUN pacman -S --noconfirm atk cups libxcomposite nodejs npm nss \
|
||||
&& npm install --global fast-cli
|
||||
|
||||
# Image Magic
|
||||
RUN pacman -S --noconfirm imagemagick
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD ./bot.sh
|
||||
|
||||
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
.env
|
||||
tmp/
|
||||
|
||||
BIN
JoyPixels.ttf
53
README.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Starlink Performance Monitoring Bot
|
||||
|
||||
## Introduction
|
||||
|
||||
This project provides a performance monitoring solution for Starlink internet service. It utilizes an IP camera to capture images of the sky, fetches weather data, conducts speed tests through multiple platforms, and uploads the results to a specified Telegram chat.
|
||||
|
||||
<img src="tgchat.jpg" alt="Screenshot of chat" style="max-height:250px;">
|
||||
|
||||
|
||||
## Features
|
||||
|
||||
- **Sky Image Capture:** Uses an IP camera's RTSP feed to take a picture of the sky.
|
||||
- **Weather Data Fetching:** Retrieves weather information using Open-Meteo API.
|
||||
- **Speed Tests:** Conducts internet speed tests using Ookla Speedtest, LibreSpeed, and Fast.com.
|
||||
- **Telegram Integration:** Automatically uploads the results to a Telegram chat.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Docker or Podman
|
||||
- A Telegram bot and chat ID
|
||||
- An IP camera with RTSP support
|
||||
- Internet connection
|
||||
|
||||
## Setup
|
||||
|
||||
1. **Create Telegram Bot:** Use Telegram's BotFather to create a new bot and get the API token.
|
||||
2. **Find Telegram Chat ID:** Identify your user, group, supergroup, or channel ID. Add "-100" if it's a supergroup or channel.
|
||||
3. **Configure IP Camera:** Ensure the camera's RTSP feed is accessible.
|
||||
|
||||
## Configuration
|
||||
|
||||
Create a `.env` file with the following variables:
|
||||
- copy `env.example` to `.env` and configure it.
|
||||
Replace the placeholder values with your actual data.
|
||||
|
||||
## Installation
|
||||
|
||||
1. **Clone Repository:** Clone this repository to your local machine or server.
|
||||
2. **Run with Docker/Podman:**
|
||||
- Use `docker compose up -d` or `podman compose up -d` to start the service.
|
||||
|
||||
## Usage
|
||||
|
||||
Once set up, the bot will operate automatically. It will capture sky images, perform speed tests, fetch weather data, and send updates to the configured Telegram chat every 30 minutes.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Bot Not Responding:** Ensure that the `.env` file is correctly set up and that the bot has the necessary permissions in your Telegram chat.
|
||||
- **Camera Issues:** Verify that the RTSP URL is correct and that the camera is accessible from your network.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions to improve this project are welcome. Please submit pull requests with your proposed changes.
|
||||
206
bot.sh
@@ -2,27 +2,54 @@
|
||||
|
||||
source .env
|
||||
|
||||
download_meter=resources/download_meter.png
|
||||
upload_meter=resources/upload_meter.png
|
||||
needle=resources/needle.png
|
||||
font=resources/CODE_Bold.otf
|
||||
|
||||
while true; do
|
||||
|
||||
date=$(date "+%Y%m%d_%H%M%S")
|
||||
image=data/image_$date.png
|
||||
camera_image=data/image_$date.png
|
||||
satellite_image=data/satellite_image_$date.png
|
||||
speedtest_ookla=data/speedtest_ookla_$date.json
|
||||
speedtest_libre=data/speedtest_libre_$date.json
|
||||
speedtest_fast=data/speedtest_fast_$date.json
|
||||
speedtest_download_meter=data/speedtest_download_meter_$date.png
|
||||
speedtest_upload_meter=data/speedtest_upload_meter_$date.png
|
||||
speedtest_meter_image=data/speedtest_meter_image_$date.png
|
||||
weather_file=data/weather_$date.json
|
||||
edited_image=data/edited_image_$date.png
|
||||
tg_log=data/tg_log_$date.json
|
||||
#################################################################################
|
||||
latency(){
|
||||
echo $(ping -c 1 $1) | \
|
||||
grep 'time=' | \
|
||||
awk -F'time=' '{print $2}' | \
|
||||
awk '{print $1}'
|
||||
}
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
echo Grabbing Image
|
||||
echo Grabbing Camara Image
|
||||
# Capture a frame from RTSP stream
|
||||
mpv $RTSP_URL --frames=1 --vo=image --ovc=png --o=$image >> /dev/null
|
||||
echo Image grabbed
|
||||
mpv $RTSP_URL --frames=1 --vo=image --ovc=png --o=$camera_image >> /dev/null
|
||||
echo Camera Image grabbed
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
echo Grabbing Satellite Image
|
||||
# scrap html, get image link and download it.
|
||||
curl -s $(curl -s "https://www.meteorology.gov.mv/" | \
|
||||
grep -o 'https://mobile.codeworks.mv/uploads/Satellite/[^"]*' | \
|
||||
tail -n 1) -o $satellite_image
|
||||
echo Satellite Image grabbed
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
echo Doing speedtest by Ookla
|
||||
# Run speedtest and output to a file
|
||||
speedtest --json > $speedtest_ookla
|
||||
speedtest --json | tee $speedtest_ookla
|
||||
# Extract information from the speedtest output
|
||||
|
||||
# Parsing JSON data
|
||||
@@ -35,14 +62,23 @@ ookla_upload=$(jq '.upload' "$speedtest_ookla")
|
||||
ookla_bytes_received=$(jq '.bytes_received' "$speedtest_ookla")
|
||||
ookla_bytes_sent=$(jq '.bytes_sent' "$speedtest_ookla")
|
||||
|
||||
# replacing null values
|
||||
[ -z "$ookla_ping" ] && ookla_ping="-"
|
||||
[ -z "$ookla_download" ] && ookla_download=0
|
||||
[ -z "$ookla_upload" ] && ookla_upload=0
|
||||
[ -z "$ookla_bytes_received" ] && ookla_bytes_received=0
|
||||
[ -z "$ookla_bytes_sent" ] && ookla_bytes_sent=0
|
||||
|
||||
# Converting to human readable units
|
||||
ookla_download_mbps=$(echo "scale=2; $ookla_download / 1000000" | bc)
|
||||
ookla_upload_mbps=$(echo "scale=2; $ookla_upload / 1000000" | bc)
|
||||
ookla_bytes_received_mb=$(echo "scale=2; $ookla_bytes_received / 1048576" | bc)
|
||||
ookla_bytes_sent_mb=$(echo "scale=2; $ookla_bytes_sent / 1048576" | bc)
|
||||
|
||||
ookla_total=$(echo $ookla_bytes_sent_mb+$ookla_bytes_received_mb | bc)
|
||||
|
||||
echo Starting LibreSpeed
|
||||
librespeed-cli --json > $speedtest_libre
|
||||
librespeed-cli --json | tee $speedtest_libre
|
||||
|
||||
# Parsing JSON data
|
||||
libre_bytes_sent=$(jq '.[0].bytes_sent' "$speedtest_libre")
|
||||
@@ -52,81 +88,177 @@ libre_upload=$(jq '.[0].upload' "$speedtest_libre")
|
||||
libre_download=$(jq '.[0].download' "$speedtest_libre")
|
||||
libre_server_name=$(jq -r '.[0].server.name' "$speedtest_libre")
|
||||
|
||||
# Converting to human readable units
|
||||
# replacing null values
|
||||
[ "$libre_ping" = "null" ] || [ -z "$libre_ping" ] && libre_ping="-"
|
||||
[ "$libre_download" = "null" ] || [ -z "$libre_download" ] && libre_download=0
|
||||
[ "$libre_upload" = "null" ] || [ -z "$libre_upload" ] && libre_upload=0
|
||||
[ "$libre_bytes_received" = "null" ] || [ -z "$libre_bytes_received" ] && libre_bytes_received=0
|
||||
[ "$libre_bytes_sent" = "null" ] || [ -z "$libre_bytes_sent" ] && libre_bytes_sent=0
|
||||
|
||||
# Converting to human readable units and replacing null values with 0
|
||||
libre_bytes_sent_mb=$(echo "scale=2; $libre_bytes_sent / 1048576" | bc)
|
||||
libre_bytes_received_mb=$(echo "scale=2; $libre_bytes_received / 1048576" | bc)
|
||||
|
||||
libre_total=$(echo $libre_bytes_sent_mb+$libre_bytes_received_mb | bc)
|
||||
|
||||
echo Starting Fast
|
||||
fast --upload --json > $speedtest_fast
|
||||
fast --upload --json | tee $speedtest_fast
|
||||
fast_download_speed=$(jq '.downloadSpeed' "$speedtest_fast")
|
||||
fast_upload_speed=$(jq '.uploadSpeed' "$speedtest_fast")
|
||||
fast_latency=$(jq '.latency' "$speedtest_fast")
|
||||
fast_downloaded=$(jq '.downloaded' "$speedtest_fast")
|
||||
fast_uploaded=$(jq '.uploaded' "$speedtest_fast")
|
||||
|
||||
[ -z "$fast_latency" ] && fast_latency="-"
|
||||
[ -z "$fast_download_speed" ] && fast_download_speed=0
|
||||
[ -z "$fast_upload_speed" ] && fast_upload_speed=0
|
||||
[ -z "$fast_downloaded" ] && fast_downloaded=0
|
||||
[ -z "$fast_uploaded" ] && fast_uploaded=0
|
||||
|
||||
fast_total=$(echo $fast_downloaded+$fast_uploaded | bc)
|
||||
|
||||
average_download=$(echo $ookla_download_mbps+$libre_download+$fast_download_speed/3 | bc)
|
||||
average_upload=$(echo $ookla_upload_mbps+$libre_upload+$fast_upload_speed/3| bc)
|
||||
highest_download=$(echo $ookla_download_mbps $libre_download $fast_download_speed | tr ' ' '\n' | sort -nr | head -n1)
|
||||
highest_upload=$(echo $ookla_upload_mbps $libre_upload $fast_upload_speed | tr ' ' '\n' | sort -nr | head -n1)
|
||||
total_wasted=$(echo $ookla_total+$libre_total+$fast_total | bc)
|
||||
|
||||
echo Speedtests complete
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
valorant_ping=$(latency dynamodb.ap-southeast-1.amazonaws.com)
|
||||
cfdns_ping=$(latency 1.1.1.1)
|
||||
googledns_ping=$(latency 8.8.8.8)
|
||||
[ -z "$valorant_ping" ] && valorant_ping="-"
|
||||
[ -z "$cfdns_ping" ] && cfdns_ping="-"
|
||||
[ -z "$googledns_ping" ] && googledns_ping="-"
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
echo Checking weather
|
||||
# Make the API request
|
||||
curl -s "https://api.open-meteo.com/v1/forecast?latitude=${LATITUDE}&longitude=${LONGITUDE}¤t_weather=true" > $weather_file
|
||||
# Extract Weather Condition
|
||||
weather_condition=$(cat $weather_file | jq '.current_weather.weathercode')
|
||||
curl -s "https://api.open-meteo.com/v1/forecast?latitude=${LATITUDE}&longitude=${LONGITUDE}¤t_weather=true" | tee $weather_file
|
||||
# Extract Weather Condition and day or not
|
||||
weather_condition=$(jq '.current_weather.weathercode' "$weather_file")
|
||||
is_day=$(jq '.current_weather.is_day' "$weather_file")
|
||||
case $weather_condition in
|
||||
0) current_weather="☀️ Clear sky" ;;
|
||||
1|2|3) current_weather="☁️ Cloudy" ;;
|
||||
45|48) current_weather="🌫️ Fog" ;;
|
||||
51|53|55|56|57) current_weather="🌧️ Drizzle" ;;
|
||||
61|63|65|66|67) current_weather="🌦️ Rain" ;;
|
||||
80|81|82) current_weather="🌧️ Rain showers" ;;
|
||||
85|86) current_weather="🌨️ Snow showers" ;;
|
||||
95|96|99) current_weather="⛈️ Thunderstorm" ;;
|
||||
*) current_weather="🌐 Weather condition not recognized" ;;
|
||||
0) current_weather="$([ "$is_day" = "1" ] && echo "☀️" || echo "🌙") Clear Sky";;
|
||||
1) current_weather="$([ "$is_day" = "1" ] && echo "☀️" || echo "🌙") Mainly Clear";;
|
||||
2) current_weather="⛅ Partly Cloudy" ;;
|
||||
3) current_weather="☁️ Overcast" ;;
|
||||
45) current_weather="🌫️ Fog" ;;
|
||||
48) current_weather="🌫️🌬️ Depositing Rime Fog" ;;
|
||||
51) current_weather="🌦️💧 Light Drizzle" ;;
|
||||
53) current_weather="🌦️💧 Moderate Drizzle" ;;
|
||||
55) current_weather="🌦️💧 Dense Drizzle" ;;
|
||||
56) current_weather="🌦️❄️ Light Freezing Drizzle" ;;
|
||||
57) current_weather="🌦️❄️ Dense Freezing Drizzle" ;;
|
||||
61) current_weather="🌧️ Slight Rain" ;;
|
||||
63) current_weather="🌧️ Moderate Rain" ;;
|
||||
65) current_weather="🌧️ Heavy Rain" ;;
|
||||
66) current_weather="🌧️❄️ Light Freezing Rain" ;;
|
||||
67) current_weather="🌧️❄️ Heavy Freezing Rain" ;;
|
||||
71) current_weather="🌨️ Slight Snowfall" ;;
|
||||
73) current_weather="🌨️ Moderate Snowfall" ;;
|
||||
75) current_weather="🌨️ Heavy Snowfall" ;;
|
||||
77) current_weather="❄️ Snow Grains" ;;
|
||||
80) current_weather="🌧️🚿 Slight Rain Showers" ;;
|
||||
81) current_weather="🌧️🚿 Moderate Rain Showers" ;;
|
||||
82) current_weather="🌧️🚿 Violent Rain Showers" ;;
|
||||
85) current_weather="🌨️❄️ Slight Snow Showers" ;;
|
||||
86) current_weather="🌨️❄️ Heavy Snow Showers" ;;
|
||||
95) current_weather="⛈️ Slight Thunderstorm" ;;
|
||||
96) current_weather="⛈️🌨️ Thunderstorm with Slight Hail" ;;
|
||||
99) current_weather="⛈️🌨️ Thunderstorm with Heavy Hail" ;;
|
||||
*) current_weather="🌐 Weather Condition Not Recognized" ;;
|
||||
esac
|
||||
echo Weather checked
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
|
||||
download_angle=$(echo "scale=2; -118 + ($highest_download - 0) / ($MAX_DOWNLOAD_SPEED - 0) * (118 - -118)" | bc)
|
||||
upload_angle=$(echo "scale=2; -118 + ($highest_upload - 0) / ($MAX_UPLOAD_SPEED - 0) * (118 - -118)" | bc)
|
||||
|
||||
convert $download_meter \
|
||||
\( $needle -background none \
|
||||
-rotate $download_angle \) \
|
||||
-gravity center \
|
||||
-compose over \
|
||||
-composite \
|
||||
-pointsize 41 \
|
||||
-font $font \
|
||||
-fill white \
|
||||
-annotate +0+-15 $highest_download \
|
||||
-annotate +120+85 $MAX_DOWNLOAD_SPEED \
|
||||
$speedtest_download_meter
|
||||
|
||||
convert $upload_meter \
|
||||
\( $needle -background none \
|
||||
-rotate $upload_angle \) \
|
||||
-gravity center \
|
||||
-compose over \
|
||||
-composite \
|
||||
-pointsize 41 \
|
||||
-font $font \
|
||||
-fill white \
|
||||
-annotate +0+-15 $highest_upload \
|
||||
-annotate +120+85 $MAX_UPLOAD_SPEED \
|
||||
$speedtest_upload_meter
|
||||
|
||||
convert $camera_image \
|
||||
\( $speedtest_download_meter \
|
||||
-resize $METER_SCALE% \
|
||||
-gravity southwest \
|
||||
-geometry +10+0 \) \
|
||||
-composite \
|
||||
\( $speedtest_upload_meter \
|
||||
-resize $METER_SCALE% \
|
||||
-gravity southwest \
|
||||
-geometry +$UPLOAD_METER_LOCATION+0 \) \
|
||||
-composite \
|
||||
$speedtest_meter_image
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
caption="
|
||||
$current_weather
|
||||
|
||||
🔫 Valorant SEA ping: $valorant_ping ms
|
||||
🌐 1.1.1.1 ping: $cfdns_ping ms
|
||||
🌐 8.8.8.8 ping: $googledns_ping ms
|
||||
|
||||
*Speedtest by Ookla*:
|
||||
🌐 *Server*: $ookla_server, $ookla_city, $ookla_country
|
||||
🏓 *Latency*: $ookla_ping ms
|
||||
⬇️ *Download*: $ookla_download_mbps Mbit/s, Used: $ookla_bytes_received_mb MB
|
||||
⬆️ *Upload*: Upload: $ookla_upload_mbps Mbit/s, Used: $ookla_bytes_sent_mb MB
|
||||
⬆️ *Upload*: $ookla_upload_mbps Mbit/s, Used: $ookla_bytes_sent_mb MB
|
||||
|
||||
*LibreSpeed*:
|
||||
🌐 *Server*: $libre_server_name
|
||||
🏓 *Latency*: $libre_ping ms
|
||||
⬇️ *Download*: $libre_download Mbit/s, Used: $libre_bytes_received_mb MB
|
||||
⬆️ *Upload*: Upload: $libre_upload Mbit/s, Used $libre_bytes_sent_mb MB
|
||||
⬆️ *Upload*: $libre_upload Mbit/s, Used $libre_bytes_sent_mb MB
|
||||
|
||||
*Fast Powered by Netflix*:
|
||||
🏓 *Latency*: $fast_latency ms
|
||||
⬇️ *Download*: $fast_download_speed Mbit/s, Used: $fast_downloaded MB
|
||||
⬆️ *Upload*: Upload: $fast_upload_speed Mbit/s, Used: $fast_uploaded MB
|
||||
⬆️ *Upload*: $fast_upload_speed Mbit/s, Used: $fast_uploaded MB
|
||||
|
||||
Total data wasted: $total_wasted MB
|
||||
"
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
#convert "$image" \
|
||||
# -gravity South \
|
||||
# -font $PWD/JoyPixels.ttf \
|
||||
# -pointsize 20 \
|
||||
# -annotate +0+10 "$caption" \
|
||||
# $edited_image
|
||||
echo Uploading to Telegram
|
||||
curl -X POST https://api.telegram.org/bot$TG_BOT_TOKEN/sendMediaGroup \
|
||||
-F chat_id=$TG_CHATID \
|
||||
-F media='[{"type": "photo", "media": "attach://photo1", "caption": "'"$caption"'", "parse_mode": "Markdown"}, {"type": "photo", "media": "attach://photo2"}]' \
|
||||
-F photo1=@$speedtest_meter_image \
|
||||
-F photo2=@$satellite_image | tee $tg_log
|
||||
#################################################################################
|
||||
|
||||
#################################################################################
|
||||
echo Uploading to Telegram
|
||||
curl -X POST https://api.telegram.org/bot$TG_BOT_API_KEY/sendPhoto \
|
||||
-F chat_id=$TG_CHANNEL_ID \
|
||||
-F photo=@$image \
|
||||
-F caption="$caption" \
|
||||
-F parse_mode=Markdown >> /dev/null
|
||||
#################################################################################
|
||||
echo Ok done, Sleeping for $DELAY
|
||||
sleep $DELAY
|
||||
|
||||
|
||||
26
env.example
Normal file
@@ -0,0 +1,26 @@
|
||||
# Your Telegram Bot API Token, Contact @BotFather on Telegram to obtain token
|
||||
TG_BOT_TOKEN=''
|
||||
|
||||
# Your Telegram chat ID, This could be your user, group, supergroup or channel ID
|
||||
# add "-100" first if supergroup or channel
|
||||
TG_CHATID=''
|
||||
|
||||
# accepted units: s (seconds), m (minutes), h (hours), d (days), ms (milliseconds)
|
||||
# Example: DELAY=10m
|
||||
DELAY=30m
|
||||
|
||||
# Exmaple: RTSP_URL=rtsp://usernams:password@ipaddress:port/streampath
|
||||
RTSP_URL=rtsp://
|
||||
|
||||
# Use some maps service to fetch this, this is used to fetch weather from API. (Default is Male', Maldives)
|
||||
LATITUDE="4.1752"
|
||||
LONGITUDE="73.5092"
|
||||
|
||||
|
||||
# Change these as you see fit based on RTSP image resolution
|
||||
UPLOAD_METER_LOCATION=510 # in px starting from download meter start
|
||||
METER_SCALE=100 # in percentage
|
||||
|
||||
# Change meter scale in Mbps
|
||||
MAX_DOWNLOAD_SPEED=300
|
||||
MAX_UPLOAD_SPEED=50
|
||||
13
env_example
@@ -1,13 +0,0 @@
|
||||
TG_BOT_API_KEY=
|
||||
TG_CHANNEL_ID=
|
||||
|
||||
DELAY=10
|
||||
|
||||
RTSP_AUTH=false
|
||||
RTSP_IP=
|
||||
RTSP_PORT=
|
||||
RTSP_USERNAME=
|
||||
RTSP_PASSWORD=
|
||||
|
||||
LATITUDE=""
|
||||
LONGITUDE=""
|
||||
BIN
resources/CODE_Bold.otf
Normal file
BIN
resources/cloud-with-lightning-and-rain.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
resources/cloud-with-lightning.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
resources/cloud-with-rain.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
resources/cloud-with-snow.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
resources/cloud.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
resources/crescent_moon.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
resources/download_meter.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
resources/droplet.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
resources/needle.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
resources/rainbow.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
resources/snowflake.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
resources/sun-behind-cloud.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
resources/sun-behind-large-cloud.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
resources/sun-behind-rain-cloud.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
resources/sun-behind-small-cloud.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
resources/sun.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
resources/sweat-droplets.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
resources/upload_meter.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
resources/wind-face.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
tgchat.jpg
Normal file
|
After Width: | Height: | Size: 80 KiB |