FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: knopf_piano am 06 Februar 2017, 19:32:35

Titel: Audio-switch... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 06 Februar 2017, 19:32:35
Hi,
ich weiß nicht, ob ich zu blöd bin, aber ein simples{system("ls -l")} gibt mir nichst aus, sondern eine Anzeige/Rückgabewert mit-1
Ich möchte eigentlich was anderes ins system rufen, bekomm aber immer -1 als exit.
Ich hab schon sämtliche Varianten versucht,

{system("ls -l")};
{system("ls -l")};;
{system('ls -l')}
{system "ls -l"}
{system "ls -l"}
{system "ls \-l"}
{system("ls -l")};

... immer -1...

was ich eigentlich machen will, meinem raspi ein Umschalten des audio-outputs (hdmi/3.5mm) beibringen:


{system("amixer cset numid=3 2")}
{system("amixer cset numid=3 1")}

immer -1

ich verräck... :o
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: rudolfkoenig am 06 Februar 2017, 20:13:57
{ `ls -l ` }
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 06 Februar 2017, 20:40:04
:-)
rudi, danke
jetzt nehm ich das ganze und versuch das was ich machen will

{`amixer cset numid=3 2`}
{`amixer cset numid=3 1`}

--> Kein soundwechsel zwischen hdmi/phone

wenn ich das aus der commandref nehm:
{system ("mplayer /home/pi/t.mp3 &")}
hör ich nix...

process wird gestartet:
pi@livingpi:~ $ ps -aux|grep mpla
fhem      1167 16.0  2.9 154032 27500 ?        Sl   19:38   0:00 mplayer /home/pi/t.mp3


ich hab die befehle schon in ein sh-file gepackt und aufgerufen --> das gleiche
:o
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: Wernieman am 06 Februar 2017, 20:49:51
darf den der User fhem es? auf der Kommandozeile (user fhem) probiert?
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 06 Februar 2017, 21:20:05
sudo addgroup fhem audio
das war's -> mplayer-audio regt sich...

allerdings funzt die Sache mit der Umschaltung hdmi/3.5mm noch nicht
{`amixer cset numid=3 2`}
{`amixer cset numid=3 1`}

amixer hat den ls:
-rwxr-xr-x 1 root root 43056 Jul 17  2014 /usr/bin/amixer
müßte ich dann auch fhem zum ändern ertüchtigen.
zu welcher gruppe muss fhem ich dann hinzufügen, damit fhem den amixer ändern darf?
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: Wernieman am 07 Februar 2017, 08:53:50
Sorry, aber "was funzt mit amixer ned"?
Fehlermeldung?

Jeder User darf das Programm amixer ausführen, da es für jeden lesbar (x) und ausführbar (x) ist.
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: rudolfkoenig am 07 Februar 2017, 09:14:56
Das Programm greift aber auf Hardware zu, was einem Benutzer, der "vor dem Geraet sitzt", zugeordnet ist.
Wenn das jeder, der angemeldet ist, verstellen koennte, waere das ein Sicherheitsloch.
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: Wernieman am 07 Februar 2017, 09:53:28
Ich habe nur gesagt, das es "ausführbar" ist. Nicht, das das Programm auch die Hardware ändert .... ;o)

Btw: es könnte nicht nur ein Hardware sondern auch ein Softwaremixer sein ...
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 07 Februar 2017, 19:55:55
Ich hab ne Lösung füt meinen Anwendungsfall, am woe bau ichs komplett in mein fhem ein, dann kommts hier rein.

Gesendet von meinem GT-I9301I mit Tapatalk

Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 11 Februar 2017, 17:56:35
so, wie versprochen meine Lösung.
Setup ist folgendes
- (1) Fhem auf Banana
- (2) entfernter Kodi auf Raspberry-3 (kodi auf raspian) mit HDMI-Conn zum TV

(2) hat die Eigenheit, dass der audio-output definiert werden muss: hdmi ODER 3,5-klinke.
Wenn jetzt auf hdmi, ist mit phone nix mehr los.
Ich will jedoch den Fernseher trotzdem ausschalten können und per 3,5-klinke (2) als dlna-renderer betreiben können

Initial, wie oben erhofft, wollte ich auf (2) mit einem lokalen fhem den amixer von phone auf hdmi (vice versa) umstellen,
je nach dem, ob der SmartTV present/absent ist.
Geile Idee, denkt sicht der geneigte user.

Hat jedoch an den Rechten gescheitert (siehe oben)

Lösung, um den amixer (hdmi/phone) von (2) von (1) aus umzuschalten
(ist aber für meine Anwendungsfall noch nicht final, der der gestartete Kodi (standalone) den pulseaudio festhält, nicht amixer, hier muss ich nochmal ran, es wird aber...)

vorher installieren:
cpan -i Net::OpenSSH
sub in 99_myUtils.pm
sub RemoteSoundOutputDevSwitch(@)
{
  my ($ip, $user, $pass, $outputDev) = @_;
  my $set = "amixer cset numid=3 2"; #default hdmi
  my %opts;

  $opts{user} = $user;
  $opts{password} = $pass;
   
  use Net::OpenSSH;

  my $ssh = Net::OpenSSH->new($ip, %opts, master_opts => [-o => "UserKnownHostsFile=/dev/null", -o => "StrictHostKeyChecking=no"]);
  $ssh->error and
    die "Couldn't establish SSH connection: ". $ssh->error;

  if($outputDev =~ /hdmi/)
  {
  $set = "amixer cset numid=3 2";
  }
  elsif($outputDev =~ /phone/)
  {
  $set = "amixer cset numid=3 1";
  }
 
  $ssh->system($set) or
    die "remote command failed: " . $ssh->error;
 
  undef $ssh;
  return 1;
}

abhängig, ob TV absent/present, oder was auch immer on/off, folgendes doif:
<ip>, <user>, <passwd> durch eures ersetzen

define DI_SwitchAudioOutput DOIF ([TV] eq "absent")\
    ({RemoteSoundOutputDevSwitch("<ip>","<user>","<passwd>","phone")})\
  DOELSEIF ([TV] eq "present")\
    ({RemoteSoundOutputDevSwitch("<ip>","<user>","<passwd>","hdmi")})
attr DI_SwitchAudioOutput do always
attr DI_SwitchAudioOutput room TEST
define TV dummy
attr TV room TEST
attr TV webCmd absent:present


Somit wird per ssh-login das ausgeführt, was ich auf der remote-kiste will.
kann natürlich auch was anderes sein, als <user>, root sollt nix machen dürfen natürlich.

Soweit... wenn ich den kodi jetzt noch vom pulseaudio lösen kann, meld ich mich hier wieder. sollte aber (hoffentlich) nicht das soooo Problem darstellen :-)

Titel: Antw:Audio-switch... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 12 Februar 2017, 01:09:56
das Paket Net::SSH::Perl funktioniert auf meinem bananapi übrigens nicht, obwohl es auf pc korrekt läuft.
hatte hier irrsinnig schwierigkeiten, das zu isntallieren, erst libs gesucht, dann cpan, dann direkt runtgeladen und kompiliert.
nachdem es endlich installiert war hab ich fehlermeldungen zu crypto-libs bekommen, deren versionen anscheinend auf dem system kollidieren bzw. fehlerhaft sind oder nicht ansprechbar sind.
daher der ausweg zur alternative openssh
Titel: Antw:Audio-swich... Systemcall-Aufruf mit "system" exit -1
Beitrag von: knopf_piano am 12 Februar 2017, 16:24:50
Zitat von: knopf_piano am 11 Februar 2017, 17:56:35
Initial, wie oben erhofft, wollte ich auf (2) mit einem lokalen fhem den amixer von phone auf hdmi (vice versa) umstellen,
je nach dem, ob der SmartTV present/absent ist.
Geile Idee, denkt sicht der geneigte user.
und wenn der geneigt user vorher auch mal im kodi nachgeschaut hätte, hätte er gesehen, dass der kodi die option bietet, Audio über hdmi UND analog auszugeben.
Somit hak ich den thread und mein vorhaben unter "wieder was gelernt" ab. ::)
greets
Titel: Antw:Audio-switch... Systemcall-Aufruf mit "system" exit -1
Beitrag von: Wernieman am 12 Februar 2017, 16:41:50
Und eigentlich kannst Du das Packet netssh auch über die Distri beziehen. Hat den Vorteil, gegenüber cpan, das bei aktuallisierungen es gleich it aktuallisiert wird. Sonst könnte es zu schwierigkeiten kommen ...
Titel: Antw:Audio-switch... Systemcall-Aufruf mit &quot;system&quot; exit -1
Beitrag von: knopf_piano am 12 Februar 2017, 17:31:38
Hab ich gemacht, wie geschrieben: auf bananian nicht möglich wg nicht passenden crypto libs. Auf pc (mint) wars kein problem.

Gesendet von meinem SM-J510FN mit Tapatalk

Titel: Antw:Audio-switch... Systemcall-Aufruf mit "system" exit -1
Beitrag von: Wernieman am 12 Februar 2017, 19:04:07
Laut Deinem Beitrag nicht, siehe
cpan -i Net::OpenSSH
Titel: Antw:Audio-switch... Systemcall-Aufruf mit &quot;system&quot; exit -1
Beitrag von: knopf_piano am 12 Februar 2017, 20:10:13
Net::OpenSSH ist was anderes als Net::SSH::Perl, wie geschrieben
Titel: Antw:Audio-switch... Systemcall-Aufruf mit "system" exit -1
Beitrag von: Wernieman am 13 Februar 2017, 08:27:07
Jep .. mein Hinweis war aber nur, es lieber erstmal mit den Distri-Möglichkeiten zu Probieren als gleich cpan zu nehmen.

cpan hat den Vorteil der aktuallität, den Nachteil das es an den Distri-Möglichkeiten vorbei opperiert, d.h. z.B. bei einem Update .....
Titel: Antw:Audio-switch... Systemcall-Aufruf mit &quot;system&quot; exit -1
Beitrag von: knopf_piano am 13 Februar 2017, 09:32:17
Dass stimmt natürlich. da bin ich auch deiner meinung.