Hello.
I have under the Version 3.9.2 this Problem:
Jul 16 17:04:44 Wetter systemd[1]: Starting LSB: weewx weather system...
Jul 16 17:05:15 Wetter weewx[3751]: engine: Initializing weewx version 3.9.2
Jul 16 17:05:15 Wetter weewx[3751]: engine: Using Python 2.7.16 (default,
Oct 10 2019, 22:02:15) #012[GCC 8.3.0]
Jul 16 17:05:15 Wetter weewx[3751]: engine: Platform
Linux-5.4.72-v7+-armv7l-with-debian-10.6
Jul 16 17:05:15 Wetter weewx[3751]: engine: Locale is 'de_CH.UTF-8'
Jul 16 17:05:15 Wetter weewx[3751]: engine: pid file is /var/run/weewx.pid
Jul 16 17:05:15 Wetter weewx[3677]: Starting weewx weather system: weewx.
Jul 16 17:05:15 Wetter systemd[1]: Started LSB: weewx weather system.
Jul 16 17:05:15 Wetter weewx[3755]: engine: Using configuration file
/etc/weewx/weewx.conf
Jul 16 17:05:15 Wetter weewx[3755]: engine: Debug is 1
Jul 16 17:05:15 Wetter weewx[3755]: engine: Initializing engine
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading station type Vantage
(weewx.drivers.vantage)
Jul 16 17:05:15 Wetter weewx[3755]: vantage: Driver version is 3.1.1
Jul 16 17:05:15 Wetter weewx[3755]: vantage: Opened up serial port
/dev/ttyUSB0; baud 19200; timeout 4.00
Jul 16 17:05:15 Wetter weewx[3755]: vantage: Gentle wake up of console
successful
Jul 16 17:05:15 Wetter weewx[3755]: vantage: Hardware type is 16
Jul 16 17:05:15 Wetter weewx[3755]: vantage: ISS ID is 1
Jul 16 17:05:15 Wetter weewx[3755]: vantage: Hardware name: Vantage Pro2
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
weewx.engine.StdTimeSynch
Jul 16 17:05:15 Wetter weewx[3755]: engine: Finished loading service
weewx.engine.StdTimeSynch
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
user.cputemp.AddCpuTemp
Jul 16 17:05:15 Wetter weewx[3755]: engine: Finished loading service
user.cputemp.AddCpuTemp
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
weewx.engine.StdConvert
Jul 16 17:05:15 Wetter weewx[3755]: engine: StdConvert target unit is 0x1
Jul 16 17:05:15 Wetter weewx[3755]: engine: Finished loading service
weewx.engine.StdConvert
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
weewx.engine.StdCalibrate
Jul 16 17:05:15 Wetter weewx[3755]: engine: Finished loading service
weewx.engine.StdCalibrate
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
weewx.engine.StdQC
Jul 16 17:05:15 Wetter weewx[3755]: engine: Finished loading service
weewx.engine.StdQC
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
weewx.wxservices.StdWXCalculate
Jul 16 17:05:15 Wetter weewx[3755]: wxcalculate: The following values will
be calculated: barometer=prefer_hardware, windchill=prefer_hardware,
dewpoint=prefer_hardware, appTemp=prefer_hardware,
rainRate=prefer_hardware, windrun=prefer_hardware,
heatindex=prefer_hardware, maxSolarRad=prefer_hardware,
humidex=prefer_hardware, pressure=prefer_hardware,
inDewpoint=prefer_hardware, ET=prefer_hardware, altimeter=prefer_hardware,
cloudbase=prefer_hardware
Jul 16 17:05:15 Wetter weewx[3755]: wxcalculate: The following algorithms
will be used for calculations: altimeter=aaNOAA, maxSolarRad=RS
Jul 16 17:05:15 Wetter weewx[3755]: engine: Finished loading service
weewx.wxservices.StdWXCalculate
Jul 16 17:05:15 Wetter weewx[3755]: engine: Loading service
user.radiationhours.RadiationHours
Jul 16 17:05:15 Wetter weewx[3755]: engine: Caught unrecoverable exception
in engine:
Jul 16 17:05:15 Wetter weewx[3755]: **** Module 'user.radiationhours'
has no attribute 'RadiationHours' when searching for
'user.radiationhours.RadiationHours'
Jul 16 17:05:15 Wetter weewx[3755]: **** Traceback (most recent call
last):
Jul 16 17:05:15 Wetter weewx[3755]: **** File
"/usr/share/weewx/weewx/engine.py", line 888, in main
Jul 16 17:05:15 Wetter weewx[3755]: **** engine =
engine_class(config_dict)
Jul 16 17:05:15 Wetter weewx[3755]: **** File
"/usr/share/weewx/weewx/engine.py", line 78, in __init__
Jul 16 17:05:15 Wetter weewx[3755]: ****
self.loadServices(config_dict)
Jul 16 17:05:15 Wetter weewx[3755]: **** File
"/usr/share/weewx/weewx/engine.py", line 142, in loadServices
Jul 16 17:05:15 Wetter weewx[3755]: ****
self.service_obj.append(weeutil.weeutil._get_object(svc)(self,
config_dict))
Jul 16 17:05:15 Wetter weewx[3755]: **** File
"/usr/share/weewx/weeutil/weeutil.py", line 1116, in _get_object
Jul 16 17:05:15 Wetter weewx[3755]: **** "Module '%s' has no
attribute '%s' when searching for '%s'" % (mod.__name__, part,
module_class))
Jul 16 17:05:15 Wetter weewx[3755]: **** AttributeError: Module
'user.radiationhours' has no attribute 'RadiationHours' when searching for
'user.radiationhours.RadiationHours'
Jul 16 17:05:15 Wetter weewx[3755]: **** Exiting.
Can you Help me?
Many Thanks
Peter Fletcher schrieb am Samstag, 16. Juli 2022 um 17:01:34 UTC+2:
> The code I am using is pasted below. The main threshold calculation is a
> copy of the original Meto-France code used by Jacques, but the calculation
> is only done when the radiation value changes or (approximately) every
> minute, if it has not changed. Also included is code to store Davis’s
> ‘Storm Rain’ value in the archive database. The stored value for sunshine
> time has more apparent precision than is given by Jacques's code, but it is
> probably neither more nor less accurate, since its accuracy is limited by
> the relatively slow 'response' of the Davis sensor.import syslog
> from math import sin,cos,pi,asin
>
>
> from datetime import datetime
> import time
>
> import weewx
> from weewx.wxengine import StdService
>
> import weewx.units
> weewx.units.obs_group_dict['sunshine_time'] = 'group_sunshine'
> weewx.units.USUnits['group_sunshine'] = 'minute'
> weewx.units.MetricUnits['group_sunshine'] = 'minute'
> weewx.units.MetricWXUnits['group_sunshine'] = 'minute'
> weewx.units.default_unit_format_dict['minute'] = '%.0f'
> weewx.units.default_unit_label_dict['minute'] = 'min'
>
> weewx.units.obs_group_dict['stormRain'] = 'group_rain'
>
> packet_count = 0
> avg_radiation = 0
> last_radiation = 0
> last_calc_time = 0
> cum_sunshine = 0
> cum_time = 0
> last_stormRain = 0
>
> class LoopSunshineDuration(StdService):
> def __init__(self, engine, config_dict):
> super(LoopSunshineDuration, self).__init__(engine, config_dict)
> self.bind(weewx.NEW_LOOP_PACKET,self.newLoopRecord)
>
> def newLoopRecord(self, event):
> global packet_count, last_radiation, cum_sunshine, cum_time,
> last_calc_time, last_stormRain
> # The VP 2 radiation value normally only changes ~ every 50
> seconds (or multiple thereof)
> pkt_radiation = event.packet.get('radiation')
> last_stormRain = event.packet.get('stormRain')
> if (pkt_radiation is None) or (pkt_radiation<=0):
> pass
> elif (packet_count < 29) and (pkt_radiation == last_radiation):
> packet_count += 1
> else:
> radiation = last_radiation
> last_radiation = pkt_radiation
> packet_count = 0
> timestamp = event.packet.get('dateTime')
> # Process the last value
> duration = timestamp - last_calc_time
> last_calc_time = timestamp
> seuil = 0
> coeff = 0.9
> if radiation > 0:
> utcdate =
> datetime.utcfromtimestamp(event.packet.get('dateTime'))
> dayofyear =
> int(time.strftime("%j",time.gmtime(event.packet.get('dateTime'))))
>
>
> theta = 360 * dayofyear / 365
> equatemps = 0.0172 + 0.4281 * cos((pi / 180) * theta) -
> 7.3515 * sin(
> (pi / 180) * theta) - 3.3495 * cos(2 * (pi / 180) *
> theta) - 9.3619 * sin(
> 2 * (pi / 180) * theta)
>
> latitude= float(self.config_dict["Station"]["latitude"])
> longitude = float(self.config_dict["Station"]["longitude"])
>
>
> corrtemps = longitude * 4
> declinaison = asin(0.006918 - 0.399912 * cos((pi / 180) *
> theta) + 0.070257 * sin(
> (pi / 180) * theta) - 0.006758 * cos(2 * (pi / 180) *
> theta) + 0.000908 * sin(
> 2 * (pi / 180) * theta)) * (180 / pi)
>
> minutesjour = utcdate.hour*60 + utcdate.minute
>
>
> tempsolaire = (minutesjour + corrtemps + equatemps) / 60
> angle_horaire = (tempsolaire - 12) * 15
> hauteur_soleil = asin(sin((pi / 180) * latitude) * sin((pi
> / 180) * declinaison) + cos(
> (pi / 180) * latitude) * cos((pi / 180) * declinaison)
> * cos((pi / 180) * angle_horaire)) * (180 / pi)
>
> if hauteur_soleil > 3:
> seuil = (0.73 + 0.06 * cos((pi / 180) * 360 *
> dayofyear / 365)) *1080 * pow((sin(pi / 180) * hauteur_soleil), 1.25) *
> coeff
> if radiation > seuil:
> cum_sunshine += duration
> cum_time += duration
>
> class ArchSunshineDuration(StdService):
> def __init__(self, engine, config_dict):
> super(ArchSunshineDuration, self).__init__(engine, config_dict)
>
> # Start intercepting events:
> self.bind(weewx.NEW_ARCHIVE_RECORD, self.newArchiveRecord)
>
> def newArchiveRecord(self, event):
> global cum_sunshine, cum_time, last_stormRain
> event.record['stormRain'] = last_stormRain
> # for various reasons cum_sunshine does not necessarily contain
> exactly <archive interval> seconds of data
> if cum_time > 0: # do not divide by zero!
> event.record['sunshine_time'] = cum_sunshine / cum_time *
> event.record['interval'] # converted to minutes of sunshine
> else:
> event.record['sunshine_time'] = 0
> cum_sunshine = 0
> cum_time = 0
>
> syslog.syslog(syslog.LOG_DEBUG, "Calculated sunshine_time = %f" %
> event.record['sunshine_time'])
>
> On Saturday, July 16, 2022 at 6:18:05 AM UTC-4 Meteo Oberwallis wrote:
>
>> Hello, everyone.
>> I eagerly await your experiences. It's very interesting what you can do.
>> Now I wanted to ask you if there is already a finished code that you can
>> use? Did I understand correctly that with these calculations you can
>> measure the hours of sunshine by minutes and not just by the interval of
>> the data logger?
>> Can you use it to fill up past values? So e.g. from the year 2019 or
>> something?
>>
>> Best regards
>> Stefan
>>
>> Peter Fletcher schrieb am Freitag, 1. Juli 2022 um 19:37:54 UTC+2:
>>
>>> I'm sure you are right about the triggering circumstances. The code in
>>> my weewx User routines was correct (using the Meteo France limit), but I
>>> had put in some modifications around the hauteur_soleil test in connection
>>> with the method I am using to average and 'normalize' the observations for
>>> the archive reports. I suspect that, in taking out those modifications for
>>> the archive update code, I inadvertently also removed the original test.
>>>
>>> On Friday, July 1, 2022 at 10:47:43 AM UTC-4 [email protected] wrote:
>>>
>>>> OK.
>>>> The variable "hauteur_soleil is the elevation of the sun, in degree.
>>>> From sunset to sunrise, this value will be negative (i.e. sun below the
>>>> horizon).
>>>> The formula developed by Metro France was validated to be effective
>>>> only if sun elevation is > 3°.
>>>>
>>>> In my own implantation of this algorithm, I decided to start the
>>>> calculation of the sun threshold as soon as the sun elevation was > 0°
>>>> *and* that the global radiation as measured by the Davis pyranometer
>>>> was greeter than 20 W/m2.
>>>>
>>>> I suspect that the few dateTime that trigger your errors were in a
>>>> situation in which sun elevation was just below zero and that the measured
>>>> radiation was just higher than 20 W/m2
>>>>
>>>> Le 1 juil. 2022 à 16:19, 'Peter Fletcher' via weewx-user <
>>>> [email protected]> a écrit :
>>>>
>>>> Something like that is obviously needed. I don't know how my copy of
>>>> the code omitted the test for hauteur_soleil being > 0. There are a number
>>>> of sources from which I may have copied it, and I didn't keep links to all
>>>> of them, but I can't imagine why I would have deleted the test if my
>>>> source
>>>> had included it. I will obviously add it to my working code.
>>>>
>>>> On Friday, July 1, 2022 at 2:45:42 AM UTC-4 [email protected] wrote:
>>>>
>>>>> OK. What I don't understand is that my code had always a test
>>>>>
>>>>> if hauteur_soleil > 3: (according to Météo France)
>>>>>
>>>>> or more recently
>>>>>
>>>>> if hauteur_soleil > 0:
>>>>>
>>>>> in the function, and this test is not on your function.
>>>>>
>>>>> It should be :
>>>>>
>>>>> hauteur_soleil = asin(sin((pi / 180) * latitude) * sin((pi / 180) *
>>>>> declinaison) + cos(
>>>>> (pi / 180) * latitude) * cos((pi / 180) * declinaison) *
>>>>> cos((pi / 180) * angle_horaire)) * (180 / pi)
>>>>> If hauteur_soleil > 0:
>>>>>
>>>>> seuil = (0.73 + 0.06 * cos((pi / 180) * 360 * dayofyear / 365)) *
>>>>> 1080 * pow(
>>>>> (sin(pi / 180) * hauteur_soleil), 1.25) * coeff
>>>>> else :
>>>>> seuil = 0
>>>>> return seuil
>>>>>
>>>>> Le 30 juin 2022 à 22:52, 'Peter Fletcher' via weewx-user <
>>>>> [email protected]> a écrit :
>>>>>
>>>>> That was going to be my next step! In fact, iterating through a list
>>>>> of the dateTime values that produce the errors in the real code and
>>>>> passing
>>>>> each value to the function confirms that it is the specific dateTime
>>>>> values
>>>>> that are causing the function to misbehave. The returned results are all
>>>>> complex numbers with negative and numerically identical (for a given
>>>>> dateTime) real and imaginary components. It does seem to be a bug in the
>>>>> function. I assume that hauteur_soleil should always be >=0. It appears
>>>>> that, for my latitude and longitude and for the given specific values of
>>>>> dateTime, it becomes negative. The last step in the calculation then
>>>>> involves raising a negative number to a non-integral power, which is
>>>>> guaranteed to produce interesting results! The really odd thing is that
>>>>> math.pow is not returning a ValueError, which the docs say is what should
>>>>> happen under these circumstances, but apparently trying to return a
>>>>> (possibly) valid complex result.
>>>>> On Thursday, June 30, 2022 at 3:07:38 PM UTC-4 [email protected]
>>>>> wrote:
>>>>>
>>>>>> The only clue I have is that the problem is not due to an
>>>>>> « overloading » of your raspberry pi, but seems to occur with specific
>>>>>> dateTime values.
>>>>>> You can try to run your script only with a « bad » dateTime :
>>>>>>
>>>>>> "SELECT dateTime, Radiation from archive where dateTime = 1592614500 »
>>>>>>
>>>>>> Does the error occurs ? If yes, you can try to add debugging print
>>>>>> commands inside the sunshineThreshold function to try to understand.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Le 30 juin 2022 à 19:51, 'Peter Fletcher' via weewx-user <weewx...@
>>>>>> googlegroups.com> a écrit :
>>>>>>
>>>>>> It did as it seems you predicted - passed 1592614800 and stopped at
>>>>>> 1632611100. You obviously have a clue as to what is going on. Please
>>>>>> explain!
>>>>>>
>>>>>> On Thursday, June 30, 2022 at 8:59:48 AM UTC-4 [email protected]
>>>>>> wrote:
>>>>>>
>>>>>>> If you exclude the first one,1592614500 , with a query like "SELECT
>>>>>>> dateTime, Radiation from archive where dateTime <> 1592614500", will
>>>>>>> the
>>>>>>> script stop at 1592614800 ( the next dateTime) or will it continue and
>>>>>>> stop
>>>>>>> at 1632611100 ?
>>>>>>>
>>>>>>> Le 30 juin 2022 à 14:34, 'Peter Fletcher' via weewx-user <weewx...@
>>>>>>> googlegroups.com> a écrit :
>>>>>>>
>>>>>>> 1592614500
>>>>>>> 1632611100
>>>>>>> 1632611400
>>>>>>> 1647688800
>>>>>>>
>>>>>>> I can't see a pattern or any common features.
>>>>>>>
>>>>>>> On Thursday, June 30, 2022 at 3:55:49 AM UTC-4 [email protected]
>>>>>>> wrote:
>>>>>>>
>>>>>>>> No, I never had weewx crashes related to the sunshine
>>>>>>>> calculations.
>>>>>>>>
>>>>>>>> What are the dateTime values that trigger the error ?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Le mercredi 29 juin 2022 à 23:23:16 UTC+2, Peter Fletcher a écrit :
>>>>>>>>
>>>>>>>>> Have you had any odd weewx errors or crashes related to the
>>>>>>>>> sunshine calculations? I ask because I hadn't, but I decided to try
>>>>>>>>> to
>>>>>>>>> 'backfill' my database with sunshine times, based on the 5-minute
>>>>>>>>> radiation
>>>>>>>>> values, and I ran into a bizarre bug. I used the code shown below (on
>>>>>>>>> a
>>>>>>>>> copy of my live weewx database). As you will see, the threshold
>>>>>>>>> calculation
>>>>>>>>> code is essentially identical to yours, except that it has been
>>>>>>>>> converted
>>>>>>>>> to a regular function (no 'self' parameter) and my station's latitude
>>>>>>>>> and
>>>>>>>>> longitude are hard coded in it. When the code is run under Python
>>>>>>>>> 3.9.2 on
>>>>>>>>> my Pi, it initially runs without problems, but crashes after 8,000+
>>>>>>>>> records
>>>>>>>>> have been processed with a ValueError on the MaxThreshold vs
>>>>>>>>> threshold
>>>>>>>>> comparison, reporting that it can't compare a complex with a float!
>>>>>>>>> If I
>>>>>>>>> intercept and log the errors, it turns out that, for a few specific
>>>>>>>>> values
>>>>>>>>> of dateTime, the function returns a complex number! Even more
>>>>>>>>> bizarrely, it
>>>>>>>>> only seems to do that in the context of the running code. If I
>>>>>>>>> manually run
>>>>>>>>> through all the operations from the function code at the Python
>>>>>>>>> command
>>>>>>>>> line, using the value of dateTime that produces the first crash, all
>>>>>>>>> the
>>>>>>>>> intermediate results and the final result are sane floats.
>>>>>>>>> There appears to be a second issue, possibly related to my reading
>>>>>>>>> and writing the database at relatively high frequency, which stalls
>>>>>>>>> the
>>>>>>>>> process after about 18,000 records have been processed, but removing
>>>>>>>>> the
>>>>>>>>> database writes allows it to run to completion without abolishing the
>>>>>>>>> consistent, albeit infrequent, ValueErrors.
>>>>>>>>>
>>>>>>>>> [backfill.py]
>>>>>>>>> import sqlite3
>>>>>>>>> from datetime import datetime
>>>>>>>>> import time
>>>>>>>>> from math import sin, cos, pi, asin
>>>>>>>>>
>>>>>>>>> def sunshineThreshold(mydatetime):
>>>>>>>>> coeff = 0.9 # change to calibrate with your sensor
>>>>>>>>> utcdate = datetime.utcfromtimestamp(mydatetime)
>>>>>>>>> dayofyear = int(time.strftime("%j", time.gmtime(mydatetime)))
>>>>>>>>> theta = 360 * dayofyear / 365
>>>>>>>>> equatemps = 0.0172 + 0.4281 * cos((pi / 180) * theta) -
>>>>>>>>> 7.3515 * sin(
>>>>>>>>> (pi / 180) * theta) - 3.3495 * cos(2 * (pi / 180) *
>>>>>>>>> theta) - 9.3619 * sin(
>>>>>>>>> 2 * (pi / 180) * theta)
>>>>>>>>>
>>>>>>>>> latitude = 43.0346213
>>>>>>>>> longitude = -78.689362
>>>>>>>>>
>>>>>>>>> corrtemps = longitude * 4
>>>>>>>>> declinaison = asin(0.006918 - 0.399912 * cos((pi / 180) *
>>>>>>>>> theta) + 0.070257 * sin(
>>>>>>>>> (pi / 180) * theta) - 0.006758 * cos(2 * (pi / 180) *
>>>>>>>>> theta) + 0.000908 * sin(
>>>>>>>>> 2 * (pi / 180) * theta)) * (180 / pi)
>>>>>>>>> minutesjour = utcdate.hour * 60 + utcdate.minute
>>>>>>>>> tempsolaire = (minutesjour + corrtemps + equatemps) / 60
>>>>>>>>> angle_horaire = (tempsolaire - 12) * 15
>>>>>>>>> hauteur_soleil = asin(sin((pi / 180) * latitude) * sin((pi /
>>>>>>>>> 180) * declinaison) + cos(
>>>>>>>>> (pi / 180) * latitude) * cos((pi / 180) * declinaison) *
>>>>>>>>> cos((pi / 180) * angle_horaire)) * (180 / pi)
>>>>>>>>> seuil = (0.73 + 0.06 * cos((pi / 180) * 360 * dayofyear /
>>>>>>>>> 365)) * 1080 * pow(
>>>>>>>>> (sin(pi / 180) * hauteur_soleil), 1.25) * coeff
>>>>>>>>> return seuil
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> database = 'weewx.sdb'
>>>>>>>>>
>>>>>>>>> maxThreshold=0
>>>>>>>>> count=0
>>>>>>>>> conn=sqlite3.connect(database)
>>>>>>>>> cur=conn.execute("SELECT dateTime, Radiation from archive")
>>>>>>>>> for row in cur:
>>>>>>>>> count += 1
>>>>>>>>> if (row[1] is not None) and (row[1] > 20):
>>>>>>>>> threshold = sunshineThreshold(row[0])
>>>>>>>>> if threshold > maxThreshold:
>>>>>>>>> maxThreshold = threshold
>>>>>>>>> if row[1] > threshold:
>>>>>>>>> conn.execute("UPDATE archive set SunshineTime = 5 WHERE
>>>>>>>>> dateTime = " + str(row[0]))
>>>>>>>>> if count % 1000 == 0:
>>>>>>>>> print(count, 'Max Threshold', maxThreshold)
>>>>>>>>> conn.close
>>>>>>>>> [/backfill.py]
>>>>>>>>>
>>>>>>>>> On Friday, June 10, 2022 at 3:29:40 AM UTC-4 [email protected]
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> On my side, I have looked at the CPU utilization on my raspberry
>>>>>>>>>> Pi 3B+. I have the mqtt service service installed, so at each loop
>>>>>>>>>> all
>>>>>>>>>> data of the packet are sent to the mqtt broker.
>>>>>>>>>>
>>>>>>>>>> With mqtt and when calculations of the sunshine threshold is done
>>>>>>>>>> for each loop packet, the total CPU utilization of python3 is about
>>>>>>>>>> 0.75%
>>>>>>>>>> With mqtt and without calculation of sunshine threshold : 0.5% of
>>>>>>>>>> total CPU.
>>>>>>>>>>
>>>>>>>>>> So one can estimate that 0.25 % of total CPU is needed for the
>>>>>>>>>> calculation of the threshold value for each LOOP packet.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Le 9 juin 2022 à 22:26, 'Peter Fletcher' via weewx-user <
>>>>>>>>>> [email protected]> a écrit :
>>>>>>>>>>
>>>>>>>>>> After some experimentation, I found that the radiation value in
>>>>>>>>>> the VP2 LOOP packets does, indeed, normally change every 50-52
>>>>>>>>>> seconds,
>>>>>>>>>> but, perhaps about a fifth of the 'gaps' are a *multiple* of
>>>>>>>>>> that time - most often 100+ or 150+ seconds, but occasionally more
>>>>>>>>>> than
>>>>>>>>>> that (I saw one 250+ second 'gap'). I saw this under conditions of
>>>>>>>>>> variable
>>>>>>>>>> sunshine and clouds when it seemed unlikely that the actual
>>>>>>>>>> radiation value
>>>>>>>>>> would have been precisely constant for that length of time, so I am
>>>>>>>>>> not
>>>>>>>>>> sure exactly what is going on. In any event, I am revising the code
>>>>>>>>>> I am
>>>>>>>>>> using on the basis of doing the threshold calculation when the
>>>>>>>>>> radiation
>>>>>>>>>> level changes, but at least every minute, if it remains constant for
>>>>>>>>>> more
>>>>>>>>>> than the normal 50-52 seconds..
>>>>>>>>>>
>>>>>>>>>> On Sunday, June 5, 2022 at 12:33:47 PM UTC-4 [email protected]
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> I think it is also OK to do an average for every 30 seconds. It
>>>>>>>>>>> depends also on the weather station used.
>>>>>>>>>>> For instance, a Davis Vantage Pro 2 ISS transmits an
>>>>>>>>>>> updated solar radiation value every 50 to 60 seconds. So with this
>>>>>>>>>>> weather
>>>>>>>>>>> station, even a 1 minute average would not be very different since
>>>>>>>>>>> anyway
>>>>>>>>>>> the solar radiation values of the LOOP packet are the same for at
>>>>>>>>>>> least 50
>>>>>>>>>>> seconds.!
>>>>>>>>>>>
>>>>>>>>>>> Le 5 juin 2022 à 18:02, 'Peter Fletcher' via weewx-user <
>>>>>>>>>>> [email protected]> a écrit :
>>>>>>>>>>>
>>>>>>>>>>> I chose to average the LOOP radiation readings and only to do
>>>>>>>>>>> the threshold calculation and make the sun/no sun determination
>>>>>>>>>>> every 30
>>>>>>>>>>> seconds because I thought doing it on every LOOP might overload
>>>>>>>>>>> LOOP
>>>>>>>>>>> processing (I am running weewx on a Pi 3B, which is also doing a
>>>>>>>>>>> few other
>>>>>>>>>>> things which use the CPU). If this is an unnecessary concern, as it
>>>>>>>>>>> may
>>>>>>>>>>> very well be, your modified code is much cleaner than mine.
>>>>>>>>>>>
>>>>>>>>>>> On Saturday, June 4, 2022 at 12:41:08 PM UTC-4 jterr...@
>>>>>>>>>>> gmail.com wrote:
>>>>>>>>>>>
>>>>>>>>>>>> It is a very good idea to calculate the sunshine duration for
>>>>>>>>>>>> each LOOP packet and sum these values to make the final archive
>>>>>>>>>>>> sunshine
>>>>>>>>>>>> duration. I have modified my script accordingly :
>>>>>>>>>>>> https://github.com/Jterrettaz/sunduration.
>>>>>>>>>>>> The logic is the following : for each received LOOP packet,
>>>>>>>>>>>> the radiation is compared to a calculated threshold. If the
>>>>>>>>>>>> radiation is
>>>>>>>>>>>> above the threshold value, the sunshine time for the LOOP packet
>>>>>>>>>>>> is equal
>>>>>>>>>>>> to the time elapsed between the previous loop packet and this
>>>>>>>>>>>> packet (most
>>>>>>>>>>>> of the time 2 seconds with a Vantage Davis Pro).
>>>>>>>>>>>> The final archive sunshine duration is the sum of all the LOOP
>>>>>>>>>>>> value within the archive period.
>>>>>>>>>>>> Le vendredi 3 juin 2022 à 21:59:36 UTC+2, Peter Fletcher a
>>>>>>>>>>>> écrit :
>>>>>>>>>>>>
>>>>>>>>>>>>> That makes some sense when you are getting data from an
>>>>>>>>>>>>> 'external' sensor, though there are (IMHO) simpler ways of doing
>>>>>>>>>>>>> it. weewx
>>>>>>>>>>>>> already has access to the LOOP radiation data from the VP2, so
>>>>>>>>>>>>> handling the
>>>>>>>>>>>>> processing and data storage within weewx makes more sense to me
>>>>>>>>>>>>> in this
>>>>>>>>>>>>> case.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Friday, June 3, 2022 at 3:24:23 PM UTC-4 vince wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Friday, June 3, 2022 at 11:17:00 AM UTC-7 Meteo Oberwallis
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> if the interval of Weewx and the data logger is set to 10
>>>>>>>>>>>>>>> minutes, I would have liked to read the value of the solar
>>>>>>>>>>>>>>> sensor every
>>>>>>>>>>>>>>> minute and then write it into a separate .sdb database as
>>>>>>>>>>>>>>> possible sunshine.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Personally I'd use an external program called via cron and
>>>>>>>>>>>>>> posting a message to a MQTT topic. Have weewx subscribe to that
>>>>>>>>>>>>>> topic to
>>>>>>>>>>>>>> get the data into your db.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This is how I used to get my DS18b20 temperature sensor data
>>>>>>>>>>>>>> into weewx.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> You received this message because you are subscribed to a topic
>>>>>>>>>>> in the Google Groups "weewx-user" group.
>>>>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>>>>> https://groups.google.com/d/topic/weewx-user/19ylVTRqbh4/unsubscribe
>>>>>>>>>>> .
>>>>>>>>>>> To unsubscribe from this group and all its topics, send an email
>>>>>>>>>>> to [email protected].
>>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/d/msgid/weewx-user/0e631671-0a74-4963-9f1c-e5f81bc7c366n%40googlegroups.com
>>>>>>>>>>>
>>>>>>>>>>> <https://groups.google.com/d/msgid/weewx-user/0e631671-0a74-4963-9f1c-e5f81bc7c366n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> You received this message because you are subscribed to a topic
>>>>>>>>>> in the Google Groups "weewx-user" group.
>>>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>>>> https://groups.google.com/d/topic/weewx-user/19ylVTRqbh4/unsubscribe
>>>>>>>>>> .
>>>>>>>>>> To unsubscribe from this group and all its topics, send an email
>>>>>>>>>> to [email protected].
>>>>>>>>>>
>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>> https://groups.google.com/d/msgid/weewx-user/f0ecc86f-a615-4a24-a43f-ee0d3963b8adn%40googlegroups.com
>>>>>>>>>>
>>>>>>>>>> <https://groups.google.com/d/msgid/weewx-user/f0ecc86f-a615-4a24-a43f-ee0d3963b8adn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>> .
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to a topic in
>>>>>>> the Google Groups "weewx-user" group.
>>>>>>> To unsubscribe from this topic, visit
>>>>>>> https://groups.google.com/d/topic/weewx-user/19ylVTRqbh4/unsubscribe
>>>>>>> .
>>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>>> [email protected].
>>>>>>>
>>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/weewx-user/39cf6daa-80ca-4ffb-89d3-0f00b971481an%40googlegroups.com
>>>>>>>
>>>>>>> <https://groups.google.com/d/msgid/weewx-user/39cf6daa-80ca-4ffb-89d3-0f00b971481an%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to a topic in
>>>>>> the Google Groups "weewx-user" group.
>>>>>> To unsubscribe from this topic, visit
>>>>>> https://groups.google.com/d/topic/weewx-user/19ylVTRqbh4/unsubscribe.
>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>> [email protected].
>>>>>>
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/weewx-user/c07ed2bb-1e3d-43e2-b08c-08a7a3aa92dbn%40googlegroups.com
>>>>>>
>>>>>> <https://groups.google.com/d/msgid/weewx-user/c07ed2bb-1e3d-43e2-b08c-08a7a3aa92dbn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>>
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "weewx-user" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/weewx-user/19ylVTRqbh4/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>>
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/weewx-user/f287c1b3-1005-409c-82a9-a072e375d5e9n%40googlegroups.com
>>>>>
>>>>> <https://groups.google.com/d/msgid/weewx-user/f287c1b3-1005-409c-82a9-a072e375d5e9n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>>
>>>>>
>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "weewx-user" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/weewx-user/19ylVTRqbh4/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> [email protected].
>>>>
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/weewx-user/77cd4de6-3b1c-4bc2-9dbc-8d8316bd8a9bn%40googlegroups.com
>>>>
>>>> <https://groups.google.com/d/msgid/weewx-user/77cd4de6-3b1c-4bc2-9dbc-8d8316bd8a9bn%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/badb290a-dd5f-41d8-b0a6-1365e2734bd9n%40googlegroups.com.