on-till funktioniert nicht?

Begonnen von jw9, 23 Mai 2023, 19:23:16

Vorheriges Thema - Nächstes Thema

jw9

Hallo,

set Gartenlicht_Baeume on-till 19:06

schaltet das Licht zwar ein, aber nicht mehr wieder aus. Auch beim Format HH:MM:SS oder in Anführungszeichen, in geschweiften Klammern oder Anführungszeichen und geschweifte Klammern gibt den gleichen Effekt.

An der Definition der Lampe kann es nicht liegen, sonst würde diese gar nicht reagieren. Aber das Einschalten funktioniert ja. Nur das wieder Ausschalten eben nicht.

set Gartenlicht_Baeume on-for-timer 3
hingegen funktioniert einwandfrei (schaltet also ein und nach drei Sekunden wieder aus).

Bei on-for-timer erscheint im Eventlog ein Eintrag der Form 2023-05-23 19:02:07 at Gartenlicht_Baeume_TIMER_01178 Next: 19:02:10 Solch ein Eintrag erscheint bei on-till nicht.

Commandref behauptet, "this definition is visible", aber ich kann im Raum "Everything" die Zeichenkette "till" nirgendwo finden.

Was könnte hier kaputt sein?

MadMax-FHEM

Wie wäre es mit einem list des Devices?

Mindestens: welcher Typ Device/Gerät wäre ja auch schon mal was gewesen ;)

EDIT: siehe auch https://forum.fhem.de/index.php?topic=71806.0

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

jw9

Aber sicher doch. Wenn es im Gegenzug eine Erklärung gibt wieso es vom device abhängen soll dass on-for-timer funktioniert aber on-till nur zur Hälfte  ;)

defmod Gartenlicht_Baeume KNX 1/1/120:dpt1.001:EinAus 1/4/120:dpt1.011:status:get
attr Gartenlicht_Baeume IODev KNXIF
attr Gartenlicht_Baeume alias Gartenlicht_Baeume
attr Gartenlicht_Baeume cmdIcon on:rc_GREEN off:rc_RED STS:rc_INFO@yellow
attr Gartenlicht_Baeume devStateIcon active:FS20.on:off inactive:FS20.off:on switching.*:hourglass:off
attr Gartenlicht_Baeume group Timer
attr Gartenlicht_Baeume room Timer
attr Gartenlicht_Baeume sortby 0
attr Gartenlicht_Baeume stateRegex /EinAus-set/switching-/ /EinAus-get//
attr Gartenlicht_Baeume webCmd on:off

setstate Gartenlicht_Baeume 2023-05-23 19:51:34 IODev KNXIF

MadMax-FHEM

#3
Weil es halt unterschiedliche Stellen/Arten gibt wie es implementiert ist.

Es gibt die set-Extensions von fhem -> programmiert in fhem mit fhem Mitteln Timern usw. (überlebt u.U. keinen Neustart?)

Homematic: dort ist es direkt im Gerät (nicht fhem und auch nicht fhem Device) programmiert. Das übersteht einen fhem Neustart bzw. braucht es nach Absetzen des Befehls kein fhem mehr ;)
(dafür sind on-for-timer glaube ich nicht so "genau", weil glaube ich nur bestimmte Werte angenommen werden können?)

Leider habe ich keine Ahnung wie das bei KNX ist...

Ein Verschieben (kannst du selbst) ins KNX Unterforum könnte daher helfen...
EDIT:
Zitat von: help knxModule: 10_KNX.pm Maintainer: erwin Forum: KNX/EIB (Forum #122582) (see MAINTAINER.txt for more info)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

jw9

Die commandref sagt explizit:
This definition is visible, and its name is deviceName+"_till". To cancel the scheduled off, delete the at definition.
Das klingt für mich danach, dass fhem-Funktionalität für das timing verwendet wird.

Da würde ich es doch sehr überraschend finden, wenn irgendwelche bus-spezifischen timing-Funktionen verwendet würden.

MadMax-FHEM

Mag sein.
Aber kann ja auch sein, dass das Modul intern fhem Mechanismen nutzt und das evtl. nicht korrekt/wie beschrieben?

Noch mal: leider kenne ich KNX nicht...

Daher: verschieben!?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

jw9

Das Problem liegt tatsächlich in 10_KNX.pm, das nicht das in der commandref beschriebene "on-till" implementiert, sondern ein "on-until"

--- 10_KNX.pm~  2023-05-21 03:00:52.163441691 +0200
+++ 10_KNX.pm   2023-05-23 22:56:46.077809099 +0200
@@ -863,7 +863,7 @@
                CommandDefMod(undef, '-temporary ' .  $name . qq{_TIMER_$groupCode at +$duration set $name $targetGadName $tvalue});
        }
        #set on-until / off-until
-       elsif ($cmd =~ m/(?:(on|off)-until)$/ixms) {
+       elsif ($cmd =~ m/(?:(on|off)-(un)?till?)$/ixms) {
                #get off-time
                my ($err, $hr, $min, $sec, $fn) = GetTimeSpec($arg[0]); # fhem.pl
                return qq{KNX_Set_dpt1 ($name): Error trying to parse timespec for $arg[0] : $err} if (defined($err));

Dieser Patch behebt das Problem.

Diese Inkonsistenz ist wohl eher nicht beabsichtigt...

Also doch verschieben?

betateilchen

#7
Das ist kein Bug, sondern wird eher daran liegen, dass das KNX Modul älter ist als die SetExtensions. Insofern "durfte" und musste der Modulentwickler das seinerzeit so implementieren, wie er es für richtig hielt. Und wenn er on-until für richtig hielt, dann ist das halt so und der Anwender sollte einfach die vom Modul vorgegebene Syntax verwenden.

Die Syntax "on-until" und "off-until" ist in der commandref zu KNX korrekt beschrieben und dokumentiert.

set <deviceName> [gadName] <on-for-timer|on-until|off-for-timer|off-until> <timespec>
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jw9

Ich habe ganz bewusst nicht "Bug" sondern "Problem" und "Inkonsistenz" geschrieben. Auch habe ich die Änderung die das Problem behebt nicht "Fix" genannt, sondern vollkommen wertfrei "Patch". Dass der Patch wertfrei ist erkennst Du auch daran, dass er beide Varianten zulässt.

Ich habe auch nirgends irgendwelche Schuldzuweisungen auch nur angedeutet, insofern finde ich Deinen Unterton an dieser Stelle nicht angebracht.

Wobei ich durchaus der Meinung bin, dass solche Inkonsistenzen nicht gerade förderlich sind. Ganz unabhängig davon wie sie entstanden sind. Aber das ist meine persönliche Meinung, YMMV!

Da es sich um einen "set"-Befehl handelt, habe ich mich an der Beschreibung des "set"-Befehls orientiert. Aber stimmt: ich hätte durchaus auf die Idee kommen können, dass Extensions von einzelnen Modulen "umbenannt" werden können/dürfen/sollen. Eine Fehlermeldung, dass die Extension nicht erkannt wurde wäre aber schön gewesen.

Aber wenn meine Vermutung (dass diese Inkonsistenz vermutlich nicht beabsichtigt ist) falsch sein sollte, dann soll mir das auch recht sein...

betateilchen

Zitat von: jw9 am 24 Mai 2023, 02:36:35insofern finde ich Deinen Unterton an dieser Stelle nicht angebracht.

Da war überhaupt kein Unterton irgendeiner Art in meinem Beitrag. Das sollte lediglich ein Erklärungsversuch zur möglichen Entstehungsgeschichte dessen, was Du als "Inkosistenz" bezeichnest, sein.

Man könnte den Spieß ja auch umdrehen und fragen, warum in den SetExtensions die möglichen setter nicht "on-until" und "off-until" benannt wurden  :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

erwin

#10
Ein "help KNX" hätte schnell Licht ins dunkel gebracht...
Ja, die timer-funktionen sind im KNX-Modul untergebracht, die Begründung ist eine technische, die möchte ich hier nicht (nochmals) diskutieren.

die Inkonsistenz ist beabsichtigt:
 in setextension gibts die commands on-till und on-till-overnight,
 im KNX-Modul on-until - das exakt wie on-till-overnight funktioniert!
Tip: wenn man set <KNX-device> on-until mit eine relativen Zeit setzt (zb. sunrise(CIVIL)), dann sollte das Argument auch eine relative Zeit sein.
Tip2: on-for-timer verwenden.   
l.g.erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

jw9

Zitat von: betateilchen am 24 Mai 2023, 09:30:57Da war überhaupt kein Unterton irgendeiner Art in meinem Beitrag.
Hmmm...

Zitat von: betateilchen am 24 Mai 2023, 09:30:57Das sollte lediglich ein Erklärungsversuch zur möglichen Entstehungsgeschichte dessen, was Du als "Inkosistenz" bezeichnest, sein.
Allein schon der Umstand, dass Du sofort in Verteidigungs-Modus geschaltet hast ("das ist kein Bug") und das Bedürfnis hattest die Historie zu erläutern (obwohl nicht danach gefragt wurde) zeigt doch schon, dass der aktuelle Stand suboptimal ist.

Zitat von: betateilchen am 24 Mai 2023, 09:30:57Man könnte den Spieß ja auch umdrehen und fragen, warum in den SetExtensions die möglichen setter nicht "on-until" und "off-until" benannt wurden 
Könnte man. Wenn man an Schuldzuweisungen interessiert ist. Bin ich nicht. Mir ging es lediglich darum auf eine (aus meiner Sicht) Inkonsistenz hinzuweisen von der ich ausging, dass sie versehentlich entstanden ist. Wie gesagt: Wenn die Herren Entwickler hierin keine Inkonsistenz sehen und das beabsichtigt ist, dann soll mir das auch recht sein. Ich bin ja nicht derjenige der die Historie darlegen muss.

Zitat von: erwin am 24 Mai 2023, 09:49:19Ja, die timer-funktionen sind im KNX-Modul untergebracht, die Begründung ist eine technische, die möchte ich hier nicht (nochmals) diskutieren.
Interessant. Vielleicht hast Du ja mal einen Link?

Zitat von: erwin am 24 Mai 2023, 09:49:19die Inkonsistenz ist beabsichtigt:
 in setextension gibts die commands on-till und on-till-overnight,
 im KNX-Modul on-until - das exakt wie on-till-overnight funktioniert!
Kann man so machen.

Aber muss man das auch sinnvoll finden? IchWeissNichSoRecht... Aber wie gesagt: soll mir recht sein. Nicht meine Baustelle.

ZitatTip: wenn man set <KNX-device> on-until mit eine relativen Zeit setzt (zb. sunrise(CIVIL)), dann sollte das Argument auch eine relative Zeit sein.
Warum?

ZitatTip2: on-for-timer verwenden. 
Gartenlicht soll bei Sonnenuntergang eingeschaltet und um Mitternacht wieder ausgeschaltet werden. Wie mache ich das mit on-for-timer?

erwin

Gartenlicht soll bei Sonnenuntergang eingeschaltet und um Mitternacht wieder ausgeschaltet werden. Wie mache ich das mit on-for-timer?Kann man so machen, nix dagegen. Es soll allerdings Gegenden/Jahreszeiten auf der Welt geben, wo die Sonne nicht untergeht.
Oder es kommt jemand auf die Idee: Licht an bei sunset - until 20:00. Falls dann die Sonne um 20:01 untergeht, brennt das Licht lang, und geht am nächsten Tag um 20:00 aus! So war das gemeint.

Man musst nicht alles sinnvoll finden, und manches würde ich heute evtl. auch anders lösen, aber die cmd-ref hilft meist!
... und falls nicht, gibts auch noch dieses Forum  ;D
l.g.Erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

betateilchen

Zitat von: jw9 am 25 Mai 2023, 09:08:32Gartenlicht soll bei Sonnenuntergang eingeschaltet und um Mitternacht wieder ausgeschaltet werden. Wie mache ich das mit on-for-timer?

Die Sekunden bis Mitternacht ausrechnen und an on-for-timer übergeben?

In meiner 99_myUtils.pm gibt es bezüglich Mitternacht zwei Funktionen:

sub secondsFromMidnight{
my @time = localtime();
return (($time[2] * HOURSECONDS) + ($time[1] * MINUTESECONDS) + $time[0]);
}

sub secondsToMidnight{
return DAYSECONDS - secondsFromMidnight();
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

erwin

Um das Thema:
on-till funktioniert nicht? abzuschließen.
Falls dir das "on-till" wichtig ist, es gibt ein wunderbares Attribut in FHEM, mit dem man sich dieses cmd auch für KNX-devices machen kann. Das Zauberwort heisst eventMap !
PS: Mit deinem patch funktioniert on-until nicht mehr....(ausser man schreibt mit 2* l  ;D )

Falls das Thema auch für dich erledigt ist, bitte Thread mit [erledigt] im Titel markieren.
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

jw9

Zitat von: erwin am 25 Mai 2023, 13:06:42Es soll allerdings Gegenden/Jahreszeiten auf
der Welt geben, wo die Sonne nicht untergeht.
Wenn sich mein Garten jemals in Richtung Polarkreis auf den Weg machen sollte, dann hätte ich ganz andere Sorgen als dass die Lampe nicht mehr ausgeht.

Zitat von: erwin am 25 Mai 2023, 13:06:42Oder es kommt jemand auf die Idee: Licht an bei sunset - until 20:00. Falls dann die Sonne um 20:01 untergeht, brennt das Licht lang, und geht am nächsten Tag um 20:00 aus! So war das gemeint.
Naja, das ist ja logisch.

Bei Deiner pauschalen Warnung oben hatte ich schon befürchtet, da könnte eine weitere beabsichtigte "nicht"-Inkonsistenz versteckt sein...

Zitat von: erwin am 25 Mai 2023, 15:10:17PS: Mit deinem patch funktioniert on-until nicht mehr....(ausser man schreibt mit 2* l  ;D )
Das halte ich jetzt mal für ein Gerücht ;D ;D ;D