Ich wollte gestern allowedCommands für telegramBot einbauen und dafür die Logik in AnalyzeCommand benutzen. Dabei bin ich über ein Problem/ eine Frage gestolpert:
Allowed arbeitet nur wenn im device-hash der SNAME gesetzt ist. Dies wird normalerweise wohl in TcpServerUtils erledigt, allerdings benötige ich keinen TcpServer (sondern ein non-blocking longpoll über httputils).
=> Ich habe jetzt mal selber SNAME im hash gesetzt konnte aber keine Beschreibung/Info finden, wo SNAME noch verwendet / erwartet wird
Frage: Sind da Seiteneffekte zu erwarten oder passt das so?
Generelle Anmerkung: im device-hash sind einige reservierte Namen in Verwendung bei denen man interessante Effekte erzielen kann wenn man sie für eigene Zwecke "missbraucht". Gibt es da eigentlich so etwas wie einen "reservierten Namensraum"?
Reservierter Namensraum gibt es nicht, und SNAME ist auch nur ein de-facto "Standard" dadurch, dass mehrere Module (FHEMWEB, Blocking, allowed) es verwenden.
OK und Danke, also werde ich das erstmal nutzen und habe es auch im Wiki für AnalyzeCommand... beschrieben.
wäre es eventuell sinnvoll nur dann auf SNAME zu prüfen wenn es auch SNAME gibt und andernfalls NAME zu verwenden?
Wenn du einen getesteten Patch erstellst, habe ich kein Problem damit.
Gibt es dafuer Anwendungsgebiete?
ein beispiel für die anwendung:
im yowsup modul geschieht die kommunikation über einen einzigen prozess zu dem es ein fhem device gibt. für jeden kommunikationspartner wird ein eigenes fhem device angelegt. für jedes dieser partner devices lässt sich allowed verwenden.
die beziehung zwischen den modulen ist hier eher so wie bei physikalischen/logischen modulen mit einem zentralen io und clients. nicht wie bei web und telnet bei dem jedes device selber den io macht.
SNAME steht hier also in jedem device auf dem eigenen namen und nicht auf dem namen des io devices.
der patch wäre etwa so:Index: 96_allowed.pm
===================================================================
--- 96_allowed.pm (revision 11386)
+++ 96_allowed.pm (working copy)
@@ -57,7 +57,11 @@
my ($me, $cl, $type, $arg) = @_;
return 0 if($me->{disabled});
- return 0 if(!$me->{validFor} || $me->{validFor} !~ m/\b$cl->{SNAME}\b/);
+ if( $cl->{SNAME} ) {
+ return 0 if(!$me->{validFor} || $me->{validFor} !~ m/\b$cl->{SNAME}\b/);
+ } else {
+ return 0 if(!$me->{validFor} || $me->{validFor} !~ m/\b$cl->{NAME}\b/);
+ }
if($type eq "cmd") {
return 0 if(!$me->{allowedCommands});
Habs eingecheckt.
OK, jetzt war ich mit meiner Antwort zu spät (ich hätte mit der SNAME-selber-setzen-Variante leben können :D
Aber natürlich trotzdem Danke!