FHEM Forum

FHEM => Sonstiges => Thema gestartet von: PichlAlex am 24 Mai 2022, 21:48:21

Titel: DBLOG / Vorschlag für Änderung an /fhem/contrib/dblog/db_create_postgresql.sql
Beitrag von: PichlAlex am 24 Mai 2022, 21:48:21
Hallo,

ich hatte das Problem dass FHEM immer einen Zeitversatz von 1-2 h (je nach Sommer bzw Winterzeit) zu anderen Datenquellen hatte. Das stört mich seit Jahren, aber ich habe heute durch Zufall die Lösung gefunden:

Symptom:
Bei Auswertungen (zB mit Grafana) in denen in einer Auswertung (zb innerhalb eines Grafana Dashboards) aus mehreren Datenquellen (zB Fhem mit Postgresql und ioBroker InfluxDB) sind die Daten aus FHEM um 1-2 h versetzt. Die Problematik wurde bereits in diesen Forenthreads diskutiert:

Ursache:
die Postgresql Datenbank läuft standardmäßíg auf Zeitzone "GMT", aber FHEM schreibt die Zeitstempel mit der lokalen Systemzeit ohne Angabe der Zeitzone -> je nach Jahreszeit ergibt sich dadurch eine Verschiebung.

Ursache-Technisch:

Lösung:

Die Datei muss geändert werden: /opt/fhem/contrib/dblog/db_create_postgresql.sql (Änderungen in rot)
Zitat
--
-- PostgreSQL database dump
--


ALTER DATABASE fhem SET timezone TO 'Europe/Vienna';  --muss auf die jeweilige Lokale Zeitzone geändert werden
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- Name: fhem; Type: SCHEMA; Schema: -; Owner: fhem
--

CREATE SCHEMA fhem;


ALTER SCHEMA fhem OWNER TO fhem;

--
-- Name: SCHEMA fhem; Type: COMMENT; Schema: -; Owner: fhem
--

COMMENT ON SCHEMA fhem IS 'standard fhem schema';


SET search_path = fhem, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: current; Type: TABLE; Schema: fhem; Owner: fhem; Tablespace:
--

CREATE TABLE current (
    "timestamp" timestamp without time zone,
    device character varying(64),
    type character varying(64),
    event character varying(512),
    reading character varying(64),
    value character varying(128),
    unit character varying(32)
);


ALTER TABLE fhem.current OWNER TO fhem;

--
-- Name: history; Type: TABLE; Schema: fhem; Owner: fhem; Tablespace:
--

CREATE TABLE history (
    "timestamp" timestamp without time zone,
    device character varying(64),
    type character varying(64),
    event character varying(512),
    reading character varying(64),
    value character varying(128),
    unit character varying(32)
);


ALTER TABLE fhem.history OWNER TO fhem;

--
-- Name: reading; Type: INDEX; Schema: fhem; Owner: fhem; Tablespace:
--

CREATE INDEX "Search_Idx" ON history USING btree (device, reading, "timestamp")

--
-- PostgreSQL database dump complete
--



Diese Änderung kann nachträglich jederzeit gemacht werden (das sollte eventuell ins Changelog bzw ins Wiki zum DBLOG:
Zitatpsql -U fhem -d fhem
ALTER DATABASE fhem SET timezone TO 'Europe/Vienna';
alter table fhem.current alter column timestamp type timestamp with time zone;
alter table fhem.history alter column timestamp type timestamp with time zone;
Achtung: das alter table auf fhem.history kann je nach Datenbestand seeeeehr lange dauern und kurzzeitig bis zu 100 % zusätzlichen Festplatten-Speicherplatz benötigen!

Vorteil dieser Lösung:
Eventuelle änliche Lösungen für die anderen Datenbanksysteme InfluxDB, sqlite, Mysql müssten noch geprüft werden und habe ich aktuell nicht an FHEM angebunden.

Ich würde mich freuen wenn das ins SVN Repository aufgenommen wird.

schöne Grüße
Alex
Titel: Antw:DBLOG / Vorschlag für Änderung an /fhem/contrib/dblog/db_create_postgresql.sql
Beitrag von: fhem@supergut am 23 September 2022, 07:42:30
Moin,

danke für diese Darstellung. Wer eine bestehende MySQL (bei mir MariaDB) umstellen will, kann so vorgehen:

shell
# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p -Dmysql

mysqlShell:
MariaDB [(none)]> SET GLOBAL time_zone = 'Europe/Berlin';
MariaDB [(none)]> SELECT @@global.time_zone, @@session.time_zone;
Titel: Antw:DBLOG / Vorschlag für Änderung an /fhem/contrib/dblog/db_create_postgresql.sql
Beitrag von: DS_Starter am 24 September 2022, 19:04:50
Das Attr convertTimezone tut nicht was ihr braucht ?

Lg
Titel: Aw: DBLOG / Vorschlag für Änderung an /fhem/contrib/dblog/db_create_postgresql.sql
Beitrag von: Tomk am 25 April 2024, 06:50:09
Ich stehe jetzt vor dem gleichen Problem. Dblog loggt in MariaDb / MySQL. Wenn ich mit Grafana drauf zugreife fehlen die letzten zwei Stunden.

a) was muss ich tun um dies für neue Einträge zu korrigieren?
b) was muss ich tun um dies für vorhandene datenbankeintäge zu konvertieren?

Danke vorab!!!
Titel: Aw: DBLOG / Vorschlag für Änderung an /fhem/contrib/dblog/db_create_postgresql.sql
Beitrag von: Tomk am 27 April 2024, 06:52:07
Ich habe "convertTimezone" für DbLog mal ausprobiert. Allerdings werden die svgs in fhem dann nicht mehr korrekt dargestellt, oder? Gibt es eine Lösung welche weiterhin parallelbetrieb von svg und grafana erlaubt?