Can't make my Klimalogg PRO work with weewx

228 views
Skip to first unread message

Nenad Dragic

unread,
Nov 8, 2023, 3:02:08 PM11/8/23
to weewx-user
Hi,

I have just tried to set up my RPI up for 5 time, and still no luck.

Issues:
Is not reading from my Klimalogg PRO 30.3039.IT V11
No folder: /var/www/html/weewx

Here is what I my device info and what I am doing, step my step:

# RPI SW Info
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# PRI HW Info
processor : 0
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 1
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 2
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 3
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

Hardware : BCM2835
Revision : b03111
Serial : 100000008da7b4f3
Model : Raspberry Pi 4 Model B Rev 1.1


# Update RPI
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo apt-get autoclean

# https://weewx.com/apt/
curl -s http://weewx.com/keys.html | sudo apt-key add -
curl -s http://weewx.com/apt/weewx-python3.list | sudo tee /etc/apt/sources.list.d/weewx.list
sudo apt-get update
sudo apt-get install weewx

# https://github.com/matthewwall/weewx-klimalogg
sudo /etc/init.d/weewx stop
sudo mv /var/lib/weewx/weewx.sdb /var/lib/weewx/weewx.sdb-old
wget -O weewx-kl.zip https://github.com/matthewwall/weewx-klimalogg/archive/master.zip
sudo wee_extension --install weewx-kl.zip
sudo wee_config --reconfigure --driver=user.kl --no-prompt

# Checked this changes:
#Installing this extension will make the following changes to weewx.conf:

#Change wx_binding to kl_binding.  Klimalogg works best with its own schema,
#not the wview schema that is the default for weewx.  This requires changing
#the data binding from wx_binding to kl_binding in two places, the StdReport
#and StdArchive sections
# OK:)

#Remove the [Simulator] driver section if it exists.

#Remove the [[StandardReport]] section of [StdReport] if it exists.  The
#KlimaLogg is not a 'standard' weather station, so the graphs and reports
#in skin Standard will not work properly.
# OK:)

# Parring with Klimalogg PRO - USB
sudo /etc/init.d/weewx start

# 1. error
#
# ValueError: The device has no langid (permission issue, no string descriptors supported or device error)
# See Error below.

# Fixed:
# https://groups.google.com/g/weewx-user/c/8htXqu8AiVo/m/uMAhU3SBBAAJ
# admina@tfa:~ $ lsusb
# Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
# Bus 001 Device 003: ID 6666:5555 Prototype product Vendor ID Weather Direct Light Wireless Device
# Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
# Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# admina@tfa:~ $ ls -l /dev/bus/usb/001/003
# crw-rw-r-- 1 root root 189, 2 Nov  8 20:30 /dev/bus/usb/001/003

# admina@tfa:~ $ sudo lsof | fgrep '/dev/bus/usb'
# lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
#      Output information may be incomplete.
# lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
#      Output information may be incomplete.
# python3   2226                            root    8u      CHR              189,2       0t0        145 /dev/bus/usb/001/003
# python3   2226 2228 libusb_ev             root    8u      CHR              189,2       0t0        145 /dev/bus/usb/001/003
# python3   2226 2229 python3               root    8u      CHR              189,2       0t0        145 /dev/bus/usb/001/003

# Following this guide:
# https://github.com/weewx/weewx/wiki/Help!-Posting-to-weewx-user
# admina@tfa:~ $ sudo tail -f /var/log/syslog | tee /var/tmp/mylog
# tail: cannot open '/var/log/syslog' for reading: No such file or directory
# tail: no files remaining

Error:
admina@tfa:~ $ wee_device
Using configuration file /etc/weewx/weewx.conf
Using KlimaLogg driver version 1.4.2 (user.kl)
Traceback (most recent call last):
File "/usr/share/weewx/wee_device", line 76, in <module>
main()
File "/usr/share/weewx/wee_device", line 72, in main
device.configure(config_dict)
File "/usr/share/weewx/weewx/drivers/__init__.py", line 67, in configure
self.do_options(options, parser, config_dict, not options.noprompt)
File "/usr/share/weewx/user/kl.py", line 1547, in do_options
self.station = KlimaLoggDriver(**config_dict[DRIVER_NAME])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/share/weewx/user/kl.py", line 1794, in __init__
self.startUp()
File "/usr/share/weewx/user/kl.py", line 1975, in startUp
self._service.setup(self.frequency, self.comm_interval,
File "/usr/share/weewx/user/kl.py", line 4048, in setup
self.hid.open(vendor_id, product_id, serial)
File "/usr/share/weewx/user/kl.py", line 3019, in open
self.devh = self._open_device(device)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/share/weewx/user/kl.py", line 3072, in _open_device
loginf('manufacturer: %s' % handle.getString(dev.iManufacturer, 30))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/usb/legacy.py", line 285, in getString
return util.get_string(self.dev, index, langid).encode('ascii')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/usb/util.py", line 313, in get_string
raise ValueError("The device has no langid"
ValueError: The device has no langid (permission issue, no string descriptors supported or device error)
admina@tfa:~ $

What to do? Can't google next step and I am not the best linux user yet.

Br. Nenad

Nenad Dragic

unread,
Nov 8, 2023, 3:11:31 PM11/8/23
to weewx-user
My logfile:
# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2022 Tom Keffer <tke...@gmail.com>
# See the file LICENSE.txt for your rights.

##############################################################################

# This section is for general configuration information.

# Set to 1 for extra debug info, otherwise comment it out or set to zero
debug = 1

# Root directory of the weewx data file hierarchy for this station
WEEWX_ROOT = /

# Whether to log successful operations. May get overridden below.
log_success = True

# Whether to log unsuccessful operations. May get overridden below.
log_failure = True

# Do not modify this. It is used when installing and updating weewx.
version = 4.10.2

##############################################################################

# This section is for information about the station.

[Station]
# Description of the station location
location = "Hornbaek, Denmark"
# Latitude in decimal degrees. Negative for southern hemisphere
latitude = 56.078
# Longitude in decimal degrees. Negative for western hemisphere.
longitude = 12.445
# Altitude of the station, with the unit it is in. This is used only
# if the hardware cannot supply a value.
altitude = 13, meter
# Set to type of station hardware. There must be a corresponding stanza
# in this file, which includes a value for the 'driver' option.
station_type = KlimaLogg
# If you have a website, you may specify an URL. This is required if you
# intend to register your station.
#station_url = http://www.example.com
# The start of the rain year (1=January; 10=October, etc.). This is
# downloaded from the station if the hardware supports it.
rain_year_start = 1
# Start of week (0=Monday, 6=Sunday)
week_start = 6

##############################################################################

[KlimaLogg]
# This section is for the TFA KlimaLogg series of weather stations.
# The driver to use
driver = user.kl
# Radio frequency to use between USB transceiver and console: US or EU
# US uses 915 MHz, EU uses 868.3 MHz. Default is EU.
transceiver_frequency = EU
# The station model, e.g., 'TFA KlimaLoggPro' or 'TFA KlimaLogg'
model = TFA KlimaLogg Pro
# Polling interval is indicates how often, in seconds, to request data
# from the sensors.
polling_interval = 10

##############################################################################

# This section is for uploading data to Internet sites

[StdRESTful]
# Uncomment and change to override logging for uploading services.
# log_success = True
# log_failure = True
[[StationRegistry]]
# To register this weather station with weewx, set this to true,
# then fill out option 'station_url', located in the [Station] section above.
register_this_station = false
[[AWEKAS]]
# This section is for configuring posts to AWEKAS.
# If you wish to post to AWEKAS, set the option 'enable' to true, then specify a username
# and password. To guard against parsing errors, put the password in quotes.
enable = false
username = replace_me
password = replace_me
[[CWOP]]
# This section is for configuring posts to CWOP.
# If you wish to post to CWOP, set the option 'enable' to true,
# then specify the station ID (e.g., CW1234).
enable = false
station = replace_me
# If this is an APRS (radio amateur) station, specify the
# passcode (e.g., 12345). Otherwise, ignore.
passcode = replace_me
[[PWSweather]]
# This section is for configuring posts to PWSweather.com.
# If you wish to post to PWSweather.com, set the option 'enable' to true, then specify a
# station and password. To guard against parsing errors, put the password in quotes.
enable = false
station = replace_me
password = replace_me
[[WOW]]
# This section is for configuring posts to WOW.
# If you wish to post to WOW, set the option 'enable' to true, then specify a station and
# password. To guard against parsing errors, put the password in quotes.
enable = false
station = replace_me
password = replace_me
[[Wunderground]]
# This section is for configuring posts to the Weather Underground.
# If you wish to post to the Weather Underground, set the option 'enable' to true, then
# specify a station (e.g., 'KORHOODR3') and password. To guard against parsing errors, put
# the password in quotes.
enable = false
station = replace_me
password = replace_me
# If you plan on using wunderfixer, set the following
# to your API key:
api_key = replace_me
# Set the following to True to have weewx use the WU "Rapidfire"
# protocol. Not all hardware can support it. See the User's Guide.
rapidfire = False

##############################################################################

# This section specifies what reports, using which skins, to generate.

[StdReport]
# Where the skins reside, relative to WEEWX_ROOT
SKIN_ROOT = /etc/weewx/skins
# Where the generated reports should go, relative to WEEWX_ROOT
HTML_ROOT = /var/www/html/weewx
# Uncomment and change to override logging for reports
# log_success = True
# log_failure = True
# The database binding indicates which data should be used in reports.
data_binding = kl_binding
# Each of the following subsections defines a report that will be run.
# See the customizing guide to change the units, plot types and line
# colors, modify the fonts, display additional sensor data, and other
# customizations. Many of those changes can be made here by overriding
# parameters, or by modifying templates within the skin itself.
[[SeasonsReport]]
# The SeasonsReport uses the 'Seasons' skin, which contains the
# images, templates and plots for the report.
skin = Seasons
enable = true
[[SmartphoneReport]]
# The SmartphoneReport uses the 'Smartphone' skin, and the images and
# files are placed in a dedicated subdirectory.
skin = Smartphone
enable = false
HTML_ROOT = /var/www/html/weewx/smartphone
[[MobileReport]]
# The MobileReport uses the 'Mobile' skin, and the images and files
# are placed in a dedicated subdirectory.
skin = Mobile
enable = false
HTML_ROOT = /var/www/html/weewx/mobile
[[kl]]
HTML_ROOT = /var/www/html/weewx/kl
skin = kl
[[FTP]]
# FTP'ing the results to a webserver is treated as just another report,
# albeit one with an unusual report generator!
skin = Ftp
# If you wish to use FTP, set "enable" to "true", then
# fill out the next four lines.
# Use quotes around passwords to guard against parsing errors.
enable = false
user = replace_me
password = replace_me
server = replace_me # The ftp server name, e.g, www.myserver.org
path = replace_me # The destination directory, e.g., /weather
# Set to True for an FTP over TLS (FTPS) connection. Not all servers
# support this.
secure_ftp = False
# To upload files from something other than what HTML_ROOT is set
# to above, specify a different HTML_ROOT here.
#HTML_ROOT = /var/www/html/weewx
# Most FTP servers use port 21
port = 21
# Set to 1 to use passive mode, zero for active mode
passive = 1
[[RSYNC]]
# rsync'ing to a webserver is treated as just another report
skin = Rsync
# If you wish to use rsync, you must configure passwordless ssh using
# public/private key authentication from the user account that weewx
# runs to the user account on the remote machine where the files
# will be copied.
#
# If you wish to use rsync, set "enable" to "true", then
# fill out server, user, and path.
# The server should appear in your .ssh/config file.
# The user is the username used in the identity file.
# The path is the destination directory, such as /var/www/html/weather.
# Be sure that the user has write permissions on the destination!
enable = false
server = replace_me
user = replace_me
path = replace_me
# To upload files from something other than what HTML_ROOT is set
# to above, specify a different HTML_ROOT here.
#HTML_ROOT = /var/www/html/weewx
# Rsync can be configured to remove files from the remote server if
# they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you
# make a mistake in the remote path, you could could unintentionally
# cause unrelated files to be deleted. Set to 1 to enable remote file
# deletion, zero to allow files to accumulate remotely.
delete = 0
# Options in the [[Defaults]] section below will apply to all reports.
# What follows are a few of the more popular options you may want to
# uncomment, then change.
[[Defaults]]
# Which language to use for all reports. Not all skins support all languages.
# You can override this for individual reports.
lang = en
# Which unit system to use for all reports. Choices are 'us', 'metric', or 'metricwx'.
# You can override this for individual reports.
unit_system = metric
[[[Units]]]
# Option "unit_system" above sets the general unit system, but overriding specific unit
# groups is possible. These are popular choices. Uncomment and set as appropriate.
# NB: The unit is always in the singular. I.e., 'mile_per_hour',
# NOT 'miles_per_hour'
[[[[Groups]]]]
# group_altitude = meter # Options are 'foot' or 'meter'
# group_pressure = mbar # Options are 'inHg', 'mmHg', 'mbar', or 'hPa'
# group_rain = mm # Options are 'inch', 'cm', or 'mm'
# group_rainrate = mm_per_hour # Options are 'inch_per_hour', 'cm_per_hour', or 'mm_per_hour'
# group_temperature = degree_C # Options are 'degree_C', 'degree_F', or 'degree_K'
# The following line is used to keep the above lines indented properly.
# It can be ignored.
unused = unused
# Uncommenting the following section frequently results in more
# attractive formatting of times and dates, but may not work in
# your locale.
[[[[TimeFormats]]]]
# day = %H:%M
# week = %H:%M on %A
# month = %d-%b-%Y %H:%M
# year = %d-%b-%Y %H:%M
# rainyear = %d-%b-%Y %H:%M
# current = %d-%b-%Y %H:%M
# ephem_day = %H:%M
# ephem_year = %d-%b-%Y %H:%M
# The following line is used to keep the above lines indented properly.
# It can be ignored.
unused = unused
[[[Labels]]]
# Users frequently change the labels for these observation types
[[[[Generic]]]]
# inHumidity = Inside Humidity
# inTemp = Inside Temperature
# outHumidity = Outside Humidity
# outTemp = Outside Temperature
# extraTemp1 = Temperature1
# extraTemp2 = Temperature2
# extraTemp3 = Temperature3
# The following line is used to keep the above lines indented properly.
# It can be ignored.
unused = unused

##############################################################################

# This service acts as a filter, converting the unit system coming from
# the hardware to a unit system in the database.

[StdConvert]
# The target_unit affects only the unit system in the database. Once
# chosen it cannot be changed without converting the entire database.
# Modification of target_unit after starting weewx will result in
# corrupt data - the database will contain a mix of US and METRIC data.
#
# The value of target_unit does not affect the unit system for
# reporting - reports can display US, Metric, or any combination of units.
#
# In most cases, target_unit should be left as the default: US
#
# In particular, those migrating from a standard wview installation
# should use US since that is what the wview database contains.
# DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING!
target_unit = US # Options are 'US', 'METRICWX', or 'METRIC'

##############################################################################

# This section can adjust data using calibration expressions.

[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

##############################################################################

# This section is for quality control checks. If units are not specified,
# values must be in the units defined in the StdConvert section.

[StdQC]
[[MinMax]]
barometer = 26, 32.5, inHg
pressure = 24, 34.5, inHg
outTemp = -40, 120, degree_F
inTemp = 10, 120, degree_F
outHumidity = 0, 100
inHumidity = 0, 100
windSpeed = 0, 120, mile_per_hour
rain = 0, 10, inch

##############################################################################

# This section controls the origin of derived values.

[StdWXCalculate]
[[Calculations]]
# How to calculate derived quantities. Possible values are:
# hardware - use the value provided by hardware
# software - use the value calculated by weewx
# prefer_hardware - use value provide by hardware if available,
# otherwise use value calculated by weewx
pressure = prefer_hardware
altimeter = prefer_hardware
appTemp = prefer_hardware
barometer = prefer_hardware
cloudbase = prefer_hardware
dewpoint = prefer_hardware
ET = prefer_hardware
heatindex = prefer_hardware
humidex = prefer_hardware
inDewpoint = prefer_hardware
maxSolarRad = prefer_hardware
rainRate = prefer_hardware
windchill = prefer_hardware
windrun = prefer_hardware

##############################################################################

# For hardware that supports it, this section controls how often the
# onboard clock gets updated.

[StdTimeSynch]
# How often to check the weather station clock for drift (in seconds)
clock_check = 14400
# How much it can drift before we will correct it (in seconds)
max_drift = 5

##############################################################################

# This section is for configuring the archive service.

[StdArchive]
# If the station hardware supports data logging then the archive interval
# will be downloaded from the station. Otherwise, specify it (in seconds).
archive_interval = 300
# If possible, new archive records are downloaded from the station
# hardware. If the hardware does not support this, then new archive
# records will be generated in software.
# Set the following to "software" to force software record generation.
record_generation = hardware
# Whether to include LOOP data in hi/low statistics
loop_hilo = True
# Uncomment and change to override logging for archive operations
# log_success = True
# log_failure = True
# The data binding used to save archive records
data_binding = kl_binding

##############################################################################

# This section binds a data store to a database.

[DataBindings]
[[wx_binding]]
# The database must match one of the sections in [Databases].
# This is likely to be the only option you would want to change.
database = archive_sqlite
# The name of the table within the database
table_name = archive
# The manager handles aggregation of data for historical summaries
manager = weewx.manager.DaySummaryManager
# The schema defines the structure of the database.
# It is *only* used when the database is created.
schema = schemas.wview_extended.schema
[[kl_binding]]
manager = weewx.wxmanager.WXDaySummaryManager
schema = user.kl.schema
table_name = archive
database = kl_sqlite

##############################################################################

# This section defines various databases.

[Databases]
# A SQLite database is simply a single file
[[archive_sqlite]]
database_name = weewx.sdb
database_type = SQLite
# MySQL
[[archive_mysql]]
database_name = weewx
database_type = MySQL
[[kl_sqlite]]
database_name = weewx-kl.sdb
database_type = SQLite
[[kl_mysql]]
database_name = weewx-kl
database_type = MySQL

##############################################################################

# This section defines defaults for the different types of databases.

[DatabaseTypes]
# Defaults for SQLite databases
[[SQLite]]
driver = weedb.sqlite
# Directory in which the database files are located
SQLITE_ROOT = /var/lib/weewx
# Defaults for MySQL databases
[[MySQL]]
driver = weedb.mysql
# The host where the database is located
host = localhost
# The user name for logging in to the host
user = weewx
# The password (use quotes to guard against parsing errors)
password = weewx

##############################################################################

# This section configures the internal weewx engine.

[Engine]
# The following section specifies which services should be run and in what order.
[[Services]]
prep_services = weewx.engine.StdTimeSynch
data_services = ,
process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, weewx.engine.StdQC, weewx.wxservices.StdWXCalculate
xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater, weewx.wxxtypes.StdDelta
archive_services = weewx.engine.StdArchive
restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdAWEKAS
report_services = weewx.engine.StdPrint, weewx.engine.StdReport

vince

unread,
Nov 8, 2023, 3:24:55 PM11/8/23
to weewx-user
A few comments and suggestions:
  • Please 'attach' logs and screen grabs as text files rather than including images.  We can't grep for things in screen grabs.
  • Your pi uses systemd so /var/log/messages and /var/log/syslog is replaced by systemd.  If you want traditional logging do "sudo apt-get install -y rsyslog" to install a syslog daemon that writes to the legacy places.
  • You seem to be running as a very non-standard likely unprivileged user.  Try prefacing your commands such as wee_device with "sudo" and see if that helps.
  • Try running "sudo weewxd" interactively and see what that reports

michael.k...@gmx.at

unread,
Nov 8, 2023, 11:51:20 PM11/8/23
to weewx-user
Just for the record, vince: I don't see images but only text.

Nenad Dragic

unread,
Nov 9, 2023, 3:13:09 AM11/9/23
to weewx-user
Now I have some data:
sudo journalctl -u weewx --no-pager -n 100
https://pastebin.com/HRU4CSXj

Error:
sudo wee_device:

sudo nano /etc/sudoers:
# User privilege specification
root    ALL=(ALL:ALL) ALL
admina  ALL=(ALL:ALL) ALL

admina@tfa:/var/www/html/weewx/NOAA $ ls -al

Empry
nano NOAA-2023-11.txt:
https://pastebin.com/6GVkkjdD

Hope that this can help.
I can see that my klimalogg pro memory is now 0%, it was 100% when I did the install.

Thanks,
Nenad

vince

unread,
Nov 9, 2023, 6:11:29 PM11/9/23
to weewx-user
  1. usb.core.USBError: [Errno 16] Resource busy


Did you stop weewx before trying wee_device ?

Something looks like it has the USB device in use....

Nenad Dragic

unread,
Nov 12, 2023, 6:23:11 AM11/12/23
to weewx-user
Works now, found data in other folder "kl", and it looks good:)
Reply all
Reply to author
Forward
0 new messages