Hello,
Just starting to become familiar with user defined types (XTypes), and
tried to create a new type called lowTemperature. This type compares the
temperatures outTemp and extraTemp1 and returns the lowest temperature of
the two. I modified an existing example, the original can be found here: XType
example
<https://groups.google.com/g/weewx-user/c/hp6ZvSOPM5s/m/Uo2Ym6SCBQAJ>.
My modified code in module lowest_temperature.py looks like this:
import weewx.units
import weewx.xtypes
from weewx.units import ValueTuple
class LowestTemperature(weewx.xtypes.XType):
def get_scalar(self, obs_type, record, dbmanager):
"""Determine which sensor has lowest temperature."""
if obs_type != 'lowTemperature':
raise weewx.UnknownType
try:
record_us = weewx.units.to_US(record)
if record_us['outTemp'] <= record_us['extraTemp1']:
lowTemperature = record_us['outTemp']
else:
lowTemperature = record_us['extraTemp1']
return ValueTuple(lowTemperature, "degree_F", "group_temperature")
except KeyError:
# Don't have everything we need. Raise an exception.
raise weewx.CannotCalculate(obs_type)
def get_series(self, obs_type, timespan, db_manager, aggregate_type=None,
aggregate_interval=None):
if obs_type != 'lowTemperature':
raise weewx.UnknownType
start_vec = list()
stop_vec = list()
data_vec = list()
if aggregate_type:
raise weewx.UnknownAggregation(aggregate_type)
for record in db_manager.genSql("SELECT dateTime, interval, usUnits,
outTemp, extraTemp1 FROM archive WHERE dateTime > %(start)s AND dateTime <=
%(stop)s;" % {'start': timespan[0], 'stop': timespan[1]}):
if (record[2] != 1):
raise weewx.CannotCalculate("units are not US")
start_vec.append(record[0] - record[1] * 60)
stop_vec.append(record[0])
if record[3] <= record[4]:
data_vec.append(record[3])
else:
data_vec.append(record[4])
return (ValueTuple(start_vec, 'unix_epoch', 'group_time'),
ValueTuple(stop_vec, 'unix_epoch', 'group_time'), ValueTuple(data_vec,
"degree_F", "group_temperature"))
The code in extension.py is like this:
import user.lowest_temperature
import weewx.xtypes
weewx.xtypes.xtypes.append(user.lowest_temperature.LowestTemperature())
Added this leaf to weewx.conf Generic Labels [Generic]:
lowTemperature = Lowest Temperature
Modified current.inc from Seasons skin:
<tr>
<td class="label">$obs.label.lowTemperature</td>
<td class="data">$current.lowTemperature</td>
</tr>
The get_scalar function seems to work allright. Screenhot seasons skin:
[image: Screenshot lowes temperature current conditions.png]
But when I want to show the new xtype in the chart daytempdew by adding the
leaf [[[[lowTemperature]]]] to Seasons skin.info like this:
[[[daytempdew]]]
[[[[outTemp]]]]
[[[[dewpoint]]]]
[[[[lowTemperature]]]]
I get these errors when I run weewx:
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: Caught
unrecoverable exception in generator 'weewx.imagegenerator.ImageGenerator'
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
(1064, "You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
', usUnits, outTemp, extraTemp1 FROM archive WHERE dateTime > 1599732000
AND date' at line 1")
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
Traceback (most recent call last):
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weedb/mysql.py", line 52, in guarded_fn
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
return fn(*args, **kwargs)
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weedb/mysql.py", line 262, in execute
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
self.cursor.execute(mysql_string, tuple(sql_tuple))
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 209, in
execute
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
res = self._query(query)
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 315, in
_query
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
db.query(q)
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 226, in
query
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
_mysql.connection.query(self, query)
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
MySQLdb._exceptions.ProgrammingError: (1064, "You have an error in your SQL
syntax; check the manual that corresponds to your MySQL server version for
the right syntax to use near ', usUnits, outTemp, extraTemp1 FROM archive
WHERE dateTime > 1599732000 AND date' at line 1")
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
During handling of the above exception, another exception occurred:
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
Traceback (most recent call last):
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weewx/reportengine.py", line 197, in run
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
obj.start()
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weewx/reportengine.py", line 280, in start
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
self.run()
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weewx/imagegenerator.py", line 41, in run
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
self.genImages(self.gen_ts)
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weewx/imagegenerator.py", line 176, in genImages
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
start_vec_t, stop_vec_t ,data_vec_t = weewx.xtypes.get_series(var_type,
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weewx/xtypes.py", line 85, in get_series
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
return xtype.get_series(obs_type, timespan, db_manager, aggregate_type,
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/user/lowest_temperature.py", line 31, in get_series
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
for record in db_manager.genSql("SELECT dateTime, interval, usUnits,
outTemp, extraTemp1 FROM archive WHERE dateTime > %(start)s AND dateTime <=
%(stop)s;" % {'start': timespan[0], 'stop': timespan[1]}):
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weewx/manager.py", line 437, in genSql
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
for _row in _cursor.execute(sql, sqlargs):
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
File "/home/weewx/bin/weedb/mysql.py", line 61, in guarded_fn
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
raise klass(e)
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
weedb.DatabaseError: (1064, "You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near ', usUnits, outTemp, extraTemp1 FROM archive WHERE
dateTime > 1599732000 AND date' at line 1")
Sep 11 12:35:24 NB10 weewx[86760] ERROR weewx.reportengine: ****
Generator terminated
Sep 11 12:35:24 NB10 weewx[86760] INFO weewx.reportengine: Copied 0 files
to /home/weewx/public_html
My question:
What is the error in the SQL-string? And is it just an error in the
SQL-string, maybe I am also missing/overlooking something else.
I am using WeeWX version 4.1.1
--
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/a0ff3a7e-849c-4325-9e18-94567c330e8dn%40googlegroups.com.