One more wild set of questions.....

In the other thread Tom mentioned that nowadays he'd look at TOML format 
since it's no longer 2008.

If we had a clean sheet of paper today what would it look like ?

Would it look more like a modern unix system's setup ?

   - perhaps use TOML format as Tom mentioned or JSON or YAML - doesn't 
   really matter perhaps
   - but don't simply redo a monolithic weewx.conf into a different format
   - instead also think ala-carte componetization.  Add/delete 'files' to a 
   conf.d directory like modern apps do

Think about how the mosquitto broker is configured.  One toplevel 
mosquitto.conf file that reads a conf.d directory containing 'components' 
it adds up as it starts.  Similarly how nginx has the concept of 
'sites-enabled' where you can pick which of the 'sites-available' you want 
to start. 

So just wildly thinking about a what-if for discussion purposes - using 
nginx's way as an example:

Toplevel config with defaults (?)

   - /etc/weewx/weewx.conf

All ala-carte added and selectable items:

   - /etc/weewx/conf.d/components-available/mything.conf

Out of that list, the set of what is enabled:

   - /etc/weewx/conf.d/components-enabled/mything.conf - symlink to 
   'components-available' file or a copy of it ala nginx

So run this to see today's tree structure:

   - grep "\[" weewx.conf

What do you see ?

   - add-ons can add to lines within a [[ ]] block
   - add-ons can add to lines within a [ ] block
   - add-ons can add things to things currently at the toplevel above any [ 
   ] nesting
   - anything goes basically - that's not necessarily good or bad of 
   course...


Just thinking about a few examples that make different modifications to 
weewx.conf currently....

weewx-mqtt:

   - adds a [StdRESTful] [[MQTT]] block
   - adds to the list of restful_services in [Engine] [[Services]]

or MQTTSubscribe:

   - adds to the list of data_services in [Engine] [[Services]]
   - adds a 'toplevel' [MQTTSubscribeService] block

or Belchertown skin:

   - adds a [[Belchertown]] block to [StdReport]
   - but adds its services into its skin.conf

of the GW1000 driver:

   - adds a toplevel [GW1000] driver block like every other driver does
   - adds a zillion items under [Accumulator]


So given add-ons can (and do) add to items at basically any level in the 
namespace, is that good long term ?

If we go with TOML for discussion purposes, configuring weewx-mqtt would 
look like:

[StdRESTful.MQTT]
        enable = true
        client_id = vp2
        server_url = mqtt://192.168.1.69:1883/
        append_units_label = false
        topic = vp2
        log_success = false
        log_failure = true
[Engine.Services]
       restful_services = user.mqtt.MQTT

Hopefully this 'adds' to the list of assembled restful_services that run at 
a system level.

I don't know.  Does TOML help today's as-is ?  Does componetizing ?  I 
really don't know.
Ultimately the user has to edit 'something' eventually I guess...

On Thursday, February 26, 2026 at 9:53:58 AM UTC-8 Vince Skahan wrote:

> Not a big deal - I was mainly asking to see if more than a few sometimes 
> thought this was an itch worth scratching.
>
> In my case I was trying to script ala-carte bill-of-materials based builds 
> using ansible.  The basic problem that weewx lets a third party developer 
> put anything they want into any location within the namespace.  So there 
> might be multiple 'debug = 0' or 'log_success = true/false' items in 
> weewx.conf and it is not possible using ansible nor puppet nor any other 
> tool I've found to let you automate setting '*just THAT one*' to a 
> desired value.
>
> Maybe there isn't a good solution for something so extensible.   I was 
> just asking if others have thoughts....
>
> On Thursday, February 26, 2026 at 6:32:54 AM UTC-8 Greg Troxel wrote:
>
>> Vince Skahan <[email protected]> writes: 
>>
>> > Would some kind of utility to permit simple edits of 'any' item in 
>> > weewx.conf be of any value to think about ? 
>> > 
>> > Something like "weectl edit config" or the like (for discussion 
>> purposes) ? 
>> > 
>> > # edit weewx.conf 
>> > weectl edit config --set "[StdRestful][[MQTT]]" --key "log_success" 
>> --value 
>> > "true" 
>>
>> Perhaps, but this is something that really should be implemented in 
>> configobj first -- is that already there? 
>>
>> Can configobj read a file into some pythonic data structure, let you 
>> change it, and then write it, and have that result in no changes (or 
>> formatting regularization that is stable), in particular preserving 
>> comments? Is the implementation just parsing the headings and 
>> assigning a variable, after read and before write? 
>>
>> (I presonally would prefer 
>> --set /StdRestful/MQTT/log_success=true 
>> but I realize that's turning windows ini back into unix paths and 
>> everybody else wouldn't like that!) 
>>
>> > I know simply telling them 'edit the file dude' of course works, but it 
>> > might be helpful for scriptability if there was a way to automate 
>> > add/edit/comment/uncomment things programmatically. The use of 
>> configobj 
>> > makes this really hard to do without some wrapper utility being cooked 
>> up. 
>> > 
>> > I did think about some alternate ways: 
>> > 
>> > - convert the .conf in configobj format to JSON or YAML 
>> > - edit thataway 
>> > - convert it back to configobj format 
>> > 
>> > But that would be ugly at best and likely would lose any comments from 
>> the 
>> > .conf file. 
>>
>> configobj talks about round trip: 
>>
>> ConfigObj is a simple but powerful config file reader and writer: an 
>> ini file round tripper. Its main feature is that it is very easy to 
>> use, with a straightforward programmer’s interface and a simple syntax 
>> for config files. 
>>
>> * All comments in the file are preserved 
>>
>> * The order of keys/sections is preserved 
>>
>> so in theory this should work. 
>>
>> It should be easy enough to test with 
>>
>> read weewx.conf to python data structure 
>> write that to weewx.conf.roundtrip 
>>
>> and diff. 
>>
>>
>>
>> I remember problems with earlier config updates (maybe 4 years ago) 
>> where the generated config would have some odd whitespace that was 
>> different from the standard config file. But I think that's no longer 
>> the case. 
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/weewx-development/9a950eaf-766c-47d5-8f29-4d17bb8e15can%40googlegroups.com.

Reply via email to