I recently replaced my weather station with a TFA Dostmann Weatherhub 
station only to discover that the driver situation was suboptimal. The 
tfrec driver was an option, but apparently the implementation of the 
weatherhub packet data format was different/not supported/incompatible.

But there is a nice API which provides access to the latest measurements (
https://mobile-alerts.eu/info/public_server_api_documentation.pdf). So I 
started writing a driver inspired by the ambientweather-api driver by Karl 
Moos.

As only the latest measurements are available in the API, my idea was to 
let the driver only generate LOOP packets, going through a loop of polling 
the API, processing, generating LOOP packets, sleeping and starting all 
over. Weewx should then generate the necessary archive packets.

The API allows polling data once per minute, but sensors are updated less 
frequently. My first implementation generated partial LOOP packets only 
containing sensors updated since last polling. It turned out to be less 
optimal as the software archive record generation apparently don’t like 
“averaging” over a sequence of partial LOOP packets, so NONE values for 
temperatures, barometer stc end up in the archive database:

MariaDB [weewx]> select dateTime,barometer,inTemp,outTemp,rain,extraTemp1 
from archive order by dateTime desc limit 20;

+------------+--------------------+--------------------+---------------------+------+-------------------+

| dateTime   | barometer          | inTemp             | 
outTemp             | rain | extraTemp1        |

+------------+--------------------+--------------------+---------------------+------+-------------------+

| 1643837100 | 1014.2999999999998 | 21.899999999999995 |                  
-1 | NULL |               5.5 |

| 1643836800 |             1014.3 |               21.9 |                
-1.2 | NULL |               5.6 |

| 1643836200 | 1014.2000000000002 | 21.899999999999995 | 
-1.3999999999999997 | NULL | 5.599999999999999 |

| 1643835900 | 1014.2000000000002 | 21.899999999999995 | 
-1.6000000000000003 | NULL | 5.599999999999999 |

| 1643835600 |             1014.2 |               21.9 |                
-1.6 | NULL |               5.6 |

| 1643835000 |             1014.2 |               21.9 |                
NULL | NULL |              NULL |

| 1643834700 |             1014.1 |               21.9 |                
-1.7 | NULL |               5.7 |

| 1643834400 |             1014.2 |               21.9 |                
-1.8 | NULL |               5.8 |

| 1643834100 |             1014.1 |                 22 |                
-1.8 | NULL |               5.8 |

| 1643833800 |               NULL |               NULL |                
-1.8 | NULL |               5.8 |

| 1643833500 |             1014.2 |                 22 |                
-1.8 | NULL |               5.8 |

| 1643833200 |             1014.2 |               21.9 |        
        -1.9 | NULL |               5.9 |

| 1643832900 |             1014.1 |                 22 |                
NULL | NULL |              NULL |  

Question 1: What would be the most appropriate solution: To let the LOOP 
packets also include “older”, non-updated observations already submitted in 
a previous LOOP packet? Or to lower the period of LOOP packets generation 
to increase the probability of all sensors have reported back between loop 
packets?

-----------------

I’ve been unable to make the windspeed and windgust observations work. When 
I enable them I get this error from weewx:

Feb  2 22:14:56 hjernen weewx[4163320] INFO weewx.engine: Starting main 
packet loop.

Feb  2 22:14:56 hjernen weewx[4163320] DEBUG user.mobilealerts: calling: 
genLoopPackets

Feb  2 22:14:56 hjernen weewx[4163320] DEBUG urllib3.connectionpool: 
Starting new HTTPS connection (1): www.data199.com:443

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG urllib3.connectionpool: 
https://www.data199.com:443 "POST /api/pv1/device/lastmeasurement HTTP/1.1" 
200 398

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Init API 
call returned

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: API 
response passed initial tests

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
030A7AB85B1D last seen on 2022-02-02 22:11:43

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: extraTemp1 = 5.6

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: extraHumid1 = 68.0

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
183391FAA6CA last seen on 2022-02-02 22:12:12

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: inTemp = 21.9

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: inHumidity = 48.0

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: barometer = 1014.1

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
0B70310CE043 last seen on 2022-02-02 22:13:04

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: windSpeed = 0.1

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: windDir = 10

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
030A731F05FD last seen on 2022-02-02 22:11:18

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: outTemp = -1.2

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
sensor value: outHumidity = 95.0

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG user.mobilealerts: Found 
0823ED826F59 last seen on 2022-02-02 21:46:52

Feb  2 22:14:57 hjernen weewx[4163320] INFO user.mobilealerts: Yielding 
this packet to weewx: {'dateTime': 1643836497, 'usUnits': 17, 'extraTemp1': 
5.6, 'extraHumid1': 68.0, 'inTemp': 21.9, 'inHumidity': 48.0, 'barometer': 
1014.1, 'windSpeed': '0.1', 'windDir': 225.0, 'outTemp': -1.2, 
'outHumidity': 95.0}

Feb  2 22:14:57 hjernen weewx[4163320] INFO weewx.engine: Main loop 
exiting. Shutting engine down.

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG weewx.restx: Shut down MQTT 
thread.

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG weewx.restx: Shut down 
Wunderground-PWS thread.

Feb  2 22:14:57 hjernen weewx[4163320] DEBUG weewx.restx: Shut down 
StationRegistry thread.

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__: Caught 
unrecoverable exception:

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****  can't 
multiply sequence by non-int of type 'float'

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****  
Traceback (most recent call last):

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewxd", line 157, in main

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
engine.run()

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/engine.py", line 210, in run

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
self.dispatchEvent(weewx.Event(weewx.NEW_LOOP_PACKET, packet=packet))

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/engine.py", line 245, in dispatchEvent

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
callback(event)

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/engine.py", line 363, in new_loop_packet

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
converted_packet = self.converter.convertDict(event.packet)

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/units.py", line 1040, in convertDict

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
target_dict[obs_type] = self.convert(as_value_tuple(obs_dict, obs_type))[0]

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/units.py", line 1007, in convert

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
new_val_t = convert(val_t, new_unit_type)

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/units.py", line 1563, in convert

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
new_val = conversion_func(val_t[0]) if val_t[0] is not None else None

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****    File 
"/usr/share/weewx/weewx/units.py", line 417, in <lambda>

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****      
'km_per_hour'      : lambda x : x * 3.6},

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****  
TypeError: can't multiply sequence by non-int of type 'float'

Feb  2 22:14:57 hjernen weewx[4163320] CRITICAL __main__:     ****  Exiting.

 

Question 2: What am I doing wrong?

 

Thank you for any assistance,

Anders

 

-- 
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/9a3f557f-81b5-4b33-b807-fe820394b02bn%40googlegroups.com.

Reply via email to