Luminosity sensor added, APRSIS messages are now forwarded to MQTT

This commit is contained in:
marcel
2025-01-26 20:43:35 +01:00
parent 589f303a16
commit 7e2aa14f2a
8 changed files with 721 additions and 33 deletions

50
pe1rxf_aprs.py Normal file → Executable file
View File

@@ -8,7 +8,7 @@
#
# This program also has a PE1RXF APRS telemetry to MQTT bridge, which is configurable via pe1rxf_telemetry.yml
#
# Copyright (C) 2023, 2024 M.T. Konstapel https://meezenest.nl/mees
# Copyright (C) 2023-2025 M.T. Konstapel https://meezenest.nl/mees
#
# This file is part of weather_station
#
@@ -213,6 +213,33 @@ def process_aprsis(packet):
string = timestamp + ' ' + 'APRSIS ' + ' R ' + str(packet, 'latin-1') + '\n'
# Check if frame is a message to us. If so send it to mqtt
aprsis_source, aprsis_destination, aprsis_digipeaters, aprsis_payload = parsePacket(packet)
print(packet)
# Convert byte string to normal string
try:
aprsis_payload = aprsis_payload.decode('latin-1')
except:
aprsis_payload = 'NOT VALID'
print("Packet Received by APRSIS"])
print("Source Address = %s"%aprsis_source)
print("Destination Address = %s"%aprsis_destination)
print("Digipeaters =")
print(aprsis_digipeaters)
print("Payload = %s"%aprsis_payload)
print("")
#aprs_frame = axaddress[0] + '>' + aprsis_destination + ',' + ','.join(aprsis_digipeaters) + ':' + aprsis_payload
#print (aprs_frame)
if aprsis_payload == 'NOT VALID' or aprsis_payload == 0:
print (">>> Packet not valid, ignored.")
else:
# Check if APRS frame is a message to us
mqtt_connection.publish_aprs_messages(aprsis_source, 'aprsis', aprsis_payload)
# write APRSIS string to log file
try:
with open(rflog_file, "a") as logfile:
logfile.write(string)
@@ -316,22 +343,28 @@ def send_aprs_weather_report(weather_settings):
wind_direction = int(WxData['Wind direction'])
wind_speed = int(2.2369 * WxData['Wind speed'])
wind_gust = int(2.2369 * WxData['Wind gust'])
#rain_lasthour = int(3.93700787 * WxData['Rain last hour'])
rain_lasthour = 0
#rain_24hour = int(3.93700787 * WxData['Rain last 24 hours'])
rain_24hour = 0
rain_lasthour = int(3.93700787 * WxData['Rain last hour'])
#rain_lasthour = 0
rain_24hour = int(3.93700787 * WxData['Rain last 24 hours'])
#rain_24hour = 0
temperature = int(WxData['Temperature'] * 1.8 + 32)
humidity = int(WxData['Humidity'])
if (humidity == 100):
humidity = 0;
pressure =int(10 * WxData['Pressure'])
luminosity = int(0.0079 * WxData['Luminosity']) # W/m2: various sources give 0.0079 or 0.0083 as an approxmation for sunlight
if (luminosity <= 999):
APRS_Lum = 'L'
else:
APRS_Lum = 'l'
luminosity = luminosity-1000
# Get date and time
timestamp = time.strftime("%d%H%M", gmtime())
# Construct APRS weather report
aprs_position = weather_settings['position']
aprs_wx_report = '@' + timestamp + 'z' + weather_settings['position'] + "{:03d}".format(wind_direction) + '/' + "{:03d}".format(wind_speed) + 'g' + "{:03d}".format(wind_gust) + 't' + "{:03d}".format(temperature) + 'r' + "{:03d}".format(rain_lasthour) + 'p' + "{:03d}".format(rain_24hour) + 'h' + "{:02d}".format(humidity) + 'b' + "{:05d}".format(pressure)
aprs_wx_report = '@' + timestamp + 'z' + weather_settings['position'] + "{:03d}".format(wind_direction) + '/' + "{:03d}".format(wind_speed) + 'g' + "{:03d}".format(wind_gust) + 't' + "{:03d}".format(temperature) + 'r' + "{:03d}".format(rain_lasthour) + 'p' + "{:03d}".format(rain_24hour) + 'h' + "{:02d}".format(humidity) + 'b' + "{:05d}".format(pressure) + APRS_Lum + "{:03d}".format(luminosity)
if weather_settings['port'] == 'aprsis':
send_aprsis(weather_settings['call'], weather_settings['destination'], weather_settings['digi_path'], aprs_wx_report)
@@ -377,7 +410,7 @@ def send_telemetry():
def publish_weather_data(mqtt_client):
payload = ':' + 'PE1RXF-3 ' + ':' + str(WxData['Wind direction']) + ',' + str(WxData['Wind speed']) + ',' + str(WxData['Wind gust']) + ',' + str(WxData['Rain last hour']) + ',' + str(WxData['Rain last 24 hours']) + ',' + str(WxData['Temperature']) + ',' + str(WxData['Humidity']) + ',' + str(WxData['Pressure']) + ',' + str(WxData['Temp backup']) + ',' + str(WxData['Status bits'])
payload = ':' + 'PE1RXF-3 ' + ':' + str(WxData['Wind direction']) + ',' + str(WxData['Wind speed']) + ',' + str(WxData['Wind gust']) + ',' + str(WxData['Rain last hour']) + ',' + str(WxData['Rain last 24 hours']) + ',' + str(WxData['Temperature']) + ',' + str(WxData['Humidity']) + ',' + str(WxData['Pressure']) + ',' + str(WxData['Temp backup']) + ',' + str(WxData['Status bits']) + ',' + str(WxData['Luminosity'])
telemetry=mqtt_client.publish_telemetry_message("PE1RXF-13", "ax1", "PE1RXF-3", payload)
@@ -417,6 +450,7 @@ def run():
WxData['Temperature'] = 0.0
WxData['Humidity'] = 0.0
WxData['Pressure'] = 0.0
WxData['Luminosity'] = 0.0
WxData['Temp backup'] = 0.0
WxData['Status bits'] = 0.0
@@ -576,6 +610,6 @@ def run():
if __name__ == '__main__':
sys.stdout = sys.stderr = open('/home/marcel/pe1rxf_aprs_debug.log', 'w')
#sys.stdout = sys.stderr = open('/home/marcel/pe1rxf_aprs_debug.log', 'w')
run()