Hallo zusammen und Frohes Fest nachträglich an alle,
ich bin gerade dabei mir mein eigenes Frontend zu schreiben und bin dabei auf ein Problem mit Structures in Verbindung mit dem dblog in eine MySQL Datenbank gestossen, ich hoffe ihr könnt mir helfen.
Folgende ist Situation:
3 Lichtschalter wurden in eine Structure zusammengefasst:
define All_Lights structure room L_WZ_1 L_AZ_1 L_WZ_3
attr All_Lights setList on off
attr All_Lights clientstate_behavior relative
attr All_Lights clientstate_priority on off
In der Datenbank habe ich für die Structure in der Tabelle Current folgende Einträge:
2013-12-27 00:01:07 All_Lights STRUCTURE off off
2013-12-27 00:00:58 All_Lights STRUCTURE on on
2013-12-26 16:23:45 All_Lights STRUCTURE undefined
Bei einer Statusänderung wird hier nur das Datum aktualisiert für den entsprechenden Status (on, off, undefined).
Problem:
Der Status in der Datenbank für die Structure wird nur dann aktualisiert wenn ich eines der Lichter schalte (also nicht über die Structure selbst). Sobald ich über die Structure alle Lichter gesammelt ein/ausschalte will wird der Status der Structure nicht in der Datenbank aktualisiert.
Könnt ihr mir dabei auf die Sprünge helfen woran das Verhalten liegt ? Ich würde gerne über die Structure alle Lichter gesammelt schalten können während auch der Status der Structure in der Datenbank entsprechend aktualisiert wird.
Danke!
Die Ursache ist vermutlich, dass structure beim Befehl ausfuehren kein event fuer sich selbst generiert.
Gibt es eine alternative Möglichkeit um ans Ziel zu kommen ?
Mein Backend fragt via einem Websocket zur Laufzeit ständig die Datenbank auf Änderungen ab und pusht diese dann an die Frontend(s).
Die Funktionalität wäre für mich ziemlich wichtig :(
Also einen Workaround habe ich mich gerade selbst geschaffen - dieser ist aber eigentlich absolut dämlich:
Ich habe eine weitere Structure definiert, die genau so definiert ist wie die Basisstructure. Diese Structure habe ich _Btn genannt.
Schalte ich über die _Btn Structure die Lampen, bekommt die Basisstructure den Zustand mit und aktualisiert sich in der Datenbank.
Klappt, aber ist doof.
Gibt es eine Möglichkeit, das der Structure generell beigebracht wird auch für sich selbst Events auszulösen ?
Ich habe mir die structure.pm einmal im Repository angesehen, leider bin ich kein Perl Entwickler so dass mir auf Anhieb nicht klar wurde was da genau gemacht wird. Ich müsste mich zunächst in den Syntax einarbeiten um zu verstehen was ihr dort treibt.
ich kann das problem nicht ganz nachvollziehen.
wenn ich eine structure schalte oder eine device aus einer structure ändert sich state der structure, das icon wird aktualisiert und mit inform timer sehe ich das event (sogar so oft wie die structure teilnehmer hat bzw. ein mal mehr)
kann es sein das die structure in der regex für dein dblog einfach nicht mit dabei ist?
gruss
andre
Ich logge eigentlich alles in der db mit:
define myDBLog DbLog /etc/fhem/mysql.config .*:.*
Es scheint tatsächlich so zu sein, das von der Structure kein Event für die Structure selbst ausgeht, d.h. die Structure schert sich nicht über ihren Status wenn sie selbst zum schalten verwendet wird.
D.h. ich schalte die Structure auf "an", alle Lichter gehen "an". Aber der Status für die Structure in der DB wird NICHT gesetzt, weder für "on", "off", "undefined".
Im Gegensatz dazu, wenn ich eines der Lichter auf "an" schalte, setzt sich der Status für das Licht in der Datenbank auf "on" und auch das der Structure ist auf "on".
Probiert das mal bei euch aus mit Dummies. Ist bei mir auch über das Standard Frontend so nachvollziehbar.
Hier mal meine einfache Testkonfiguration mit Dummies:
define L_AZ_1 dummy
attr L_AZ_1 setList on off
define L_WZ_1 dummy
attr L_WZ_1 setList on off
define L_WZ_3 dummy
attr L_WZ_3 setList on off
define All_Lights structure room L_WZ_1 L_AZ_1 L_WZ_3
attr All_Lights setList on off
attr All_Lights clientstate_behavior relative
attr All_Lights clientstate_priority on off
Die Lichter gehen bei mir im Frontend auch an, auch für die Structure. Nur in der Datenbank landet der Status nicht :(
Mal anders gefragt: Bekomme ich den Status der Structure irgendwie anders raus ?
mit deinem Beispiel sehe ich die events bei inform timer und sie landen auch in der db...
Zitatinform timer .*:.*
set All_Lights off
2013-12-27 18:26:57 dummy L_AZ_1 off
2013-12-27 18:26:57 dummy L_WZ_1 off
2013-12-27 18:26:57 dummy L_WZ_3 off
2013-12-27 18:26:57 structure All_Lights off
Zitat2013-12-27 18:26:57|L_AZ_1|DUMMY|off|state|off|
2013-12-27 18:26:57|L_WZ_1|DUMMY|off|state|off|
2013-12-27 18:26:57|L_WZ_3|DUMMY|off|state|off|
2013-12-27 18:26:57|All_Lights|STRUCTURE|off|state|off|
gruss
andre
ps: eine structure hat kein setList attribut.
Bei mir leider nicht:
Events:
2013-12-27 18:37:17 dummy L_AZ_1 on
2013-12-27 18:37:17 dummy L_WZ_1 on
2013-12-27 18:37:17 dummy L_WZ_3 on
2013-12-27 18:37:25 dummy L_AZ_1 off
2013-12-27 18:37:25 dummy L_WZ_1 off
2013-12-27 18:37:25 dummy L_WZ_3 off
Die Structure kommt erst wenn ich die Lichter selbst schalte:
2013-12-27 18:46:19 structure All_Lights_EG on
2013-12-27 18:46:19 dummy L_WZ_1 on
2013-12-27 18:46:22 structure All_Lights_EG off
2013-12-27 18:46:22 dummy L_WZ_1 off
Woran könnte das liegen ? Ich fahre eine Minimalkonfiguration, nur die 3 Dummies und die Structure. Und das logging in die MySQL Datenbank:
fhem.cfg:
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global sendStatistics manually
attr global statefile ./log/fhem.save
attr global verbose 3
define telnetPort telnet 7072 global
define WEB FHEMWEB 8083 global
define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen
define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad
# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
define autocreate autocreate
attr autocreate autosave 1
attr autocreate device_room %TYPE
attr autocreate filelog ./log/%NAME-%Y.log
attr autocreate weblink 1
attr autocreate weblink_room Plots
# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
include /etc/fhem/mysql.include
include /etc/fhem/test.include
attr global sendStatistics never
# If the above notify did not helped, then you probably have to enable some of
# the following lines. Verify first that /dev/xxx ist correct.
#define FHZ FHZ /dev/USB0
#define CUL CUL /dev/ttyACM0@9600 1234
#attr CUL rfmode HomeMatic
#define EUL TCM 310 /dev/ttyACM0@57600
#define BscBor TCM 120 /dev/ttyUSB0@9600
#define BscSmartConnect TCM 310 /dev/ttyUSB0@57600
mysql.include:
define myDBLog DbLog /etc/fhem/mysql.config .*:.*
test.include:
define L_AZ_1 dummy
attr L_AZ_1 setList on off
define L_WZ_1 dummy
attr L_WZ_1 setList on off
define L_WZ_3 dummy
attr L_WZ_3 setList on off
define All_Lights_EG structure room L_WZ_1 L_AZ_1 L_WZ_3
attr All_Lights_EG clientstate_behavior relative
attr All_Lights_EG clientstate_priority on off
Version 5.4 ist installiert.
ist deine fhem installation auf dem aktuellen stand? als mit update aktualisiert?
gruss
andre
Ich update mal gerade auf 5.5
Ohmann,
das wars! Hätte ich jetzt nicht vermutet das es daran lag. Ich hatte 5.4 vorher drauf.
Danke Andre!
Zitat von: dansch am 27 Dezember 2013, 18:51:07das wars! Hätte ich jetzt nicht vermutet das es daran lag. Ich hatte 5.4 vorher drauf.
Diese Änderung hatte ich vor ca 3Monaten im DbLog Modul eingecheckt ;)