FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tklein am 03 März 2017, 22:22:20

Titel: [gelöst]Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 03 März 2017, 22:22:20
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: automatisierer am 03 März 2017, 22:32:30
probier mal:
qx (irsend SEND_ONCE Leinwand KEY_DOWN)
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 03 März 2017, 23:43:44
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...
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: schka17 am 03 März 2017, 23:55:06
so zum Bespiel,
    $net_device=qx(/opt/fhem/FHEM/FhemUtils/lanping.sh $net_device);


Sent from my iPad using Tapatalk
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 00:02:30
würde da nicht nur die Ausgabe des Skripts in die Variable geschrieben werden?
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: KernSani am 04 März 2017, 00:07:47
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?
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 01:00:26
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.
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: CoolTux am 04 März 2017, 01:32:04

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");

Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag 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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: CoolTux am 04 März 2017, 10:23:12
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 10:28:45
ich dachte das braucht man nicht, wenn sie unter /bin liegen
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: CoolTux am 04 März 2017, 10:37:12
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag 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";
}
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: CoolTux am 04 März 2017, 11:07:01
Dann suche bitte mal im Forum. Kann sein das da noch " " hin müssen.


fhem(" '/opt/fhem/FhemUtils/ir_send.sh' ");


Eventuell so
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 11:12:52
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag 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.
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 11:35:35
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: automatisierer am 04 März 2017, 12:10:30
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.
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 12:32:45
`/opt/fhem/FhemUtils/ir_send.sh &`;

die Zeile wird bei mir gar nicht ausgeführt
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 12:34:37
Geht das in der FHEM Eingabezeile?
{`/opt/fhem/FhemUtils/ir_send.sh &`}

Berechtigungen? sudo?

Gruß
Dan
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 12:38:12
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 12:52:38
{`/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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 13:15:31
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 13:46:03

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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 13:52:50
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 14:14:23
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


Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: DeeSPe am 04 März 2017, 14:19:29
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
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: CoolTux am 04 März 2017, 14:25:15
Danke für Deine gute Hilfe Dan


Grüße
Titel: Antw:Wie rufe ich aus einer Sub (in 99_myUtils.pm) ein (Bash)-Programm auf?
Beitrag von: tklein am 04 März 2017, 14:37:54
dem kann ich mich nur anschliessen!!
"sudo adduser fhem gpio" hat ausgereicht. Jetzt klappt das mit dem vollständigen schalten :-)