Hallo,
ich würde gerne einige Programme (codesend, irsend etc.) in meinen Sub ausführen lassen. Wie muss ich die aufrufen?
..
my %Alexakommando = (
"tvlauter" => "set Denon volumeup;; ich habe den fernseher lauter gestellt",
"leinwandrunter" => system ('irsend SEND_ONCE Leinwand KEY_DOWN') ;; ich fahre die Leinwand runter",
Das gibt beim Speichern immer Probleme. habe schon "" ausprobiert mit und ohne system(). In der Suche konnte ich dazu nichts finden, oder ich habe nach dem falschem gesucht. :-)
Viele Grüße und einen schönen Abend
probier mal:
qx (irsend SEND_ONCE Leinwand KEY_DOWN)
nö, dann kommt: syntax error at ./FHEM/99_myUtils.pm line 115, near "qx (irsend SEND_ONCE Leinwand KEY_DOWN) ;" syntax error at ./FHEM/99...
so zum Bespiel,
$net_device=qx(/opt/fhem/FHEM/FhemUtils/lanping.sh $net_device);
Sent from my iPad using Tapatalk
würde da nicht nur die Ausgabe des Skripts in die Variable geschrieben werden?
Zitat von: tklein am 04 März 2017, 00:02:30
würde da nicht nur die Ausgabe des Skripts in die Variable geschrieben werden?
Genau... Aber um die Ausgabe zu erzeugen, wird das Skript ausgeführt und das ist doch dein Ziel, oder?
ja schon, aber direkt mit system (), excec oder fhem() etc. geht das nicht? So müsste ich das Skript mit Parametern aufrufen, die es dann ausführen muss.
qx(ssh proxy01 'sudo /usr/local/bin/squidGuard_SetIsabelInternet.sh normalToHoliday');
Geht bei mir wunderbar. Du kannst natürlich auch mit system() das ganze machen.
Oder aber als fhem Befehl
fhem("/usr/bin/blablaScript");
Danke,
dann werde ich das wohl so machen. Nur so muss ich die jeweiligen Funktionen/Parameter alles in Skripte packen.
Sonst hätte ich die halt direkt (codesend 12343343 etc.) aufrufen können
Zitat von: tklein am 04 März 2017, 10:07:06
Danke,
dann werde ich das wohl so machen. Nur so muss ich die jeweiligen Funktionen/Parameter alles in Skripte packen.
Sonst hätte ich die halt direkt (codesend 12343343 etc.) aufrufen können
Kannst Du auch. Aber halt mit vollem Pfade
ich dachte das braucht man nicht, wenn sie unter /bin liegen
Eigentlich nicht. Aber FHEM muss ja irgendwie unterscheiden zwischen eigene Befehle und Shell Befehle, zu mindest wenn man den Befehl in der FHEM cmd aufruft. Daher mit path
ok, aber ich bekomme: ....3: /opt/fhem/FhemUtils/ir_send.sh : Unknown command /opt/fhem/FhemUtils/ir_send.sh, try help." als Meldung
Das Skript ist von der Komandozeile ausführbar. Zugriff auf den Ordner sollte auch klappen.
Der Aufruf:
sub Fernsehzeit() {
fhem("set Dummy_test fernsehzeit");
fhem("/opt/fhem/FhemUtils/ir_send.sh");
return " Die Multimediageräte wurden eingeschaltet";
}
Dann suche bitte mal im Forum. Kann sein das da noch " " hin müssen.
fhem(" '/opt/fhem/FhemUtils/ir_send.sh' ");
Eventuell so
Zitat von: tklein am 04 März 2017, 11:00:17
ok, aber ich bekomme: ....3: /opt/fhem/FhemUtils/ir_send.sh : Unknown command /opt/fhem/FhemUtils/ir_send.sh, try help." als Meldung
Das Skript ist von der Komandozeile ausführbar. Zugriff auf den Ordner sollte auch klappen.
Der Aufruf:
sub Fernsehzeit() {
fhem("set Dummy_test fernsehzeit");
fhem("/opt/fhem/FhemUtils/ir_send.sh");
return " Die Multimediageräte wurden eingeschaltet";
}
sub Fernsehzeit() {
fhem("set Dummy_test fernsehzeit");
`/opt/fhem/FhemUtils/ir_send.sh &`;
return " Die Multimediageräte wurden eingeschaltet";
}
Gruß
Dan
Oder so. Das wäre dann Aufruf in Perl. Durch das & am Ende wird der Scriptaufruf als Hintergrundprozess deklariert und blockiert somit FHEM nicht.
Danke Danke für den anderen Weg.
Zitat von: CoolTux am 04 März 2017, 11:30:10
Oder so. Das wäre dann Aufruf in Perl. Durch das & am Ende wird der Scriptaufruf als Hintergrundprozess deklariert und blockiert somit FHEM nicht.
Danke Danke für den anderen Weg.
Genau und gerne! 8)
Mit dem & hat allerdings den Nachteil dass man auch keine Rückmeldung mehr vom aufgerufenen Skript bekommt.
Dazu müsste man das dann alles bekanntlich in einen BlockingCall stecken.
Gruß
Dan
Zitat von: DeeSPe am 04 März 2017, 11:35:35
Mit dem & hat allerdings den Nachteil dass man auch keine Rückmeldung mehr vom aufgerufenen Skript bekommt.
Dazu müsste man das dann alles bekanntlich in einen BlockingCall stecken.
ist das denn bei Funktions-Aufrufen aus der myUtils auch so? dachte die wären eh nonBlocking.
`/opt/fhem/FhemUtils/ir_send.sh &`;
die Zeile wird bei mir gar nicht ausgeführt
Geht das in der FHEM Eingabezeile?
{`/opt/fhem/FhemUtils/ir_send.sh &`}
Berechtigungen? sudo?
Gruß
Dan
Zitat von: automatisierer am 04 März 2017, 12:10:30
ist das denn bei Funktions-Aufrufen aus der myUtils auch so? dachte die wären eh nonBlocking.
Wenn die Funktionen was Blockierendes aufrufen, dann blockiert FHEM halt auch.
In welchem Modul die Funktionen stehen spielt dabei keine Rolle.
Gruß
Dan
{`/opt/fhem/FhemUtils/ir_send.sh &`}
--> nichts im Log via Befehlszeile
{`sudo /opt/fhem/FhemUtils/ir_send.sh &`}
Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus:
#1) Resprektieren Sie die Privatsphäre anderer.
#2) Denken Sie nach bevor Sie tippen.
#3) Mit großer Macht kommt große Verantwortung.
sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
{system('sudo /opt/fhem/FHEM/FhemUtils/ir_send.sh&');;}
--> Ausgabe von -1 jedoch kein Schaltvorgang
Hat "/opt/fhem/FHEM/FhemUtils/ir_send.sh" Berechtigung von User fhem ausgeführt zu werden?
Ist innerhalb von "/opt/fhem/FHEM/FhemUtils/ir_send.sh" irgendetwas was "sudo" benötigt?
Wie und wo hast Du"/opt/fhem/FHEM/FhemUtils/ir_send.sh" schon einmal ausgeführt so dass es funktioniert hat?
Gruß
Dan
Hat "/opt/fhem/FHEM/FhemUtils/ir_send.sh" Berechtigung von User fhem ausgeführt zu werden?
--> -rwxr-xr-x 1 root root 59 Mär 4 12:51 ir_send.sh
Ist innerhalb von "/opt/fhem/FHEM/FhemUtils/ir_send.sh" irgendetwas was "sudo" benötigt?
-->
#!/bin/sh
codesend 345425
irsend SEND_ONCE Denon KEY_POWER
Wie und wo hast Du"/opt/fhem/FHEM/FhemUtils/ir_send.sh" schon einmal ausgeführt so dass es funktioniert hat?
--> auf der Konsole mit dem User Pi
Zitat von: tklein am 04 März 2017, 13:46:03
Wie und wo hast Du"/opt/fhem/FHEM/FhemUtils/ir_send.sh" schon einmal ausgeführt so dass es funktioniert hat?
--> auf der Konsole mit dem User Pi
Das wo ist damit beantwortet, aber nicht das wie! :o
Mit "sh /opt/fhem/FHEM/FhemUtils/ir_send.sh" oder "sudo /opt/fhem/FHEM/FhemUtils/ir_send.sh" oder "./opt/fhem/FHEM/FhemUtils/ir_send.sh"?
Haben codesend und irsend Berechtigungen von User fhem ausgeführt zu werden?
Evtl. ist es auch hilfreich die Pfade zu codesend und irsend mit anzugeben.
Gruß
Dan
ja, die Pfade werde ich mal mitgeben.
jetzt bekomme ich beim codesendbefehl: wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
Try running with sudo?
irsend klappt jetzt mit dem Skript via fhem.
Sorry für die nicht vollständige Antwort:
sh /opt/fhem/FhemUtils/ir_send.sh
--> klappt
sudo /opt/fhem/FhemUtils/ir_send.sh
--> klappt
./opt/fhem/FhemUtils/ir_send.sh
--> klappt nicht: -bash: ./opt/fhem/FhemUtils/ir_send.sh: Datei oder Verzeichnis nicht gefunden
Probier mal ob es reicht den User fhem mit in die Gruppe gpio zu stecken.
Wenn das nicht reicht musst Du wohl für User fhem sudo Rechte auf codesend vergeben.
Gruß
Dan
Danke für Deine gute Hilfe Dan
Grüße
dem kann ich mich nur anschliessen!!
"sudo adduser fhem gpio" hat ausgereicht. Jetzt klappt das mit dem vollständigen schalten :-)