That was it! Thank you so much for your help!!!

On Tuesday, July 23, 2024 at 7:33:10 PM UTC-5 gjr80 wrote:

> Zach,
>
> Did you by chance copy and paste those two lines from my earlier post into 
> extensions.py? If so if you look closely I had a typo, lakeSurfaceLevel 
> was incorrectly capitalised. I've just run weectl import with your data 
> and import config file with the correct two lines in extensions.py and 
> the import worked just fine.
>
> Gary
>
> On Wednesday 24 July 2024 at 08:53:39 UTC+10 Zach wrote:
>
>> Unfortunately, adding it to extensions.py did not work. I'll sit tight 
>> until a fix is completed. But no hurry!
>>
>> Thanks Gary!
>>
>> On Tuesday, July 23, 2024 at 5:48:01 PM UTC-5 gjr80 wrote:
>>
>>> The problem is weectl import is a standalone utility run independent of 
>>> WeeWX and as such does not load the WeeWX services specified in the WeeWX 
>>> config file (well it actually does cause some of the services to be loaded, 
>>> but later on after the import has occurred when missing obs are/may be 
>>> calculated). I've had some second thoughts since my previous post and I am 
>>> not even sure that adding those lines to extensions.py will work. If it 
>>> is easy enough to try please try it, it will either work or not, nothing 
>>> will be broken/corrupted.
>>>
>>> Failing that there will be a small change required to weectl import 
>>> that I should be able to implement later today.
>>>
>>> Let me know how you get on.
>>>
>>> Gary
>>> On Wednesday 24 July 2024 at 07:33:27 UTC+10 Zach wrote:
>>>
>>>> I have that line in my custom service for pulling the data from an API. 
>>>> Should I also put it in the extension.py?
>>>>
>>>> On Tuesday, July 23, 2024 at 4:17:36 PM UTC-5 gjr80 wrote:
>>>>
>>>>> OK, I suspect the problem is when you added field lakeSurfaceLevel to 
>>>>> WeeWX you didn't tell WeeWX what unit group the field belongs to. 
>>>>> Consequently, when you attempt to import data into lakeSurfaceLevel 
>>>>> weectl 
>>>>> import conducts some checks to see if any source field unit 
>>>>> conversion is required. That is what is causing the KeyError error.
>>>>>
>>>>> The simple fix is to tell WeeWX what unit group is used by the WeeWX 
>>>>> field lakeSurfaceLevel. There are a number of ways to do this, the 
>>>>> most common is to add a few lines to 
>>>>> ~/weewx-data/bin/user/extensions.py. You could try adding the 
>>>>> following to ~/weewx-data/bin/user/extensions.py:
>>>>>
>>>>> import weewx.units
>>>>> weewx.units.obs_group_dict['lakeSurfacelevel'] = 'group_altitude'
>>>>>
>>>>> save extensions.py and try the import agin.
>>>>>
>>>>> Gary
>>>>>
>>>>> On Wednesday 24 July 2024 at 06:50:28 UTC+10 Zach wrote:
>>>>>
>>>>>> Sorry, I should have clicked reply all. ;)
>>>>>>
>>>>>> Here is the output
>>>>>>
>>>>>> Using configuration file */Users/zach/weewx-data/weewx.conf*
>>>>>>
>>>>>> This is a dry run. Nothing will actually be done.
>>>>>>
>>>>>> Starting weectl import...
>>>>>>
>>>>>> A CSV import from source file '/Users/zach/Downloads/Untitled.csv' 
>>>>>> has been requested.
>>>>>>
>>>>>> The following options will be used:
>>>>>>
>>>>>>      config=/Users/zach/weewx-data/weewx.conf, 
>>>>>> import-config=/Users/zach/weewx-data/csv.conf
>>>>>>
>>>>>>      source=/Users/zach/Downloads/Untitled.csv, from=None, to=None
>>>>>>
>>>>>>      dry-run=True, calc_missing=False, ignore_invalid_data=True
>>>>>>
>>>>>>      tranche=250, interval=derive, date/time_string_format=%Y-%m-%d 
>>>>>> %H:%M:%S
>>>>>>
>>>>>>      delimiter=',', wind_direction=[-360.0, 360.0]
>>>>>>
>>>>>>      UV=False, radiation=False
>>>>>>
>>>>>> Using database binding 'wx_binding', which is bound to database 
>>>>>> 'weewx.sdb'
>>>>>>
>>>>>> Destination table 'archive' unit system is '0x01' (US).
>>>>>>
>>>>>> The following imported field-to-WeeWX field map will be used:
>>>>>>
>>>>>>      source field 'datetime' in units 'unix_epoch' --> WeeWX field 
>>>>>> 'dateTime'
>>>>>>
>>>>>>      source field 'lakeSurfaceLevel' in units 'foot' --> WeeWX field 
>>>>>> 'lakeSurfaceLevel'
>>>>>>
>>>>>> Imported records will not overwrite existing database records.
>>>>>>
>>>>>> All WeeWX UV fields will be set to None.
>>>>>>
>>>>>> All WeeWX radiation fields will be set to None.
>>>>>>
>>>>>> This is a dry run, imported data will not be saved to archive.
>>>>>>
>>>>>> Starting dry run import ...
>>>>>>
>>>>>> Obtaining raw import data for period 1 ...
>>>>>>
>>>>>> Raw import data read successfully for period 1.
>>>>>>
>>>>>> Mapping raw import data for period 1 ...
>>>>>>
>>>>>> Traceback (most recent call last):
>>>>>>
>>>>>>   File "/Users/zach/weewx-venv/bin/weectl", line 8, in <module>
>>>>>>
>>>>>>     sys.exit(main())
>>>>>>
>>>>>>   File 
>>>>>> "/Users/zach/weewx-venv/lib/python3.9/site-packages/weectl.py", line 67, 
>>>>>> in 
>>>>>> main
>>>>>>
>>>>>>     namespace.func(namespace)
>>>>>>
>>>>>>   File 
>>>>>> "/Users/zach/weewx-venv/lib/python3.9/site-packages/weectllib/__init__.py",
>>>>>>  
>>>>>> line 90, in dispatch
>>>>>>
>>>>>>     namespace.action_func(config_dict, namespace)
>>>>>>
>>>>>>   File 
>>>>>> "/Users/zach/weewx-venv/lib/python3.9/site-packages/weectllib/import_cmd.py",
>>>>>>  
>>>>>> line 85, in import_func
>>>>>>
>>>>>>     weectllib.import_actions.obs_import(config_dict,
>>>>>>
>>>>>>   File 
>>>>>> "/Users/zach/weewx-venv/lib/python3.9/site-packages/weectllib/import_actions.py",
>>>>>>  
>>>>>> line 58, in obs_import
>>>>>>
>>>>>>     source_obj.run()
>>>>>>
>>>>>>   File 
>>>>>> "/Users/zach/weewx-venv/lib/python3.9/site-packages/weeimport/weeimport.py",
>>>>>>  
>>>>>> line 406, in run
>>>>>>
>>>>>>     _mapped_data = self.map_raw_data(_raw_data, self.archive_unit_sys)
>>>>>>
>>>>>>   File 
>>>>>> "/Users/zach/weewx-venv/lib/python3.9/site-packages/weeimport/weeimport.py",
>>>>>>  
>>>>>> line 976, in map_raw_data
>>>>>>
>>>>>>     weewx.units.obs_group_dict[_field])
>>>>>>
>>>>>>   File 
>>>>>> "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/collections/__init__.py",
>>>>>>  
>>>>>> line 941, in __getitem__
>>>>>>
>>>>>>     return self.__missing__(key)            # support subclasses that 
>>>>>> define __missing__
>>>>>>
>>>>>>   File 
>>>>>> "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/collections/__init__.py",
>>>>>>  
>>>>>> line 933, in __missing__
>>>>>>
>>>>>>     raise KeyError(key)
>>>>>>
>>>>>> KeyError: 'lakeSurfaceLevel'
>>>>>>
>>>>>>
>>>>>> On Tuesday, July 23, 2024 at 3:45:46 PM UTC-5 gjr80 wrote:
>>>>>>
>>>>>>> Thanks, can you post the complete and exact output to the console 
>>>>>>> when weectl import is run. Also, what does the weectl log show?
>>>>>>>
>>>>>>> Gary
>>>>>>> On Wednesday 24 July 2024 at 06:40:53 UTC+10 Zach wrote:
>>>>>>>
>>>>>>>> I'm trying to track the water level of a lake so I added a new 
>>>>>>>> column to the database (lakeSurfaceLevel), created a service to 
>>>>>>>> populate 
>>>>>>>> the data, and modified my skin to display it. All of that works great, 
>>>>>>>> however when I try to import data for that new observation using 
>>>>>>>> weectl, I 
>>>>>>>> get a error "KeyError: 'lakeSurfaceLevel'
>>>>>>>>
>>>>>>>> Any help would be greatly appreciated!
>>>>>>>>
>>>>>>>> Attached are the csv.conf and a data file
>>>>>>>>
>>>>>>>

-- 
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 weewx-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/8d648d6f-a917-4990-af5e-d8c0bac96d7an%40googlegroups.com.

Reply via email to