I have now made These changes in the Extensions.py file. I now gut the unit correct to °, but have only integer values and no digits after the decimal. For the direction of a compass that is perfectly fine. For GPS coordinate, no digits after the decimal is pretty useless for displaying purposes.
As you can see, I tried to play arround with '%.3f', but that caused more errors and weewx to exit ... So, how to I format the GPS coordinates with three digits after the decimal, but keep the compass direction as an integer? # # Copyright (c) 2009-2015 Tom Keffer <[email protected]> # # See the file LICENSE.txt for your full rights. # """User extensions module This module is imported from the main executable, so anything put here will be executed before anything else happens. This makes it a good place to put user extensions. """ import locale import weewx.units # This sets the locale for all categories to the user’s default setting (typically specified in the # LANG environment variable). See: https://docs.python.org/3/library/locale.html#locale.setlocale locale.setlocale(locale.LC_ALL, '') import weewx.units ## works, but has no digits after the decimal for group in weewx.units.std_groups: weewx.units.std_groups[group].setdefault('group_coordinate','degree_compass') weewx.units.obs_group_dict.setdefault('latitude','group_coordinate') weewx.units.obs_group_dict.setdefault('longitude','group_coordinate') # Create a custom formatter for the latitude and longitude observations #formatter = weewx.units.Formatter({'latitude': '%.3f', 'longitude': '%.3f'}) # Set the formatter for the latitude and longitude observations #weewx.units.obs_group_dict['latitude'] = ('degree_latitude', 'group_coordinate', formatter) #weewx.units.obs_group_dict['longitude'] = ('degree_longitude', 'group_coordinate', formatter) On Wednesday, August 21, 2024 at 4:13:51 PM UTC+2 Karen K wrote: > Each observation type needs an assignment to a unit group. So if you > define a new observation type you have to write somewhere: > > > weewx.units.obs_group_dict.setdefault('your_observation_type','group_something') > > The unit group must exist. group_direction is an example of a unit group > that is connected to the unit degree_compass. > > Please also not the name of the unit degree_compass, not otherwise round. > > If you want to define a new unit group, say group_coordinate, you have to > write: > > *for* group *in* weewx.units.std_groups: > > weewx.units.std_groups[group].setdefault('group_coordinate', > 'degree_compass') > > You can include that code in user/extensions.py. > > > Stefan Gliessmann schrieb am Mittwoch, 21. August 2024 um 15:46:28 UTC+2: > >> A GPS device in my RV sends the current coordinates via MQTT to my weewx >> server. >> The coordinates are displayed with units = None. >> Trying to change them to units = degree_compass or units = " °" results >> in the below error: >> >> Aug 21 15:28:26 rvwx weewx[1590] DEBUG weewx.units: Unable to convert >> from None to ° >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: MQTT: Unexpected >> exception of type <class 'KeyError'> >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** Traceback (most >> recent call last): >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** File >> "/usr/share/weewx/weewx/restx.py", line 382, in run_loop >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** >> self.process_record(_record, dbmanager) >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** File >> "/usr/share/weewx/user/mqtt.py", line 516, in process_record >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** data = >> self.filter_data(record) >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** File >> "/usr/share/weewx/user/mqtt.py", line 496, in filter_data >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** v = >> weewx.units.convert(from_t, to_units)[0] >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** File >> "/usr/share/weewx/weewx/units.py", line 1454, in convert >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** >> conversion_func = conversionDict[val_t[1]][target_unit] >> Aug 21 15:28:26 rvwx weewx[1590] ERROR weewx.restx: *** KeyError: None >> Aug 21 15:28:26 rvwx weewx[1590] CRITICAL weewx.restx: MQTT: Thread >> terminating. Reason: None >> >> Here is the relevant section from weewx.conf to display coordinates in >> belchertown skin: >> [[MQTT]] >> server_url = mqtt:// >> zzzz:[email protected]:1883/ >> <http://zzzz:[email protected]:1883/> >> topic = RV >> unit_system = METRIC >> binding = loop, archive >> log_success = true >> [[[inputs]]] >> [[[[latitude]]]] >> # units = " °" >> format = %.3f >> >> and MQTT subscribe to Write the GPS data received via MQTT into the weewx >> db: >> [MQTTSubscribeService] >> # This section is for the MQTTSubscribe service. >> >> # Turn the service on and off. >> # Default is: true >> # Only used by the service. >> enable = true >> log = true >> >> # The MQTT server. >> # Default is localhost. >> host = "wxvm.bz3gfkrlqtrsc3sv.myfritz.net" >> >> # The port to connect to. >> # Default is 1883. >> port = 1883 >> >> # Maximum period in seconds allowed between communications with the >> broker. >> # Default is 60. >> keepalive = 60 >> >> # username for broker authentication. >> # Default is None. >> username = xxxx >> >> # password for broker authentication. >> # Default is None. >> password = yyyy >> >> # The binding, loop or archive. >> # Default is: loop >> # Only used by the service. >> binding = loop >> >> # The message handler to use >> [[message_callback]] >> # The format of the MQTT payload. >> # Currently support: individual, json, keyword >> # Must be specified. >> type = json >> >> # The topics to subscribe to. >> [[topics]] >> # Units for MQTT payloads without unit value. >> # Valid values: US, METRIC, METRICWX >> # Default is: US >> unit_system = US >> # adjust_start_time = 1 >> use_server_datetime = True >> use_topic_as_fieldname = true >> >> [[[RVGPS/#]]] >> # The WeeWX name. >> # Default is the name from MQTT. >> #name = Latitude >> >> # True if the incoming data should not be processed into >> WeeWX. >> # Valid values: True, False >> # Default is False >> ignore = False >> >> # True if the incoming data is cumulative. >> # Valid values: True, False >> # Default is False >> # contains_total = False >> >> # The conversion type necessary for WeeWX compatibility >> # Valid values: bool, float, int, none >> # Default is float >> # conversion_type = int >> >> # The units of the incoming data. >> # Useful if this field's units differ from the topic's >> unit_system's units. >> # Valid values: see, >> http://www.weewx.com/docs/customizing.htm#units >> # Default is not set >> # units = degree_compass >> >> [image: Screenshot 2024-08-21 at 15.40.43.png] >> >> This is how it Looks on belchertown skin with units = None, e.g. no >> change of units intented. >> >> TIA, >> Stefan >> >> -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/39d84b8c-9cbe-4b44-b08c-ecbd94eaed0an%40googlegroups.com.
