[02_HTTPAPI.pm] patch - Erweiterung um 'trigger'

Begonnen von betateilchen, 06 Oktober 2025, 13:09:11

Vorheriges Thema - Nächstes Thema

betateilchen

Hallo Klaus,

anbei ein patch, mit dem man über die API auch trigger-Befehle schicken kann. Im Prinzip ist das identisch zu 'set', deshalb beschränkt sich die Änderung auf die Erweiterung der Befehlsabfrage selbst.

Index: 02_HTTPAPI.pm
===================================================================
--- 02_HTTPAPI.pm       (Revision 30353)
+++ 02_HTTPAPI.pm       (Arbeitskopie)
@@ -107,7 +107,7 @@
   my $link;
   return($hash, 503, 'close', "text/plain; charset=utf-8", encode($encoding, "error=503 Service Unavailable")) if(IsDisabled($name));
 
-  if($request =~ m/^(\/$infix)\/(set|get|read|readtimestamp|readinternal|write)\?(.*)$/) {
+  if($request =~ m/^(\/$infix)\/(set|get|read|readtimestamp|readinternal|write|trigger)\?(.*)$/) {
     $link = $1;
     $apiCmd = $2;
     $apiCmdString = $3;
@@ -166,7 +166,7 @@
           } else {
             return($hash, 400, 'close', "text/plain; charset=utf-8", encode($encoding, "error=400 Bad Request, $request > attribute reading or internal is missing"))
           }
-        } elsif ($apiCmd eq 'set') {
+        } elsif ($apiCmd eq 'set' || $apiCmd eq 'trigger') {
           my $setCmd;
           if ($apiCmdString =~ /&action(\=[^&]*)?(?=&|$)|^action(\=[^&]*)?(&|$)/) {
             $setCmd = substr(($1 // $2), 1);
@@ -174,7 +174,7 @@
             $setCmd =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
             #my $ret = CommandSet(undef, "$fhemDevName $setCmd");
             #my $ret = AnalyzeCommand($defs{$hash->{SNAME}}, "set $fhemDevName $setCmd");
-            my $ret = AnalyzeCommand($defs{$name}, "set $fhemDevName $setCmd");
+            my $ret = AnalyzeCommand($defs{$name}, "$apiCmd $fhemDevName $setCmd");
             if ($ret) {
               return($hash, 400, 'close', "text/plain; charset=utf-8", encode($encoding, "error=400 Bad Request, $request > $ret"))
             } else {
@@ -365,7 +365,7 @@
 <a id="HTTPAPI"></a>
 <h3>HTTPAPI</h3>
 <ul>
-  HTTPAPI is a compact HTML API server that performs http requests to execute set and get commands
+  HTTPAPI is a compact HTML API server that performs http requests to execute set, get and trigger commands
   and reads and writes readings.<br><br>
 
   <a id="HTTPAPI-define"></a>
@@ -435,6 +435,22 @@
   </ul>
   <br><br>
 
+  <a id="HTTPAPI-trigger"></a>
+  <b>Trigger</b>
+  <ul>
+    <li>API command line for executing a trigger command<br>
+      Request:
+      <ul>
+        <code>http://&lt;ip-addr&gt;:&lt;port&gt;/&lt;apiName&gt;/trigger?device=&lt;devname&gt;&action=&lt;cmd&gt;</code><br>
+      </ul>
+      Response:
+      <ul>
+        <code>&lt;device&gt;=&lt;cmd&gt;|error=&lt;error message&gt;</code><br>
+      </ul>
+    </li>
+  </ul>
+  <br><br>
+
   <a id="HTTPAPI-events"></a>
   <b>Generated events</b>
   <ul>
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Hallo Klaus,

Deine jüngste Erweiterung bezüglich "exec" ist prima, aber dadurch ist meine bisher nur lokal vorhandene Anpassung um Trigger verlorengegangen  :)

Magst Du meinen Vorschlag oben bitte prüfen und ggf. auch in das Modul einbauen?

Danke!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klaus.schauer

Zitat von: betateilchen am 01 April 2026, 12:06:13Deine jüngste Erweiterung bezüglich "exec" ist prima, aber dadurch ist meine bisher nur lokal vorhandene Anpassung um Trigger verlorengegangen  :)
Magst Du meinen Vorschlag oben bitte prüfen und ggf. auch in das Modul einbauen?
Hab es selbstverständlich entsprechend erweitert und hochgeladen. Die Anregung ist ja schon Monate alt. Sorry ich habe das auch heute eher zufällig gesehen. Falls ich wieder einmal nicht reagieren sollte, habe ich nichts gegen eine private Mitteilung.

Prof. Dr. Peter Henning

Das Modul ist interessant, vor allem für meine derzeitigen asynchronen Rückmeldungen an FHEM. Aber ich verstehe nicht so ganz, warum ich HTTPAPI benutzen sollte statt eines Aufrufs

http://<IP>:<PORT>/fhem?XHR=1&cmd=...

LG

pah

betateilchen

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

klaus.schauer

Zitat von: Prof. Dr. Peter Henning am 01 April 2026, 21:08:22Das Modul ist interessant, vor allem für meine derzeitigen asynchronen Rückmeldungen an FHEM. Aber ich verstehe nicht so ganz, warum ich HTTPAPI benutzen sollte statt eines Aufrufs

http://<IP>:<PORT>/fhem?XHR=1&cmd=...
Das Standard WEB-Interface wollte ich anfangs auch nutzen. HTTPAPI ist für einfache Steuerungs- und Abfragefunktionen aber schneller und weniger ressourcenhungrig.

betateilchen

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