Closed apldan closed 9 months ago
Also, i hook my Pi up to a monitor while testing/changing things. is there a way to monitor what is being run? having a cmd window open only shows if i run the command by hand, not letting cron run it.
As the pi user, you could always run: tail -f /var/log/syslog. That would only show you the command run every 5 minutes. If you're looking for the detail output from refresh.sh, you'd have to edit the crontab entry to send standard output somewhere. I would not recommend that. If sent to a file, it would get large quickly, so whatever you do, don't leave it set for long.
/5 6-22 /home/pi/refresh.sh > /home/pi/output.log
You'd then "tail -f /home/pi/output.log". There may be a lag in the writes, so be aware of that.
If you wanted to have it sent to your display, type "tty" at a prompt, and use that device in place of a physical file, e.g.
/5 6-22 /home/pi/refresh.sh > /dev/pts/0
Be aware that you can't stop that screen output once started...you'd have to kill the script and then edit crontab to reverse it. You'd have a tough time doing that with the constant output...you'd likely want to login remotely to do so.
In other words, be careful what you wish for.
I have cron running every 5 minutes, and I have the blink duration set for 300 seconds. It seems to blink correctly for the first 5 minute window, then freezes and stops updating. Any thoughts?
Show us your crontab entry.
*edit - not sure why the code looks terrible below...
Cron:
/5 * /home/pi/METARMap/refresh.sh
refresh.sh:
usr/bin/sudo pkill -F /home/pi/offpid.pid /usr/bin/sudo pkill -F /home/pi/metarpid.pid /usr/bin/sudo /usr/bin/python3 /home/pi/METARMap/metar.py & echo $! > /home/pi/METARmap/metarpid.pid
metar.py:
import urllib.request import xml.etree.ElementTree as ET import board import neopixel import time import datetime try: import astral except ImportError: astral = None try: import displaymetar except ImportError: displaymetar = None
LED_COUNT = 50 # Number of LED pixels. LED_PIN = board.D18 # GPIO pin connected to the pixels (18 is PCM). LED_BRIGHTNESS = .5 # Float from 0.0 (min) to 1.0 (max) LED_ORDER = neopixel.GRB # Strip type and colour ordering
COLOR_VFR = (255,0,0) # Green COLOR_VFR_FADE = (125,0,0) # Green Fade for wind COLOR_MVFR = (0,0,255) # Blue COLOR_MVFR_FADE = (0,0,125) # Blue Fade for wind COLOR_IFR = (0,255,0) # Red COLOR_IFR_FADE = (0,125,0) # Red Fade for wind COLOR_LIFR = (0,125,125) # Magenta COLOR_LIFR_FADE = (0,75,75) # Magenta Fade for wind COLOR_CLEAR = (0,0,0) # Clear COLOR_LIGHTNING = (255,255,255) # White COLOR_HIGH_WINDS = (255,255,0) # Yellow
ACTIVATE_WINDCONDITION_ANIMATION = True # Set this to False for Static or True for animated wind conditions
ACTIVATE_LIGHTNING_ANIMATION = True # Set this to False for Static or True for animated Lightning
FADE_INSTEAD_OF_BLINK = True # Set to False if you want blinking
WIND_BLINK_THRESHOLD = 15 # Knots of windspeed to blink/fade HIGH_WINDS_THRESHOLD = 25 # Knots of windspeed to trigger Yellow LED indicating very High Winds, set to -1 if you don't want to use this ALWAYS_BLINK_FOR_GUSTS = True # Always animate for Gusts (regardless of speeds)
BLINK_SPEED = 1 # Float in seconds, e.g. 0.5 for half a second
BLINK_TOTALTIME_SECONDS = 298
ACTIVATE_DAYTIME_DIMMING = True # Set to True if you want to dim the map after a certain time of day BRIGHT_TIME_START = datetime.time(7,0) # Time of day to run at LED_BRIGHTNESS in hours and minutes DIM_TIME_START = datetime.time(17,0) # Time of day to run at LED_BRIGHTNESS_DIM in hours and minutes LED_BRIGHTNESS_DIM = .1 # Float from 0.0 (min) to 1.0 (max)
USE_SUNRISE_SUNSET = True # Set to True if instead of fixed times for bright/dimming, you want to use local sunrise/sunset LOCATION = "Memphis" # Nearby city for Sunset/Sunrise timing, refer to https://astral.readthedocs.io/en/latest/#cities for list of cities supported
ACTIVATE_EXTERNAL_METAR_DISPLAY = False # Set to True if you want to display METAR conditions to a small external display DISPLAY_ROTATION_SPEED = 5.0 # Float in seconds, e.g 2.0 for two seconds
SHOW_LEGEND = False # Set to true if you want to have a set of LEDs at the end show the legend
OFFSET_LEGEND_BY = 0
print("Running metar.py at " + datetime.datetime.now().strftime('%d/%m/%Y %H:%M'))
if astral is not None and USE_SUNRISE_SUNSET: try:
ast = astral.Astral()
try:
city = ast[LOCATION]
except KeyError:
print("Error: Location not recognized, please check list of supported cities and reconfigure")
else:
print(city)
sun = city.sun(date = datetime.datetime.now().date(), local = True)
BRIGHT_TIME_START = sun['sunrise'].time()
DIM_TIME_START = sun['sunset'].time()
except AttributeError:
# newer Raspberry Pi versions using Python 3.6+ using Astral 2.2
import astral.geocoder
import astral.sun
try:
city = astral.geocoder.lookup(LOCATION, astral.geocoder.database())
except KeyError:
print("Error: Location not recognized, please check list of supported cities and reconfigure")
else:
print(city)
sun = astral.sun.sun(city.observer, date = datetime.datetime.now().date(), tzinfo=city.timezone)
BRIGHT_TIME_START = sun['sunrise'].time()
DIM_TIME_START = sun['sunset'].time()
print("Sunrise:" + BRIGHT_TIME_START.strftime('%H:%M') + " Sunset:" + DIM_TIME_START.strftime('%H:%M'))
bright = BRIGHT_TIME_START < datetime.datetime.now().time() < DIM_TIME_START print("Wind animation:" + str(ACTIVATE_WINDCONDITION_ANIMATION)) print("Lightning animation:" + str(ACTIVATE_LIGHTNING_ANIMATION)) print("Daytime Dimming:" + str(ACTIVATE_DAYTIME_DIMMING) + (" using Sunrise/Sunset" if USE_SUNRISE_SUNSET and ACTIVATE_DAYTIME_DIMMING else "")) print("External Display:" + str(ACTIVATE_EXTERNAL_METAR_DISPLAY)) pixels = neopixel.NeoPixel(LED_PIN, LED_COUNT, brightness = LED_BRIGHTNESS_DIM if (ACTIVATE_DAYTIME_DIMMING and bright == False) else LED_BRIGHTNESS, pixel_order = LED_ORDER, auto_write = False)
with open("/home/apldan/Desktop/METARMap/airports") as f: airports = f.readlines() airports = [x.strip() for x in airports] try: with open("/home/apldan/Desktop/METARMap/airports") as f2: displayairports = f2.readlines() displayairports = [x.strip() for x in displayairports] print("Using subset airports for LED display") except IOError: print("Rotating through all airports on LED display") displayairports = None
url = "https://aviationweather.gov/cgi-bin/data/dataserver.php?requestType=retrieve&dataSource=metars&stationString=" + ",".join([item for item in airports if item != "NULL"]) + "&hoursBeforeNow=5&format=xml&mostRecent=true&mostRecentForEachStation=constraint" req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 Edg/86.0.622.69'}) content = urllib.request.urlopen(req).read()
root = ET.fromstring(content)
conditionDict = { "NULL": {"flightCategory" : "", "windDir": "", "windSpeed" : 0, "windGustSpeed" : 0, "windGust" : False, "lightning": False, "tempC" : 0, "dewpointC" : 0, "vis" : 0, "altimHg" : 0, "obs" : "", "skyConditions" : {}, "obsTime" : datetime.datetime.now() } }
conditionDict.pop("NULL")
stationList = []
for metar in root.iter('METAR'):
stationId = metar.find('station_id').text
if metar.find('flight_category') is None:
print("Missing flight condition, skipping.")
continue
flightCategory = metar.find('flight_category').text
windDir = ""
windSpeed = 0
windGustSpeed = 0
windGust = False
lightning = False
tempC = 0
dewpointC = 0
vis = 0
altimHg = 0.0
obs = ""
skyConditions = []
if metar.find('wind_gust_kt') is not None:
windGustSpeed = int(metar.find('wind_gust_kt').text)
windGust = (True if (ALWAYS_BLINK_FOR_GUSTS or windGustSpeed > WIND_BLINK_THRESHOLD) else False)
if metar.find('wind_speed_kt') is not None:
windSpeed = int(metar.find('wind_speed_kt').text)
if metar.find('wind_dir_degrees') is not None:
windDir = metar.find('wind_dir_degrees').text
if metar.find('temp_c') is not None:
tempC = int(round(float(metar.find('temp_c').text)))
if metar.find('dewpoint_c') is not None:
dewpointC = int(round(float(metar.find('dewpoint_c').text)))
if metar.find('visibility_statute_mi') is not None:
vis_str = metar.find('visibility_statute_mi').text
vis_str = vis_str.replace('+', '')
vis = int(round(float(vis_str)))
if metar.find('altim_in_hg') is not None:
altimHg = float(round(float(metar.find('altim_in_hg').text), 2))
if metar.find('wx_string') is not None:
obs = metar.find('wx_string').text
if metar.find('observation_time') is not None:
obsTime = datetime.datetime.fromisoformat(metar.find('observation_time').text.replace("Z","+00:00"))
for skyIter in metar.iter("sky_condition"):
skyCond = { "cover" : skyIter.get("sky_cover"), "cloudBaseFt": int(skyIter.get("cloud_base_ft_agl", default=0)) }
skyConditions.append(skyCond)
if metar.find('raw_text') is not None:
rawText = metar.find('raw_text').text
lightning = False if ((rawText.find('LTG', 4) == -1 and rawText.find('TS', 4) == -1) or rawText.find('TSNO', 4) != -1) else True
print(stationId + ":"
disp = None if displaymetar is not None and ACTIVATE_EXTERNAL_METAR_DISPLAY: print("setting up external display") disp = displaymetar.startDisplay() displaymetar.clearScreen(disp)
looplimit = int(round(BLINK_TOTALTIME_SECONDS / BLINK_SPEED)) if (ACTIVATE_WINDCONDITION_ANIMATION or ACTIVATE_LIGHTNING_ANIMATION or ACTIVATE_EXTERNAL_METAR_DISPLAY) else 1
windCycle = False displayTime = 0.0 displayAirportCounter = 0 numAirports = len(stationList) while looplimit > 0: i = 0 for airportcode in airports:
if airportcode == "NULL":
i += 1
continue
color = COLOR_CLEAR
conditions = conditionDict.get(airportcode, None)
windy = False
highWinds = False
lightningConditions = False
if conditions != None:
windy = True if (ACTIVATE_WINDCONDITION_ANIMATION and windCycle == True and (conditions["windSpeed"] >= WIND_BLINK_THRESHOLD or conditions["windGust"] == True)) else False
highWinds = True if (windy and HIGH_WINDS_THRESHOLD != -1 and (conditions["windSpeed"] >= HIGH_WINDS_THRESHOLD or conditions["windGustSpeed"] >= HIGH_WINDS_THRESHOLD)) else False
lightningConditions = True if (ACTIVATE_LIGHTNING_ANIMATION and windCycle == False and conditions["lightning"] == True) else False
if conditions["flightCategory"] == "VFR":
color = COLOR_VFR if not (windy or lightningConditions) else COLOR_LIGHTNING if lightningConditions else COLOR_HIGH_WINDS if highWinds else (COLOR_VFR_FADE if FADE_INSTEAD_OF_BLINK else COLOR_CLEAR) if windy else COLOR_CLEAR
elif conditions["flightCategory"] == "MVFR":
color = COLOR_MVFR if not (windy or lightningConditions) else COLOR_LIGHTNING if lightningConditions else COLOR_HIGH_WINDS if highWinds else (COLOR_MVFR_FADE if FADE_INSTEAD_OF_BLINK else COLOR_CLEAR) if windy else COLOR_CLEAR
elif conditions["flightCategory"] == "IFR":
color = COLOR_IFR if not (windy or lightningConditions) else COLOR_LIGHTNING if lightningConditions else COLOR_HIGH_WINDS if highWinds else (COLOR_IFR_FADE if FADE_INSTEAD_OF_BLINK else COLOR_CLEAR) if windy else COLOR_CLEAR
elif conditions["flightCategory"] == "LIFR":
color = COLOR_LIFR if not (windy or lightningConditions) else COLOR_LIGHTNING if lightningConditions else COLOR_HIGH_WINDS if highWinds else (COLOR_LIFR_FADE if FADE_INSTEAD_OF_BLINK else COLOR_CLEAR) if windy else COLOR_CLEAR
else:
color = COLOR_CLEAR
print("Setting LED " + str(i) + " for " + airportcode + " to " + ("lightning " if lightningConditions else "") + ("very " if highWinds else "") + ("windy " if windy else "") + (conditions["flightCategory"] if conditions != None else "None") + " " + str(color))
pixels[i] = color
i += 1
# Legend
if SHOW_LEGEND:
pixels[i + OFFSET_LEGEND_BY] = COLOR_VFR
pixels[i + OFFSET_LEGEND_BY + 1] = COLOR_MVFR
pixels[i + OFFSET_LEGEND_BY + 2] = COLOR_IFR
pixels[i + OFFSET_LEGEND_BY + 3] = COLOR_LIFR
if ACTIVATE_LIGHTNING_ANIMATION == True:
pixels[i + OFFSET_LEGEND_BY + 4] = COLOR_LIGHTNING if windCycle else COLOR_VFR # lightning
if ACTIVATE_WINDCONDITION_ANIMATION == True:
pixels[i+ OFFSET_LEGEND_BY + 5] = COLOR_VFR if not windCycle else (COLOR_VFR_FADE if FADE_INSTEAD_OF_BLINK else COLOR_CLEAR) # windy
if HIGH_WINDS_THRESHOLD != -1:
pixels[i + OFFSET_LEGEND_BY + 6] = COLOR_VFR if not windCycle else COLOR_HIGH_WINDS # high winds
# Update actual LEDs all at once
pixels.show()
# Rotate through airports METAR on external display
if disp is not None:
if displayTime <= DISPLAY_ROTATION_SPEED:
displaymetar.outputMetar(disp, stationList[displayAirportCounter], conditionDict.get(stationList[displayAirportCounter], None))
displayTime += BLINK_SPEED
else:
displayTime = 0.0
displayAirportCounter = displayAirportCounter + 1 if displayAirportCounter < numAirports-1 else 0
print("showing METAR Display for " + stationList[displayAirportCounter])
# Switching between animation cycles
time.sleep(BLINK_SPEED)
windCycle = False if windCycle else True
looplimit -= 1
print() print("Done")
I can't guarantee this is your issue, but it looks like you're a victim of your decision to not put things in /home/pi, then not adjusting for that everywhere, and then using incorrect case in one place.
The refresh.sh script you posted is this:
usr/bin/sudo pkill -F /home/pi/offpid.pid /usr/bin/sudo pkill -F /home/pi/metarpid.pid /usr/bin/sudo /usr/bin/python3 /home/pi/METARMap/metar.py & echo $! > /home/pi/METARmap/metarpid.pid
Try using:
usr/bin/sudo pkill -F /home/pi/METARMap/offpid.pid /usr/bin/sudo pkill -F /home/pi/METARMap/metarpid.pid /usr/bin/sudo /usr/bin/python3 /home/pi/METARMap/metar.py & echo $! > /home/pi/METARMap/metarpid.pid
While you're at it, you should look at your lightsoff.sh script.
I think you nailed it, seems to be working great now :)
P.S. - may want to add something to the read me/Pi setup instructions about modifying /boot/config.txt to uncomment dtparam=spi=on and change dtparam=audio=on to off. Couple of bumps i had to research to get it to work on my Pi 3B+.
Thanks again for your help!
That’s interesting. I’ve never had to change anything for a 3B+. Have two that I built for friends over a year ago that are running fine.
Have also tested again today a Pi 2 model B V1.1 (with an Edimax WiFi adapter) bought way back in 2015 that works fine. I just moved the SD card built on a Pi Zero W to the Pi 2. All functions, including the small OLED dislay, work fine. This particular SD card was just built yesterday with 2023-12-11-raspios-bookworm-armhf-lite.img.xz.
As an aside, it really becomes a challenge to work with the Pi. With every OS release, or even just the passage of time, libraries get updated, things get deprecated, and I spend an inordinate amount of time getting things right. Sure enough, even moving from 2023-10-10-raspios-bookworm-armhf-lite.img.xz to 2023-12-11-raspios-bookworm-armhf-lite.img.xz was challenging. That, and issues with SD card corruption, make it a pain to help friends out.
FWIW, going forward, for my own usage I will likely keep using this software, but for any maps for friends, I’m using a commercial microcontroller based solution. I’ve also got a fork of the WKHarmon microcontroller code that adds significant functionality.
From: apldan @.> Sent: Saturday, January 13, 2024 9:48 PM To: prueker/METARMap @.> Cc: jcl-rv12is @.>; Comment @.> Subject: Re: [prueker/METARMap] Wind Blinking kills updating (Issue #58)
I think you nailed it, seems to be working great now :)
P.S. - may want to add something to the read me/Pi setup instructions about modifying /boot/config.txt to uncomment dtparam=spi=on and change dtparam=audio=on to off. Couple of bumps i had to research to get it to work on my Pi 3B+.
Thanks again for your help!
— Reply to this email directly, view it on GitHub https://github.com/prueker/METARMap/issues/58#issuecomment-1890837558 , or unsubscribe https://github.com/notifications/unsubscribe-auth/A7OJYUHNOZ5VG3H2LSNY753YONINRAVCNFSM6AAAAABBVUZ742VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOJQHAZTONJVHA . You are receiving this because you commented. https://github.com/notifications/beacon/A7OJYUA73TLW3EQZACV5D33YONINRA5CNFSM6AAAAABBVUZ742WGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTQWPSDM.gif Message ID: @. @.> >
Once it is working it is working and does not need any upgrading. Mine worked for three years until the METAR URL was updated and then I needed to make that change but I never update any libraries etc in the PI
From: jcl-rv12is @.> Reply-To: prueker/METARMap @.> Date: Sunday, January 14, 2024 at 10:16 AM To: prueker/METARMap @.> Cc: Subscribed @.> Subject: Re: [prueker/METARMap] Wind Blinking kills updating (Issue #58)
That’s interesting. I’ve never had to change anything for a 3B+. Have two that I built for friends over a year ago that are running fine.
Have also tested again today a Pi 2 model B V1.1 (with an Edimax WiFi adapter) bought way back in 2015 that works fine. I just moved the SD card built on a Pi Zero W to the Pi 2. All functions, including the small OLED dislay, work fine. This particular SD card was just built yesterday with 2023-12-11-raspios-bookworm-armhf-lite.img.xz.
As an aside, it really becomes a challenge to work with the Pi. With every OS release, or even just the passage of time, libraries get updated, things get deprecated, and I spend an inordinate amount of time getting things right. Sure enough, even moving from 2023-10-10-raspios-bookworm-armhf-lite.img.xz to 2023-12-11-raspios-bookworm-armhf-lite.img.xz was challenging. That, and issues with SD card corruption, make it a pain to help friends out.
FWIW, going forward, for my own usage I will likely keep using this software, but for any maps for friends, I’m using a commercial microcontroller based solution. I’ve also got a fork of the WKHarmon microcontroller code that adds significant functionality.
From: apldan @.> Sent: Saturday, January 13, 2024 9:48 PM To: prueker/METARMap @.> Cc: jcl-rv12is @.>; Comment @.> Subject: Re: [prueker/METARMap] Wind Blinking kills updating (Issue #58)
I think you nailed it, seems to be working great now :)
P.S. - may want to add something to the read me/Pi setup instructions about modifying /boot/config.txt to uncomment dtparam=spi=on and change dtparam=audio=on to off. Couple of bumps i had to research to get it to work on my Pi 3B+.
Thanks again for your help!
— Reply to this email directly, view it on GitHub https://github.com/prueker/METARMap/issues/58#issuecomment-1890837558 , or unsubscribe https://github.com/notifications/unsubscribe-auth/A7OJYUHNOZ5VG3H2LSNY753YONINRAVCNFSM6AAAAABBVUZ742VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOJQHAZTONJVHA . You are receiving this because you commented. https://github.com/notifications/beacon/A7OJYUA73TLW3EQZACV5D33YONINRA5CNFSM6AAAAABBVUZ742WGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTQWPSDM.gif Message ID: @. @.> >
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
True, and I did the same thing on several friends’ maps, but building a new one from scratch today is a different story. I keep a Word doc updated regularly to cover building something today, at
https://github.com/jcl-rv12is/METARMap
From: Tony @.> Sent: Sunday, January 14, 2024 9:49 AM To: prueker/METARMap @.> Cc: jcl-rv12is @.>; Comment @.> Subject: Re: [prueker/METARMap] Wind Blinking kills updating (Issue #58)
Once it is working it is working and does not need any upgrading. Mine worked for three years until the METAR URL was updated and then I needed to make that change but I never update any libraries etc in the PI
From: jcl-rv12is @. <mailto:@.> > Reply-To: prueker/METARMap @. <mailto:@.> > Date: Sunday, January 14, 2024 at 10:16 AM To: prueker/METARMap @. <mailto:@.> > Cc: Subscribed @. <mailto:@.> > Subject: Re: [prueker/METARMap] Wind Blinking kills updating (Issue #58)
That’s interesting. I’ve never had to change anything for a 3B+. Have two that I built for friends over a year ago that are running fine.
Have also tested again today a Pi 2 model B V1.1 (with an Edimax WiFi adapter) bought way back in 2015 that works fine. I just moved the SD card built on a Pi Zero W to the Pi 2. All functions, including the small OLED dislay, work fine. This particular SD card was just built yesterday with 2023-12-11-raspios-bookworm-armhf-lite.img.xz.
As an aside, it really becomes a challenge to work with the Pi. With every OS release, or even just the passage of time, libraries get updated, things get deprecated, and I spend an inordinate amount of time getting things right. Sure enough, even moving from 2023-10-10-raspios-bookworm-armhf-lite.img.xz to 2023-12-11-raspios-bookworm-armhf-lite.img.xz was challenging. That, and issues with SD card corruption, make it a pain to help friends out.
FWIW, going forward, for my own usage I will likely keep using this software, but for any maps for friends, I’m using a commercial microcontroller based solution. I’ve also got a fork of the WKHarmon microcontroller code that adds significant functionality.
From: apldan @. <mailto:@.> > Sent: Saturday, January 13, 2024 9:48 PM To: prueker/METARMap @. <mailto:@.> > Cc: jcl-rv12is @. <mailto:@.> >; Comment @. <mailto:@.> > Subject: Re: [prueker/METARMap] Wind Blinking kills updating (Issue #58)
I think you nailed it, seems to be working great now :)
P.S. - may want to add something to the read me/Pi setup instructions about modifying /boot/config.txt to uncomment dtparam=spi=on and change dtparam=audio=on to off. Couple of bumps i had to research to get it to work on my Pi 3B+.
Thanks again for your help!
— Reply to this email directly, view it on GitHub https://github.com/prueker/METARMap/issues/58#issuecomment-1890837558 , or unsubscribe https://github.com/notifications/unsubscribe-auth/A7OJYUHNOZ5VG3H2LSNY753YONINRAVCNFSM6AAAAABBVUZ742VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOJQHAZTONJVHA . You are receiving this because you commented. https://github.com/notifications/beacon/A7OJYUA73TLW3EQZACV5D33YONINRA5CNFSM6AAAAABBVUZ742WGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTQWPSDM.gif Message ID: @. <mailto:@.> @. <mailto:@.> > >
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @. <mailto:@.> >
— Reply to this email directly, view it on GitHub https://github.com/prueker/METARMap/issues/58#issuecomment-1890988212 , or unsubscribe https://github.com/notifications/unsubscribe-auth/A7OJYUFLDU6R6S6BCYESAA3YOP46RAVCNFSM6AAAAABBVUZ742VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQOJQHE4DQMRRGI . You are receiving this because you commented. https://github.com/notifications/beacon/A7OJYUF7SUZKD7YDI3YXVADYOP46RA5CNFSM6AAAAABBVUZ742WGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTQWYYLI.gif Message ID: @. @.> >
I have cron running every 5 minutes, and I have the blink duration set for 300 seconds. It seems to blink correctly for the first 5 minute window, then freezes and stops updating. Any thoughts?