Hallo zusammen,
vielleicht interessiert es jemanden wie ich meinen DENON x3000 ein wenig steuern kann.
Nachdem ich es über Telnet probiert hatte und das nicht richtig funktionierte schrieb ich ein kleines VisualBasic Programm und es funktionierte. Nachdem ich dann die Entwicklungsumgebung instaliert hatte und ich feststellte das ich als Fachinformatiker zu wenig von Java verstehe ;-) musste was anderes her.
Dann schreib ich DENON an und fragte ob es eine HTTP Schnittstelle gibt. Gesehen hatte ich das schon in meiner Firewall. Als Antwort kam dann das es eine Telnet Schnittstelle gibt. Aber immerhin nach einem Tag eine Antwort. Der Support ist ganz gut.
Also habe ich Android in einer VM mit der Original DENON App installiert und Wireshark angeschmissen. Dabei habe ich folgende Informationen gesammelt:
Als GET können folgende Befehle gesendet werden:
Es gibt auch noch die Möglichkeit eine xml Datei mit Befehlen als POST zusenden aber soweit bin ich noch nicht.
Vielleicht kann mir auch jemand bei meinen Problemen helfen oder zusammen die Scripte weiter pflegen.
Das config Verzeichnis hängt an.
Aber das wichtigste gleich:
Denon.item
default.sitemap
Denon.rules
Jetzt mein Problem.
Im Browser funktioniert es gut. Nur wenn ich im iPAD den Slider benutze dann kommt es manchmal vor das mein Wert gerade noch nicht geschrieben wurde aber schon ein neuer ausgelesen wurde und dann springt der ton auf den neuen Wert und wieder zurück. Also mein Wert wird sofort überschrieben. Je öfter ich den Refresh von Denon_Master_Volumedb mache desto ofters.
Am liebsten würde ich das Binding für Denon_Master_Volumedb kurz aussetzen bis mein Wert gesetzt ist aber ich weiß nicht wie.
Ach ja ich nutze 1.4.0 Snapshot.
Viele Grüße und frohe Weihnacht,
Jörg
vielleicht interessiert es jemanden wie ich meinen DENON x3000 ein wenig steuern kann.
Nachdem ich es über Telnet probiert hatte und das nicht richtig funktionierte schrieb ich ein kleines VisualBasic Programm und es funktionierte. Nachdem ich dann die Entwicklungsumgebung instaliert hatte und ich feststellte das ich als Fachinformatiker zu wenig von Java verstehe ;-) musste was anderes her.
Dann schreib ich DENON an und fragte ob es eine HTTP Schnittstelle gibt. Gesehen hatte ich das schon in meiner Firewall. Als Antwort kam dann das es eine Telnet Schnittstelle gibt. Aber immerhin nach einem Tag eine Antwort. Der Support ist ganz gut.
Also habe ich Android in einer VM mit der Original DENON App installiert und Wireshark angeschmissen. Dabei habe ich folgende Informationen gesammelt:
Als GET können folgende Befehle gesendet werden:
Code:
http://192.168.2.99/goform/formMainZone_MainZoneXml.xml http://192.168.2.99/goform/formMainZone_MainZoneXmlStatus.xml http://192.168.2.99/goform/formMainZone_MainZoneXmlStatusLite.xml !!!http://192.168.2.99/goform/formZone2_Zone2Xml.xml http://192.168.2.99/goform/formZone2_Zone2XmlStatus.xml http://192.168.2.99/goform/formZone2_Zone2XmlStatusLite.xml Lautstärke http://192.168.2.99/goform/formiPhoneAppDirect.xml?MVUP http://192.168.2.99/goform/formiPhoneAppDirect.xml?MVDOWN http://192.168.2.99/goform/formiPhoneAppMute.xml?1+MuteOn http://192.168.2.99/goform/formiPhoneAppMute.xml?1+MuteOff http://192.168.2.99/goform/formiPhoneAppVolume.xml?1+-32.0 http://192.168.2.99/goform/formiPhoneAppPower.xml?1+PowerOn http://192.168.2.99/goform/formiPhoneAppPower.xml?1+PowerStandby Kanäle http://192.168.2.99/goform/formiPhoneAppDirect.xml?SITV http://192.168.2.99/goform/formiPhoneAppDirect.xml?SIGAME
Vielleicht kann mir auch jemand bei meinen Problemen helfen oder zusammen die Scripte weiter pflegen.
Das config Verzeichnis hängt an.
Aber das wichtigste gleich:
Denon.item
Code:
Group gAlles Group gDENON "DENON AVR X3000" <video> (gAlles) Switch Denon_Master_Power "Power" <energy> (gDENON) { http="<[CacheDenonMainZoneStatusLite:1000:XSLT(denon_x3000_master_power.xsl)] >[ON:GET:http://192.168.2.99/goform/formiPhoneAppPower.xml?1+PowerOn] >[OFF:GET:http://192.168.2.99/goform/formiPhoneAppPower.xml?1+PowerStandby]" } String Denon_Master_Input "Eingang [%s]" <video> (gDENON) { http="<[CacheDenonMainZoneStatusLite:1000:XSLT(denon_x3000_master_input.xsl)]" } Switch Denon_Master_Mute "Mute" <none> (gDENON) { http="<[CacheDenonMainZoneStatusLite:1000:XSLT(denon_x3000_master_mute.xsl)] >[ON:GET:http://192.168.2.99/goform/formiPhoneAppMute.xml?1+MuteOn] >[OFF:GET:http://192.168.2.99/goform/formiPhoneAppMute.xml?1+MuteOff]"} //Dimmer Denon_Master_Volume "Lautstärke [%.1f %%]" <none> (gDENON) { http="<[CacheDenonMainZoneStatusLite:1000:XSLT(denon_x3000_master_volume.xsl)] >[ON:GET:http://192.168.2.99/goform/formiPhoneAppMute.xml?1+MuteOff] >[OFF:GET:http://192.168.2.99/goform/formiPhoneAppMute.xml?1+MuteOn] >[INCREASE:GET:http://192.168.2.99/goform/formiPhoneAppDirect.xml?MVUP] >[DECREASE:GET:http://192.168.2.99/goform/formiPhoneAppDirect.xml?MVDOWN]"} //*Dimmer Denon_Master_Volume "Lautstärke [%.1f %%]" <none> (gDENON) { http="<[CacheDenonMainZoneStatusLite:1000:XSLT(denon_x3000_master_volume.xsl)] >[INCREASE:GET:http://192.168.2.99/goform/formiPhoneAppDirect.xml?MVUP] >[DECREASE:GET:http://192.168.2.99/goform/formiPhoneAppDirect.xml?MVDOWN]"} Dimmer Denon_Master_Volume "Lautstärke [%.1f %%]" <none> (gDENON) //{ http="<[CacheDenonMainZoneStatusLite:1000:XSLT(denon_x3000_master_volume.xsl)]"} Number Denon_Master_Volumedb "Lautstärke db [%.1f db]" <none> (gDENON) { http="<[CacheDenonMainZoneStatusLite:2000:XSLT(denon_x3000_master_volumedb.xsl)]"}
Code:
sitemap default label="zu Hause" { Frame { Group item=gDENON } Frame label="DENON " { Switch item=Denon_Master_Power Text item=Denon_Master_Input Switch item=Denon_Master_Mute //* Slider item=Denon_Master_Volume switchSupport Slider item=Denon_Master_Volume Text item=Denon_Master_Volumedb } }
Code:
import org.openhab.core.library.types.* var Number varMasterVolumeDB var Number varMasterVolume var Number varMasterVolumeStep = 1.0 var String varURLVolume rule "DENON Master Zone Volume" when Item Denon_Master_Volumedb received update then logInfo ("Info", Denon_Master_Volume.state.toString) varMasterVolumeDB = Denon_Master_Volumedb.state as DecimalType varMasterVolume = varMasterVolumeDB + 80 if (Denon_Master_Volume.state == Uninitialized) sendCommand(Denon_Master_Volume, varMasterVolume) if (varMasterVolume != Denon_Master_Volume.state as DecimalType) { sendCommand(Denon_Master_Volume, varMasterVolume) logInfo( "MasterVolumeDB", "Setze " + varMasterVolume.toString + " <> " + varMasterVolumeDB.toString) } end rule "DENON Master Volume Slider COMMAND" when Item Denon_Master_Volume received command then switch receivedCommand { case receivedCommand == DECREASE : varMasterVolumeDB = varMasterVolumeDB - varMasterVolumeStep case receivedCommand == INCREASE : varMasterVolumeDB = varMasterVolumeDB + varMasterVolumeStep case ( receivedCommand >= 1 && receivedCommand <= 100 ) : varMasterVolumeDB = receivedCommand as DecimalType - 80 } varURLVolume = "http://192.168.2.99/goform/formiPhoneAppVolume.xml?1+" + varMasterVolumeDB.toString sendHttpGetRequest(varURLVolume) end
Im Browser funktioniert es gut. Nur wenn ich im iPAD den Slider benutze dann kommt es manchmal vor das mein Wert gerade noch nicht geschrieben wurde aber schon ein neuer ausgelesen wurde und dann springt der ton auf den neuen Wert und wieder zurück. Also mein Wert wird sofort überschrieben. Je öfter ich den Refresh von Denon_Master_Volumedb mache desto ofters.
Am liebsten würde ich das Binding für Denon_Master_Volumedb kurz aussetzen bis mein Wert gesetzt ist aber ich weiß nicht wie.
Ach ja ich nutze 1.4.0 Snapshot.
Viele Grüße und frohe Weihnacht,
Jörg
Kommentar