[PATCH] SetExtensions (on-for-timer etc.) für MQTT_Device

Begonnen von ThoTo, 05 Januar 2018, 18:38:26

Vorheriges Thema - Nächstes Thema

hexenmeister

Irgendwie ist mir nicht klar, was Du erreichen möchtest. Wenn es ohne eventMap alles korrekt schaltet und Du nur die Icons ändern willst, brauchst Du doch gar kein eventMap. Dafür ist devStateIcon zuständig.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

offenbar bin ich zu doof, die SetExtensions in einem MQTT device zu nutzen.

Das Attribut ist gesetzt, im Logfile steht korrekt "2018.08.06 19:22:52 5: calling SetExtensions(...) for on-for-timer" und trotzdem bekomme ich eine Fehlermeldung "Unknown argument on-for-timer, choose one of OFF ON"

(Sorry, ich musste grad mal Frust loswerden)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

hexenmeister

#62
Habe gerade versucht, mit Erfolg.
Mein Testdevice:
defmod MQ_DG_WZ_Licht_Top MQTT_DEVICE
attr MQ_DG_WZ_Licht_Top IODev mqtt
attr MQ_DG_WZ_Licht_Top devStateIcon off:light_light_dim_00@gray on:light_light_dim_100@yellow .*:hourglass
attr MQ_DG_WZ_Licht_Top eventMap on:on off:off
attr MQ_DG_WZ_Licht_Top group DG_Wohnzimmer
attr MQ_DG_WZ_Licht_Top mqttDeviceType switch
attr MQ_DG_WZ_Licht_Top publishSet on off /ha/dg/wz/licht/top/set
attr MQ_DG_WZ_Licht_Top room MQTT_TEST
attr MQ_DG_WZ_Licht_Top stateFormat state
attr MQ_DG_WZ_Licht_Top subscribeReading_state /ha/dg/wz/licht/top/state
attr MQ_DG_WZ_Licht_Top useSetExtensions 1
attr MQ_DG_WZ_Licht_Top webCmd on:off


on-for-timer, off-for-timer, blink funktionieren (rest nicht ausprobiert).
Beim 'blink' landen jedoch Warnungen im Log:

2018.08.06 20:36:08 1: PERL WARNING: Use of uninitialized value $p2 in pattern match (m//) at FHEM/SetExtensions.pm line 127.
2018.08.06 20:36:08 1: stacktrace:
2018.08.06 20:36:08 1:     main::__ANON__                      called by FHEM/SetExtensions.pm (127)
2018.08.06 20:36:08 1:     main::SetExtensions                 called by ./FHEM/10_MQTT_DEVICE.pm (104)
2018.08.06 20:36:08 1:     MQTT::DEVICE::Set                   called by fhem.pl (3579)
2018.08.06 20:36:08 1:     main::CallFn                        called by fhem.pl (1795)
2018.08.06 20:36:08 1:     main::DoSet                         called by fhem.pl (1828)
2018.08.06 20:36:08 1:     main::CommandSet                    called by fhem.pl (1209)
2018.08.06 20:36:08 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2576)
2018.08.06 20:36:08 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (902)
2018.08.06 20:36:08 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (532)
2018.08.06 20:36:08 1:     main::FW_Read                       called by fhem.pl (3584)
2018.08.06 20:36:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.06 20:36:08 1: PERL WARNING: Use of uninitialized value $p2 in concatenation (.) or string at FHEM/SetExtensions.pm line 134.
2018.08.06 20:36:08 1: stacktrace:
2018.08.06 20:36:08 1:     main::__ANON__                      called by FHEM/SetExtensions.pm (134)
2018.08.06 20:36:08 1:     main::SetExtensions                 called by ./FHEM/10_MQTT_DEVICE.pm (104)
2018.08.06 20:36:08 1:     MQTT::DEVICE::Set                   called by fhem.pl (3579)
2018.08.06 20:36:08 1:     main::CallFn                        called by fhem.pl (1795)
2018.08.06 20:36:08 1:     main::DoSet                         called by fhem.pl (1828)
2018.08.06 20:36:08 1:     main::CommandSet                    called by fhem.pl (1209)
2018.08.06 20:36:08 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2576)
2018.08.06 20:36:08 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (902)
2018.08.06 20:36:08 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (532)
2018.08.06 20:36:08 1:     main::FW_Read                       called by fhem.pl (3584)
2018.08.06 20:36:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.06 20:36:08 1: PERL WARNING: Use of uninitialized value $p2 in addition (+) at FHEM/SetExtensions.pm line 138.
2018.08.06 20:36:08 1: stacktrace:
2018.08.06 20:36:08 1:     main::__ANON__                      called by FHEM/SetExtensions.pm (138)
2018.08.06 20:36:08 1:     main::SetExtensions                 called by ./FHEM/10_MQTT_DEVICE.pm (104)
2018.08.06 20:36:08 1:     MQTT::DEVICE::Set                   called by fhem.pl (3579)
2018.08.06 20:36:08 1:     main::CallFn                        called by fhem.pl (1795)
2018.08.06 20:36:08 1:     main::DoSet                         called by fhem.pl (1828)
2018.08.06 20:36:08 1:     main::CommandSet                    called by fhem.pl (1209)
2018.08.06 20:36:08 1:     main::AnalyzeCommand                called by ./FHEM/01_FHEMWEB.pm (2576)
2018.08.06 20:36:08 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (902)
2018.08.06 20:36:08 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (532)
2018.08.06 20:36:08 1:     main::FW_Read                       called by fhem.pl (3584)
2018.08.06 20:36:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.06 20:36:58 5: calling SetExtensions(...) for on-for-timer
2018.08.06 20:36:58 5: publish received for /ha/dg/wz/licht/top/state, on
2018.08.06 20:36:58 5: calling readingsSingleUpdate(MQ_DG_WZ_Licht_Top,state,on,1)
2018.08.06 20:37:01 5: publish received for /ha/dg/wz/licht/top/state, off
2018.08.06 20:37:01 5: calling readingsSingleUpdate(MQ_DG_WZ_Licht_Top,state,off,1)

Hast Du useSetExtensions gesetzt?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

#63
Klar, habe ich SetExtensions gesetzt. Im Log steht ja sogar, dass die SetExtensions (angeblich) aufgerufen werden.

Mir erschließt sich der Sinn folgender Attribute bei Dir in keinster Weise:


attr MQ_DG_WZ_Licht_Top eventMap on:on off:off
attr MQ_DG_WZ_Licht_Top stateFormat state


Zitat von: hexenmeister am 06 August 2018, 20:41:06
Beim 'blink' landen jedoch Warnungen im Log:

Vermutlich hast Du nicht angegeben, wie oft es blinken soll.



Edit:
Vermutlich hast Du nicht angegeben, wie oft und wie lange es blinken soll

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

betateilchen

Ok.

Ich habe nun ein komplett neues MQTT device angelegt. Dann habe ich useSetextensions gesetzt, bevor ich irgendein publish... oder subscribe... angegeben habe.

Und siehe da: nun sind auch die SetExtensions da. Ein shutdown restart von FHEM hat beim vorhandenen device nicht gereicht.

Irgendwie schräg.


define obi MQTT_DEVICE
attr obi IODev mqtt
attr obi publishSet on off cmnd/WemosD1/POWER
attr obi subscribeReading_Power stat/WemosD1/POWER
attr obi subscribeReading_state tele/WemosD1/STATE
attr obi useSetExtensions 1
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

hexenmeister

Zitat von: betateilchen am 06 August 2018, 20:55:58
Mir erschließt sich der Sinn folgender Attribute bei Dir in keinster Weise:

attr MQ_DG_WZ_Licht_Top eventMap on:on off:off
attr MQ_DG_WZ_Licht_Top stateFormat state


Mir auch nicht ;D
Es ist mein Testserver mit einem Testdevice, das ich mal wieder zum Testen umgebogen habe. Sind Überreste von irgendwan von irgendwas.

Zitat von: betateilchen am 06 August 2018, 20:55:58
Vermutlich hast Du nicht angegeben, wie oft und wie lange es blinken soll

set .. blink <anzahl> <dauer>
Wie oft habe ich schon angeggeben, wie lange nicht (sollte ja optional sein). 'Geblinkt' hat es ja auch.


Wieso es bei Dir erst so funktioniert hat, ist mir allerdings auch ein Rätsel. Ich habe meinen Device nachhinein useSetextensions beigebogen, ohne Neustart. Ging sofort.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

Zitat von: hexenmeister am 06 August 2018, 21:17:11
Wie oft habe ich schon angeggeben, wie lange nicht (sollte ja optional sein).

Naja, wirklich optional ist das nicht. Wenn man in den Code von SetExtensions.pm schaut, sollte es sogar eine Fehlermeldung geben, die aber scheinbar irgendwo verlorengeht.


  } elsif($cmd eq "blink") {
    my $p2 = $a[1];
    return "$cmd requires 2 numbers as argument"
        if($param !~ m/^\d+$/ || $p2 !~ m/^\d*\.?\d*$/);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

hexenmeister

hm. hast recht. funktioniert jedoch ganz gut ohne den zweiten Parameter (gefühlt wird eine Sekunde angenommen). Egal, ist hier ot.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

beugel01

Hi,
bei mir funktioniert on-for-timer nicht.

Device sieht z.B.: so aus:

define Switch1 MQTT_DEVICE
attr Switch1 IODev myBroker
attr Switch1 eventMap 0:off 1:on
attr Switch1 publishSet 0 1 /house/switch1/
attr Switch1 room ESP-8er
attr Switch1 stateFormat state
attr Switch1 subscribeReading_state /house/switchConfirm1/
attr Switch1 useSetExtensions 1
attr Switch1 webCmd on:off


wenn ich mir mit

mosquitto_sub -v -h localhost -p 1883 -t '#'

mosquitto ansehe kommt mit  "set Switch1 on-for-timer 2":

/house/switch1/ 1-for-timer 2
/house/switchConfirm2/ 1

an.
Das "on-for-timer" wird also zu "1-for-timer" .

"set Switch1 blink 5 1" funktioniert wunderbar.

Oder verstehe ich das ganz komplett falsch und on-for-timer muss vom Device umgesetzt werden nicht von FHEM?

hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

ThoTo

Zitat von: beugel01 am 13 August 2018, 18:18:38
Hi,
bei mir funktioniert on-for-timer nicht.

Device sieht z.B.: so aus:

define Switch1 MQTT_DEVICE
attr Switch1 IODev myBroker
attr Switch1 eventMap 0:off 1:on
attr Switch1 publishSet 0 1 /house/switch1/
attr Switch1 room ESP-8er
attr Switch1 stateFormat state
attr Switch1 subscribeReading_state /house/switchConfirm1/
attr Switch1 useSetExtensions 1
attr Switch1 webCmd on:off


wenn ich mir mit

mosquitto_sub -v -h localhost -p 1883 -t '#'

mosquitto ansehe kommt mit  "set Switch1 on-for-timer 2":

/house/switch1/ 1-for-timer 2
/house/switchConfirm2/ 1

an.
Das "on-for-timer" wird also zu "1-for-timer" .

"set Switch1 blink 5 1" funktioniert wunderbar.

Oder verstehe ich das ganz komplett falsch und on-for-timer muss vom Device umgesetzt werden nicht von FHEM?

Bitte eventMap wie folgt setzen:
attr Switch1 eventMap { dev=>{ '1'=>'on', '0'=>'off' }, usr=>{ '^on$'=>'1', '^off$'=>'0' }, fw=>{ '^on$'=>'on', '^off$'=>'off' } }

LG Thomas
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

betateilchen

(offtopc)

das Attribut stateFormat auf state zu setzen, ist völlig sinnlos, denn das ist das Standardverhalten wenn stateFormat nicht existiert. Möchte mal gerne wissen, aus welcher verkorksten copy&paste Quelle dieser immer wieder zu lesende Unfug stammt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ThoTo

Zitat von: betateilchen am 13 August 2018, 22:58:48
(offtopc)

das Attribut stateFormat auf state zu setzen, ist völlig sinnlos, denn das ist das Standardverhalten wenn stateFormat nicht existiert. Möchte mal gerne wissen, aus welcher verkorksten copy&paste Quelle dieser immer wieder zu lesende Unfug stammt.

(offtopic)²

http://goo.gl/Ueqq1q
Es ist nicht nur eine Quelle :o 8)

LG Thomas
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

beugel01

Zitat von: ThoTo am 13 August 2018, 22:52:11
attr Switch1 eventMap { dev=>{ '1'=>'on', '0'=>'off' }, usr=>{ '^on$'=>'1', '^off$'=>'0' }, fw=>{ '^on$'=>'on', '^off$'=>'off' } }

Danke funktioniert.

Macht es Sinn zu fragen was das bedeutet und wie man darauf kommt?

ThoTo

KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)