Alias anstatt Device in DBlog

Begonnen von rabehd, 01 Februar 2024, 09:22:43

Vorheriges Thema - Nächstes Thema

rabehd

Hallo zusammen,

ich habe mein FHEM neu aufgesetzt (kopiert und aufgeräumt).
Eins meiner Problemchen ist dieses hier.
https://forum.fhem.de/index.php?topic=90851.0
Ich habe viele Zigbee-Sensoren deren Namen nicht besonders sprechend sind und fand die Idee statt Device das Alias zu nehmen schön.
Ich habe aber in eingen Aliase auch Sonderzeichen, die sind in der DB nun unschön. Ist das so oder kann ich das durch eine Einstellung ändern?
Seit Nutzung "valueFN" sind auch folgende Meldungen im Log.
Zitat2024.02.01 00:00:08 0: Strange call for typeless Verbrauchsmesser 1 Aquarium: DbLog_splitFn
2024.02.01 00:01:08 0: Strange call for nonexistent Solareinspeisung: DbLog_splitFn
2024.02.01 00:01:08 0: Strange call for typeless Solareinspeisung: DbLog_splitFn
2024.02.01 00:01:14 0: Strange call for nonexistent Stromverbrauch: DbLog_splitFn
2024.02.01 00:02:26 0: Strange call for nonexistent Wetterstation: DbLog_splitFn
2024.02.01 00:02:26 0: Strange call for typeless Wetterstation: DbLog_splitFn
2024.02.01 00:03:58 0: Strange call for nonexistent Innenwetter_WZ: DbLog_splitFn
2024.02.01 00:03:58 0: Strange call for typeless Innenwetter_WZ: DbLog_splitFn
2024.02.01 00:05:00 0: Strange call for nonexistent Heizung WC: DbLog_splitFn

db.conf
###############################################################################>
%dbconfig= (
    connection => "mysql:database=fhem;host=192.168.xx.xx;port=3306",
    user => "fhem",
    password => "XXXXX",
    utf8 => 1
#    optional enable(1) / disable(0) UTF-8 support (at least V 4.042 is necessa>
);
###############################################################################>

Device DBlog
Internals:
   COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
   CONFIGURATION ./db.conf
   DEF        ./db.conf .*:.*
   FD         5
   FUUID      65b1050a-f33f-44e9-51e3-a8d05b0923945343
   FVERSION   93_DbLog.pm:v5.9.5-s28345/2024-01-05
   MODE       asynchronous
   MODEL      MYSQL
   NAME       logdb
   NR         2
   NTFY_ORDER 50-logdb
   PID        917
   REGEXP     .*:.*
   SBP_PID    951
   SBP_STATE  running
   STATE      connected
   TYPE       DbLog
   UTF8       1
   dbconn     mysql:database=fhem;host=192.168.31.60;port=3306
   dbuser     fhem
   eventCount 1876
   HELPER:
     COLSET     1
     DEVICECOL  64
     EVENTCOL   512
     OLDSTATE   connected
     PACKAGE    main
     READINGCOL 64
     TC         current
     TH         history
     TYPECOL    64
     UNITCOL    32
     VALUECOL   128
     VERSION    5.9.5
   OLDREADINGS:
   READINGS:
     2024-02-01 09:21:13   CacheOverflowLastNum 0
     2024-01-24 13:44:33   CacheOverflowLastState normal
     2024-02-01 09:21:34   CacheUsage      10
     2024-02-01 09:21:13   NextSync        2024-02-01 09:21:43 or when CacheUsage 500 is reached
     2024-02-01 09:21:14   state           connected
Attributes:
   DbLogSelectionMode Include
   DbLogType  SampleFill/History
   asyncMode  1
   insertMode 1
   room       Maschinenraum->Logs
   useCharfilter 1
   valueFn    {   $DEVICE = AttrVal($DEVICE,"alias",$DEVICE); }
   verbose    2
Auch funktionierende Lösungen kann man hinterfragen.

betateilchen

Für deviceName gibt es ganz klare Richtlinien, welche Buchstaben dafür verwendet werden dürfen.
Das hat gute Gründe - einen davon erlebst Du gerade, das hat aber auch noch an einigen anderen Stellen Auswirkungen.

Für den alias gibt es solche Regeln nicht, da kannst Du mehr oder weniger reinschreiben, was Du willst.

Was Du verwenden könntest:

$DEVICE = makeDeviceName(AttrVal($DEVICE,"alias",$DEVICE));
Dabei werden alle nicht zulässigen Zeichen durch _ ersetzt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rabehd

Zitat von: betateilchen am 01 Februar 2024, 09:38:22Für deviceName gibt es ganz klare Richtlinien, welche Buchstaben dafür verwendet werden dürfen.
Damit habe ich kein Problem, dafür gibt es ja den Alias.

In DBlog habe ich "deCONZ_HUESensor23" stehen, was nicht besonders sprechend ist. Ich habe $DEVICE = AttrVal($DEVICE,"alias",$DEVICE); im Forum als Lösung gefunden. Damit habe ich aber "Klimasensor8 (K�che)" in der Liste beim Erstellen eines Diagrammes.

Deinen Vorschlag $DEVICE = makeDeviceName(AttrVal($DEVICE,"alias",$DEVICE)); werde ich probieren. "K_che" ist auch keine schöne Lösung.
Ob das auch die medlungen im Log verhindert, mal sehen.
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

neue Erkenntnisse:

$DEVICE = AttrVal($DEVICE,"alias",$DEVICE);
Einträge mit Sonderzeichen, z.B. ( läßt SVG nicht zu.

$DEVICE = makeDeviceName(AttrVal($DEVICE,"alias",$DEVICE)); sieht nicht schön aus, geht aber bei SVG. Man spart sich nur das Merken was hinter dem eigentlichen Device steckt.
Meldung im Log gibt es weiterhin.

Fazit: keine der beiden Lösungen löst das Problem.
Auch funktionierende Lösungen kann man hinterfragen.