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/ec6cbf5b-e5d0-45b4-ae64-c74b82e1e64cn%40googlegroups.com.

Reply via email to