Datenbankabfrage mit Perl

Begonnen von Wolle02, 11 März 2021, 07:33:38

Vorheriges Thema - Nächstes Thema

Wolle02

Zitat von: Otto123 am 11 März 2021, 11:44:44
Nichts. Aber du brauchst Telnet (per Standard nicht definiert) und Du bauchst die fhem.pl dort wo Du den Befehl abschickst.
fhem.pl arbeitet intern mindestens genauso "kompliziert" :)

Ok. Verstanden.

Zitat
Du kopierst den Code genauso in dein Perlscript und rufst die sub analog der fhem() sub auf wie gezeigt?

Klar. Was ich meinte ist, dass ich den Code verstehen will. Ich will ja was lernen.  ;)

Auf jeden Fall habe ich jetzt eine Lösung, die ich weiterverfolgen werde.
Ihr habt mir mal wieder sehr geholfen. Vielen herzlichen Dank.

Otto123

#16
Noch ein praktisches Script Beispiel. Den Code speicherst Du auf einem Linux System mit nano test27.pl
Du ersetzt den Inhalt von $url am Ende durch eine echte url in deinem System.
Anschließend rufst Du das Script auf mit perl test27.pl und er druckt Dir dein global Device aus. :)
Oder Du ersetzt den Befehl durch einen set Befehl in deinem System und er wird ihn ausführen.
#!/usr/bin/perl -w
use strict;
sub fhemcl
{
   use URI::Escape;
   use LWP::UserAgent;
     my ($hosturl,$fhemcmd) = @_;
     my $token;
   # get token
     my $ua = new LWP::UserAgent;
     my $url = "$hosturl/fhem?XHR=1/";
     my $resp = $ua->get($url);
        $token = $resp->header('X-FHEM-CsrfToken');
   # url encode the cmd
     $fhemcmd = uri_escape($fhemcmd);
     $url = "$hosturl/fhem?cmd=$fhemcmd&fwcsrf=$token&XHR=1";
     $resp = $ua->get($url)->content;
     # cut the last character, the additional newline
     return substr $resp,0,-1
}
# Usage
#{fhemcl("http://raspib3:8083","{ReadingsVal('Melder','state','error')}")}
#{fhemcl("http://raspib3:8083","set Test2 toggle")}
#{fhemcl("http://raspib3:8083","list global")}
my $url="http://raspib3:8083";
print fhemcl($url,"list global")
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz