Amilcar
non lue,21 janv. 2012, 12:22:3821/01/2012Connectez-vous pour répondre à l'auteur
Connectez-vous pour transférer le message
Vous n'êtes pas autorisé à supprimer des messages dans ce groupe
Afficher le message d'origine
Soit les adresses e-mail sont anonymes pour ce groupe, soit vous devez disposer de l'autorisation "Afficher les adresses e-mail des membres" pour afficher le message d'origine.
à domotique-EIB
Bonjour tout le monde,
J'ai mis au point une petite application VBNET, utilisant, FALCON 2.0,
Le principe est simple,
L'activité du bus EIB est enregistrée sur une base de données MSSQL
Server EXPRESS Edition, (version gratuite), nom de la table KNX_LOG.
Ce code VB lit (cycliquement) une autre table SQL (KNX_EXT_CMD) et
envoi les commandes vers le bus KNX.
puis j'ai développé aussi une application web pour iphone, ou autre
smartphone, qui permet le contrôle de tous les participants KNX
via une page web (qui alimente la table KNX_EXT_CMD) et lit les états
de ces derniers via la table KNX_LOG.
Le résultat est excellent , pas de latence.
l'application complete me permet de contrôler le BUS KNX ( 58
participants au total, variateurs, thermostats, E/S ....) en plus
d'une station meteo non KNX (WS2300) et 6 cameras IP.
Partie du code :
/
*********************************************************************************************/
Imports System
Imports System.IO
Imports System.Threading
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Data.SqlClient
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Public Class Form1
Public Const FalconLicKey As String = "Demo"
Private m_sConnectionParameter As String
Private m_sGuid As String
Public WithEvents GroupDataObj As EIBA.Interop.Falcon.GroupData
Dim EtatConn As Integer
Dim NLI As Long
Dim NbMin As Long
Dim PasdeRequette As Int16
Public Function OpenFalconConnectionManager() As Boolean
Dim ptrConnectionManager As
EIBA.Interop.Falcon.IConnectionManager
ptrConnectionManager = New
EIBA.Interop.Falcon.ConnectionManagerClass
Dim pfcConnection As EIBA.Interop.Falcon.FalconConnection
Dim bSuccess As Boolean
bSuccess = False
pfcConnection = ptrConnectionManager.Item("FT12")
m_sGuid = ptrConnectionManager.Item("FT12").guidEdi.ToString
'm_sGuid = ptrConnectionManager.Item("Serial PEI16 -
COM1").guidEdi.ToString
'm_sGuid = pfcConnection.guidEdi.ToString
If pfcConnection.Parameters <> "" Then
m_sConnectionParameter = pfcConnection.Parameters
End If
bSuccess = True
Return bSuccess
End Function
Private Sub GroupDataObj_GroupDataConfirmationRead(ByVal
GroupAddress As Integer, ByVal RoutingCnt As Integer, ByVal Prio As
EIBA.Interop.Falcon.Priority, ByVal [Error] As Boolean, ByVal Data As
Object) Handles GroupDataObj.GroupDataConfirmationRead
Call Enr_Log(GroupAddress, RoutingCnt, Prio, Data)
End Sub
Private Sub GroupDataObj_GroupDataConfirmationResponse(ByVal
GroupAddress As Integer, ByVal RoutingCnt As Integer, ByVal Prio As
EIBA.Interop.Falcon.Priority, ByVal [Error] As Boolean, ByVal Data As
Object) Handles GroupDataObj.GroupDataConfirmationResponse
call Enr_Log(GroupAddress,RoutingCnt,Prio,Data)
End Sub
Private Sub GroupDataObj_GroupDataConfirmationWrite(ByVal
GroupAddress As Integer, ByVal RoutingCnt As Integer, ByVal Prio As
EIBA.Interop.Falcon.Priority, ByVal [Error] As Boolean, ByVal Data As
Object) Handles GroupDataObj.GroupDataConfirmationWrite
call Enr_Log(GroupAddress,RoutingCnt,Prio,Data)
End Sub
Private Sub GroupDataObj_GroupDataIndicationRead(ByVal
GroupAddress As Integer, ByVal RoutingCnt As Integer, ByVal Prio As
EIBA.Interop.Falcon.Priority, ByVal Data As Object) Handles
GroupDataObj.GroupDataIndicationRead
call Enr_Log(GroupAddress,RoutingCnt,Prio,Data)
End Sub
Private Sub GroupDataObj_GroupDataIndicationResponse(ByVal
GroupAddress As Integer, ByVal RoutingCnt As Integer, ByVal Prio As
EIBA.Interop.Falcon.Priority, ByVal Data As Object) Handles
GroupDataObj.GroupDataIndicationResponse
call Enr_Log(GroupAddress,RoutingCnt,Prio,Data)
End Sub
Private Sub GroupDataObj_GroupDataIndicationWrite(ByVal
GroupAddress As Integer, ByVal RoutingCnt As Integer, ByVal Prio As
EIBA.Interop.Falcon.Priority, ByVal Data As Object) Handles
GroupDataObj.GroupDataIndicationWrite
Call Enr_Log(GroupAddress, RoutingCnt, Prio, Data)
End Sub
Private Sub Read_Cmd()
Dim myc As SqlConnection = New
System.Data.SqlClient.SqlConnection("user
id=xxxxx;password=xxxxx;server=DOMOTIQUE
\SQLEXPRESS;Trusted_Connection=yes;database=KNX_Amilcar")
Dim Groupe As String
Dim Valeur As String
myc.Open()
NLI = 0
Groupe = ""
Valeur = ""
If PasdeRequette = 0 Then
On Error GoTo BR
Dim sqlComm As New SqlCommand("SELECT top 1 * from
KNX_EXT_CMD with(nolock) where isnull(Exec_Status,0)=0 order by NLI",
myc)
Dim r As SqlDataReader = sqlComm.ExecuteReader()
While r.Read()
Groupe = r("Groupe")
Valeur = r("Valeur")
NLI = r("NLI")
End While
r.Close()
br:
If NLI <> 0 Then
If Len(Valeur) >= 4 Then
GroupDataObj.Write(Groupe,
EIBA.Interop.Falcon.Priority.PriorityDefault, 6, False, Valeur)
Else
GroupDataObj.Write(Groupe,
EIBA.Interop.Falcon.Priority.PriorityDefault, 6, True, Valeur)
End If
Dim cmd1 As SqlCommand = New SqlCommand("update
KNX_EXT_CMD set Exec_Status=1 where NLI=" + Str(NLI), myc)
cmd1.ExecuteNonQuery()
cmd1.Dispose()
End If
End If
myc.Close()
myc.Dispose()
End Sub
Private Sub Enr_Log(ByVal GroupAddress As Integer, ByVal
RoutingCnt As Integer, ByVal Prio As EIBA.Interop.Falcon.Priority,
ByVal Data As Object)
Dim ChData As String = ""
Dim ChGr As String
Dim i As Integer
If (IsArray(Data)) Then
For i = LBound(Data) To UBound(Data)
ChData = ChData + IIf(Len(Hex(Data(i))) < 2, "0" +
Hex(Data(i)), Hex(Data(i)))
Next i
Else
ChData = ChData + CStr(Data)
End If
ChGr = Str(Math.Floor(GroupAddress / 1024)) + "/" +
Str(Math.Floor((GroupAddress Mod 2048) / 256)) + "/" +
Str((GroupAddress Mod 256))
PasdeRequette = 1
Dim myc As SqlConnection = New
System.Data.SqlClient.SqlConnection("user
id=xxxx;password=xxxxx;server=DOMOTIQUE
\SQLEXPRESS;Trusted_Connection=yes;database=KNX_Amilcar")
myc.Open()
Dim cmd1 As SqlCommand = New SqlCommand("insert into
KNX_LOG(N_Groupe,Valeur) values (" + Str(GroupAddress) + ",'" + ChData
+ "')", myc)
cmd1.ExecuteNonQuery()
cmd1.Dispose()
myc.Close()
myc.Dispose()
PasdeRequette = 0
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles
Me.FormClosing
GroupDataObj = Nothing
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Dim ClassCreatorObject As EIBA.Interop.Falcon.ClassCreator
Dim ConnectionObj As EIBA.Interop.Falcon.ConnectionObject
If OpenFalconConnectionManager() = False Then
Return
End If
Dim devOpenErr As EIBA.Interop.Falcon.DeviceOpenError
ClassCreatorObject = New EIBA.Interop.Falcon.ClassCreatorClass
ConnectionObj =
ClassCreatorObject.CreateInstanceLic("Falcon.ConnectionObject.1",
EIBA.Interop.Falcon.tagCLSCTX.CLSCTX_LOCAL_SERVER, "", FalconLicKey)
GroupDataObj = New EIBA.Interop.Falcon.ConfirmedGroupDataClass
ConnectionObj.Mode =
EIBA.Interop.Falcon.ConnectionMode.ConnectionModeRemoteConnectionless
Dim objPara As Object
objPara = m_sConnectionParameter
devOpenErr = ConnectionObj.Open2("{" + m_sGuid + "}", objPara)
GroupDataObj.Connection = ConnectionObj
Timer1.Enabled = True
Timer2.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
Read_Cmd()
Timer1.Enabled = 500
Timer1.Start()
End Sub
/
*********************************************************************************************/
J'espère que ceci vous aidera à mettre en oeuvre la Biblo Falcon 2.0,
qui constitue à mon avis une excellente alternative à EIBD/KNXweb
pour l'environnement Windows.
Un seule PC, permet de tout faire ( Surveillance , serveur web,
serveur VPN, log KNX, log Météo .... )
Amilcar