Harman & Kardon série AVR (265)
via RS232



/ Détails




node-hkavr (licence: MIT)

AVR265


En cours de développement.

Créé le 21/11/2013
Modifié le 29/12/2013 15:35

A propos


Les amplis Harman & Kardon de la série AVR (audio video receiver) disposent pour la plupart d'un port RS232. Ce port permet d'effectuer des mises à jour du firmware mais également de le piloter. Pour effectuer ces opérations, il faut relier l'ampli à un ordinateur avec un câble série ou un câble usb/série.

Harman & Kardon met à disposition de ses clients les fichiers de mise à jour du firmware sur leur site internet, par contre le contrôle de l'ampli par un équipement tiers en RS232 n'est pas documenté, ni exploité (aucun logiciel officiel existant).

Le module node-hkavr a pour objectif de combler ce vide en mettant à votre disposition une interface de communication sous la forme d'un serveur de socket très léger. Ce mode de fonctionnement permet de commander l'ampli très simplement via une ou plusieurs application web et mobile de manière simultanée (avec une mise à jour temps réel de l'état de l'ampli).
La seule version AVR supportée et testée pour l'heure est l'AVR 265 (c'est le seul ampli disponible pour les tests). Le mode de fonctionnement devrait être identique pour les amplis AVR 2650, AVR 365 et AVR 3650. Par extension les amplis AVR 635, AVR 630, AVR 435 et AVR 430 sont également concernés mais il y a de nombreuses différences d'après la documentation technique.

Installation


Le plus facile, utiliser npm pour ajouter le module dans l'arborescence de votre projet:

npm install hkavr
Une fois l'installation manuelle ou assistée (avec npm) effectuée, il vous suffit d'inclure le module dans votre projet. Un fichier d'exemple est disponible avec le module, voici son contenu (fichier servers.js)

// AVR265 module
var model 		= "265";

// webservice port configuration
var servicePort 	= 8265;

// Raspberry configuration for SerialPort
var serialInterface 	= "/dev/ttyAMA0";
var serialOption 	= {
	baudrate: 57600,
	databits: 8,
	parity: "none",
	stopbits: 1,
	flowControl: false
};

// initialisation
var server = require("hkavr");
server.avr(model,servicePort,serialInterface,serialOption);
Par exemple, pour tester le script d'exemple, il suffit de démarrer le server dans la console avec la commande:

	node server.js

Manuel d'utilisation


Note: attention le pilotage a été modifié depuis la version 0.1.7 avec l'utilisation de socket au lieu de simples webservices.

Application basique (commandes & réponses)

Une application master est en cours de développement, elle permettra de passer une grande majorité des commandes et d'afficher les informations d'état ou de réponse de l'ampli. Pour le moment, voici une application d'exemple pour envoyer une commande de mise sous tension ou hors tension de l'ampli. Toute action manuelle via la télécommande ou le bouton power est également traitée avec la sélection de l'état de la liste en ON ou OFF.

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
	<script src="http://[ip de l'ordinateur node-hkavr]:[port]/socket.io/socket.io.js"></script>
	<script type="text/javascript">
		var socket = io.connect('http://[ip de l'ordinateur node-hkavr]:[port]');

		socket.on('AVR', function (data) {
			var infos = data.output.split('|');
			$.each( infos, function( key , value ) {
				var item = value.split(':');
				var id = item[0].replace(/\ /g, "");
				item[1] = $.trim(item[1]);
				if(id == 'PowerStatusZone1') {
					$('#'+id+' option[value="Power'+item[1].charAt(0).toUpperCase() + item[1].slice(1) +'"]').prop('selected', true);
				}
			});
		});

		function ampli(cmd,value) {
			socket.emit('avrcmd', { cmd: cmd, value: value });
		}

		$( document ).ready(function() {
			$("#PowerStatusZone1").on( "change", function() {
				ampli($('#PowerStatusZone1 option:selected').val());
			});
		});
		</script>
  </head>
  <body>
	<select name="power-1" id="PowerStatusZone1">
		<option value="PowerOff">OFF</option>
		<option value="PowerOn">ON</option>
	</select>
  </body>
</html>					

Commandes simples (sans paramètre)

Commandes    
PowerOnMultiZoneOn Zone1LeftZone2Down
PowerOffMultiZoneOff Zone1RightZone2Left
PowerToggleRDS Zone1OkZone2Right
GetPowerStatusGetSiriusInfo Zone1Button0Zone2Ok
VolumeUpTuneUp Zone1Button1Zone2Button0
VolumeDownTuneDown Zone1Button2Zone2Button1
GetVolumePresetUp Zone1Button3Zone2Button2
GetBassValuePresetDown Zone1Button4Zone2Button3
BassUpGetCurrentStation Zone1Button5Zone2Button4
BassDownZone2VolumeUp Zone1Button6Zone2Button5
GetTrebleValueZone2VolumeDown Zone1Button7Zone2Button6
TrebleUpZone2MuteToggle Zone1Button8Zone2Button7
TrebleDownZone1Menu Zone1Button9Zone2Button8
MuteToggleZone1Up Zone2MenuZone2Button9
GetMuteStatusZone1Down Zone2Up-

Commandes avec paramètre

CommandeParamètreChoix
DiscreteVolume218 à 118218 correspond à -90dB
118 correspond à +10dB
DiscreteBass--
DiscreteTreble--
DiscreteInputSelection1 à 18 1 Cable/Sat 2 Blu-Ray 3 Bridge 4 DVR 5 USB 6 SIRIUS Radio 7 FM Radio 8 AM Radio 9 TV 10 Game 11 Media Server 12 AUX 13 Internet Radio 14 Network 15 Source A 16 Source B 17 Source C 18 Source D
MP3PlayerRepeat1 à 3 1 Repeat All 2 Repeat one 3 Repeat Off
MP3PlayerShuffle1 à 2 1 Shuffle On 2 Shuffle Off
GetMP3Metadata1 à 3 1 Title 2 Artist 3 Album
GetSiriusMetadata1 à 3 1 Song 2 Artist 3 Category
DirectBandSelection1 à 3 1 AM 2 FM 3 SIRIUS
DirectPresetSelection1 à 99-
SetCurrentStationFM087.50 à 108.00format XXX.XX
SetCurrentStationAM150 à 1600format XXX ou XXXX
Zone2DiscreteInput1 à 18 1 Cable/Sat 2 Blu-Ray 3 Bridge 4 DVR 5 USB 6 SIRIUS Radio 7 FM Radio 8 AM Radio 9 TV 10 Game 11 Media Server 12 AUX 13 Internet Radio 14 Network 15 Source A 16 Source B 17 Source C 18 Source D
Zone2SetVolume218 à 118218 correspond à -90dB
118 correspond à +10dB

Informations & réponses

Le format des informations et des réponses est pour le moment assez simpliste. Au final l'échange sera formalisé sous la format de chaine JSON pour faciliter le traitement. Les intitulés des variables et leurs valeurs ne devraient pas changer, uniquement le mode de transmission.

								
#Réponse sous la forme d'une chaine de caractères:
variable:valeur 
#ou 
variable:valeur|variable:valeur
VariableValeur
Power Status Zone1on / off
Power Status Zone2on / off
Volume Value-90dB à 10dB
Volume Value Zone1-90dB à 10dB
Volume Value Zone2-90dB à 10dB
Bass Value-10dB à 10dB
Treble Value-10dB à 10dB
Mute Toggleon / off
Mute Status Zone1on / off
Mute Status Zone2on / off
Discrete Input Selection1 à 18
Zone 2 Discrete Input Selection1 à 18
Zone 2 Volume Value-90dB à 10dB
Zone 2 Mute Toggle ACKon / off