Ich möchte das Modul
98_DOIFtools.pm vorstellen.
DOIFtools Bedienungsanleitung im FHEM-Wiki: https://wiki.fhem.de/wiki/DOIFtools
Das Modul enthält Funktionen zur Unterstützung des Benutzers im Umgang mit DOIF:
- erstellen von readingsGroup Definitionen, zur Beschriftung von Frontendelementen.
- erstellen eines Debug-Logfiles, in dem mehrere DOIF und zugehörige Geräte geloggt werden.
- optionales DOIF-Listing bei jeder Status und Wait-Timer Aktualisierung im Debug-Logfile.
- Navigation zwischen den DOIF-Listings im Logfile, wenn es über DOIFtools geöffnet wird.
- erstellen von userReadings in DOIF-Geräten zur Anzeige des realen Datums bei Wochentag behafteten Timern.
- löschen von benutzerdefinierten Readings in DOIF-Definitionen über eine Mehrfachauswahl.
- erfassen statistischer Daten über Events.
- zeitliche Begrenzung der Datenerfassung
- erstellen eines Statistikreports.
- Liste aller DOIF-Definitionen in probably associated with und Lookup-Fenster ffür Details der Geräte.
- Zugriff auf DOIFtools aus jeder DOIF-Definition über die Liste in probably associated with.
- Zugriff aus DOIFtools auf vorhandene DOIFtoolsLog-Logdateien.
- einblenden des Event-Monitor in der DOIFtools-Detailansicht.
Es werden Operanden für DOIF aus einem Event abgeleitet.
Mit einem ausgewählten Operanden kann eine neue DOIF Definition erzeugt werden - ermöglicht den Zugriff auf den Event Monitor in der DOIF-Detailansicht.
Es werden Operanden für DOIF aus einem Event abgeleitet.
Mit einem ausgewählten Operanden kann eine bestehende DOIF Definition ergänzt werden - prüfen der DOIF Definitionen mit Empfehlungen.
- erstellen eigener Shortcuts.
- erstellen eines FHEM-Menüeintrag per Attribut
- anzeigen der laufenden "wait_timer"
- Die Ausgabesprache richtet sich nach der Einstellung des globalen Attributes language
- Auflistung der Subs, die vom User im Package DOIF deklariert wurden.
Definitiondefine DOIFtools DOIFtools
Es ist nur eine Definition je FHEM-Installation erlaubt.
Definitionsvorschlag für den Import mit Raw definition (https://wiki.fhem.de/wiki/DOIF/Import_von_Code_Snippets)
defmod DOIFtools DOIFtools
attr DOIFtools DOIFtoolsEventMonitorInDOIF 1
attr DOIFtools DOIFtoolsExecuteDefinition 1
attr DOIFtools DOIFtoolsExecuteSave 1
attr DOIFtools DOIFtoolsMenuEntry 1
attr DOIFtools DOIFtoolsMyShortcuts ##My Shortcuts:,,list DOIFtools,fhem?cmd=list DOIFtools
attr global language DE
DOIFtools wird über das offizielle Update verteilt.
macht einen sehr nützlichen Eindruck!
Erste Tests sind in Ordnung. Alle Funktionen habe ich noch nicht verstanden.
werde heute Abend mal weiter Testen...
Gute Idee, so können wir den Funktionsteil (DOIF) von den Tools trennen. Damit kannst deine Ideen zur besseren Handhabung unmittelbar umsetzen.
Es gibt eine aktualisierte Version im ersten Post.
neu: Statistikreport, Logfileanzeige in der Detailansicht, wie bei FileLog, Hilfe überarbeitet, kleine Fehler bereinigt.
@Damian: Ja, ich wollte nicht immer in Deinem Modul herum basteln.
Vielleicht könntest Du in dem 2. angepinnten Beitrag zwei Links zufügen, einmal auf Wiki-CodeSnippets (dort gibt es auch DOIF Beispiele, die nicht in HOWTOS verlinkt sind) und auf diesen Beitrag.
https://wiki.fhem.de/wiki/Kategorie:Code_Snippets
https://forum.fhem.de/index.php/topic,63938.0.html
Es gibt eine aktualisierte Version im ersten Post.
neue Funktion: einblenden des Event-Monitor in der Detailansicht.
Kannst Du bitte das 98_DOIFtools.pm nochmal hochladen ?
Im ersten Post sehe ich nur 98_DOIF.pm.
Danke
@kumue: erledigt, Danke für den Hinweis.
Es gibt eine aktualisierte Version im ersten Post.
neue Funktion: ermöglicht den Zugriff auf den Event Monitor in der Detailansicht von DOIF (experimentell).
@Damian, falls Du Bedenken hast, würde ich das wieder abschalten. DOIFtools setzt optional eine "FW_detailFn" mit
$modules{DOIF}->{FW_detailFn} = "DOIFtools_eM"
Zitat von: Ellert am 06 Januar 2017, 12:07:37
Es gibt eine aktualisierte Version im ersten Post.
neue Funktion: ermöglicht den Zugriff auf den Event Monitor in der Detailansicht von DOIF (experimentell).
@Damian, falls Du Bedenken hast, würde ich das wieder abschalten. DOIFtools setzt optional eine "FW_detailFn" mit
$modules{DOIF}->{FW_detailFn} = "DOIFtools_eM"
Interessanter Ansatz. Gut wäre gleich die richtigen Filter (passend zum Modul) zu setzen.
Passende Filter sind so eine Sache. Was passend ist, hängt auch von der Absicht ab, mit der man in den Event-Monitor sieht.
Ich würde den EM auch öffnen, wenn ich DOIF erweitern möchte und nicht genau weiss welche Events es gibt. Dafür steht kein Vorwissen bereit, um einen Filter abzuleiten.
Es gibt eine aktualisierte Version im ersten Post.
zeitliche Begrenzung der Datenerfassung
optimierter Zugriff auf die holiday-Datei bei der Berechnung des echten Datums
mehr Aussage im Report, Hinweis, ob in einem Gerät "event-on-..." gesetzt ist
anzeigen von DOIF-Version und FHEM-Revision
Es gibt eine aktualisierte Version im ersten Post.
neu:
Check der DOIF Definitionen, mit Empfehlungen.
Bei schwer auffindbaren Fehlern, kann ein DOIF-Listing ins Debug-Logfile eingeschaltet werden. Das Listing wird bei Status und Wait-Timer Aktualisierung geschrieben.
Es gibt eine aktualisierte Version im ersten Post.
neu:
Navigation zwischen den DOIF-Listings im Logfile, wenn es über DOIFtools geöffnet wird.
Einige Shortcuts zugefügt
Es kann nur eine DOIFtools Instanz angelegt werden.
checkDOIF auf timerWithWait erweitert und Hinweis, wo ggf. do always fehlt.
Damit sind dann erstmal meine Ideen umgesetzt.
DOIFtools könnte ein offizielles Modul werden, das hängt auch von den Erfahrungen ab, die Ihr damit macht.
Schreibt doch mal Eure Meinung zu DOIFtools, vielleicht gibt es ja auch noch Ideen.
Zitat von: Ellert am 14 Januar 2017, 21:38:27
Es gibt eine aktualisierte Version im ersten Post.
neu:
Navigation zwischen den DOIF-Listings im Logfile, wenn es über DOIFtools geöffnet wird.
Einige Shortcuts zugefügt
Es kann nur eine DOIFtools Instanz angelegt werden.
checkDOIF auf timerWithWait erweitert und Hinweis, wo ggf. do always fehlt.
Damit sind dann erstmal meine Ideen umgesetzt.
DOIFtools könnte ein offizielles Modul werden, das hängt auch von den Erfahrungen ab, die Ihr damit macht.
Schreibt doch mal Eure Meinung zu DOIFtools, vielleicht gibt es ja auch noch Ideen.
Ich denke, solange ein Modul nicht zum Standard gehört, wird es nicht die Aufmerksamkeit finden, die es verdient hätte. Wenn du der Meinung bist, dass es reif für den "produktiven" Einsatz ist, dann lasse es einfach zum Standard-Modul werden. Dann wird auch die dazugehörige Doku in der Commandref gelesen. Da durch das Tool nur Änderungen von außen stattfinden, ist die Stabilität des funktionalen Teils, also der DOIF-Module nicht in Gefahr.
Zitat von: Ellert am 14 Januar 2017, 21:38:27
DOIFtools könnte ein offizielles Modul werden, das hängt auch von den Erfahrungen ab, die Ihr damit macht.
Schreibt doch mal Eure Meinung zu DOIFtools, vielleicht gibt es ja auch noch Ideen.
Ich finde das Tool sehr nützlich! Mit Hilfe des Tool habe ich mein Event-Aufkommen (alleine bei HM-Devices - mit event-on-change-reading .* !) von 2100/h um 2/3 auf ca. 650/h reduziert.
Pro HM-ES-PMSw1-Pl Messsteckdose zum überwachen des Waschmaschinen Status, wurden bei aktiver Waschmaschine alleine ~2000/h Events erzeugt (bei 2 Waschmaschinen und einem Trockner dann schon ~6000) da binich nun nach der anpassung von event-on-change-reading .* auf nur die readings die ich tatsächlich benötige auf 200/h
Da wurd einem beim betrachten des Event-Monitor schon schwindelig...
Anfangs ist es bei ein paar wenigen Devices nicht so wichtig auf die passenden Filter zu achten - wenn mit der Zeit die FHEM Installation mehr und mehr wächst, kommt man dann wohl nicht mehr drum herum, Devices die übermäßig viele Events erzeugen auszubremsen.
Was ich noch nützlich fände, wenn man bei den statisticTYPEs außer .* und TYPE= auch Device Namen mit regex eingeben könnte.
Ansonsten ein sehr hilfreiches Analysetool und sollte mMn auf jeden Fall 'offizielles Modul' werden.
Gruß
Ingo
Mir ist doch noch etwas eingefallen ;) daher gibt es eine neue Version im ersten Beitrag.
neu:
Die vom Modul gesetzten Shortcuts sind ausblendbar
Es können eigene Shortcuts erstellt werden, gleiche Syntax, wie beim globalen Attribut "menuEntries".
Die Attribute wurden umbenannt und beginnen alle mit DOIFtools, sie werde daher auch als Gruppe aufgelistet.
Die alten Attribute werden in die Neuen übernommen.
@automatisierer: Danke für Deine Einschätzung, Mein System zeigt zwischen 3500 und 4000 Events/h also 1 Event/s das schein nicht viel zu sein ich habe aber das volle Potential von event-on-... noch nicht voll genutzt.
Auf Regexp habe ich verzichtet, weil DOIFtools einfach zu bedienen sein soll und ich, wo immer es geht, eine Auswahl anbieten möchte. TYPE ist noch überschaubar und eine Geräteliste mit Mehrfachauswahl ist umständlich zu handhaben.
Es gibt eine aktualisierte Version im ersten Post.
- Fehlerbereinigung, daher empfehle ich ein Update
- optionaler Menüeintrag per Attribut
- anzeige der laufenden Wait-Timer im DOIF als Entscheidungshilfe, ob ein Neustart ungünstig ist.
Demnächst gibt es ein offizielles Modul.
DOIFtools wird seit heute per Update verteilt.
Wer DOIFtools vorher manuell installiert hat, sollte vor dem Update darauf achten, dass die Benutzerrechte der manuell installierten Datei, FHEM das Ersetzen der Datei erlauben.
Statt die Benutzerrechte zu setzen, kann 98_DOIFtools.pm vor dem Update gelöscht werden.
Neu mit dem heutigen Update:
mit dem Attribut DOIFtoolsHideStatReadings können die stat_ Readings versteckt werden.
wenn statisticsDeviceFilterRegex gesetzt wird werden nur die gefilterten Geräte in die Auswertung einbezogen.
checkDOIF prüft, ob Timer eine Referenz auf den DOIF-Namen haben, aber keinen Default-Wert besitzen.
Es gibt einschliesslich heute einige Updates seit dem letzten Beitrag.
neu:
- Wenn der Event-Monitor in DOIF oder DOIFtools aufgerufen wird, dann wird der Button addRegexpPart ausgeblendet. Stattdessen werden beim Markieren einer Event-Zeile Vorschläge gezeigt wie das Event in einer DOIF Definition als Operand angegeben werden könnte. Ein Vorschlag kann mit Copy&Paste in eine Definition eingefügt werden.
- mit gesetztem Attribut DOIFtoolsEventOnDeleted werden vor dem Löschen der stat_ Readings Events erzeugt. Das ermöglicht die Daten zu loggen (DbLog, FileLog).
- In der Detailansicht des DOIF wurden einige Get- und Set-Befehle als Shortcuts eingefügt, abschaltbar mit dem Attribut DOIFtoolsHideGetSet
- Der Event Monitor wird über toggle ein- und aus geschaltet
- Es gibt einen Filter für die Event-Rate damit wird die Auswertung auf Raten ab dem angegebenen Wert beschränkt
- Die stat_ Readings können versteckt verden mit dem Attribut DOIFtoolsHideStatReadings
Hallo,
sehr nützliche Erweiterung um die DOIFs zu optimieren.
Was mir jedoch auffällt: Im StatisticsReport ist das Feld für die Namen etwas zu klein geraten (zumindest für meine Bezeichnungen), so dass das Layout durcheinander gerät.
DOIF di.duo.eg.Rolladen 20 1 nein
DOIF di.fk.st.Schlafzimmer.Tuer76 4 nein
DOIF di.fk.status 480 26 nein
DOIF di.hum.ug.Entfeuchter 60 3 nein
DOIF di.li.eg.Arbeitszimmer.1 26 1 nein
DOIF di.li.eg.Kueche 16 1 nein
DOIF di.li.eg.Wohnzimmer.Fensterbank16 1 nein
DOIF di.li.eg.Wohnzimmer.Tuer 16 1 nein
DOIF di.li.st.Arbeitszimmer 16 1 nein
DOIF di.li.st.Schlafzimmer 8 0 nein
DOIF di.sc.Nachtmodus 6 0 nein
DOIF di.sd.eg.Wohnzimmer.Fensterbank.Uhr12 1 nein
DOIF di.sd.eg.Wohnzimmer.Sideboard.Uhr4 0 nein
DOIF di.uz.max.hr.eg.Kueche 8 0 nein
DOIF di.uz.max.wt.eg.Arbeitszimmer8 0 nein
DOIF di.uz.max.wt.eg.Badezimmer8 0 nein
DOIF di.uz.max.wt.eg.Flur 8 0 nein
DOIF di.uz.max.wt.eg.Wohnzimmer8 0 nein
DOIF di.uz.max.wt.st.Arbeitszimmer8 0 nein
DOIF mon.au.Aussen 247 13 nein
Wäre schön, wenn das Feld etwas breiter sein würde.
Ab morgen sind die Spalten dynamisch.
Perfekt!
Vielen Dank.
Manchmal ist es hilfreich zu einem DOIF die Deails der verbundenen Geräte zu sehen. Dazu musste ein neuer Browsertab geöffnet werden.
Mit einem Lookup-Fenster geht es bequemer und schneller, das Fenster wird geöffnet, wenn die Maus über den Link läuft, der zu den Details führt, siehe Anlage.
Mit dem morgigen Update kann die Sprache der vom Modul erzeugten Texte über das globale Attribut language eingestellt werden.
Durch Setzen des Attributes kann Deutsch als Sprache eingestellt werden.
attr global language DE
Hallo,
danke für das Modul.
Mir ist aufgefallen, das das Modul den webnamen von FHEMWEB nicht richtig beachtet.
Es funktioniert alles, wenn als webname fhem nicht verändert wird.
Zitat von: stromer-12 am 13 Februar 2017, 22:57:09
Hallo,
danke für das Modul.
Mir ist aufgefallen, das das Modul den webnamen von FHEMWEB nicht richtig beachtet.
Es funktioniert alles, wenn als webname fhem nicht verändert wird.
Kannst Du das genauer beschreiben, wo das sichtbar wird wenn der webname nicht beachtet wird?
O.k. ich habs gesehen, webname wird in den Links nicht berücksichtigt.
Gefixt und nachher im Update verfügbar.
Ich betreibe FHEM hinter einen ReverseProxy und da kommt beim DOIF beim tooglen des Eventmonitors eine Passwortabfrage obwohl der keine eingestellt ist in FHEM.
Ausserhalb des FHEM-Pfades werden Passwörter verlangt.
Dadurch ist mir das aufgefallen. Mit dem Update passiert das immer noch.
In Zeile 310 und 441 habe ich auch noch feste Pfade gesehen.
Ich habe mal eine Instance mit dem Pfad fhem eingetragen.
Man sieht einzelne Anfragen nach /fhem der Rest geht zum definierten Webnamen.
[14/Feb/2017:11:52:54 +0100] "GET /wb16/pgm2/console.js HTTP/1.1" 200 2707
[14/Feb/2017:11:52:55 +0100] "POST /fhem?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:55 +0100] "POST /fhem?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:55 +0100] "POST /wb16?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:55 +0100] "POST /fhem?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:55 +0100] "GET /wb16?cmd={ReadingsVal(%22DO_KE_BA%22,%2
[14/Feb/2017:11:52:55 +0100] "GET /wb16?cmd={AttrVal(%22DO_KE_BA%22,%22roo
[14/Feb/2017:11:52:55 +0100] "POST /fhem?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:55 +0100] "POST /wb16?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:56 +0100] "POST /wb16?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:56 +0100] "POST /wb16?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:56 +0100] "POST /wb16?cmd={my%20@d%20=%20devspec2array(
[14/Feb/2017:11:52:56 +0100] "POST /wb16?cmd={my%20@d%20=%20devspec2array(
Würdest Du bitte mal testen ob es funktioniert?
Edit: Anhang entfernt
Hi,
die beiden Links die du jetzt angepasst hast funktionieren.
Jetzt habe ich noch nach dem anklicken von "toggle" zum Einblenden der EventMonitors 4x /fhem? zu stehen aber nicht direkt hintereinander und zu verschiedenen Zeiten.
POST /fhem?cmd={my%20@d%20=%20devspec2array(%27TYPE=DOIFtools%27);;return%20$d[0]%20?%20$d[0]%20:%20%27%27}&XHR=1&fw_id=1402
Ja, das devspec2array wird im Java-Script aufgerufen und FW_root ist wohl noch nicht gesetzt.
Ich setze FW_root jetzt mal selbst, probier bitte nochmal.
Wie erzeugst Du die Logeinträge?
Edit: Anhang entfernt
Das ist aus meinen apache2 Log, welcher ReverseProxy macht.
Auf 2 FHEM Installationen getestet und funktioniert. Keine falschen Pfade mehr.
Gut, dann werde ich die Version einchecken.
Hi
Die DOIFtools legen ja das DOIFtoolsLog an. Jetzt hätte ich dieses Log allerdings gerne an einem anderen Pfad. Das kann ich auch unter der Definition des DOIFtoolsLog ändern.
Aber in DOIFtools steht weiterhin das Internal "logfile ./log/DOIFtoolsLog-%Y-%j.log"
Das führt wiederum dazu dass ich die "Spezial" Ansicht des DOIFtoolsLog im DOIFtools nicht verwenden kann, da hier die Pfade nicht aus dem DOIFtoolsLog sondern aus dem DOIFtools Internal gezogen werden...
Wie kann ich denn den richtigen Pfad in den DOIFtools setzen? So was wie setreading gibt es doch für internals nicht, oder doch?
DOIFtools legt ein globales Filelog an, daher kann der Pfad nur über das globale Attribut logdir geändert werden.
Zitat von: Ellert am 19 Februar 2017, 13:59:09
DOIFtools legt ein globales Filelog an, daher kann der Pfad nur über das globale Attribut logdir geändert werden.
Hi Ellert,
ich möchte ungern global logdir ändern, da ich 99% meiner Logs an der gleichen Stelle habe. Allerdings lege ich die LOGs, die ich nur zur Analyse brauche, auf die RAM Disk um meine SD Karte vom Raspberry zu "schonen". Wäre toll wenn sich DOIFTools "einfach" den Pfad aus DOIFToolsLog ziehen würde, oder das man es als Attribut im DOIFTools angeben kann... ;-) So als Wunsch
Viele Grüße
Ist auf der Wunschliste notiert.
Danke ;-)
Zitat von: iamandy am 19 Februar 2017, 19:29:10
Hi Ellert,
ich möchte ungern global logdir ändern, da ich 99% meiner Logs an der gleichen Stelle habe. Allerdings lege ich die LOGs, die ich nur zur Analyse brauche, auf die RAM Disk um meine SD Karte vom Raspberry zu "schonen". Wäre toll wenn sich DOIFTools "einfach" den Pfad aus DOIFToolsLog ziehen würde, oder das man es als Attribut im DOIFTools angeben kann... ;-) So als Wunsch
Viele Grüße
Mit dem Attribut DOIFtoolsLogDir kannst Du einen Pfad einstellen.
Teste bitte mal mit der angehängten Datei, ob es bei Dir funktioniert.
Edit: Anhang entfernt
Scheint wunderbar zu funktionieren! Zumindest hat es bei mir auf Anhieb das gemacht was es soll...
Vielen DANK!!!
Mir ist noch etwas aufgefallen, was mich aber nicht stört, aber wo ich gerade dabei bin sage ich es Dir zumindest:
Ich nutze im fhemweb das Attribut reverseLogs = 1. Das scheint Auswirkungen auf die "jump to: the end first listing" Funktion in den DOIFToolsLog zu haben, zumindest funktioniert der "Hüpflink" bei mir nicht...
Und noch ein Wunsch, ich denke aber das das nicht umsetzbar sein wird:
Man findet ja beim entwickeln von DOIFs immer mal Meldungen wie z.B. "PERL WARNING: Use of uninitialized value in string ne at fhem.pl line..." im LOG, weil man was falsch gemacht hat... Meist kann man über den Zeitpunkt herausfinden von welchem DOIF das stammt, manchmal aber auch nicht. Über "stacktrace" findet man das auslösende DOIF auch nicht, sondern nur das es von DOIF.pm stammt...
Kurz: Wenn es einen weg gäbe irgendwo zu sehen welches das auslösende DOIF ist, dann wäre das teilweise sehr hilfreich...
Die Version wird morgen per update verteilt.
Die Bezeichnung "first listing" ist bei reverseLog irreführend, es müsste "top listing" heissen.
Zitat von: Ellert am 21 Februar 2017, 09:51:12
Die Bezeichnung "first listing" ist bei reverseLog irreführend, es müsste "top listing" heissen.
Ich hatte auch nicht richtig gelesen das "the end first listing" ja 2 und nicht 1 Link ist. Wer lesen kann ist klar im Vorteil :D
Ab morgen kann das hier: https://forum.fhem.de/index.php/topic,67880.msg593589.html#msg593589 angekündigte Icon (helper_doif.svg) in DOIFtools über eine Mehrfachauswahl für DOIF gesetzt werden.
get <name> SetAttrIconForDOIF <Auswahlliste>
Ab morgen sollte das Icon helper_doiftools per Update zur Verfügung stehen.
Mit dem morgigen Update gibt es eine verbesserte Möglichkeit, aus einer Eventzeile des Eventmonitors, DOIF-Operanden zu erzeugen.
- die Zahl Varianten wurde erhöht
- es kann jetzt ein Operand ausgewählt werden
- der ausgewählte Operand kann angepasst werden
- der angepasste Operand wird automatisch in die Zwischenablage kopiert (getestet mit Firefox)
- wenn der Dialog mit "Open DEF-Editor" beendet wird, dann wird der Editor in der aktuellen Detailansicht geöffnet und der Operand kann aus der Zwischenablage eingefügt werden.
Das funktioniert natürlich nur, wenn der Eventmonitor in einer DOIF-Detailansicht geöffnet wird.
Zusätzlich kann über den "normalen" Eventmonitor eine DOIF-Definition erzeugt werden.
Ab morgen neu:
Wenn der Event-Monitor in der DOIFtools Detailansicht geöffnet wird, kann eine neue DOIF-Definition erzeugt werden
mit toggle den Event-Monitor öffnen
eine komplette Event-Zeile markieren
einen der angezeigten Operanden auswählen
ggf. den vorgeschlagenen Gerätenamen ändern
den Knopf "Execute Definition" betätigen
Mit dem Style dark werden bei mir die get/set-Shortcuts nicht untereinander, sondern versetzt dargestellt, da die Rahmen um die get/set-Shortcuts zu groß sind. Ich will die Darstellung aber nicht per DOIFtoolsHideGetSet deaktivieren.
Gibt es eine einfache Lösung ohne das style manuell zu editieren und womöglich beim nächsten Update überschrieben zu bekommen?
Zitat von: spi3845 am 21 März 2017, 12:28:04
Mit dem Style dark werden bei mir die get/set-Shortcuts nicht untereinander, sondern versetzt dargestellt, da die Rahmen um die get/set-Shortcuts zu groß sind. Ich will die Darstellung aber nicht per DOIFtoolsHideGetSet deaktivieren.
Gibt es eine einfache Lösung ohne das style manuell zu editieren und womöglich beim nächsten Update überschrieben zu bekommen?
Ich habe ein bisschen aufgeräumt, jetzt müsste es besser aussehen.
Edit: Anhang entfernt
Zitat von: Ellert am 21 März 2017, 16:17:38
Ich habe ein bisschen aufgeräumt, jetzt müsste es besser aussehen.
Danke! Habe Datei ins FHEM-Verzeichnis kopiert, update ausgeführt und neu gestartet. Sieht immer noch versetzt aus. Siehe Screenshot.
Wenn Du nach dem Kopieren der Datei ein Update ausführst, wird sie wieder mit der offiziellen Datei überschrieben.
Also einfach nur kopieren und dann reload 98_DOIFtools.pm
durch führen. Dann sollte es wie im Anhang aussehen
Zitat von: Ellert am 21 März 2017, 18:49:37
Wenn Du nach dem Kopieren der Datei ein Update ausführst, wird sie wieder mit der offiziellen Datei überschrieben.
Also einfach nur kopieren und dann reload 98_DOIFtools.pm
durch führen. Dann sollte es wie im Anhang aussehen
Läuft. Wenn's man nicht gleich richtig macht... Danke!
Sehr cooles Tool
Habe nur ein Problem, ev auch ein Bedienfehler meinerseits.
Wenn ich im eingeblendetem Event-Monitor eine Zeile versuche zu markieren, aber sie nicht ganz erwische kommt eine
Meldung " Bitte, genau eine komplette Event-Zeile markieren."
Dieses Fenster kann ich aber nicht mehr wegklicken, mit OK.
Hilft nur mehr ein Seitenrefresh.
LG Thomas
Ich kann das Problem nicht nachstellen.
Wo tritt das Verhalten auf? Wenn Du den Eventmonitor in einem DOIF öffnest, oder wenn Du ihn in DOIFtools öffnest oder in Beiden?
Welcher Browser?, welches Gerät(Tablet, Smartphone, PC) ?
Gibt es Hinweise in der Javascript-Konsole?
Tritt das Verhalten auch auf, wenn Du den normalen Eventmonitor öffnest?
Tritt dann auf wenn ich die DOIF Tools öffne und dann dort im Event Monitor eine Zeile versuche zu markieren.
Auf meinen beiden Laptops sowie am PC mit Google Chrome.
Mit dem Firefox geht es.
Denk mal das hat mit dem Java zeugs zu tun.
LG
Zitat von: mrfloppy am 06 April 2017, 20:43:36
Tritt dann auf wenn ich die DOIF Tools öffne und dann dort im Event Monitor eine Zeile versuche zu markieren.
Auf meinen beiden Laptops sowie am PC mit Google Chrome.
Mit dem Firefox geht es.
Denk mal das hat mit dem Java zeugs zu tun.
LG
Der Fehler sollte hiermit behoben sein.
Edit: Seit heute im Update enthalten.
ZitatDer Fehler sollte hiermit behoben sein.
Geht im Google Chrome noch immer nicht bei mir.
Aber ich verwende wenn notwendig halt den Firefox.
Zitat von: mrfloppy am 08 April 2017, 18:08:30
Geht im Google Chrome noch immer nicht bei mir.
Aber ich verwende wenn notwendig halt den Firefox.
Du bist sicher, dass Du diese Version von DOIFtools hast: 98_DOIFtools.pm 13922 2017-04-07 18:29:11Z Ellert?
Das müsste in den Internals unter VERSION stehen.
Bei mir funktioniert es mit Google Chrome.
Hast Du nach dem Update "shutdown restart" durchgeführt?
ZitatHast Du nach dem Update "shutdown restart" durchgeführt?
Man sollte nicht zu viel Dinge auf einmal machen.
Habe upgedatet, aber dann voll auf den "shutdown restart" vergessen.
Danke funktioniert jetzt auch im Google Chrome.
Zitat von: mrfloppy am 08 April 2017, 20:44:59
Man sollte nicht zu viel Dinge auf einmal machen.
Habe upgedatet, aber dann voll auf den "shutdown restart" vergessen.
Danke funktioniert jetzt auch im Google Chrome.
Nie wieder den Neustart vergessen: https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche#Neustart_nach_Update_automatisieren
Hallo,
ich habe ein Problem mit der Funktion NextTimer bei DOIFtools:
Ich habe ein DOIF definiert:
define DOIF_Rolladen_Steuerung_FHEM DOIF (([{max("[TW_Tageslicht:sr_indoor]","06:00")}|8] || [10:00|7]) && [DU_Rolladen_Steuerung_FHEM] eq "FHEM") (set STRUCT_Rolladen_ALLE off)
Ich will werktags bzw. am Wochenende die Rolladen unterschiedlich hochfahren. Das klappt auch wunderbar.
Die DOIF-Timer werden entsprechend als Reading angelegt:
timer_01_c01 - 01.06.2017 06:00:00|8
timer_02_c01 - 01.06.2017 10:00:00|7
Mit DOIFtools (userReading_nextTimer_for) will ich aber das genaue Datum darstellen, wann quasi die Rollläden hochfahren.
Das funktioniert komischerweise nur, wenn ich FHEM mit "shutdown restart" neu hochfahre:
N_timer_01_c01 - 01.06.2017 06:00:00
N_timer_02_c01 - 03.06.2017 10:00:00
Erfolgt eine Änderung der Zeit aufgrund "[TW_Tageslicht:sr_indoor]" oder wenn das Ereignis eintrifft (wie heute früh), werden die "N_timer"-Readings nicht mehr korrekt dargestellt bzw. aktualisiert. Sie bleiben einfach leer, obwohl in den DOIF-Timern die richtige (veränderte) Uhrzeit steht.
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und jemand kann mir helfen.
MfG
Ich kann das Problem nicht nachstellen alle Timer werden korrekt aktualisiert.
Hier das TestDOIF für "Raw definition"
defmod NTimer DOIF ([{max("[twizone:sr_indoor]","16:05")}|8] or [10:00|7])
attr NTimer do always
attr NTimer room 0_Test
attr NTimer userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_01_c01","none"),"NTimer")},N_timer_02_c01:timer_02_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_02_c01","none"),"NTimer")}
es wurde um 16:04:24 erstellt, der Timer hat um 16:05 getriggert und aktualisiert und die N_timer sind korrekt dargestellt, siehe Listing
Internals:
CFGFN
DEF ([{max("[twizone:sr_indoor]","16:05")}|8] or [10:00|7])
NAME NTimer
NR 16599
NTFY_ORDER 50-NTimer
STATE cmd_1
TYPE DOIF
Readings:
2017-05-31 16:05:00 N_timer_01_c01 01.06.2017 16:05:00
2017-05-31 16:04:24 N_timer_02_c01 03.06.2017 10:00:00
2017-05-31 16:05:00 cmd 1
2017-05-31 16:05:00 cmd_event timer_1
2017-05-31 16:05:00 cmd_nr 1
2017-05-31 16:05:00 state cmd_1
2017-05-31 16:05:00 timer_01_c01 01.06.2017 16:05:00|8
2017-05-31 16:04:24 timer_02_c01 01.06.2017 10:00:00|7
Condition:
0 DOIF_time_once($hash,0,$wday,"8") or DOIF_time_once($hash,1,$wday,"7")
Days:
0 8
1 7
Devices:
Do:
0:
0
1:
Helper:
event timer_1
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
Internals:
Interval:
Itimer:
all twizone
Localtime:
0 1496325900
1 1496304000
Readings:
Realtime:
0 16:05:00
1 10:00:00
Regexp:
All:
State:
State:
Time:
0 {max("[twizone:sr_indoor]","16:05")}
1 10:00:00
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timers:
0 0 1
Triggertime:
1496304000:
localtime 1496304000
Hash:
1496325900:
localtime 1496325900
Hash:
Attributes:
do always
room 0_Test
userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_01_c01","none"),"NTimer")},N_timer_02_c01:timer_02_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_02_c01","none"),"NTimer")}
Möglicherweise ist Dein FHEM nicht aktuell.
Hmmm ... habe dein Code eingegeben ... geht auch nicht.
FHEM ist aktuell.
Internals:
CFGFN
DEF ([{max("[TW_Tageslicht:sr_indoor]","16:20")}|8] or [10:00|7])
NAME NTimer
NR 600
NTFY_ORDER 50-NTimer
STATE cmd_1
TYPE DOIF
Readings:
2017-05-31 16:20:00 N_timer_01_c01
2017-05-31 16:20:00 cmd 1
2017-05-31 16:20:00 cmd_event timer_1
2017-05-31 16:20:00 cmd_nr 1
2017-05-31 16:20:00 state cmd_1
2017-05-31 16:20:00 timer_01_c01 01.06.2017 16:20:00|8
2017-05-31 16:19:45 timer_02_c01 01.06.2017 10:00:00|7
Condition:
0 DOIF_time_once($hash,0,$wday,"8") or DOIF_time_once($hash,1,$wday,"7")
Days:
0 8
1 7
Devices:
Do:
0:
0
1:
Helper:
event timer_1
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
Internals:
Interval:
Itimer:
all TW_Tageslicht
Localtime:
0 1496326800
1 1496304000
Readings:
Realtime:
0 16:20:00
1 10:00:00
Regexp:
All:
State:
State:
Time:
0 {max("[TW_Tageslicht:sr_indoor]","16:20")}
1 10:00:00
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timers:
0 0 1
Triggertime:
1496304000:
localtime 1496304000
Hash:
1496326800:
localtime 1496326800
Hash:
Attributes:
do always
room 0_Test
userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_01_c01","none"),"NTimer")},N_timer_02_c01:timer_02_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_02_c01","none"),"NTimer")}
Vielleicht habe ich die DOIFtools Definition falsch.
Der zweite Timer wird gar nicht angezeigt.
defmod DOIFtools DOIFtools associated DOIF: DOIF_BZ_Thermostat_FHEM DOIF_CGB_Parameter DOIF_CGB_Parameter_EBUSD DOIF_CGB_Parameter_Wert_EBUSD DOIF_DU_Differenz_Temperatur_T2_T1 DOIF_GB_Thermostat_FHEM DOIF_G_Licht_FHEM_Tor DOIF_G_Tor_Anzeige DOIF_G_Tor_Taster DOIF_MAIL_Alert DOIF_PLUGGIT_Betriebsart_Bypass_Taster DOIF_PLUGGIT_Betriebsart_Taster DOIF_PLUGGIT_Lueften_FHEM DOIF_PLUGGIT_Lueften_FHEM_Stufe DOIF_PLUGGIT_Steuerung_FHEM DOIF_PLUGGIT_Steuerung_FHEM_MANUELL_AUS DOIF_PLUGGIT_Steuerung_FHEM_manuell DOIF_PLUGGIT_Ventilatorstufe_Taster DOIF_Rolladen_Beschattung_FHEM DOIF_Rolladen_Steuerung_FHEM DOIF_STRUCT_Thermostate_ALLE_FHEM DOIF_SamsungTV_POWER_Anzeige DOIF_SamsungTV_POWER_Taster DOIF_WZ_Thermostat_FHEM NTimer
attr DOIFtools DOIFtoolsEventMonitorInDOIF 1
attr DOIFtools DOIFtoolsExecuteDefinition 1
attr DOIFtools DOIFtoolsExecuteSave 1
attr DOIFtools DOIFtoolsMenuEntry 1
attr DOIFtools DOIFtoolsNoLookUp 1
setstate DOIFtools initialized
setstate DOIFtools 2017-05-31 15:58:11 .eM off
setstate DOIFtools 2017-05-31 16:19:45 DOIF_version 98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian
setstate DOIFtools 2017-05-31 15:58:11 FHEM_revision 14434
setstate DOIFtools 2017-05-30 11:29:36 doStatistics disabled
setstate DOIFtools 2017-05-31 15:58:11 recording_target_duration 0
setstate DOIFtools 2017-05-30 11:29:36 sourceAttribute readingList
setstate DOIFtools 2017-05-30 13:02:46 specialLog 0
setstate DOIFtools 2017-05-30 11:29:36 statisticsDeviceFilterRegex .*
Internals:
DEF associated DOIF: DOIF_BZ_Thermostat_FHEM DOIF_CGB_Parameter DOIF_CGB_Parameter_EBUSD DOIF_CGB_Parameter_Wert_EBUSD DOIF_DU_Differenz_Temperatur_T2_T1 DOIF_GB_Thermostat_FHEM DOIF_G_Licht_FHEM_Tor DOIF_G_Tor_Anzeige DOIF_G_Tor_Taster DOIF_MAIL_Alert DOIF_PLUGGIT_Betriebsart_Bypass_Taster DOIF_PLUGGIT_Betriebsart_Taster DOIF_PLUGGIT_Lueften_FHEM DOIF_PLUGGIT_Lueften_FHEM_Stufe DOIF_PLUGGIT_Steuerung_FHEM DOIF_PLUGGIT_Steuerung_FHEM_MANUELL_AUS DOIF_PLUGGIT_Steuerung_FHEM_manuell DOIF_PLUGGIT_Ventilatorstufe_Taster DOIF_Rolladen_Beschattung_FHEM DOIF_Rolladen_Steuerung_FHEM DOIF_STRUCT_Thermostate_ALLE_FHEM DOIF_SamsungTV_POWER_Anzeige DOIF_SamsungTV_POWER_Taster DOIF_WZ_Thermostat_FHEM NTimer
NAME DOIFtools
NOTIFYDEV global,RLP
NR 523
NTFY_ORDER 50-DOIFtools
STATE initialized
TYPE DOIFtools
VERSION 98_DOIFtools.pm 14089 2017-04-23 18:24:17Z Ellert
logfile ./log/DOIFtoolsLog-%Y-%j.log
Readings:
2017-05-31 16:19:45 DOIF_version 98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian
2017-05-31 15:58:11 FHEM_revision 14434
2017-05-30 11:29:36 doStatistics disabled
2017-05-31 15:58:11 recording_target_duration 0
2017-05-30 11:29:36 sourceAttribute readingList
2017-05-30 13:02:46 specialLog 0
2017-05-30 11:29:36 statisticsDeviceFilterRegex .*
Helper:
Counter:
0 0
Attributes:
DOIFtoolsEventMonitorInDOIF 1
DOIFtoolsExecuteDefinition 1
DOIFtoolsExecuteSave 1
DOIFtoolsMenuEntry 1
DOIFtoolsNoLookUp 1
Deine Definition ist o.k.
Teste mal bitte die anliegende Version.
Perfekt ... jetzt gehts.
Was ist da anders zu der normalen Version?
Zitat von: straightshooter am 31 Mai 2017, 22:06:42
Perfekt ... jetzt gehts.
Was ist da anders zu der normalen Version?
Das kannst Du Dir heute früh hier ansehen https://forum.fhem.de/index.php/board,57.0.html
Ausgehen von diesem Wunsch https://forum.fhem.de/index.php/topic,72072.msg637113.html#msg637113
habe ich in DOIFtools eine Möglichkeit eingebaut über das Attribut myWebCmd in DOIF Befehle mehrzeilig und mit Bezeichnung darzustellen.
attr <DOIF name> myWebCmd <label1|cmd1>|<label2|cmd2>...
myWebCmd ist in einem DOIF-Gerät im Atribut userattr einzutragen, danach kann das Attribut myWebCmd in dem DOIF gesetzt werden.
Es sind immer Pärchen von Bezeichnung und Befehl anzugeben.
Befehl und Bezeichnung werden durch | getrennt.
Die Pärchen werden ebenfalls durch | getrennt.
Wird nach einem Pärchen nicht | verwendet sondern \n, dann werden die nachfolgenden Pärchen innerhalb Gerätezeile in einer neuen Zeile dargestellt. Für die Bezeichnung ist HTML erlaubt.
Ein Beispiel für "Raw definition"
defmod datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
{Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
{Log 1, "Alarmstop"}
attr datumsbereich_Labor0 userattr myWebCmd
attr datumsbereich_Labor0 alias Terminspanne
attr datumsbereich_Labor0 cmdState 1|0
attr datumsbereich_Labor0 comment P_bhm:P_bday:P_bmon:P_byear:P_ehm:P_eday:P_emon:P_eyear
attr datumsbereich_Labor0 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
attr datumsbereich_Labor0 icon time_calendar
attr datumsbereich_Labor0 myWebCmd Start: ;Zeit|P_bhm|Tag|P_bday|Monat|P_bmon|Jahr|P_byear\
Ende: ;Zeit|P_ehm|Tag|P_eday|Monat|P_emon|Jahr|P_eyear
attr datumsbereich_Labor0 readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear
attr datumsbereich_Labor0 room DOIF_Labor
attr datumsbereich_Labor0 setList P_bhm:time\
P_bday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 \
P_bmon:1,2,3,4,5,6,7,8,9,10,11,12\
P_byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026\
P_ehm:time\
P_eday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31\
P_emon:1,2,3,4,5,6,7,8,9,10,11,12\
P_eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026
attr datumsbereich_Labor0 widgetOverride (setList|myWebCmd):textField-long
setstate datumsbereich_Labor0 initialized
setstate datumsbereich_Labor0 2017-06-10 15:25:25 .eM off
setstate datumsbereich_Labor0 2017-03-08 19:28:30 P_bday 8
setstate datumsbereich_Labor0 2017-06-09 18:54:17 P_bhm 12:00
setstate datumsbereich_Labor0 2017-03-08 19:28:28 P_bmon 3
setstate datumsbereich_Labor0 2017-01-19 11:02:57 P_byear 2017
setstate datumsbereich_Labor0 2017-03-08 19:28:35 P_eday 8
setstate datumsbereich_Labor0 2017-06-09 19:17:29 P_ehm 12:00
setstate datumsbereich_Labor0 2017-03-08 19:28:37 P_emon 3
setstate datumsbereich_Labor0 2017-06-09 18:55:16 P_eyear 2017
setstate datumsbereich_Labor0 2017-03-08 20:12:08 cmd 0
setstate datumsbereich_Labor0 2017-03-08 20:12:08 state initialized
setstate datumsbereich_Labor0 2017-06-10 15:35:29 timer_01_c01 11.06.2017 12:00:00
setstate datumsbereich_Labor0 2017-06-10 15:35:29 timer_02_c02 11.06.2017 12:00:00
Das Beispiel funktioniert nur mit der anliegenden DOIFtools-Test-Version.
Prinzipiell funktioniert es.
Vielleicht kommt ja noch webCmd mehrzeilig - ich warte es ab.
Ich habe noch mit TabletUI experimentiert, finde aber den Aufbau zu träge. Vielleicht gelingt es mir die Wigets direkt einzubinden.
bekomme beim neusten Update folgende Fehlermeldung im Start-Log:
PERL WARNING: Use of uninitialized value in string ne at ./FHEM/98_DOIFtools.pm line 643
Grüße
Stephan
Danke, ist behoben und morgen als Update verfügbar.
Mit DOIFtools kann ab morgen eine Tabelle erzeugt werden, die linear abgestufte Farben (Farbnummern) anzeigt. Diese Farben sind stufenweise Werten eines Wertebereiches zu geordnet.
Moin,
habe ich meine CSS irgendwie verpfriemelt, oder warum habe ich keine Zeilenumbrüche?
EDIT: Ach ja, es geht um die neue Funktion zur Erzeugung der Farbverläufe...
habe ich meine CSS irgendwie verpfriemelt, oder warum habe ich keine Zeilenumbrüche?
Keine Ahnung, welcher Style ist das?
hausautomatisierung-com benutze ich standardmäßig. Habe aber gerade mal default, oder auch dark ausprobiert, überall die selbe Darstellung 🤷♂️
Da ich mal etwas in den CSS rumgespielt habe, dachte ich auch erst, ich hätte die Files damit sie bei einem Update nicht wieder mit dem Original überschrieben werden in Global aus der Aktualisierung ausgeschlossen, dem ist aber nicht so.
Welchen Browser verwendest Du?
Es sieht so aus als würde Dein Browser den table-Tag nicht interpretieren, wenn er in einem pre-Tag verwendet wird.
Bei Firefox,Chrome und IE funktioniert es.
Probiere bitte mal den Anhang aus.
Moin,
danke, das funktioniert besser, nutze Safari.
Es scheint, dass der erste Tag ignoriert wird.
Teste bitte die anliegende Datei, Safari kann ich nicht testen.
...jetzt noch den Zeilenumbruch weg, dann ist es schick :-*
Schon erledigt.
Teste bitte noch einmal.
::) Fast ???
Ja, das ist in der Tat mysteriös.
Der Inhalt im Popup wird von FHEM in <pre>Inhalt</pre> gepackt. In pre-Tags ist offiziell unter Anderem kein table-Tag erlaubt.
Daher beendet DOIFtools den pre-Tag vor dem Inhalt und startet ihn nach dem Inhalt (</pre>Inhalt<pre>). Damit sollte HTML-Inhalt wie gewohnt angezeigt werden.
In den Browsertools zum untersuchen der HTML-Elemente sieht der Inhalt des Popups dann so aus, wie in der Anlage.
Wie sieht es bei Dir aus?
Kann es sein, dass an der fhemweb.js manipuliert wurde und irgendwelche Tags nicht geschlossen werden?
Hallo zusammen,
ich habe ein Problem mit den UserReadings für Timer mit Wochentageinschränkung. Die Angabe der Wochentage im DOIF erfolgt durch Readings in eckigen Klammern und das DOIF selbst funktioniert einwandfrei.
Die UserReadings für die nächsten Schaltzeitpunkte werden zwar aktualisiert, aber m.E. nicht korrekt berechnet. Nachfolgend die Def. des Doifs
Internals:
DEF ( [[ZS.zs.WE.Residents:alarm1_time]|[ZS.zs.WE.Residents:alarm1_wdays]] and
[ZS.zs.WE.Residents:alarm1_state] eq "on" and
[isdayreal] eq "Nacht" )
( set ST.fl.SD.WakeUpLight on-for-timer 1200 )
DOELSEIF ( [[ZS.zs.WE.Residents:alarm2_time]|[ZS.zs.WE.Residents:alarm2_wdays]] and
[ZS.zs.WE.Residents:alarm2_state] eq "on" and
[isdayreal] eq "Nacht" )
( set ST.fl.SD.WakeUpLight on-for-timer 600 )
DOELSEIF ( [[ZS.zs.WE.Residents:alarm3_time]|[ZS.zs.WE.Residents:alarm3_wdays]] and
[ZS.zs.WE.Residents:alarm3_state] eq "on" and
[isdayreal] eq "Nacht" )
( set ST.fl.SD.WakeUpLight on-for-timer 600 )
NAME di.01.ZS.zs.WE.Residents
NR 280
NTFY_ORDER 50-di.01.ZS.zs.WE.Residents
STATE  
TYPE DOIF
READINGS:
2017-11-28 19:23:35 Device ZS.zs.WE.Residents
2017-11-28 19:23:31 N_timer_01_c01 04.12.2017 05:15:00
2017-11-28 19:23:31 N_timer_02_c02 05.12.2017 06:00:00
2017-11-28 19:23:31 N_timer_03_c03 29.11.2017 07:45:00
2017-11-28 06:00:00 cmd 2
2017-11-28 06:00:00 cmd_event timer_2
2017-11-28 06:00:00 cmd_nr 2
2017-11-28 19:23:35 e_ZS.zs.WE.Residents_alarm1_state on
2017-11-28 19:23:35 e_ZS.zs.WE.Residents_alarm2_state on
2017-11-28 19:23:35 e_ZS.zs.WE.Residents_alarm3_state off
2017-11-28 16:30:00 e_isdayreal_STATE Nacht
2017-11-25 17:57:18 offsetAfter 25
2017-11-25 17:57:49 offsetBefore -5
2017-11-28 06:00:00 state cmd_2
2017-11-28 19:23:31 timer_01_c01 29.11.2017 05:15:00|[ZS.zs.WE.Residents:alarm1_wdays]
2017-11-28 19:23:31 timer_02_c02 29.11.2017 06:00:00|[ZS.zs.WE.Residents:alarm2_wdays]
2017-11-28 19:23:31 timer_03_c03 29.11.2017 07:45:00|[ZS.zs.WE.Residents:alarm3_wdays]
condition:
0 DOIF_time_once($hash,0,$wday,"[ZS.zs.WE.Residents:alarm1_wdays]") and ReadingValDoIf($hash,'ZS.zs.WE.Residents','alarm1_state') eq "on" and InternalDoIf($hash,'isdayreal','STATE') eq "Nacht"
1 DOIF_time_once($hash,1,$wday,"[ZS.zs.WE.Residents:alarm2_wdays]") and ReadingValDoIf($hash,'ZS.zs.WE.Residents','alarm2_state') eq "on" and InternalDoIf($hash,'isdayreal','STATE') eq "Nacht"
2 DOIF_time_once($hash,2,$wday,"[ZS.zs.WE.Residents:alarm3_wdays]") and ReadingValDoIf($hash,'ZS.zs.WE.Residents','alarm3_state') eq "on" and InternalDoIf($hash,'isdayreal','STATE') eq "Nacht"
days:
0 [ZS.zs.WE.Residents:alarm1_wdays]
1 [ZS.zs.WE.Residents:alarm2_wdays]
2 [ZS.zs.WE.Residents:alarm3_wdays]
devices:
0 ZS.zs.WE.Residents isdayreal
1 ZS.zs.WE.Residents isdayreal
2 ZS.zs.WE.Residents isdayreal
all ZS.zs.WE.Residents isdayreal
do:
0:
0 {set ST.fl.SD.WakeUpLight on-for-timer 1200
1:
0 {set ST.fl.SD.WakeUpLight on-for-timer 600
2:
0 {set ST.fl.SD.WakeUpLight on-for-timer 600
3:
helper:
event active
globalinit 1
last_timer 3
sleeptimer -1
triggerDev ZS.zs.WE.Residents
triggerEvents:
active
triggerEventsState:
state: active
internals:
0 isdayreal:STATE
1 isdayreal:STATE
2 isdayreal:STATE
all isdayreal:STATE
itimer:
all ZS.zs.WE.Residents
localtime:
0 1511928900
1 1511931600
2 1511937900
readings:
0 ZS.zs.WE.Residents:alarm1_state
1 ZS.zs.WE.Residents:alarm2_state
2 ZS.zs.WE.Residents:alarm3_state
all ZS.zs.WE.Residents:alarm1_state ZS.zs.WE.Residents:alarm2_state ZS.zs.WE.Residents:alarm3_state
realtime:
0 05:15:00
1 06:00:00
2 07:45:00
regexp:
0:
1:
2:
all:
state:
STATE:
time:
0 [ZS.zs.WE.Residents:alarm1_time]
1 [ZS.zs.WE.Residents:alarm2_time]
2 [ZS.zs.WE.Residents:alarm3_time]
timeCond:
0 0
1 1
2 2
timer:
0 0
1 0
2 0
timers:
0 0
1 1
2 2
trigger:
triggertime:
1511928900:
localtime 1511928900
hash:
1511931600:
localtime 1511931600
hash:
1511937900:
localtime 1511937900
hash:
Attributes:
do always
group Zeitsteuerung Beleuchtung
icon socket_timer
readingList offsetBefore,offsetAfter
room Zentrale Steuerung
setList offsetBefore:0,-5,-10,-15,-20,-25,-30,-40,-45,-50,-55 offsetAfter:0,5,10,15,20,25,30,40,45,50,55
stateFormat  
userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("di.01.ZS.zs.WE.Residents","timer_01_c01","none"),"di.01.ZS.zs.WE.Residents")},N_timer_02_c02:timer_02_c02.* {DOIFtoolsNextTimer(ReadingsVal("di.01.ZS.zs.WE.Residents","timer_02_c02","none"),"di.01.ZS.zs.WE.Residents")},N_timer_03_c03:timer_03_c03.* {DOIFtoolsNextTimer(ReadingsVal("di.01.ZS.zs.WE.Residents","timer_03_c03","none"),"di.01.ZS.zs.WE.Residents")}
webCmd offsetBefore:offsetAfter
webCmdLabel Offset vorher:Offset danach
weekdays Su,Mo,Tu,We,Th,Fr,Sa,NW,WD
Nach der letzten Aktualisierung sehen die UserReadings so aus:
2017-11-28 19:23:31 N_timer_01_c01 04.12.2017 05:15:00
2017-11-28 19:23:31 N_timer_02_c02 05.12.2017 06:00:00
2017-11-28 19:23:31 N_timer_03_c03 29.11.2017 07:45:00
und die Wochentage, die in den steuernden Readings hinterlegt sind so:
2017-11-28 19:33:44 alarm1_wdays Mo Tu We Th Fr
2017-11-28 19:33:44 alarm2_wdays Mo Tu We Th Fr
2017-11-28 19:33:44 alarm3_wdays Sa
Die ersten beiden Timer müssten also aktuell auf morgen lauten und der dritte Timer auf den nächsten Samstag also den 2.12.2017.
Ich hoffe, das ist nachzuvollziehen und es gibt für das Problem eine Lösung.
Beste Grüße
Torsten
Indirekte Wochentagangaben werden leider nicht unterstützt.
Das ist aber schade... besteht die Chance, dass dies noch kommt?
Zitat von: ToKa am 29 November 2017, 19:41:15
Das ist aber schade... besteht die Chance, dass dies noch kommt?
Das ist ein Fass ohne Boden, als nächstes wird der Wunsch kommen holiday auszuwerten. ;)
Bei DOIF wird, wie auch beim at, jeden Tag getriggert und dann erst nachgeschaut, ob die Zeitangabe wahr ist. Bei dieser Vorgehensweise ist es fast unmöglich eine Vorhersage zu treffen.
Zitat von: ToKa am 29 November 2017, 19:41:15
Das ist aber schade... besteht die Chance, dass dies noch kommt?
Du hast die Chance, userReadings nutzt die Funktion DOIFtoolsNextTimer aus 98_DOIFtools.pm, die könntest Du unter einem anderen Namen in die 99_myUtils kopieren, an Deine Bedürfnisse anpassen und statt DOIFtoolsNextTimer verwenden.
Hallo Ellert,
danke für den Tipp. Habe mir die Funktion "DOIFtoolsNextTimer" angeschaut und werde es mal mit einer eigenen Variante probieren.
Beste Grüße
Torsten
Zitat von: ToKa am 29 November 2017, 21:06:56
Hallo Ellert,
danke für den Tipp. Habe mir die Funktion "DOIFtoolsNextTimer" angeschaut und werde es mal mit einer eigenen Variante probieren.
Beste Grüße
Torsten
DOIFtoolsNextTimer benötigt ein Timerreading in der Form" timer_xx_cyy"
Das könntest Du über DOIF_Readings anlegen und daraus den DOIFtoolsNextTimer bilden.
Beispiel
defmod indNTimer DOIF ([18:00|[$SELF:mydays]])
attr indNTimer DOIF_Readings timer_91_c01:[$SELF:timer_01_c01:"(.*\|)"].[$SELF:mydays]
attr indNTimer do always
attr indNTimer room 0_Test
attr indNTimer userReadings N_timer_01_c01:timer_91_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_91_c01","none"),"NTimer")}
setstate indNTimer initialized
setstate indNTimer 2017-11-30 13:24:42 N_timer_01_c01 04.12.2017 21:45:00
setstate indNTimer 2017-11-30 13:22:14 cmd 0
setstate indNTimer 2017-11-30 13:24:42 mydays 123
setstate indNTimer 2017-11-30 13:22:14 state initialized
setstate indNTimer 2017-11-30 13:22:14 timer_01_c01 30.11.2017 18:00:00|[indNTimer:mydays]
setstate indNTimer 2017-11-30 13:24:42 timer_91_c01 30.11.2017 18:00:00|123
über DOIF_Readings wird der Pseudotimer timer_91_c01 erzeugt und darauf das userReading gesetzt, das den N_timer_c01_01 bildet.
Hallo Ellert,
das ist ja mal eine Steilvorlage. Dankeschön!
Zum Ausprobieren müsste ich dann wohl die DOIF Version aus dem Forum nehmen, um die DOIF_Readings einzusetzen - richtig? Die Wochentage kommen aus dem Alarm-Reading meiner Fritzbox und sind somit die Kürzel der englischen Wochentage. Funktioniert damit dann DOIFtoolsNextTime auch?
Beste Grüße
Torsten
Beides mal, ja.
Zitat von: ToKa am 30 November 2017, 19:53:06
Hallo Ellert,
das ist ja mal eine Steilvorlage. Dankeschön!
Zum Ausprobieren müsste ich dann wohl die DOIF Version aus dem Forum nehmen, um die DOIF_Readings einzusetzen - richtig? Die Wochentage kommen aus dem Alarm-Reading meiner Fritzbox und sind somit die Kürzel der englischen Wochentage. Funktioniert damit dann DOIFtoolsNextTime auch?
Beste Grüße
Torsten
Probier mal die anliegende Version.
Hallo Ellert,
hab die Version installiert und nach dem Neustart von fhem sind die nextTimer korrekt. Werde das mal über die nächsten Tage beobachten bzw. dann mal noch mit den Wochentagen spielen.
Vielen Dank!
Torsten
Hallo Ellert,
funktioniert auch nach mehreren Tagen und Änderungen wie gewünscht. Wäre super, wenn die Änderung bald in die offizielle Version einfließen könnte.
Danke und Gruß
Torsten
Zitat von: ToKa am 08 Dezember 2017, 21:11:40
Hallo Ellert,
funktioniert auch nach mehreren Tagen und Änderungen wie gewünscht. Wäre super, wenn die Änderung bald in die offizielle Version einfließen könnte.
Danke und Gruß
Torsten
Ich habe nur auf Deine Rückmeldung gewartet.
Ab morgen werden die laufenden Blocking Calls nachrichtlich angezeigt, wenn die laufenden Waittimer abgefragt werden.
get runningTimerInDOIF
Wer DOIFtoolsLog nutzt, vermisst vielleicht eine Möglichkeit die dazu gehörende FileLog Definition und die erzeugten Logfiles zu löschen.
Dazu ist das Attribut DOIFtoolsMyShortcuts zu ergänzen mit
,remove_DOIFtoolsLog,fhem?cmd=delete DOIFtoolsLog;%22rm ./log/DOIFtoolsLog*.log%22
Falls nicht die Default-Definition genutzt wird müssen ggf. Pfad und Namen angepasst werden.
Siehe auch: https://wiki.fhem.de/wiki/DOIFtools#Definitionsvorschlag_zum_Import_.C3.BCber_Raw_definition
Ab morgen im Update:
Mit
get DOIFtools subsInPackageDOIF
werden die vom Benutzer im Package DOIF deklarierten Subs aufgelistet und mit einem Link zu dem Gerät versehen, in dem sie deklariert wurden.
Ab heutigem Update:
DOIFtools verwendet das versteckte Reading .associatedWith und nicht mehr das Internal DEF um die verbundenen DOIF-Geräte anzuzeigen.