FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Carsten K. am 12 Januar 2022, 10:36:44

Titel: Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: Carsten K. am 12 Januar 2022, 10:36:44
Hallo Ihr Wissenden,

Folgender geplanter Ablauf:
Im Einzeltest funktioniert die Textausgabe.
Ein weiterer Befehl nach der Textausgabe wird abgearbeitet.

sub testSpeak()
{
  my $mesg = "es klingelt";
  my $fName = "/opt/fhem/sounds/doorbell_10.mp3";
  system (castnow "$fName" --address 192.168.178.102 --quiet);
  fhem "msg audio $mesg"; # keine Ausgabe
  fhem "msg push $mesg"; # Wird ausgegeben
}

Ich vermute, dass das Ausgabegerät (Mi Smartspeaker) noch irgendwie blockiert ist - aber das ist geraten...
Ein "sleep 5 ;" for fhem "msg audio $mesg"; hat nichts gebracht.
Zusätzlich zu system() habe ich es auch mit Backticks `cmd` und qx ausprobiert - keine Verbesserung...

Vielleicht hat jemand eine Idee?

Grüße,
Carsten
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: Beta-User am 12 Januar 2022, 12:26:19
Zitat von: Carsten K. am 12 Januar 2022, 10:36:44
Ich vermute, dass das Ausgabegerät (Mi Smartspeaker) noch irgendwie blockiert ist - aber das ist geraten...
...darauf würde ich auch tippen, und dazu die Frage stellen, wie du das konkret mit dem "sleep" gemacht hattest.

Tendenziell würde ich mal testweise diese Zeile in den Raum werfen:
fhem("msg push $mesg; sleep 5;; msg audio $mesg");
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: TomLee am 12 Januar 2022, 12:39:58
Ich vermute das der Systemaufruf nicht klappt weil der "Inhalt" in Quotes stehen muss und dazu auch was im Log steht.

Versuch mal so:

system ("castnow $fName --address 192.168.178.102 --quiet &");
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: Beta-User am 12 Januar 2022, 12:46:43
Zitat von: TomLee am 12 Januar 2022, 12:39:58
Ich vermute das der Systemaufruf nicht klappt weil der "Inhalt" in Quotes stehen muss und dazu auch was im Log steht.
Angeblich klappt das, gewundert hat mich das auch. Allerdings kommen mir dann die inneren Quotes "komisch" vor, tendenziell würde ich tippen, dass man die weglassen kann/sollte oder den string mit "qq" zusammenbauen "muss" (effektiverweise)...
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: TomLee am 12 Januar 2022, 13:47:34
Ja, ich wollte die Quotes um die Variable noch wegnehmen, aber dann vergessen weil ich so vertieft in was anderem war.

Mein Fragezeichen ist das &, das ist doch nötig sonst ist der Systemaufruf doch blockierend, oder ?
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: Otto123 am 12 Januar 2022, 13:59:13
Zitat von: TomLee am 12 Januar 2022, 12:39:58
Ich vermute das der Systemaufruf nicht klappt weil der "Inhalt" in Quotes stehen muss und dazu auch was im Log steht.

Versuch mal so:

system ("castnow "$fName" --address 192.168.178.102 --quiet &");
Da müsste man wieder die inneren Quotes schützen :) \"$fname\" falls castnow diesen Namen wirklich in Quotes braucht. Oder andere nehmen  - oder wie Beta-User sagt qq nehmen :)

Und mit dem & am Ende ist generell gut, aber hier eventuell wieder Kontra weil dann castnow und msg auf dem gleichen Ausgabegerät parallel will.

Aber Carsten sagt, der Aufruf geht. Mir fiel noch ein man könnte die Reihenfolge tauschen udn sehen was passiert. Also erst msg und dann castnow.
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: Carsten K. am 12 Januar 2022, 16:37:57
Vielen Dank für die tollen Impulse.
Ich habe dadurch noch ein paar Varianten ausprobiert.
Abschließend hänge ich wieder an der Vermutung, dass sich der "castnow" System-Befehl (egal, ob über "system()" oder "qx()" oder Backticks) mit dem nächsten Befehl der letztlich auf's gleiche Gerät geht, beißt.

Aktuell habe diese Kombination als funktionierend gefunden:
system ("castnow $fName --address 192.168.178.102 --quiet");
system ("sleep 1 && perl /opt/fhem/fhem.pl 7072 \"msg audio $mesg\" &");

Durch die 2 system() Befehle konnte ich die FHEM-Oberfläche aus dem Spiel nehmen.
Falls der Vorschlag kommt "Hänge beide Befehler hintereinander": Habe ich probiert; funktioniert im OS, aber nicht aus FHEM heraus.
Es ist alles andere als sauber - aber ich habe ein Ergebnis ;)

Vielen Dank noch mal...
Carsten

p.s. ich denke darüber nach die beiden mp3-Dateien (der Text des 2. Befehls ist statisch) aneinanderzuhängen - dann hätte ich nur noch 1 system() Aufruf.
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: TomLee am 12 Januar 2022, 16:57:21
ZitatFalls der Vorschlag kommt "Hänge beide Befehler hintereinander": Habe ich probiert; funktioniert im OS

Wenn das so ist warum schreibst dann nicht alles in ein Bash-Script und rufst in FHEM nur das auf ?
Titel: Antw:Türklingel Meldung nicht ausgegeben (fhempy googlecast, castnow)
Beitrag von: Carsten K. am 12 Januar 2022, 17:06:53
Zitat von: TomLee am 12 Januar 2022, 16:57:21
Wenn das so ist warum schreibst dann nicht alles in ein Bash-Script und rufst in FHEM nur das auf ?
Da hast Du recht, das ist geschickter - danke dafür