Hallo Zusammen,
nach einer Diskussion in einem anderen Thread welcher Surround Receiver optimal für die EibPC Integration geeignet ist, eröffne ich diesen Thread über die Integration des Pioneer SC 2022.
Hier eine kurze Beschreibung in der Reihenfolge der Relevanz, warum ich den Pioneer Receiver gekauft habe:
Die Kommunikation scheint recht einfach integrierbar zu sein. Es ist nur zu beachten dass die App und der EibPC nicht parallel mit dem Receiver verbunden sein können.
Die Interface Beschreibung scheint auch für alle neueren Pioneer Geräte identisch zu sein: http://www.pioneerelectronics.com/St...Models_8.6.xls
Es gibt zwei grundsätzliche UDP Kommunikationsarten:
a) Automatisches Feedback
Bei Power steht * z.B. entweder für 0 = Ein oder 1 = Aus.
Es wird sogar automatisch der gerade abgespielte Musiktitel reportet:
GBH08 GCH0201010"" GDH000010000100001 GEH01020"Songs Für Liam" GEH02023"0:01" GEH03021"Kraftklub" GEH04022"Mit K" GEH05000"" GEH06000"" GEH07000"" GEH08000"" GHH10
b) Kommandos zur Änderung der Receiver Einstellung
Der Benutzer sendet dem Receiver eine UDP Nachricht zur Veränderung einer Einstellung (z.B. Receiver ausschalten)
Da der EibPC eine nicht genutzte TCP Verbindung automatisch nach 30 Sekunden beendet und wir aber jede Änderung am Gerät automatisch im EibPC erhalten möchten, muß eine dauerhafte IP Verbindung bestehen.
Dazu muß regelmäßig eine Standardabfrage an den Receiver gesendet werden (z.B. Lautstärke abfragen, ?V<CR>).
Hier nun ein erster rudimentärer epc Code, der aber schon ein Feedback liefert:
[highlight=epc]
// -----------------------------------------------------------------------------------------------------------
// IP-Steuerung des Dolby Surround Receivers Pioneer SC 2022
// -----------------------------------------------------------------------------------------------------------
:begin Pioneer_IP-Steuerung()
:info $IP-Steuerung des Dolby Surround Receivers Pioneer SC 2022$
:shortinfo $IP-Steuerung des Dolby Surround Receivers Pioneer SC 2022$
// Allgemeine Variablen definieren
Pioneer_Init = after(systemstart() == EIN, 20000u64)
Pioneer_RawData = $$
Pioneer_Feedback = $$
Pioneer_IP = 192.168.0.35
Pioneer_Port = 23u16
Pioneer_IP_Connected = 0u32
Pioneer_Port_Connected = 0u16
Pioneer_TCP_Error_Counter = 0u08
Pioneer_TCP_ConnectionState = 6u08 /* Inititalisieren mit erlaubtem Wert aber geschlossener TCP Verbindung */
Pioneer_Query_State_Idle = 0u08 /* Kein TCP Request aktiv */
Pioneer_Query_State_QueryStarted = 1u08 /* TCP Request wurde gesendet, auf Antwort warten */
Pioneer_Query_State_QuerySuccess = 2u08 /* TCP Request wurde erfolgreich beantwortet, TCP Verbindung schließen */
Pioneer_Query_State = Wunderground_Query_State_Idle
Pioneer_PosStart = 0u16
Pioneer_PosEnd = 0u16
// Einzelwerte der Pioneer Parameter definieren
Pioneer_Power_On = 0b01
Pioneer_Power_Off = 0b01
Pioneer_Volume_Up = 0u16
Pioneer_Volume_Down = 0u16
Pioneer_Volume_Set = 0u16
Pioneer_Mute_On = 0b01
Pioneer_Mute_Off = 0b01
Pioneer_Input_Set = 0u16
Pioneer_Input_DVD = 4u16
Pioneer_Input_BD = 25u16
Pioneer_Input_TV_Sat = 5u16
Pioneer_Input_DVR_BDR = 15u16
Pioneer_Input_VIDEO1 = 10u16
Pioneer_Input_VIDEO2 = 14u16
Pioneer_Input_HDMI1 = 19u16
Pioneer_Input_HDMI2 = 20u16
Pioneer_Input_HDMI3 = 21u16
Pioneer_Input_HDMI4 = 22u16
Pioneer_Input_HDMI5 = 23u16
Pioneer_Input_HomeMediaGallery_InternetRadio = 26u16
Pioneer_Input_iPod_USB = 17u16
Pioneer_Input_XMRadio = 18u16
Pioneer_Input_CD = 1u16
Pioneer_Input_Tuner = 2u16
Pioneer_Input_Phone = 0u16
Pioneer_Input_MultiCannelIn = 12u16
Pioneer_Input_AdapterPort = 33u16
Pioneer_Input_Sirius = 27u16
Pioneer_Power_Zone2_On = 0b01
Pioneer_Power_Zone2_Off = 0b01
Pioneer_Power_Zone3_On = 0b01
Pioneer_Power_Zone3_Off = 0b01
Pioneer_Input_Zone2_Set = 0u16
Pioneer_Input_Zone3_Set = 0u16
Pioneer_Volume_Zone2_Up = 0u16
Pioneer_Volume_Zone2_Down = 0u16
Pioneer_Volume_Zone3_Up = 0u16
Pioneer_Volume_Zone3_Down = 0u16
Pioneer_Mute_Zone2_On = 0b01
Pioneer_Mute_Zone2_Off = 0b01
Pioneer_Mute_Zone3_On = 0b01
Pioneer_Mute_Zone3_Off = 0b01
// TCP Verbindung bei Pioneer_Init == EIN, sofern sie nicht bereits hergestellt wird oder bereits besteht
if after(Pioneer_Init, 1u64) or cycle(1,0) \\
and Pioneer_TCP_ConnectionState >= 2u08 then \\
Pioneer_Init = AUS; \\
Pioneer_TCP_ConnectionState = connecttcp(Pioneer_Port,Pioneer_IP) \\
endif
// Wenn TCP Verbindung besteht, Status des Power-Buttons abfragen
if change(Pioneer_TCP_ConnectionState) \\
and Pioneer_TCP_ConnectionState == 0u08 then \\
Pioneer_TCP_Error_Counter = 0u08; \\
sendtcp(Pioneer_Port, Pioneer_IP, $?P$, 0x0D, 0x0A); \\
Pioneer_Query_State = Pioneer_Query_State_QueryStarted \\
endif
// Fehlerhafte TCP Verbindung verzögert erneut aufbauen
if change(Pioneer_TCP_ConnectionState) \\
and Pioneer_TCP_ConnectionState >= 2u08 \\
and Pioneer_TCP_ConnectionState <= 6u08 \\
and Pioneer_TCP_Error_Counter <= 5u08 then \\
Pioneer_TCP_Error_Counter = Pioneer_TCP_Error_Counter + 1u08; \\
Pioneer_Init = EIN \\
endif
// Empfang des IP UDP Rückmeldung
if event(readtcp(Pioneer_Port_Connected, Pioneer_IP_Connected, Pioneer_RawData)) \\
and Pioneer_TCP_ConnectionState == 0u08 \\
and Pioneer_Port_Connected == Pioneer_Port \\
and Pioneer_IP_Connected == Pioneer_IP then \\
Pioneer_Feedback = Pioneer_RawData; \\
Pioneer_Query_State = Pioneer_Query_State_QuerySuccess \\
endif
:end
[/highlight]
Ich freue mich über Anregungen oder tatkräftige Mitarbeit, sofern noch andere User ein Pioneer Gerät im Einsatz haben.
Viele Grüße
Michael
nach einer Diskussion in einem anderen Thread welcher Surround Receiver optimal für die EibPC Integration geeignet ist, eröffne ich diesen Thread über die Integration des Pioneer SC 2022.
Hier eine kurze Beschreibung in der Reihenfolge der Relevanz, warum ich den Pioneer Receiver gekauft habe:
- umfangreiche und coole Pioneer Apps (iControlAV2012 und AVNavigator)
- umfangreiche Dokumentation der IP Schnittstelle
- Airplay (Musik direkt aus iTunes über LAN auf dem Receiver wiedergeben)
- reduziertes Design
- Leistung von 7 x 170W an 6Ohm (Class D Endstufen)
- Einmeßsystem mit Mikrofon
- Integriertes Internet Radio
- viel Leistung zum fairen Preis (UVP 1000€, Best Price 729€)
Die Kommunikation scheint recht einfach integrierbar zu sein. Es ist nur zu beachten dass die App und der EibPC nicht parallel mit dem Receiver verbunden sein können.
Die Interface Beschreibung scheint auch für alle neueren Pioneer Geräte identisch zu sein: http://www.pioneerelectronics.com/St...Models_8.6.xls
Es gibt zwei grundsätzliche UDP Kommunikationsarten:
a) Automatisches Feedback
Der Receiver meldet via UDP Nachricht automatisch eine Änderungen der Einstellungen des Receivers (z.B. Benutzer verstellt am Receiver die Lautstärke)
POWER: PWR*<CR+LF>
VOLUM: VOL**<CR+LF>
MUTE: MUT*<CR+LF>
INPUT SOURCE: FN**<CR+LF>
...
POWER: PWR*<CR+LF>
VOLUM: VOL**<CR+LF>
MUTE: MUT*<CR+LF>
INPUT SOURCE: FN**<CR+LF>
...
Bei Power steht * z.B. entweder für 0 = Ein oder 1 = Aus.
Es wird sogar automatisch der gerade abgespielte Musiktitel reportet:
GBH08 GCH0201010"" GDH000010000100001 GEH01020"Songs Für Liam" GEH02023"0:01" GEH03021"Kraftklub" GEH04022"Mit K" GEH05000"" GEH06000"" GEH07000"" GEH08000"" GHH10
b) Kommandos zur Änderung der Receiver Einstellung
Der Benutzer sendet dem Receiver eine UDP Nachricht zur Veränderung einer Einstellung (z.B. Receiver ausschalten)
POWER ON: PO<CR>
POWER OFF: PF<CR>
Request POWER Status: ?P<CR>
POWER ON/OFF: PZ<CR>
VOLUME UP: VU<CR>
VOLUME DOWN: VD<CR>
VOLUME SET: ***VL<CR>
Request VOLUME LEVEL: ?V<CR>
...
POWER OFF: PF<CR>
Request POWER Status: ?P<CR>
POWER ON/OFF: PZ<CR>
VOLUME UP: VU<CR>
VOLUME DOWN: VD<CR>
VOLUME SET: ***VL<CR>
Request VOLUME LEVEL: ?V<CR>
...
Da der EibPC eine nicht genutzte TCP Verbindung automatisch nach 30 Sekunden beendet und wir aber jede Änderung am Gerät automatisch im EibPC erhalten möchten, muß eine dauerhafte IP Verbindung bestehen.
Dazu muß regelmäßig eine Standardabfrage an den Receiver gesendet werden (z.B. Lautstärke abfragen, ?V<CR>).
Hier nun ein erster rudimentärer epc Code, der aber schon ein Feedback liefert:
[highlight=epc]
// -----------------------------------------------------------------------------------------------------------
// IP-Steuerung des Dolby Surround Receivers Pioneer SC 2022
// -----------------------------------------------------------------------------------------------------------
:begin Pioneer_IP-Steuerung()
:info $IP-Steuerung des Dolby Surround Receivers Pioneer SC 2022$
:shortinfo $IP-Steuerung des Dolby Surround Receivers Pioneer SC 2022$
// Allgemeine Variablen definieren
Pioneer_Init = after(systemstart() == EIN, 20000u64)
Pioneer_RawData = $$
Pioneer_Feedback = $$
Pioneer_IP = 192.168.0.35
Pioneer_Port = 23u16
Pioneer_IP_Connected = 0u32
Pioneer_Port_Connected = 0u16
Pioneer_TCP_Error_Counter = 0u08
Pioneer_TCP_ConnectionState = 6u08 /* Inititalisieren mit erlaubtem Wert aber geschlossener TCP Verbindung */
Pioneer_Query_State_Idle = 0u08 /* Kein TCP Request aktiv */
Pioneer_Query_State_QueryStarted = 1u08 /* TCP Request wurde gesendet, auf Antwort warten */
Pioneer_Query_State_QuerySuccess = 2u08 /* TCP Request wurde erfolgreich beantwortet, TCP Verbindung schließen */
Pioneer_Query_State = Wunderground_Query_State_Idle
Pioneer_PosStart = 0u16
Pioneer_PosEnd = 0u16
// Einzelwerte der Pioneer Parameter definieren
Pioneer_Power_On = 0b01
Pioneer_Power_Off = 0b01
Pioneer_Volume_Up = 0u16
Pioneer_Volume_Down = 0u16
Pioneer_Volume_Set = 0u16
Pioneer_Mute_On = 0b01
Pioneer_Mute_Off = 0b01
Pioneer_Input_Set = 0u16
Pioneer_Input_DVD = 4u16
Pioneer_Input_BD = 25u16
Pioneer_Input_TV_Sat = 5u16
Pioneer_Input_DVR_BDR = 15u16
Pioneer_Input_VIDEO1 = 10u16
Pioneer_Input_VIDEO2 = 14u16
Pioneer_Input_HDMI1 = 19u16
Pioneer_Input_HDMI2 = 20u16
Pioneer_Input_HDMI3 = 21u16
Pioneer_Input_HDMI4 = 22u16
Pioneer_Input_HDMI5 = 23u16
Pioneer_Input_HomeMediaGallery_InternetRadio = 26u16
Pioneer_Input_iPod_USB = 17u16
Pioneer_Input_XMRadio = 18u16
Pioneer_Input_CD = 1u16
Pioneer_Input_Tuner = 2u16
Pioneer_Input_Phone = 0u16
Pioneer_Input_MultiCannelIn = 12u16
Pioneer_Input_AdapterPort = 33u16
Pioneer_Input_Sirius = 27u16
Pioneer_Power_Zone2_On = 0b01
Pioneer_Power_Zone2_Off = 0b01
Pioneer_Power_Zone3_On = 0b01
Pioneer_Power_Zone3_Off = 0b01
Pioneer_Input_Zone2_Set = 0u16
Pioneer_Input_Zone3_Set = 0u16
Pioneer_Volume_Zone2_Up = 0u16
Pioneer_Volume_Zone2_Down = 0u16
Pioneer_Volume_Zone3_Up = 0u16
Pioneer_Volume_Zone3_Down = 0u16
Pioneer_Mute_Zone2_On = 0b01
Pioneer_Mute_Zone2_Off = 0b01
Pioneer_Mute_Zone3_On = 0b01
Pioneer_Mute_Zone3_Off = 0b01
// TCP Verbindung bei Pioneer_Init == EIN, sofern sie nicht bereits hergestellt wird oder bereits besteht
if after(Pioneer_Init, 1u64) or cycle(1,0) \\
and Pioneer_TCP_ConnectionState >= 2u08 then \\
Pioneer_Init = AUS; \\
Pioneer_TCP_ConnectionState = connecttcp(Pioneer_Port,Pioneer_IP) \\
endif
// Wenn TCP Verbindung besteht, Status des Power-Buttons abfragen
if change(Pioneer_TCP_ConnectionState) \\
and Pioneer_TCP_ConnectionState == 0u08 then \\
Pioneer_TCP_Error_Counter = 0u08; \\
sendtcp(Pioneer_Port, Pioneer_IP, $?P$, 0x0D, 0x0A); \\
Pioneer_Query_State = Pioneer_Query_State_QueryStarted \\
endif
// Fehlerhafte TCP Verbindung verzögert erneut aufbauen
if change(Pioneer_TCP_ConnectionState) \\
and Pioneer_TCP_ConnectionState >= 2u08 \\
and Pioneer_TCP_ConnectionState <= 6u08 \\
and Pioneer_TCP_Error_Counter <= 5u08 then \\
Pioneer_TCP_Error_Counter = Pioneer_TCP_Error_Counter + 1u08; \\
Pioneer_Init = EIN \\
endif
// Empfang des IP UDP Rückmeldung
if event(readtcp(Pioneer_Port_Connected, Pioneer_IP_Connected, Pioneer_RawData)) \\
and Pioneer_TCP_ConnectionState == 0u08 \\
and Pioneer_Port_Connected == Pioneer_Port \\
and Pioneer_IP_Connected == Pioneer_IP then \\
Pioneer_Feedback = Pioneer_RawData; \\
Pioneer_Query_State = Pioneer_Query_State_QuerySuccess \\
endif
:end
[/highlight]
Ich freue mich über Anregungen oder tatkräftige Mitarbeit, sofern noch andere User ein Pioneer Gerät im Einsatz haben.
Viele Grüße
Michael
Kommentar