Homeseer:Dev VBNET

Un article de MacodaWiki.

Jump to: navigation, search

Homeseer 2.0 a apporté quelque chose qui manquait cruellement avec HS 1.7 : Un environnement de développement, de compilation et de debug.

Couplé avec l'utilisation d'une librairie de fonctions .DLL, c'est parfait pour un développement propre et rapide.

Sommaire

Ensemble des scripts de mon installation

Si vous désirez voir un ensemble de scripts que j'utilise, vous pouvez télécharger ceux-ci à l'adresse suivante :

http://www.macoda.com/domotique/Script_Homeseer


Instructions

  • Télécharger et installer le produit Microsoft Visual Basic 2005 Express :
http://www.microsoft.com/france/msdn/vstudio/express/vbasic/telechargez.mspx
  • Créer un nouveau projet console
  • Recopier le code pour le module principal dans le fichier module.vb
  • Recopier le code pour le script dans un nouveau fichier .vb
  • Rajouter des références .NET au projet
Dans le Menu Visual Basic : Projet, Ajouter des Référence, Parcourir ...)
HomeSeer2 - c:\Program Files\HomeSeer 2\HomeSeer2.dll
Scheduler - c:\Program Files\HomeSeer 2\Scheduler.dll
  • Modifier le source pour changer le login/mot de passe de connexion à Homeseer si nécessaire (default dans mon cas)
  • Lancer Homeseer
  • Lancer le programme (touche F5)
  • Regarder le log Homeseer qui doit contenir
18/03/2007 19:03:42 ~!~Info~!~Remote client connected from: 127.0.0.1
18/03/2007 19:03:42 ~!~DEBUG~!~Voici un code Homeseer permettant d'écrire dans le LOG.
18/03/2007 19:03:53 ~!~Info~!~Remote client disconnected

Code source

Pour le Module Principal

Ce script sert à englober le script qui sera copié dans le répertoire Homeseer et qui sera lancé par Homeseer.

Imports System.IO
#Region "HS Script Template Support"
Module HSScriptTemplate   
   Private Const MACHINE As String = "localhost"
   ' Les paramètres de connexion sur votre Homeseer (default/default par défaut)
   Private Const USERNAME As String = "default"
   Private Const PASSWORD As String = USERNAME
   Public hsinterface As New HomeSeer2.application
   Public hs As Scheduler.hsapplication
   Public Sub Main(ByVal pCmdArgs As String())
       Try
           With hsinterface
               ' .NET remoting connection to HS
               .SetHost(MACHINE)
               Dim Result As String = .Connect(USERNAME, PASSWORD)
               If Not Result.Equals(String.Empty) Then
                   Throw New Exception(String.Format( _
                           "Unable to connect to HomeSeer: {0}", Result))
               Else
                   hs = .GetHSRef
                   'Ici on fait appel au Main du script (qui a été renommé automatiquement)
                   Main_Script_a_Tester()
               End If
           End With
       Catch ex As Exception
           MsgBox(ex.Message)
       Finally
           If Not hs Is Nothing Then
               hs = Nothing
           End If
           If Not hsinterface Is Nothing Then
               hsinterface = Nothing
           End If
       End Try
   End Sub
End Module 'HSScriptTemplate
#End Region 'HS Script Template Support

pour le script

Ce script sera réellement lancé dans HOMESEER.

' L'utilisation de la variable d'environnement TARGET permet d'avoir un code différent
' dans Visual Basic et dans HOMESEER, permettant ainsi d'avoir un procédure "Main" dans Homeseer et
' une simple procédure "Main_Script_a_tester" dans Visual Basic.
#If TARGET = "exe" Then
Module script_a_tester
   Sub Main_Script_a_Tester()
#Else
Public Sub Main(Optional ByVal pParms As String = "")
#End If
       With hs
           ' Le code "Try Catch Finally" permet de faire une gestion des erreurs poussées et très pratique.
           Try 'General Error Handler
               'Voici le code (ici simpliste) qui sera utiliser dans Homeseer
               .WriteLog("DEBUG", "Voici un code Homeseer permettant d'écrire dans le LOG.")
           Catch ex As Exception 'General Error Handler
               .WriteLog("ERROR", "Error in VB.NET Script")
               .WriteLog("ERROR", " Source     : " & ex.Source)
               .WriteLog("ERROR", " Message    : " & ex.Message)
               .WriteLog("ERROR", " HelpLink   : " & ex.HelpLink)
               .WriteLog("ERROR", " StackTrace : " & ex.StackTrace)
           Finally 'General Error Handler -  Ce qu'il y a dans le FInally sera toujours exécuté, même s'il y a une erreur
           End Try 'General Error Handler
       End With 'hs
   End Sub
#If TARGET = "exe" Then
End Module
#End If