93_DbLog - Umstellung Log-Funktion auf non-blocking

Begonnen von DS_Starter, 18 Dezember 2016, 20:03:56

Vorheriges Thema - Nächstes Thema

DS_Starter

Hi Joe, cooltux  ja scheint so. Aber was mich wirklich wundert ist dass in dem ausgangsmodul sowohl die breite als auch die Beschränkung der Felder beim Schreiben enthalten war und unverändert geblieben ist. Könnt ihr euch das zusammenreimen ? Ich nicht.  Hab jetzt erstmal keine Zeit mehr ... Evtl wieder am Abend.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Nein, ich auch nicht! Habe den Code des Moduls  bis vor einem Jahr zurück angeschaut, es war definitiv als Code enthalten,
aber gekürzt hat es bei mir dennoch nicht! Ich habe viele alte Einträge mit längeren Readings... (und manuell angepasst habe ich das Modul auch nie).

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

betateilchen

Mit den Feldlängen in der Log-Tabelle solltet Ihr modulseitig nicht beliebig rumspielen.

Zumindest nicht mit der Feldlänge für den DEVICE-Namen.
Es macht keinen Sinn, dieses Feld länger als 64 Zeichen zu machen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JoeALLb

Zitat von: betateilchen am 11 Januar 2017, 16:58:21
Es macht keinen Sinn, dieses Feld länger als 64 Zeichen zu machen.

Ich denke nicht, dass dies jemand|viele möchten. Die Hauptschwierigkeit sind im Moment die User mit der alten Breite von 32. Die können Fehlermeldungen erhalten, wenn sie plötzlich
Devices anlegen, deren Dateinamen länger sind...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Tedious

#244
Moin,

die Tabellen waren/sind alle so angelegt - ausser Device, das stand noch auf 32. Das habe ich jetzt geändert (exemplarisch).

ALTER TABLE `fhem`.`history`
CHANGE COLUMN `DEVICE` `DEVICE` VARCHAR(64) CHARACTER SET 'utf8' NULL DEFAULT NULL ;


3 4 17:46:53 show variables  like 'STRICT_%' 0 row(s) returned 0.110 sec / 0.000 sec

Liefert die Variablen-Abfrage.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

Xcoder

Zitat von: DS_Starter am 11 Januar 2017, 00:10:05
schau mal ob für dich diese Hinweise hier gültig sind:

http://piwik.org/faq/troubleshooting/faq_183/
http://stackoverflow.com/questions/7942154/mysql-error-2006-mysql-server-has-gone-away

Hat leider keine Verbesserung gebracht. Den SQL Server habe ich auch nie umkonfiguriert. Die Meldung kommt erst seit dem Update Gestern...

Gruss, Xcoder

DS_Starter

Hallo XCoder,

hast du diese Meldungen mit dem aktuellen DbLog auch dann wenn du in den asnchronen Mode wechselst (asyncMode=1) ?

Unabhängig davon habe ich für dich eine Testversion angefertigt.
Teste diese dann ebenfalls mit beiden Modi,d.h. synchronous bzw. asynchron.

Grüße
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Hallo Loredo,

in der angehängten Version habe ich die von dir gewünschte SplitFn-Variante mit eingebaut.
Schau mal ob es genau das ist was du möchtest.

Grüße
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Zitat von: Tedious am 11 Januar 2017, 17:48:45
die Tabellen waren/sind alle so angelegt - ausser Device, das stand noch auf 32. Das habe ich jetzt geändert (exemplarisch).

Eine wichtige Information fehlt: Die Fehlermeldung sollte jetzt weg sein?!?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Loredo

Zitat von: DS_Starter am 11 Januar 2017, 23:59:42
in der angehängten Version habe ich die von dir gewünschte SplitFn-Variante mit eingebaut.
Schau mal ob es genau das ist was du möchtest.


Ja, sieht gut aus. Vielen Dank!
Vielleicht bei der Gelegenheit noch die Fehlergefahr verringern und prüfen, ob der Inhalt auch wirklich eine existierende Funktion ist, bevor sie ausgeführt wird:




if($defs{$device}{'.DbLog_splitFn'} && &$defs{$device}{'.DbLog_splitFn'}) {
    ...
}
  ...

if($modules{$dtype}{DbLog_splitFn} && &$modules{$dtype}{DbLog_splitFn}) {
    ...
}
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

DS_Starter

Morgen Julien und Joe,

Ja deinen Hinweis sehe ich mit vor, danke !
Ich warte noch auf die Rückmeldung von xcoder bzgl. Seiner Testversion und baue dann eine allgemeine neue Version für den Test und check-in.
Mal schauen wie sein Ergebnis ausfällt.

Schönen Tag,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Markus Bloch

#251
Hallo zusammen,

warum nutzt ihr für die modulweite DbLog_splitFn nicht die Funktion CallFn() (https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl#L3278) um modul-Funktionen aufzurufen? Man muss ja das Rad nicht jedesmal neu erfinden.

CallFn($hash->{NAME}, "DbLog_splitFn", $event)

Ich persönlich würde diese Funktion dann erweitern um auch definitionsbezogene Funktionen aufzurufen. Momentan startet CallFn() nur Funktionen die in $modules{$hash->{TYPE}} definiert sind. Diese könnte man ja einfach erweitern um zuerst definitionsbezogene Funktionen unter $hash zu verwenden analog wie es Loredo vorgeschlagen hat. Falls nicht definiert, wird dann wie bisher die Funktion unter $modules verwendet.

Dadurch wäre es einheitlich für alle Module verfügbar und keine Insellösung.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Tobias

Hi Markus,
ich habe das noch nicht wirklich verstanden... Um CallFn nutzen zu können, was muss im Modul DBLog rein, was in alle andere Module?
Aktuell ist es so das pro Modul die DbLogSplitfn implementiert sein muss/sollte da nur das Modul selbst weiß wie die Readings aufgebaut sind. Das DBLog Modul ruft dann diese SplitFn in den Modulen auf wenn ein Reading aus diesem Modul eintrifft
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Markus Bloch

#253
Zitat von: Tobias am 12 Januar 2017, 10:26:46
Um CallFn nutzen zu können, was muss im Modul DBLog rein, was in alle andere Module?

Es geht hierbei nur um DbLog selber. Alle Module, welche eine DbLog_splitFn in der Initialize-Funktion setzen sind ja bereits korrekt.

Insbesondere für DbLog selber vereinfacht dies eine Menge, da du das gesamte If-Konstrukt in Zeile 405 (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/93_DbLog.pm?rev=13039#L405) entfernen kannst, da sich CallFn um alles nötige kümmert.

Du rufst in Zeile 405 einfach nur CallFn() samt Name der entsprechenden Definition, dem Namen der Funktion ("DbLog_splitFn") und die Argumente, welche die splitFn benötigt ($event, $device):


($reading, $value, $unit) = CallFn($device, "DbLog_splitFn", $event, $device);

# undef bedeutet, Modul stellt keine DbLog_splitFn bereit
if(defined($reading))
{
   return ($reading, $value, $unit);
}



Zitat von: Tobias am 12 Januar 2017, 10:26:46
Aktuell ist es so das pro Modul die DbLogSplitfn implementiert sein muss/sollte da nur das Modul selbst weiß wie die Readings aufgebaut sind. Das DBLog Modul ruft dann diese SplitFn in den Modulen auf wenn ein Reading aus diesem Modul eintrifft

Genau, nur musst du nun nicht selbst alles prüfen und sicherstellen, ob die Funktion existiert usw. Das erledigt alles CallFn() für dich. sofern die entsprechende Funktion von dem zugrundeliegenden Modul von $device bereitgestellt wird, wird diese ausgeführt, andernfalls wird undef zurückgegeben.

Loredo bat ja darum, definitionsbezogen die splitFn definieren zu können. Dies kann durch einen sehr kleinen Patch in CallFn() erreicht werden. Damit würde dieses Feature im gesamten FHEM zur Verfügung stehen.

Ich möchte gerne vermeiden, das mit der ursprünglichen Idee wieder Insellösungen geschaffen werden.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)