Autor Thema: Modul für MPD  (Gelesen 211727 mal)

Offline borney

  • New Member
  • *
  • Beiträge: 24
Antw:Modul für MPD
« Antwort #660 am: 20 April 2022, 10:40:11 »
Ja genau. Haupt-Fhem 24/7 schaltet MPD-Raspi (mit weiterem FHEM) ein und MPD wird mit systemd gestartet. Leider funktioniert das play direkt nicht. Den Sender wähle ich dann per MPD-Modul in FHEM des MPD-Raspi.

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8193
Antw:Modul für MPD
« Antwort #661 am: 20 April 2022, 11:04:17 »
Zitat
Den Sender wähle ich dann per MPD-Modul in FHEM des MPD-Raspi.
Dann könntest DU auch per FHEM den PLAY senden ;o)

Ansonsten per Cron, ein Script beim @reboot ausführen
(Oder eben in der systemd)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline borney

  • New Member
  • *
  • Beiträge: 24
Antw:Modul für MPD
« Antwort #662 am: 20 April 2022, 11:07:12 »
Per FHEM wäre mir auch am liebsten, aber wie direkt nach dem Einschalten des MPD-FHEM's?

Offline borney

  • New Member
  • *
  • Beiträge: 24
Antw:Modul für MPD
« Antwort #663 am: 20 April 2022, 13:52:55 »
ich habe eine Lösung gefunden:

Auf dem MPD-raspi läuft auch das SYSMON RPI (zur Kontrolle des RasPi) daher haben ich ein Notify erzeugt mit:

RPI:uptime:.* set Radio play

Damit schaltet sich MPD (Radio) ein, sobald RPI ein neues Event nach Start erzeugt.
 

Offline frank

  • Hero Member
  • *****
  • Beiträge: 10906
Antw:Modul für MPD
« Antwort #664 am: 20 April 2022, 14:32:18 »
DAS offizielle start event kommt vom device global.
"global:INITIALIZED", siehe commandref zu notify.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8193
Antw:Modul für MPD
« Antwort #665 am: 20 April 2022, 17:03:35 »
ich habe eine Lösung gefunden:

Auf dem MPD-raspi läuft auch das SYSMON RPI (zur Kontrolle des RasPi) daher haben ich ein Notify erzeugt mit:

RPI:uptime:.* set Radio play

Damit schaltet sich MPD (Radio) ein, sobald RPI ein neues Event nach Start erzeugt.

Was "fast" meinem Punkt ein enstpricht:
Zitat
per FHEM: Notify auf Presents und 30sec später mpd anschalten ..
Also nicht Presents sondern Sysmon und ohne Zeitverzögerung sondern sofort (funktioniert das Wirklich?) .. aber ansonsten ....
Ich hoffe Dir trotzdem geholfen zu haben  8)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline borney

  • New Member
  • *
  • Beiträge: 24
Antw:Modul für MPD
« Antwort #666 am: 21 April 2022, 09:38:37 »
Hallo Wernieman, frank,

ja, Danke, die Denkanstösse habe auf jeden Fall geholfen! Leider hat bei mir das global:INITIALIZED nicht funktioniert, dies hätte ich auch gerne vewendet. Bei mir bleibt der global status auf no definition stehen, warum auch immer.

Nochmals vielen Dank.
« Letzte Änderung: 21 April 2022, 09:59:25 von borney »

Offline frank

  • Hero Member
  • *****
  • Beiträge: 10906
Antw:Modul für MPD
« Antwort #667 am: 21 April 2022, 10:08:06 »
Zitat
Bei mir bleibt der global status auf no definition stehen, warum auch immer.
gut so, bei mir auch.
trotzdem kommt das event.

eventuell ist mpd da noch nicht bereit?
eine aktion könnte man zb mit fhem-sleep verzögern.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Offline CBSnake

  • Sr. Member
  • ****
  • Beiträge: 613
Antw:Modul für MPD
« Antwort #668 am: 18 Mai 2022, 08:41:08 »
Moin,

ich häng mich mal hier ran, hab bis jetzt nichts passendes dazu gefunden.
Ich hatte es nun schon mehrfach, dass das MPD Modul den FHEM Start verhindert:
PERL WARNING: Use of uninitialized value in int at ./FHEM/73_MPD.pm line 459.ist dann der letzte Eintrag im Log.
Ein Umbenenne des 73_MPD.pm in z.b.  73_MPD.pm.tmp hilft und FHEM startet wieder durch, wirft dann aber natürlich Fehler weil das Modul zu den definierten MPD Devices fehlt.
Ich hab nach dem heutigen Fall ein Update ausgeführt, um die aktuelle 73_MPD.pm zu haben, selbes Problem :-(

Ich bin jetzt mehr User als Programmierer ;-)
Woran könnte das liegen?

Viele Grüße
Achim

Nachtrag: ein MPD Device war durch den Neustart der kompletten Technik offline, könnte das damit zu tun haben? Nach zwei FHEM Startversuchen läuft jetzt alles wieder *puhh*
« Letzte Änderung: 18 Mai 2022, 09:18:30 von CBSnake »
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18415
Antw:Modul für MPD
« Antwort #669 am: 04 Juni 2022, 09:55:31 »
Moin Wzut,

nachdem ich mit Rhasspy/RHASSPY grade etwas rumexperimentiere:
Besteht Interesse, das Modul so zu erweitern, dass man einen/zwei Befehle hat, mit denen man die Playlist ersetzen/erweitern kann um "addfilter"-Vorgaben?

Eine Rohfassung fäuft hier schon, mit der man sowas übergeben kann:
set myMPD addSelection ((artist == 'Gary Moore') AND (album == 'Run for Cover'))Ziel wäre es, dann eher was parseParams-taugliches zusammenzubasteln, also in der Art
set myMPD addSelection artist='Gary Moore' album='Run for Cover'
Da gibt es zwar einige noch zu lösende Fallstricke (https://mpd.readthedocs.io/en/latest/protocol.html#escaping-string-values), aber na ja, irgendwo müßte man halt anfangen...
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Antw:Modul für MPD
« Antwort #670 am: 18 Juni 2022, 13:56:21 »
@Wzut

bei einem fehlerhaften MPD (z.B. bei mir  ::)) bleibt 73_MPD.pm stehen und FHEM hängt.
Das Verhalten tritt auf, wenn die Socket-Verbindung zwar aufgebaut werden kann aber keine Daten vom MPD gesendet werden. Ich konnte das auf zwei Stellen mit diesem Inhalt eingrenzen:
while (<$sock>)
 { last if $_ ; }
Interessant wäre ein Fork der ganzen Routine. Als Notlösung (max. 1 Sec Stillstand) habe ich den beiden while-Schleifen Folgendes vorangestellt: my $read = new IO::Select() || return 'Fehler beim Aufruf von IO::Select!\n';
 $read->add($sock);
 my @count = $read->can_read(1);
 return "Fehler - keine Daten vom MPD!\n" if @count < 1;
Jetzt geht's an die Reparatur des MPD, der wegen bluealsa rumzickt...

Gruß Jens
« Letzte Änderung: 18 Juni 2022, 15:51:58 von JensS »
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Antw:Modul für MPD
« Antwort #671 am: 18 Juni 2022, 14:36:06 »
@CBSnake

in der Zeile 459 von 73_MPD.pm wird die Lautstärke abgefragt, welche anfangs mit -1 belegt wurde.
Vielleicht reicht es, einen Standardwert von 50 bereitzstellen. my $vol_now = int($hash->{".volume"}) // 50;Nachher reload 73_MPD.pm nicht vergessen.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Offline CBSnake

  • Sr. Member
  • ****
  • Beiträge: 613
Antw:Modul für MPD
« Antwort #672 am: 18 Juni 2022, 18:55:31 »
@CBSnake

in der Zeile 459 von 73_MPD.pm wird die Lautstärke abgefragt, welche anfangs mit -1 belegt wurde.
Vielleicht reicht es, einen Standardwert von 50 bereitzstellen. my $vol_now = int($hash->{".volume"}) // 50;Nachher reload 73_MPD.pm nicht vergessen.

Gruß Jens

Moin Jens,

werde ich testen, danke dir

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18415
Antw:Modul für MPD
« Antwort #673 am: 19 Juni 2022, 09:04:28 »
Anbei komplettes Modul und diff. Da sind drin:
- der Vorschlag von JensS* betr. der Prüfung auf "bist du da"
- eine etwas abgeänderter "uninitialized"-Fix für das volume-Thema
- deutlich verkürzter timeout (0.7 Sekunden) als default, auch für * verwendet
- Es wird v.a. beim FHEM-Start nicht mehrfach die Verbindung aufgebaut, wenn der MPD nicht da ist
- da das "komplette Sammlung abholen" auf der MPD-Seite als unerwünscht gekennzeichnet ist, ist der diesbezügliche default jetzt auch "nicht holen"
- commandref "id"

ad * noch:
Weiß  noch nicht, ob ich das doppelte Öffnen des $sock wirklich gut finde, aber einen besseren Vorschlag habe ich auch nicht, jedenfalls im Moment. Forken finde ich wg. des Speicherverbrauchs nicht die optimale Lösung.
« Letzte Änderung: 22 Juni 2022, 14:20:37 von Beta-User »
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Antw:Modul für MPD
« Antwort #674 am: 20 Juni 2022, 22:31:03 »
Hab das Ganze mal mit eval probiert:sub mpExecute($$) {
  my ( $hash, $cmd ) = @_;
  my $host = $hash->{adresse};
  my $port = $hash->{port};
  my $antwort = '';

eval {
$SIG{'ALRM'} = sub {die "timeout";};
alarm(1);
  my $client = IO::Socket->new(
    Domain => AF_INET,
    Type => SOCK_STREAM,
    proto => 'tcp',
    PeerPort => $port,
    PeerHost => $host,
    Timeout => 1,
  ) || die "timeout";
  $client->send("$cmd\n");
  $client->shutdown(SHUT_WR);
  while (<$client>) {$antwort .= $_;};
  $client->close();   
};
alarm(0);
if ($@){return $@};
return $antwort;
}
Gruß Jens
« Letzte Änderung: 20 Juni 2022, 22:33:04 von JensS »
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

 

decade-submarginal