Hmm, that is getting complex. Just be careful, you have introduced a 
dependency on python module datetime and looking at the WeeWX module 
weewx.engine (that contains the StdCalibrate code) it does not import 
datetime. The line that performs the evaluation for StdCalibrate is wrapped 
in a try..except but I believe it will raise and error so you will know if 
datetime is an issue. I could be wrong and it is possible the import error 
could come up and be swallowed and you would not be aware. Best bet would 
be to pay particular attention to the corner cases to make sure your 
expression performs as expected.

Gary

On Thursday, 28 March 2019 12:04:43 UTC+10, peterq...@gmail.com wrote:
>
> Well, It seems to work, meaning that I don't get any syntax errors. I'll 
> have to wait until tomorrow afternoon if it's sunny to see for sure. I 
> tried to put in a time specific fix -
>
> outTemp = extraTemp1 if outTemp>(extraTemp1 + 4) and 
> datetime.utcfromtimestamp(dateTime).strftime("&H")>16 and 
> datetime.utcfromtimestamp(dateTime).strftime("&H")<20 else outTemp
>
> There's a pretty good chance I've screwed up the logic but at least the 
> syntax works in stdCalibrate
>
> Thanks for your help/
>
> On Wednesday, March 27, 2019 at 6:25:33 PM UTC-7, gjr80 wrote:
>>
>> Meant to link the relevant section 
>> <http://weewx.com/docs/usersguide.htm#StdCalibrate> from the Users Guide 
>> <http://weewx.com/docs/usersguide.htm> but forgot. It does not say it in 
>> so many words but you can anything that can 'evaluated' in a single line. 
>> Most folks tend to think of simple formulae involving one or more variables 
>> but the single line version of the python if..then..else statement lets you 
>> bring in conditional evaluation as well.
>>
>> If you are interested in the python behind [StdCalibrate] then anything 
>> that you can do in the python eval() 
>> <https://docs.python.org/2/library/functions.html#eval> function can be 
>> used. The available variables are observation field names in the loop 
>> packet or archive record being processed, eg: outTemp, outHumidity, rain 
>> etc
>>
>> Gary
>>
>> On Thursday, 28 March 2019 11:15:28 UTC+10, peterq...@gmail.com wrote:
>>>
>>> That's exactly what I was looking for.
>>>
>>> I want to set outTemp, but otherwise exactly what I need. I didn't know 
>>> that I could put an if statement there. Can I use other python code there 
>>> to be able to look up the time? Is this in the documentation someplace?
>>>
>>> I'll try it out now.
>>>
>>> On Wednesday, March 27, 2019 at 6:03:35 PM UTC-7, gjr80 wrote:
>>>>
>>>> Hi,
>>>>
>>>> You could put an entry in [StdCalibrate] in weewx.conf to set outTemp 
>>>> or extraTemp1 to whatever you want. Something like:
>>>>
>>>> [StdCalibrate]
>>>>     [[Corrections]]
>>>>         extraTemp1 = extraTemp1 if outTemp > extraTemp1 + 6 else 
>>>> outTemp
>>>>
>>>> or you could flip the equation around and change outTemp. Another 
>>>> approach would be to put your composite temperature in another field such 
>>>> as extraTemp2:
>>>>
>>>> [StdCalibrate]
>>>>     [[Corrections]]
>>>>         extraTemp2 = extraTemp1 if outTemp > extraTemp1 + 6 else 
>>>> outTemp
>>>>
>>>> The 2nd approach will preserve you outTemp or extraTemp1 data and 
>>>> should see extraTemp2 saved to the database. 
>>>>
>>>> Note that the above is untested and the '6' assumes you are using US 
>>>> customary units in your database - if not then 6 needs to be converted to 
>>>> C.
>>>>
>>>> Also, depending on your requirements you could achieve a similar result 
>>>> with some in line python code in your template. This would work fine for 
>>>> displaying current data but will not give you the aggregates that you get 
>>>> from having the composite data in the database. You could easily work in 
>>>> your time based requirements as well (pseudo code  - if 17 < hour < 19 
>>>> display extraTemp1 else display outTemp). You could even use a combination 
>>>> of [StdCalibrate] and some python inline code to get the best of both 
>>>> worlds.
>>>>
>>>> Gary
>>>>
>>>> On Thursday, 28 March 2019 10:28:29 UTC+10, peterq...@gmail.com wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I have been using Weewx v3.5.0 for a few years now. I have an Accurite 
>>>>> weather station with the thermometer, rain gauge and anemometer in a 
>>>>> single 
>>>>> unit. In order to get the rain gauge and anemometer to give useful 
>>>>> readings, I mounted it on the roof where it's away from all the trees. 
>>>>> It's 
>>>>> the best location for wind and rain, but it sucks for the temperature 
>>>>> much 
>>>>> of the time. I have a white roof and the temp up there is often 10degF 
>>>>> warmer than ambient.
>>>>>
>>>>> To get around that, I built my own wifi thermometer and put it in a 
>>>>> much better location. Details of the build here 
>>>>> <https://hackaday.io/project/101680-solar-powered-wifi-temperature-sensor-for-weewx>
>>>>> . 
>>>>>
>>>>> The new thermometer gives more accurate readings almost all the time. 
>>>>> However, a few minutes in the late afternoon, I get direct sunshine on it 
>>>>> and the temp spikes. It can spike by 20 degrees sometimes and is screwing 
>>>>> with my long term high temp data. It's worst this time of year, before 
>>>>> the 
>>>>> oak trees leaf out and block the afternoon sun.
>>>>>
>>>>> I'm recording the Accurite data in extraTemp1 and my thermometer in 
>>>>> outTemp. I want to write some code to put the extraTemp1 value in outTemp 
>>>>> if outTemp is more than 6 degF higher than extraTemp1. Ideally I'd only 
>>>>> do 
>>>>> this between 5-7pm local time, but doing it all the time would be ok. The 
>>>>> problem I'm having is finding a good place to do the comparison. The 
>>>>> service that reads outTemp doesn't have the extraTemp1 value. The code 
>>>>> that 
>>>>> reads the Accurite data and stuffs it into extraTemp1 doesn't have the 
>>>>> outTemp data. Does anyone have a suggestion on where to do this 
>>>>> comparison?
>>>>>
>>>>> I've tried fixing it up after the fact with a SQL query. It works, but 
>>>>> I'd like to do it in real time rather than go back and fix the data later.
>>>>>
>>>>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to