Hi
Ich habe kürzlich angefangen das sonos plugin für mich zu nutzen.
Erstmal vielen Dank an die/denjenigen der sich die Mühe gemacht hat und es uns zur Verfügung stellt! Sehr coole Sache!
Zwei Kleinigkeiten sind mir bisher aufgefallen die ich gerne kurz besprechen würde.
Mit python 3.10 mag das Plugin gar nicht ohne folgende Änderung:
Und bei mir darf der smarthome user kein "ping" ausführen, abgesehen davon lässt meine firewall per default keine icmp requests durch.
Daher hab ich noch folgende Änderung durchgeführt:
das funktioniert natürlich nur wenn netcat installiert ist
# Arch Linux
# Debian + derivate
und damit ist auch diese variante nicht optimal, aber funktioniert in meinem fall weil ich netcat onehin auf meinen systemen installiert habe.
Leider fehlt mir das python wissen um eine python interne netcat implementierung vorschlagen (eine zusätzliche pip anforderung nur dafür ist vermutlich ähnlich unschön wie ein zusätzliche Paketanforderung).
Alternativ fällt mir ein statt nur auf TCP level zu sehen ob der speaker online ist wirklich z.b. ab zu fragen ob das LED gerade an oder aus ist. Damit wäre dann auch sicher gestellt dass die Gegenstelle wirklich eine Sonos Box ist und nicht etwas anderes was zufällig auf Port 1400 lauscht.
Was denkt ihr?
Ich habe kürzlich angefangen das sonos plugin für mich zu nutzen.
Erstmal vielen Dank an die/denjenigen der sich die Mühe gemacht hat und es uns zur Verfügung stellt! Sehr coole Sache!
Zwei Kleinigkeiten sind mir bisher aufgefallen die ich gerne kurz besprechen würde.
Mit python 3.10 mag das Plugin gar nicht ohne folgende Änderung:
Code:
diff --git a/sonos/utils.py b/sonos/utils.py index f50e8ddf..df656209 100755 --- a/sonos/utils.py +++ b/sonos/utils.py @@ -2,7 +2,7 @@ import hashlib import os import socket import re -from collections import Set +from collections.abc import Set def is_valid_port(port):
Daher hab ich noch folgende Änderung durchgeführt:
Code:
diff --git a/sonos/__init__.py b/sonos/__init__.py index 03e4d9f5..e03347d9 100755 --- a/sonos/__init__.py +++ b/sonos/__init__.py @@ -2899,7 +2899,7 @@ class Sonos(SmartPlugin): # we try to ping the speaker with open(os.devnull, 'w') as DEVNULL: try: - subprocess.check_call(['ping', '-i', '0.2', '-c', '2', zone.ip_address], + subprocess.check_call(['nc', '-nzw1', zone.ip_address, '1400'], stdout=DEVNULL, stderr=DEVNULL, timeout=1) is_up = True except subprocess.CalledProcessError:
# Arch Linux
Code:
pacman -S gnu-netcat
Code:
apt install netcat
Leider fehlt mir das python wissen um eine python interne netcat implementierung vorschlagen (eine zusätzliche pip anforderung nur dafür ist vermutlich ähnlich unschön wie ein zusätzliche Paketanforderung).
Alternativ fällt mir ein statt nur auf TCP level zu sehen ob der speaker online ist wirklich z.b. ab zu fragen ob das LED gerade an oder aus ist. Damit wäre dann auch sicher gestellt dass die Gegenstelle wirklich eine Sonos Box ist und nicht etwas anderes was zufällig auf Port 1400 lauscht.
Was denkt ihr?
Kommentar