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.

Reply via email to