I am the operator CT1EIF and have configured my weather station (PWS IMOURA16) to send data via APRS-IS. From my side, the system is fully functional and the packets are accepted by the server, but the station does not appear on the aprs.fi map.
Example lines from my local log:
Configuration details:
Callsign: CT1EIF-11
Location: 38.1281N / 7.4525W (Moura, Beja, Portugal)
Port: 14580 (APRS-IS)
Passcode: verified successfully
I would like to confirm if there are any limitations, delays, or additional requirements for my weather station to appear correctly with the WX icon on aprs.fi.
Thank you very much for your support.
Best regards,
Rui
CT1EIF
I changed SSID to -13 to do new testRui Ferreira <ct1...@gmail.com> escreveu (domingo, 24/08/2025 à(s) 16:35):
Hello, Heikki Hannikainen Thanks for your answer, but it is not easy for the station to send packages to APRS.fi, I am using a 7 -in -1 metereological station VEVOR YT60234 connected to weather underground and an Raspberry Pi5 that collects the data and sends them (should send) to APRS. This is the script I'm using, I've made hundreds of changes but I haven't got it right yet, at the beginning still sent packages but the data were wrong, the current temperature in my city is 33ºC and APRS.fi appeared -2.2ºCThanksRui - CT1EIF#!/usr/bin/env python3# -*- coding: utf-8 -*-
"""
Automatic weather station data upload to APRS-IS for aprs.fi
Includes temperature, humidity, wind, gusts, rain, and pressure
WX packet uses separate SSID to avoid conflicts
"""
import requests
import socket
import time
# ===== CONFIGURATION =====
STATION_ID = "IMOURA16"
API_KEY_WU = "xxxxxxxxxxxxxxx"
CALLSIGN = "CT1EIF-13" # Different SSID for WX
PASSCODE = "18613 "
SERVER = ("euro.aprs2.net", 14580)
LAT = "3807.92N"
LON = "00726.94W"
INTERVAL = 300 # seconds
# ===== FUNCTION TO GET WEATHER DATA =====
def get_weather_data():
try:
url = f"https://api.weather.com/v2/pws/observations/current?stationId={STATION_ID}&format=json&units=m&apiKey={API_KEY_WU}"
r = requests.get(url, timeout=10)
obs_json = r.json()
obs = obs_json["observations"][0]
metric = obs["metric"]
temp = int(round(metric["temp"]))
hum = int(round(obs["humidity"]))
winddir = int(round(obs["winddir"]))
# Wind in knots, minimum 2 kt
windspd = max(2, int(round(metric.get("windSpeed", 0) * 1.94384)))
windgust = max(windspd, int(round(metric.get("windGust", 0) * 1.94384)))
# Rain
rain_1h = int(round(metric.get("precipTotal", 0))) # 1h
rain_24h = int(round(metric.get("precipTotal", 0))) # adjust if available
rain_midnight = 0 # since midnight
# Pressure in hPa*10, rounded to plausible range 1000-1030 hPa
pressure = int(round(metric.get("pressure", 1017.8) * 10))
if pressure < 10000:
pressure = 10000
elif pressure > 10300:
pressure = 10300
print(f"DEBUG: temp={temp}°C, hum={hum}%, winddir={winddir}°, windspd={windspd} kt, windgust={windgust} kt, rain1h={rain_1h} mm, pressure={pressure}")
return temp, hum, winddir, windspd, windgust, rain_1h, rain_24h, rain_midnight, pressure
except Exception as e:
print("Error fetching weather data:", e)
# safe fallback
return 33, 15, 275, 2, 2, 0, 18, 0, 10178
# ===== FUNCTION TO BUILD APRS PACKET =====
def build_aprs_packet(temp, hum, winddir, windspd, windgust, rain_1h, rain_24h, rain_midnight, pressure):
payload = f"!{LAT}/{LON}_WX_"
payload += f"{winddir:03d}/{windspd:03d}G{windgust:03d}" # G uppercase
payload += f"t{temp:03d}h{hum:02d}r{rain_1h:03d}p{rain_24h:03d}P{rain_midnight:03d}b{pressure:05d}"
packet = f"{CALLSIGN}>APRS,TCPIP*:{payload}"
return packet
# ===== MAIN FUNCTION =====
def send_aprs():
while True:
try:
temp, hum, winddir, windspd, windgust, rain_1h, rain_24h, rain_midnight, pressure = get_weather_data()
packet = build_aprs_packet(temp, hum, winddir, windspd, windgust, rain_1h, rain_24h, rain_midnight, pressure)
print("Generated packet:", packet)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(20)
s.connect(SERVER)
# login
login = f"user {CALLSIGN} pass {PASSCODE} vers WX-Station 1.0\n"
s.sendall(login.encode())
time.sleep(2)
# send packet
s.sendall((packet + "\n").encode())
print("Packet sent successfully!")
resp = s.recv(1024).decode(errors="ignore")
print("Server response:", resp.strip())
s.close()
time.sleep(INTERVAL)
except Exception as e:
print("Connection/send error:", e)
time.sleep(10)
# ===== EXECUTION =====
if __name__ == "__main__":
print("Starting automatic weather data upload to APRS-IS...")
send_aprs()
--
You received this message because you are subscribed to the Google Groups "aprs.fi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to aprsfi+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/aprsfi/f1916dcd-b8f-5cad-a1df-c7e3664a383e%40hes.iki.fi.