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.

Reply via email to