Final note on this: Commit a978796 
<http://%5B%5BCorrections%5D%5D%20%20%20%20%20%20%20%20%20#%20For%20each%20type,%20an%20arbitrary%20calibration%20expression%20can%20be%20given.%20%20%20%20%20%20%20%20%20%23%20It%20should%20be%20in%20the%20units%20defined%20in%20the%20StdConvert%20section.%20%20%20%20%20%20%20%20%20%23%20Example:%20%20%20%20%20%20%20%20%20foo%20=%20foo%20+%200.2%20%09pf%20=%200.88%20%20%20%20%20%20%20%20%20consumption%20=%20((ampere%20*%20linevoltage)%20/1000)%20*%20pf>
 
allows one to apply corrections to only archive records, even if they came 
from software. So, you could do

 [[Corrections]]
pf = 0.88
        consumption = ((ampere * linevoltage) /1000) * pf, archive

This is not precisely what you want, because it is applying the expression 
to the product of the *average* amperage times the *average* linevoltage, 
but it would get you close.

-tk

On Tuesday, October 17, 2023 at 9:17:44 PM UTC-7 [email protected] wrote:

> Thank you Tom
> the service file is doing exactly what we needed.
>
> GOD bless you
>
> On Wednesday, October 18, 2023 at 7:01:27 AM UTC+3 Mks Mk wrote:
>
>>
>> added import weewx to the top of file
>> it worked
>>
>> On Wednesday, October 18, 2023 at 6:50:58 AM UTC+3 Mks Mk wrote:
>>
>>> there is nothing in the log file related to the correction
>>>
>>> we tried the service but it failed twice
>>>
>>> 1st run failed with error:
>>>
>>> Oct 18 06:37:20 debian weewx[3413] CRITICAL __main__:     ****    File 
>>> "/usr/share/weewx/user/myservice.py", line 10
>>> Oct 18 06:37:20 debian weewx[3413] CRITICAL __main__:     ****      def 
>>> new_archive_record(self, event)
>>> Oct 18 06:37:20 debian weewx[3413] CRITICAL __main__:     ****           
>>>                               ^
>>> Oct 18 06:37:20 debian weewx[3413] CRITICAL __main__:     **** 
>>>  SyntaxError: invalid syntax
>>> Oct 18 06:37:20 debian weewx[3413] CRITICAL __main__:     ****  Exiting.
>>>
>>> changed to
>>>
>>> def new_archive_record(self, event):
>>>
>>> run weewx again but failed with error
>>>
>>>
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****    File 
>>> "/usr/share/weewx/weewxd", line 148, in main
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****     
>>>  engine = weewx.engine.StdEngine(config_dict)
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****    File 
>>> "/usr/share/weewx/weewx/engine.py", line 93, in __init__
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****     
>>>  self.loadServices(config_dict)
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****    File 
>>> "/usr/share/weewx/weewx/engine.py", line 161, in loadServices
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****      obj 
>>> = weeutil.weeutil.get_object(svc)(self, config_dict)
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****    File 
>>> "/usr/share/weewx/user/myservice.py", line 8, in __init__
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****     
>>>  self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_record)
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     **** 
>>>  NameError: name 'weewx' is not defined
>>> Oct 18 06:42:20 debian weewx[3603] CRITICAL __main__:     ****  Exiting.
>>>
>>> On Wednesday, October 18, 2023 at 4:42:59 AM UTC+3 Tom Keffer wrote:
>>>
>>>> Just had a thought. 
>>>>
>>>> I assume that weewxd is using software record generation. Check in the 
>>>> log. If so, [[Corrections]] does not apply the corrections to archive 
>>>> records because, in theory, the correction should have already been 
>>>> applied 
>>>> in the LOOP packets. Obviously that's not happening here.
>>>>
>>>> I've created issue #895 <https://github.com/weewx/weewx/issues/895> to 
>>>> track.
>>>>
>>>> In the meantime, what you can do is create a simple service 
>>>> <https://www.weewx.com/docs/customizing.htm#Adding_a_service> to do 
>>>> the calculation. It would look something like this (NOT TESTED):
>>>>
>>>> from weewx.engine import StdService
>>>>
>>>> class Power(StdService):
>>>>
>>>>   def __init__(self, engine, config_dict):
>>>>     super(Power, self).__init__(engine, config_dict)
>>>>
>>>>     self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_record)
>>>>
>>>>   def new_archive_record(self, event)
>>>>     ampere = event.record.get('ampere')
>>>>     linevoltage = event.record.get('linevoltage')
>>>>     if ampere is not None and linevoltage is not None:
>>>>       event.record['consumption'] = ampere * linevoltage
>>>>     else:
>>>>       event.record['consumption'] = None
>>>>
>>>> This will work provided that linevoltage and ampere do not vary too 
>>>> much over the archive interval. Because you are using short intervals (60 
>>>> seconds), this is probably not much of a problem.
>>>>     
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Tue, Oct 17, 2023 at 6:12 PM Mks Mk <[email protected]> wrote:
>>>>
>>>>> from database
>>>>>
>>>>> dateTime usUnits interval consumption          ampere               
>>>>>  linevoltage      pf
>>>>> 1697583060 1            1                        90.84233333         
>>>>>  141           0.9
>>>>> 1697583120 1            1                        110.3686667         
>>>>>  141           0.9
>>>>> 1697583180 1            1                        77.51766667         
>>>>>  140.5           0.9
>>>>> 1697583240 1            1                        101.4843333         
>>>>>  141           0.9
>>>>> 1697583300 1            1                        100.0026667         
>>>>>  141           0.9
>>>>> 1697583360 1            1                        4.977666667         
>>>>>  141           0.9
>>>>> 1697583420 1            1                        4.907666667   142   
>>>>>         0.9
>>>>> 1697583480 1            1                        4.927666667   141.5   
>>>>>         0.9
>>>>> 1697583540 1            1                        4.886         
>>>>>  141.3333333   0.9
>>>>> 1697583600 1            1                        4.867666667         
>>>>>  141            0.9
>>>>> 1697583660 1            1                        4.877666667         
>>>>>  141            0.9
>>>>> 1697583720 1            1                        78.94533333         
>>>>>  141            0.9
>>>>> 1697583780 1            1                        90.26166667         
>>>>>  140.6666667     0.9
>>>>>
>>>>>
>>>>> On Wednesday, October 18, 2023 at 3:35:05 AM UTC+3 Mks Mk wrote:
>>>>>
>>>>>> Hi Gary
>>>>>>
>>>>>> it all started here
>>>>>> https://groups.google.com/g/weewx-user/c/ltOVkcY1fKc/m/7sQSVGN_AQAJ
>>>>>>
>>>>>> we were using fixed value for the incoming grid line to calculate the 
>>>>>> consumption but it was not accurate enough so we added new sensor to 
>>>>>> read 
>>>>>> the grid incoming line voltage.
>>>>>> earlier this formula worked consumption = ampere * 117 / 1000 * 0.88
>>>>>> but  consumption = ampere * linevoltage / 1000 * 0.88 did not work
>>>>>> the linevoltage input comes from different sensor than ampere,  
>>>>>> these two reading are generated in different loops, so based on Tom 
>>>>>> advice 
>>>>>> the weewx correction will not work
>>>>>> thank you
>>>>>>
>>>>>> On Wednesday, October 18, 2023 at 1:28:55 AM UTC+3 gjr80 wrote:
>>>>>>
>>>>>>> So what does
>>>>>>>
>>>>>>> consumption = ((ampere * linevoltage) /1000) * 0.88
>>>>>>>
>>>>>>> do?
>>>>>>>
>>>>>>> Gary
>>>>>>> On Wednesday, 18 October 2023 at 08:26:25 UTC+10 [email protected] 
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Tom
>>>>>>>>
>>>>>>>> we run weewx directly and found that 'ampere' & 'linevoltage' are 
>>>>>>>> in different loop because the data are coming from two different 
>>>>>>>> sensors by 
>>>>>>>> sdr.py driver.
>>>>>>>> how we can combine these loops into one so weewx can process this 
>>>>>>>> formula, or what can we do to get this calculation done.?
>>>>>>>>
>>>>>>>> Thank you for your support
>>>>>>>>
>>>>>>>> On Tuesday, October 17, 2023 at 9:26:38 PM UTC+3 Tom Keffer wrote:
>>>>>>>>
>>>>>>>>> The only symbols that can be used in the [[Corrections]] formula 
>>>>>>>>> are other types in the archive record. So unless 'ampere', 
>>>>>>>>> 'linevoltage', 
>>>>>>>>> and 'pf' all appear in the record, the correction will not work.
>>>>>>>>>
>>>>>>>>> On Tue, Oct 17, 2023 at 9:48 AM Mks Mk <[email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> we want to improve the accuracy of our home energy monitor and we 
>>>>>>>>>> added new sensor to read the main line voltage so we got two sensors 
>>>>>>>>>> and 
>>>>>>>>>> the data is logged in weewx database.
>>>>>>>>>>
>>>>>>>>>>     [[sensor_map]]
>>>>>>>>>>
>>>>>>>>>>         ampere = current.***.EfPacket
>>>>>>>>>>         linevoltage = payload5.*****.RadioHeadASKPacket
>>>>>>>>>>
>>>>>>>>>> the database have these columns which we created
>>>>>>>>>>
>>>>>>>>>> consumption
>>>>>>>>>> ampere
>>>>>>>>>> linevoltage
>>>>>>>>>> pf
>>>>>>>>>>
>>>>>>>>>> we want to calculate the energy consumption so we added this 
>>>>>>>>>> correction 
>>>>>>>>>>
>>>>>>>>>> [StdCalibrate] 
>>>>>>>>>>
>>>>>>>>>>     [[Corrections]]
>>>>>>>>>>         # For each type, an arbitrary calibration expression can 
>>>>>>>>>> be given.
>>>>>>>>>>         # It should be in the units defined in the StdConvert 
>>>>>>>>>> section.
>>>>>>>>>>         # Example:
>>>>>>>>>>         foo = foo + 0.2
>>>>>>>>>> pf = 0.88
>>>>>>>>>>         consumption = ((ampere * linevoltage) /1000) * pf
>>>>>>>>>>
>>>>>>>>>> unfortunately weewx did nothing nor it complained about it. can 
>>>>>>>>>> weewx process such formula?
>>>>>>>>>>
>>>>>>>>>> thanks
>>>>>>>>>>
>>>>>>>>>> -- 
>>>>>>>>>> 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/26effb7c-ad33-4de8-a9a0-f1390012ec5an%40googlegroups.com
>>>>>>>>>>  
>>>>>>>>>> <https://groups.google.com/d/msgid/weewx-user/26effb7c-ad33-4de8-a9a0-f1390012ec5an%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>> .
>>>>>>>>>>
>>>>>>>>> -- 
>>>>> 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/fa342793-222a-4773-9bde-5bf97cf88dddn%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/weewx-user/fa342793-222a-4773-9bde-5bf97cf88dddn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>

-- 
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/e18b2804-14b7-4c23-b7da-8af44ea9e7d7n%40googlegroups.com.

Reply via email to