Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
... schreibt auf den Monitor der am HS angeschlossen ...
Aaaaah - Monitor = Hardware
Ich war da auf einer ganz anderen welle - ich hab wohl zuviel mit Monitoring und Virtualisierung zu tun - um an die richtige HW zu denken.
Aaaaah - Monitor = Hardware
Ich war da auf einer ganz anderen welle - ich hab wohl zuviel mit Monitoring und Virtualisierung zu tun - um an die richtige HW zu denken
Auch ESX hat eine Konsole die man mit eine HW Monitor schauen kann :-))
Und dann gibts da ja auch noch die Console für die VMs...
ich bin immer noch am grübeln, ob es nicht doch an uns (HS seilig) liegt, das die Verbindung abbricht.
Das was mich wundert, ist eben das es nun drei verschiedene Stellen (pro System eine) sind wo es versackt. Das spricht nach Timing und nicht nach Logischem Fehler im Code des SB Servers.
Jedes System hat eine Parameter (Timeout), ab wann ein Verbindung als "down" angesehen wird.
Das kann also gut sein, das hier Windows wesentlich tolleranter ist.
Aber die Linux bzw. NAS eben nicht so.
Im Code des Bausteins sind eigentlich zuviele Befehlsfolgen hintereinander, das wirkt bockierend und kann die Gegenstelle zu der Annahme treiben, die Verbindung wäre "down". Dann beendet sie diese.
Ich denke hier müssen mehr Ansagezustände eingeführt werden, wo in der Zwischenzeit die Verbindung bedient werden kann.
Im Moment wird die Kontrolle für die Zeit der Ansage nicht mehr losgelassen.
## elif cmd.startswith("ansage "):
##
## ##
## ## hier ev. noch abfragen ob Ansage noch läuft und dann nur starten wenn sie nicht läuft.
## ##
##
## ## Ansage wurde gestartet
## self.ansagelaeuft = 1
## self.ansagetext = cmd.replace('ansage ','')
## ## repeat nur auswerten wenn abgefragt, nicht auch nochmal wenn es auf 0 gesetzt wird für die Ansage
## self.repeat = ['-1']
##
## ## Repeat Status des ersten players abfragen (muss vor ansagelaeuft = 1 kommen)
## self.__socket.send(self.playeransagelist[0] + ' playlist repeat ?\n')
##
## ## Position im aktuellen Song abfragen
## self.__socket.send(self.playeransagelist[0] + ' time ?\n')
##
## ## Repeat auf 0 setzen
## self.__socket.send(self.playeransagelist[0] + ' playlist repeat 0\n')
##
## ## Player für Ansage einschalten und auf gewünschte Lautstärke setzen
## ## Mit drei for Schleifen nicht elegant, aber optimales timing für Squeezeserver
## for index, player in enumerate(self.playeransagelist):
## self.__socket.send(player + ' pause 1\n')
## for index, player in enumerate(self.playeransagelist):
## self.__socket.send(player + ' power 1\n')
## for index, player in enumerate(self.playeransagelist):
## self.__socket.send(player + ' mixer volume ' + self.playeransagevolume[index] + '\n')
##
## ## warten bis alle player laufen
## time.sleep(4)
## ## Ansage starten
## self.__socket.send(self.playeransagelist[0] + ' playlist preview url:file:' + self.__config['ansagepfad'] + cmd.replace('ansage ','') + '\n')
#### print self.playeransagelist[0] + ' playlist preview url:file:////' + self.__config['ansagepfad'] + cmd.replace('ansage ','')
##
## else:
## ## Kommando senden
## self.__socket.send(cmd+"\n")
Deshalb wird der SQ Server davon ausgehen, das nichts mehr abgenommen wird und die Verbindung schliessen.
zulange drin verweilen.
Wenn der HS wieder lesen will, stellt er fest, dass die andere Seite den Socket zu gemacht hat.
Dann wiederum baut der HS die Verbindung wieder neu auf. Das sehen wir ja.
So sieht es übrigens immer noch aus:
Code:
00%3A04%3A20%3A18%3A07%3Aea menustatus ARRAY(0xc96f2a8) add 00%3A04%3A20%3A18%3A
07%3Aea
00%3A04%3A20%3A18%3A07%3Aea mixer volume 70
00%3A04%3A20%3A18%3A07%3Aea prefset server volume 70
00%3A04%3A20%3A18%3A07%3Aea playlist preview url%3Afile%3A%2F%2F%2F%2Fshare%2FMu
ltimedia%2FAudio%2Ftest%2FReiner%2Fhi.wav
00%3A04%3A20%3A18%3A07%3Aea playlist save tempplaylist_0004201807ea silent%3A1
00%3A04%3A20%3A18%3A07%3Aea playlist play %2F%2Fshare%2FMultimedia%2FAudio%2Ftes
t%2FReiner%2Fhi.wav
00%3A04%3A20%3A18%3A07%3Aea playlist stop
00%3A04%3A20%3A18%3A07%3Aea playlist jump 0 0
00%3A04%3A20%3A18%3A07%3Aea playlist open file%3A%2F%2F%2Fshare%2FMultimedia%2FA
udio%2Ftest%2FReiner%2Fhi.wav
00%3A04%3A20%3A18%3A07%3Aea playlist open file%3A%2F%2F%2Fshare%2FMultimedia%2FA
udio%2Ftest%2FReiner%2Fhi.wav
00%3A04%3A20%3A18%3A07%3Aea playlist load_done
00%3A04%3A20%3A18%3A07%3Aea playlist newsong hi 0
00%3A04%3A20%3A18%3A07%3Aea playlist newsong hi 0
00%3A04%3A20%3A18%3A07%3Aea playlist stop
00%3A04%3A20%3A18%3A07%3Aea playlist preview cmd%3Astop
00%3A04%3A20%3A18%3A07%3Aea playlist resume tempplaylist_0004201807ea noplay%3A
1 wipePlaylist%3A1
00%3A04%3A20%3A18%3A07%3Aea playlist jump 0 1
00%3A04%3A20%3A18%3A07%3Aea playlist repeat 0
00%3A04%3A20%3A18%3A07%3Aea time 25.397
[B][COLOR=Red]subscribe power%2Cpause%2Cmode%2Cclient%2Cplaylist%2Csync%2Cprefset server[/COLOR][/B] => der Reconnect
00%3A04%3A20%3A18%3A07%3Aea prefset server snLastSyncUp 1318063546
00%3A04%3A20%3A18%3A07%3Aea play [B][COLOR=Red]=> manuell[/COLOR][/B]
00%3A04%3A20%3A18%3A07%3Aea playlist jump 0
00%3A04%3A20%3A18%3A07%3Aea playlist open http%3A%2F%2F85.239.108.31%2Fmotorfm
Mein Vorschlag wäre mal das:
Code:
## time.sleep(4)
rauszunehmen. Ich habe eine sehr kurze Ansage in Verwendung nur "Hi" gesprochen.
oder mal in einen andere Zweig:
Code:
## time.sleep(10)
und schauen ob es dann da auch zum reconnect kommt.
Holger hat mir gestern den Code geschickt und heute hab ich mich ran gemacht und nun ist der Bug gefunden.
Also, es war diese Schleife:
Code:
## for player in self.playeransagelist:
## ## position in tuple finden
## index = self.playername.index(player)
## ## Lautstärke zurücksetzen
## self.sendcmd(player + ' mixer volume ' + self.playervolume[index])
## ## power wenn nötig wieder aus, sonst play wenn nicht pause
## if self.playerpower[index]=="0":
## self.sendcmd(player + ' power 0')
## elif self.playerpause[index]=="1":
## print "Im PAUSE"
## self.sendcmd(player + ' pause 1')
## else:
## self.sendcmd(player + ' mode play')
Die hat die exception geschmissen.
Richtig ist sie so:
Code:
## lautstärke und powerstatus zurücksetzen, wenn power 1 und pause 0 dann play
for index, player in enumerate(self.playeransagelist):
## Lautstärke zurücksetzen
self.sendcmd(player + ' mixer volume ' + self.playervolume[index])
## power wenn nötig wieder aus, sonst play wenn nicht pause
if self.playerpower[index]=="0":
self.sendcmd(player + ' power 0')
elif self.playerpause[index]=="1":
self.sendcmd(player + ' pause 1')
else:
self.sendcmd(player + ' mode play')
Es gibt aber noch ein Problem mit dem Pause Status, deshalb habe ich das hier:
Code:
## elif befehl=="pause":
## self.playerpause.pop(index) ## alten wert an Stelle Index löschen
## self.playerpause.insert(index,wert) ## wert einsetzen
erstmal auskommentiert. Ich denke das ist durch die Einführung der Pause wärend der Ansage gekommen. Also im Moment wird nach der Ansage immer weiter gespielt oder die Player waren vorher schon aus. Dann werden sie nach der Ansage auch wieder ausgeschaltet.
Mein Eindruck ist noch, dass nicht richtig das time funktioniert. Also noch nicht richtig an die richtige Stelle im Lied zurück gesprungen wird.
Jedenfalls gibt es nun keine Reconnects mehr
Aber eins ist nun klar es geht und beliebig oft hintereinander. Und die Musik spielt wieder. Ob nun IP-Radio oder eigene Musik
Und wenn der Player vorher aus war, ist er nach der Durchsage auch wieder aus.
Danke für den Hint.
Da war wirklich ein Fehler drin.
Richtig muss es allerdings heissen
Code:
for indextemp, player in enumerate(self.playeransagelist):
index = self.playername.index(player)
Der indextemp ist damit die Syntax zufrieden ist.
Wir müssen dann aber noch die Position des Players im Tuple der gesamten Liste suchen.
So wie du es gemacht hast wird der Index in der Liste der Player für die Ansage gesucht.
Darum auch das seltsame verhalten mit Power, Pause usw.
Gruss, Holger
Edit: Habs nochmal bei python nachgelesen. Ist mir nicht klar warum es bei Tobias mit
Code:
for index, player in enumerate(self.playeransagelist):
Hi,
@tbi: guter job. Du und Holger - ihr schaukelt das ding schon :-)
Danke!
@tbi2: Zum Thema Sprachausgabe / TTS erzeugen hab ich hier was zusammengeschrieben: https://knx-user-forum.de/sonstiges-...er-google.html
Die Sprache finde ich persönlich besser.
Wenn man das jetzt noch mit den Fähigkeiten von Siri kombinieren würde ... träum :-)
@All: wie funktioniert eigentlich der Reset?
Ich habe gerade im Betrieb die config geändert (Pfad für die Ansagen) - und er wird nicht angenommen.
Jetzt wollte ich reseten (habe "reset" und 1 auf den Reseteingang gelegt) - Antwort auf dem Monitor (dem richtigen ) :
"KNXUF_name not defined" oder so ähnlich.
Ich habe die Version von tbi gerade am laufen...
ich habe heute von experte 2.5 auf 2.7 gewechselt und in dem Zug den Bausstein von Version 1.01 auf 2.16 umgestellt um mal die Ansagen zu testen.Leider funktioniert mit der Version 2.16 überhaupt keine Steuerung mehr.Nehme ich den Baustein wieder in Version 1.01 funktioniert wieder alles. Ich habe sonst nix geändert. Der SQ-Server läuft mit Version 7.6.1 auf WIN XP Embedded.
Was kann ich hier mal noch versuchen???
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar