Zitat von: JWRu am 26 Februar 2026, 21:39:32Ich habe es ausprobiert - ohne Leerzeichen funktioniert es.OK, ein Anfang... Leerzeichen in "-" zu verwandeln.
Zitat von: JWRu am 26 Februar 2026, 21:39:32Allerdings reicht jetzt der Platz in meiner Tabelle nicht mehr, weil die erste Spalte zu breit wird.Ist das Widget hierfür nicht frei parametrierbar?
Zitat von: JWRu am 26 Februar 2026, 21:39:32Ich behalte einfach mein Userreading bei - du musst dich nicht verknoten, um meinen Spezialfall zu integrieren.Das Widget ist der größte "Kunde" dieses Moduls. Daher habe ich schon Interesse, dass es funktioniert.
Zitat von: Freee84neu am 27 Februar 2026, 01:28:09was mache ich falsch ?

Zitat von: DS_Starter am 28 Februar 2026, 09:39:47Im Modul (Perl) selbst wird kein SQL-Syntaxcheck durchgeführt. Die Meldung (DBD::mysql::st...) wird direkt vom Datenbanktreiber (DBD Perl-Modul) zurückgeliefert.
Möglicherweise wäre es zielführend im CPAN zu forschen (Version des DBD) bzw. auf DBD::MariaDB umzustellen.
Die eingesetzten Versionen siehst du im Configcheck des zugeordneten DbLog-Devices.
DBD::DBM, DBD::ExampleP, DBD::File, DBD::Gofer, DBD::MariaDB, DBD::Mem, DBD::Pg, DBD::Proxy, DBD::SQLite, DBD::Sponge, DBD::mysql
Result of version check
Used Perl version: 5.38.5
Used DBI (Database independent interface) version: 1.647
Used DBD (Database driver) version mysql: 4.051
Used DbLog version: 5.11.0
Your local DbLog module is up to date.
Rating:
Recommendation: Update of DbLog is not needed.
Your DBD version fulfills UTF8 support, no need to update DBD.

-- INSERT INTO history (TIMESTAMP, DEVICE, TYPE, READING, VALUE)
WITH price AS (
SELECT
TIMESTAMP AS interval_start,
VALUE AS price_ct_per_kWh -- z.B. Cent/kWh
FROM history
WHERE DEVICE = 'Stromboerse_connect'
AND READING = 'fc0_total'
AND TIMESTAMP >= CURDATE()
AND TIMESTAMP < CURDATE() + INTERVAL 1 DAY
),
consumption AS (
SELECT
interval_start,
CASE
WHEN interval_start = CURDATE() THEN 0
WHEN VALUE < LAG(VALUE) OVER (ORDER BY interval_start) THEN NULL
ELSE VALUE - LAG(VALUE) OVER (ORDER BY interval_start)
END AS kWh_15min
FROM (
SELECT
FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900) * 900) AS interval_start,
VALUE,
ROW_NUMBER() OVER (
PARTITION BY FLOOR(UNIX_TIMESTAMP(TIMESTAMP) / 900)
ORDER BY TIMESTAMP DESC
) AS rn
FROM history
WHERE DEVICE = 'WR_0_KSEM'
AND READING = 'Active_energy+'
AND TIMESTAMP >= CURDATE() - INTERVAL 15 MINUTE
) t
WHERE rn = 1
AND interval_start >= CURDATE()
AND interval_start < CURDATE() + INTERVAL 1 DAY
)
SELECT *
FROM (
SELECT
c.interval_start AS TIMESTAMP,
'Stromboerse_connect' AS DEVICE,
'cost' AS TYPE,
'nodes_cost' AS READING,
ROUND(COALESCE(c.kWh_15min,0) * COALESCE(p.price_ct_per_kWh,0) / 100, 6 ) AS VALUE
FROM consumption c
LEFT JOIN price p
ON p.interval_start = c.interval_start
) AS new_values
-- ON DUPLICATE KEY UPDATE
-- VALUE = new_values.VALUE;