From d7260fbd71dc818ffb8c734015554d14c4ef095a Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 20 Dec 2022 12:22:12 -0500 Subject: [PATCH] Working with pre 2.7.0 --- Makefile | 6 ++- aprsd_weewx_plugin/weewx.py | 91 ++++++++++++------------------------- 2 files changed, 35 insertions(+), 62 deletions(-) diff --git a/Makefile b/Makefile index 5e8a7e4..d48dd84 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ docs: build cp Changelog docs/changelog.rst tox -edocs -clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts +clean: clean-build clean-pyc clean-test clean-dev ## remove all build, test, coverage and Python artifacts clean-build: ## remove build artifacts rm -fr build/ @@ -42,6 +42,10 @@ clean-test: ## remove test and coverage artifacts rm -fr htmlcov/ rm -fr .pytest_cache +clean-dev: ## Clean out the venv + rm -rf $(VENVDIR) + rm Makefile.venv + coverage: ## check code coverage quickly with the default Python coverage run --source aprsd_weewx_plugin setup.py test coverage report -m diff --git a/aprsd_weewx_plugin/weewx.py b/aprsd_weewx_plugin/weewx.py index 1feb06a..9f23e53 100644 --- a/aprsd_weewx_plugin/weewx.py +++ b/aprsd_weewx_plugin/weewx.py @@ -52,11 +52,11 @@ class WeewxMQTTPlugin(plugin.APRSDRegexCommandPluginBase): if self.enabled: LOG.info("Creating WeewxMQTTThread") self.queue = ClearableQueue(maxsize=1) - self.wx_queue = queue.Queue(maxsize=2) + self.wx_queue = ClearableQueue(maxsize=1) mqtt_thread = WeewxMQTTThread( config=self.config, - msg_queues=self.queue, wx_queue=self.wx_queue, + msg_queue=self.queue, ) threads = [mqtt_thread] @@ -161,10 +161,10 @@ class WeewxMQTTPlugin(plugin.APRSDRegexCommandPluginBase): class WeewxMQTTThread(threads.APRSDThread): - def __init__(self, config, msg_queues, wx_queue): + def __init__(self, config, wx_queue, msg_queue): super().__init__("WeewxMQTTThread") self.config = config - self.msg_queues = msg_queues + self.msg_queue = msg_queue self.wx_queue = wx_queue self.setup() @@ -201,15 +201,18 @@ class WeewxMQTTThread(threads.APRSDThread): wx_data = json.loads(msg.payload) LOG.debug(f"Got WX data {wx_data}") # Make sure we have only 1 item in the queue - if self.msg_queues.qsize() >= 1: - self.msg_queues.clear() - self.msg_queues.put(wx_data) + if self.msg_queue.qsize() >= 1: + self.msg_queue.clear() + self.msg_queue.put(wx_data) + self.wx_queue.clear() self.wx_queue.put(wx_data) def stop(self): - LOG.info("Disconnecting from MQTT") + LOG.info(__class__.__name__+" Stop") self.thread_stop = True + LOG.info("Stopping loop") self.client.loop_stop() + LOG.info("Disconnecting from MQTT") self.client.disconnect() def loop(self): @@ -225,7 +228,7 @@ class WeewxWXAPRSThread(threads.APRSDThread): self.wx_queue = wx_queue self.latitude = self.config.get("services.weewx.location.latitude") self.longitude = self.config.get("services.weewx.location.longitude") - self.callsign = self.config.get("services.weewx.callsign") + self.callsign = self.config.get("aprsd.callsign") self.last_send = datetime.datetime.now() if self.latitude and self.longitude: @@ -233,7 +236,6 @@ class WeewxWXAPRSThread(threads.APRSDThread): float(self.latitude), float(self.longitude), ) - self.address = f"{self.callsign}>APRS,TCPIP*:" def decdeg2dmm_m(self, degrees_decimal): is_positive = degrees_decimal >= 0 @@ -264,12 +266,6 @@ class WeewxWXAPRSThread(threads.APRSDThread): minutes = str(det.get("minutes")).zfill(2) det.get("seconds") hundredths = str(det.get("hundredths")).split(".")[1] - - LOG.debug( - f"LAT degress {degrees} minutes {str(minutes)} " - "seconds {seconds} hundredths {hundredths} direction {direction}", - ) - lat = f"{degrees}{str(minutes)}.{hundredths}{direction}" return lat @@ -284,12 +280,6 @@ class WeewxWXAPRSThread(threads.APRSDThread): minutes = str(det.get("minutes")).zfill(2) det.get("seconds") hundredths = str(det.get("hundredths")).split(".")[1] - - LOG.debug( - f"LON degress {degrees} minutes {str(minutes)} " - "seconds {seconds} hundredths {hundredths} direction {direction}", - ) - lon = f"{degrees}{str(minutes)}.{hundredths}{direction}" return lon @@ -309,8 +299,7 @@ class WeewxWXAPRSThread(threads.APRSDThread): return retn_value - def make_aprs_wx(self, wx_data): - # LOG.debug(wx_data) + def build_wx_packet(self, wx_data): wind_dir = float(wx_data.get("windDir", 0.00)) wind_speed = float(wx_data.get("windSpeed_mph", 0.00)) wind_gust = float(wx_data.get("windGust_mph", 0.00)) @@ -321,45 +310,27 @@ class WeewxWXAPRSThread(threads.APRSDThread): humidity = float(wx_data.get("outHumidity", 0.00)) # * 330.863886667 pressure = float(wx_data.get("relbarometer", 0.00)) * 10 - LOG.info(f"wind_dir {wind_dir}") - LOG.info(f"wind_speed {wind_speed}") - LOG.info(f"wind_gust {wind_gust}") - LOG.info(f"temperature {temperature}") - LOG.info(f"rain_last_hr {rain_last_hr}") - LOG.info(f"rain_last_24_hrs {rain_last_24_hrs}") - LOG.info(f"rain_since_midnight {rain_since_midnight}") - LOG.info(f"humidity {humidity}") - LOG.info(f"pressure {pressure}") - - # Assemble the weather data of the APRS packet - return "{}/{}g{}t{}r{}p{}P{}h{}b{}".format( - self.str_or_dots(wind_dir, 3), - self.str_or_dots(wind_speed, 3), - self.str_or_dots(wind_gust, 3), - self.str_or_dots(temperature, 3), - self.str_or_dots(rain_last_hr, 3), - self.str_or_dots(rain_last_24_hrs, 3), - self.str_or_dots(rain_since_midnight, 3), - self.str_or_dots(humidity, 2), - self.str_or_dots(pressure, 5), + return aprsd.packets.WeatherPacket( + from_call=self.callsign, + to_call="APRS", + latitude=self.convert_latitude(float(self.latitude)), + longitude=self.convert_longitude(float(self.longitude)), + course=int(wind_dir), + speed=wind_speed, + wind_gust=wind_gust, + temperature=temperature, + rain_1h=rain_last_hr, + rain_24h=rain_last_24_hrs, + rain_since_midnight=rain_since_midnight, + humidity=int(round(humidity)), + pressure=pressure, + comment="APRSD WX http://pypi.org/project/aprsd", ) - def build_packet(self, wx_data): - utc_datetime = datetime.datetime.now() - packet_data = "{}@{}z{}{}{}".format( - self.address, - utc_datetime.strftime("%d%H%M"), - self.position, - self.make_aprs_wx(wx_data), - "APRSD", - ) - - return packet_data - def loop(self): now = datetime.datetime.now() delta = now - self.last_send - max_timeout = {"hours": 0.0, "minutes": 1, "seconds": 0} + max_timeout = {"hours": 0.0, "minutes": 5, "seconds": 0} max_delta = datetime.timedelta(**max_timeout) if delta >= max_delta: if not self.wx_queue.empty(): @@ -378,9 +349,7 @@ class WeewxWXAPRSThread(threads.APRSDThread): # we have Weather now, so lets format the data # and then send it out to APRS - raw_aprs_text = self.build_packet(wx) - packet = aprsd.messaging.RawMessage(raw_aprs_text) - LOG.debug(f"RAW WX Packet {packet}") + packet = self.build_wx_packet(wx) packet.retry_count = 1 packet.send() self.last_send = datetime.datetime.now()