Global caché GC100: Partie 4: apprendre et envoyer des signaux via ports série dans homeseer

Cette dernière partie sur l’utilisation du plugin du global caché va essayer de vous aider à créer une commande sur un appareil relié au global caché par un port série. L’intérêt de ce type d’interface est d’avoir éventuellement accès à des commandes directes. Par exemple, si on veux éteindre un vidéoprojecteur, il faut souvent appuyer 2 fois sur la touche off. Ici, par le port série, un seul appui suffit. Ce type de connexion permet aussi parfois d’avoir un retour d’information.

Ce tutoriel vous donnera les éléments nécessaires pour créer une commande d’un vidéoprojecteur comportant un port de commande série: le jvc dla hd1. La documention du vidéoprojecteur nous donne toutes les commandes séries possibles avec le jvc.

Quelles commandes sont reconnues par le vidéoprojecteur?

Pour le savoir, il faut rechercher la documentation de son vidéoprojecteur.

Mode d’emploi du JVC HD1

A partir de la page 46 du mode d’emploi du projecteur, on est informé les caractéristiques du rs232, du format des commandes.

On apprends que le projecteur comprends des commandes au format binaire 8 bits.

On observe que la commande sera composée d’une entête de commande: 21 (ou de demande de réponse: 41); d’une identification d’unité: 8901; parfois de la commande de télécommande: 5243; d’une commande spécifique puis d’une commande de fin: OA.

Par exemple:

Pour allumer le vidéoprojecteur: commande que l’on nommera JVCpowerOn: la commande spécifique est: 5057 suivie de 31 pour allumer l’appareil. Donc l’ensemble de la commande sera: 2189015057310A.

Pour contrôler l’affichage du menu OSD, la commande de télécommande est 5243 et la commande spécifique est: 37333245  et donc la commande totale est 2189015243373332450A.

 

Création du script:

Il suffit ensuite de créer un script pour que le GC100 soit capable d’envoyer les commandes binaires au JVC. Ceci a été relativement difficile à mettre en place et j’ai du demander de l’aide à un ami programmeur informatique. Vous pouvez utilisez ce script pour votre jvc ou tout autre appareil compatible avec des commandes binaires similaires. L’utilitaire global caché Itest (cf partie 1) vous aidera à valider vos commandes en format brut avec le global caché avant d’essayer avec homeseer.

Le script est compatible avec la version 3 du plugin global caché. La version 4 nécessite quelques modifications.

Placez le script dans le répertoire scripts de Homeseer.

Copiez le texte ci dessous dans le bloc notes windows.

L’extension doit être en .vb et pas en .txt

Dim Client as String = «  »
Dim tcpClient As System.Net.Sockets.TcpClient
Dim networkStream As System.Net.Sockets.NetworkStream

Sub RemoteControlMenu(ByVal dummy as String)
SocketSendBytes(« 2189015243373332450A »)
End Sub

Sub RemoteControlLeft(ByVal dummy as String)
SocketSendBytes(« 2189015243373333360A »)
End Sub

Sub RemoteControlRight(ByVal dummy as String)
SocketSendBytes(« 2189015243373333340A »)
End Sub

Sub RemoteControlUp(ByVal dummy as String)
SocketSendBytes(« 2189015243373330310A »)
End Sub

Sub RemoteControlDown(ByVal dummy as String)
SocketSendBytes(« 2189015243373330320A »)
End Sub

Sub RemoteControlExit(ByVal dummy as String)
SocketSendBytes(« 2189015243xxxxx0A »)
End Sub

Sub RemoteControlOperateOff(ByVal dummy as String)
SocketSendBytes(« 2189015243373330360A »)
End Sub

Sub RemoteControlHide(ByVal dummy as String)
SocketSendBytes(« 2189015243373331440A »)
End Sub

Sub RemoteControlOperateOn(ByVal dummy as String)
SocketSendBytes(« 2189015243373330350A »)
End Sub

Sub RemoteControlEnter(ByVal dummy as String)
SocketSendBytes(« 2189015243373332460A »)
End Sub

Sub RemoteControlVideo(ByVal dummy as String)
SocketSendBytes(« 2189015243373334420A »)
End Sub

Sub RemoteControlSvideo(ByVal dummy as String)
SocketSendBytes(« 2189015243373334430A »)
End Sub

Sub RemoteControlComp(ByVal dummy as String)
SocketSendBytes(« 2189015243373334440A »)
End Sub

Sub RemoteControlTest(ByVal dummy as String)
SocketSendBytes(« 2189015243373335390A »)
End Sub

Sub RemoteControlCinema(ByVal dummy as String)
SocketSendBytes(« 2189015243373336390A »)
End Sub

Sub RemoteControlNatural(ByVal dummy as String)
SocketSendBytes(« 2189015243373336410A »)
End Sub

Sub RemoteControlDynamic(ByVal dummy as String)
SocketSendBytes(« 2189015243373336420A »)
End Sub

Sub RemoteControlUser1(ByVal dummy as String)
SocketSendBytes(« 2189015243373336430A »)
End Sub

Sub RemoteControlUser2(ByVal dummy as String)
SocketSendBytes(« 2189015243373336440A »)
End Sub

Sub RemoteControlUser3(ByVal dummy as String)
SocketSendBytes(« 2189015243373336450A »)
End Sub

Sub RemoteControlHDMI2(ByVal dummy as String)
SocketSendBytes(« 2189015243373337310A »)
End Sub

Sub RemoteControlInfo(ByVal dummy as String)
SocketSendBytes(« 2189015243373337340A »)
End Sub

Sub RemoteControlGamma(ByVal dummy as String)
SocketSendBytes(« 2189015243373337350A »)
End Sub

Sub RemoteControlColorTemp(ByVal dummy as String)
SocketSendBytes(« 2189015243373337360A »)
End Sub

Sub RemoteControlAspect(ByVal dummy as String)
SocketSendBytes(« 2189015243373337370A »)
End Sub

Sub RemoteControlContrastPlus(ByVal dummy as String)
SocketSendBytes(« 2189015243373337380A »)
End Sub

Sub RemoteControlContrastMoins(ByVal dummy as String)
SocketSendBytes(« 2189015243373337390A »)
End Sub

Sub RemoteControlBrightPlus(ByVal dummy as String)
SocketSendBytes(« 2189015243373337410A »)
End Sub

Sub RemoteControlBrightMoins(ByVal dummy as String)
SocketSendBytes(« 2189015243373337420A »)
End Sub

Sub RemoteControlColorPlus(ByVal dummy as String)
SocketSendBytes(« 2189015243373337430A »)
End Sub

Sub RemoteControlColorMoins(ByVal dummy as String)
SocketSendBytes(« 2189015243373337440A »)
End Sub

Sub RemoteControlSharpPlus(ByVal dummy as String)
SocketSendBytes(« 2189015243373337450A »)
End Sub

Sub RemoteControlSharpMoins(ByVal dummy as String)
SocketSendBytes(« 2189015243373337460A »)
End Sub

Sub RemoteControlHDMI1(ByVal dummy as String)
SocketSendBytes(« 2189015243373337300A »)
End Sub

Sub PowerOn(ByVal dummy as String)
SocketSendBytes(« 2189015057310A »)
End Sub

Sub PowerOff(ByVal dummy as String)
SocketSendBytes(« 2189015057300A »)
End Sub

Sub SocketSendBytes(ByVal Message As String)
Dim MsgLen as Integer = Len(Message)
Dim SendBytes(MsgLen / 2 – 1) as Byte
Dim Port as Integer
SendBytes = HexStringToByteArray(Message)
hs.writelog(« GC100Driver », « Info: Bytes =  » & BitConverter.ToString(SendBytes))
If Client= » » Then
Client = hs.GetIniSetting(« Server », »address », »127.0.0.1″, »GC100Socket.ini »)
hs.writelog(« GC100Driver », « Info: server =  » & Client )
Port = CInt(hs.GetIniSetting(« Server », »port », »4999″, »GC100Socket.ini »))
hs.writelog(« GC100Driver », « Info: Port =  » & Port )
Try
tcpClient = New System.Net.Sockets.TcpClient
tcpClient.SendTimeout() = 1000
tcpClient.NoDelay = True
tcpClient.Connect(Client, Port)
networkStream = tcpClient.GetStream()
Catch Ex As Exception
hs.writelog(« GC100Driver », « Error while connecting:  » & Ex.ToString)
End Try
End If

If networkStream.CanWrite Then
hs.writelog(« GC100Driver », « Info: Can write… »)
networkStream.Write(SendBytes, 0, MsgLen / 2)
hs.writelog(« GC100Driver », « Info: Data sent » )
End If
End Sub

Sub CloseSocket(ByVal dummy as String)
networkStream.Close()
tcpClient.Close()
Client = «  »
End Sub

Public Function HexStringToByteArray(ByRef hexString As String) As Byte()
Dim length As Integer = Len(hexString)
Dim bytOut(length / 2 – 1) As Byte
Dim index As Integer
Dim bytHigh As Byte, bytLow As Byte
For index = 1 To length Step 2
bytHigh = AscW(Mid$(hexString, index, 1)) – 48
bytLow = AscW(Mid$(hexString, index + 1, 1)) – 48
If bytHigh > 9 Then bytHigh = bytHigh – 7
If bytLow > 9 Then bytLow = bytLow – 7
bytOut(index \ 2) = (bytHigh * &H10) Or bytLow
Next index
HexStringToByteArray = bytOut
End Function

Vous notez qu’en début de script, il y a un nom associé à une commande.

Par exemple: remotecontrolmenu est associé au code binaire affichant le menu. Pour chaque petit groupe, il y a une commande spécifique. Vous pouvez les adapter au code binaire de votre appareil à contrôler.

Dans le répertoire de scripts, vous avez un fichier shutdown.txt

Ajoutez cette ligne dans le fichier:

hs.runex « GC100Driver.vb », « CloseSocket », » »

avant end sub.

Création de l’event d’allumge du jvc nommé poweron:

Vous créez un event classique: cf screenshots.

et pour l’action, vous faites une commande de script spécifique.

Faites attention au nom qu idoit correspondre au code voulu écrit dans le script.

&hs.runex(« GC100Driver.vb », »PowerOn », » »)

Cette commande de script appelle le code binaire associé à PowerOn.


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :