185 lines
7.4 KiB
Bash
185 lines
7.4 KiB
Bash
#!/bin/bash
|
|
sudo apt update
|
|
sudo apt install python3 -y
|
|
|
|
|
|
if [ -d "/opt/python-wx" ]
|
|
then
|
|
rm -r /opt/python-wx
|
|
fi
|
|
mkdir /opt/python-wx
|
|
|
|
|
|
sudo cat > /lib/systemd/system/py-wx1.service <<- "EOF"
|
|
[Unit]
|
|
Description=Python APRS WX1
|
|
After=network.target
|
|
|
|
[Service]
|
|
ExecStart=/usr/bin/python3 /opt/python-wx/wx1.py
|
|
WorkingDirectory=/opt/python-wx/
|
|
Restart=on-failure
|
|
RestartSec=3
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
|
|
|
|
|
|
EOF
|
|
#
|
|
sudo cat > /opt/python-wx/wx1.py <<- "EOF"
|
|
import socket
|
|
import time
|
|
import requests
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
callsign = "HP0XXX-13" # Callsign (HP0XXX-13)
|
|
password = "12345" # aprspasscode (12345)
|
|
latitude = "0823.48N" # DDMM.mmN (0831.27N)
|
|
longitude = "08225.91W" # DDDMM.mmW (08021.59W)
|
|
comment = "Python APRS WX1" # Beacon comment
|
|
simbol_primary = "/" # Primary symbol id (/)
|
|
simbol_secundary = "_" # Secondary symbol code (_)
|
|
serverHost = "rotate.aprs2.net" # aprs server url cwop.aprs.net / noam.aprs2.net
|
|
serverPort = 14580 # aprs server port
|
|
every = 10 # Time in minutes to send beacon
|
|
api_key = "APIKEY" # Your OpenWeatherMap API key (abcd12345567890)
|
|
map_id = "MAP-ID" # Your OpenWeatherMap Map ID (123456)
|
|
|
|
|
|
|
|
|
|
|
|
##############################################################################
|
|
#scrip
|
|
address = f"{callsign}>APHP04,TCPIP:"
|
|
text = "Python APRS WX by HP3ICC"
|
|
login = f"user {callsign} pass {password} vers emq-TE1 Python APRS WX 1.4"
|
|
mlogin = f"{api_key}"
|
|
mid = f"{map_id}"
|
|
|
|
time.sleep(30)
|
|
while True:
|
|
try:
|
|
# Get weather data from OpenWeatherMap API
|
|
url = f"https://api.openweathermap.org/data/2.5/weather?id={mid}&lang=es&units=imperial&appid={mlogin}"
|
|
response = requests.get(url)
|
|
data = response.json()
|
|
|
|
if "main" in data and "weather" in data and "wind" in data and "rain" in data:
|
|
name = data["name"]
|
|
temperature = int(data["main"]["temp"])
|
|
temperature = str(temperature).zfill(3)
|
|
presure = data["main"]["pressure"]
|
|
wind = int(data["wind"]["speed"])
|
|
wind = str(wind).zfill(3)
|
|
gust = int(data["wind"]["gust"])
|
|
gust = str(gust).zfill(3)
|
|
deg = int(data["wind"]["deg"])
|
|
deg = str(deg).zfill(3)
|
|
rain = int(data["rain"]["1h"])
|
|
rain = str(rain).zfill(3)
|
|
humidity = data["main"]["humidity"]
|
|
weather_description = data["weather"][0]["description"]
|
|
weather_data = f"{deg}/{wind}g{gust}{temperature}r{rain}p000h{humidity}b{presure}0"
|
|
else:
|
|
weather_data = "Weather data not available"
|
|
current_time_utc = datetime.utcnow().strftime("%d%H%M")
|
|
packet = f"{address}@{current_time_utc}z{latitude}{simbol_primary}{longitude}{simbol_secundary}{weather_data}{comment} / Clima en {name}: {weather_description}"
|
|
packet2 = f"{address}>{text}"
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
sock.connect((serverHost, serverPort))
|
|
sock.send(f"{login}\n".encode())
|
|
sock.send(f"{packet}\n".encode())
|
|
sock.send(f"{packet2}\n".encode())
|
|
sock.close()
|
|
except Exception as e:
|
|
print(f"Error al enviar el paquete: {e}")
|
|
|
|
time.sleep(every * 60)
|
|
|
|
EOF
|
|
######
|
|
chmod +x /bin/menu*
|
|
##########################
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx2.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx3.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx4.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx5.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx6.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx7.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx8.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx9.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx10.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx11.py
|
|
cp /opt/python-wx/wx1.py /opt/python-wx/wx12.py
|
|
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX1/g" /opt/python-wx/wx1.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX2/g" /opt/python-wx/wx2.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX3/g" /opt/python-wx/wx3.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX4/g" /opt/python-wx/wx4.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX5/g" /opt/python-wx/wx5.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX6/g" /opt/python-wx/wx6.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX7/g" /opt/python-wx/wx7.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX8/g" /opt/python-wx/wx8.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX9/g" /opt/python-wx/wx9.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX10/g" /opt/python-wx/wx10.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX11/g" /opt/python-wx/wx11.py
|
|
sudo sed -i "s/Python APRS WX1/Python APRS WX12/g" /opt/python-wx/wx12.py
|
|
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx2.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx3.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx4.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx5.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx6.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx7.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx8.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx9.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx10.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx11.service
|
|
cp /lib/systemd/system/py-wx1.service /lib/systemd/system/py-wx12.service
|
|
|
|
sudo sed -i "s/WX1/WX2/g" /lib/systemd/system/py-wx2.service
|
|
sudo sed -i "s/WX1/WX3/g" /lib/systemd/system/py-wx3.service
|
|
sudo sed -i "s/WX1/WX4/g" /lib/systemd/system/py-wx4.service
|
|
sudo sed -i "s/WX1/WX5/g" /lib/systemd/system/py-wx5.service
|
|
sudo sed -i "s/WX1/WX6/g" /lib/systemd/system/py-wx6.service
|
|
sudo sed -i "s/WX1/WX7/g" /lib/systemd/system/py-wx7.service
|
|
sudo sed -i "s/WX1/WX8/g" /lib/systemd/system/py-wx8.service
|
|
sudo sed -i "s/WX1/WX9/g" /lib/systemd/system/py-wx9.service
|
|
sudo sed -i "s/WX1/WX10/g" /lib/systemd/system/py-wx10.service
|
|
sudo sed -i "s/WX1/WX11/g" /lib/systemd/system/py-wx11.service
|
|
sudo sed -i "s/WX1/WX12/g" /lib/systemd/system/py-wx12.service
|
|
|
|
sudo sed -i "s/wx1/wx2/g" /lib/systemd/system/py-wx2.service
|
|
sudo sed -i "s/wx1/wx3/g" /lib/systemd/system/py-wx3.service
|
|
sudo sed -i "s/wx1/wx4/g" /lib/systemd/system/py-wx4.service
|
|
sudo sed -i "s/wx1/wx5/g" /lib/systemd/system/py-wx5.service
|
|
sudo sed -i "s/wx1/wx6/g" /lib/systemd/system/py-wx6.service
|
|
sudo sed -i "s/wx1/wx7/g" /lib/systemd/system/py-wx7.service
|
|
sudo sed -i "s/wx1/wx8/g" /lib/systemd/system/py-wx8.service
|
|
sudo sed -i "s/wx1/wx9/g" /lib/systemd/system/py-wx9.service
|
|
sudo sed -i "s/wx1/wx10/g" /lib/systemd/system/py-wx10.service
|
|
sudo sed -i "s/wx1/wx11/g" /lib/systemd/system/py-wx11.service
|
|
sudo sed -i "s/wx1/wx12/g" /lib/systemd/system/py-wx12.service
|
|
|
|
sudo chmod 644 /lib/systemd/system/py-wx1.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx2.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx3.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx4.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx5.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx6.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx7.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx8.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx9.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx10.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx11.service
|
|
sudo chmod 644 /lib/systemd/system/py-wx12.service
|
|
|
|
|
|
systemctl daemon-reload
|
|
chmod +x /opt/python-wx/*
|