Fonctionnement Enocean

ENOCEAN est un standard sans pile et sans fil. Des capteurs pour toutes la maison commencent Ă  ĂŞtre disponible. C'est une technologie Ă  suivre ...

Re: Fonctionnement Enocean

Messagede Touf2638 » 03 Nov 2015, 11:26

Bon, je me réponds à moi même si ça peut servir à quelqu'un:

En gros le dongle a un ID unique et un base ID. On peut appairer le dongle avec l'un des 2. Si on utilise l'ID unique on peut seulement piloter quatres actionneurs séparement en changeant le type d'appui (voir code précédent).
Si on utilise le base ID, on peut aller jusque 128. Et si on combine les 2, jusque 128*4.

Pour utiliser le Base ID, il faut récupérer celui ci par la trame suivante :

Code: Tout sélectionner
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim buffer(20) As Byte

        ' HEADER
        buffer(0) = &H55
        buffer(1) = &H0
        buffer(2) = &H1
        buffer(3) = &H0
        buffer(4) = &H5
        buffer(5) = &H70
        buffer(6) = &H8
        buffer(7) = &H38

        ' ENVOI DONNEES
        port.Write(buffer, 0, buffer.Length)

    End Sub


On récupère le base ID renvoyé qui ressemble à 55 00 05 01 02 DB 00 FF 9C 86 80 0A C0.
Le base ID est ici FF 9C 86 80.

Il suffit ensuite de remplacer l'ID quand on envoit la trame par le base ID et appairer (dans le code que j'ai posté buffer(8) à (11)). On peut ensuite incrémenter ce base ID et appairer de nouveau pour chaque actionneur.

VoilĂ 
Touf2638
Membre Actif
 
Messages: 16
Inscription: 26 AoĂ» 2014, 14:00

Re: Fonctionnement Enocean

Messagede Pasray » 05 Nov 2015, 21:45

Ben dis donc, t'es bien seul sur ce forum...
J'ai une demande Ă  te faire : accepterais-tu de me transmettre ton code ?
Je m'y connais pas trop mal en vb.net, mais je ne suis pas très à l'aise avec l'utilisation du port série.
Or je rêve de faire ce que tu as réussi à faire : piloter un dongle enocean usb300, car je suppose que c'est de celui là que tu parles.

Ce n'est pas mon genre de recevoir sans rien donner, donc si tu me laisse du temps je trouverais bien un moyen de te renvoyer l'ascenseur.

Bien cordialement
Pascal
pasray@gmail.com
Pasray
Membre un peu timide !
 
Messages: 2
Inscription: 27 Juin 2012, 09:21

Re: Fonctionnement Enocean

Messagede Touf2638 » 09 Nov 2015, 12:37

C'est bien le but d'un forum d'Ă©changer et de partager ;)

Par contre c'est pour tester, c'est fait Ă  l'arrache... et dans le timer t'occupes pas du code, c'est pour afficher la mesure d'un compteur d'Ă©nergie que je suis en train de tester.
VoilĂ :

Code: Tout sélectionner
Imports System.IO.Ports



Public Class Form1

    Private port As New SerialPort("COM13", 57600, Parity.None, 8, StopBits.One)
    Private string1 As String
    Private datas_lues As String
    Private buffer_lu() As Byte


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Timer1.Interval = 1000
        Timer1.Start()
        AddHandler port.DataReceived, New SerialDataReceivedEventHandler(AddressOf port_DataReceived)
        port.Open()

    End Sub


    Private Sub port_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)

        Dim buffer(port.BytesToRead - 1) As Byte
        datas_lues = ""
        port.Read(buffer, 0, port.BytesToRead)
        For index = 0 To buffer.Length - 1
            datas_lues = datas_lues & buffer(index) & Chr(13)
        Next
        buffer_lu = buffer

    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        RichTextBox1.Text = datas_lues
        If Not (buffer_lu Is Nothing) Then
            If buffer_lu(10) = 12 Then
                Label1.Text = buffer_lu(9) & " W"
            End If
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim buffer(20) As Byte
        Dim destination As Byte = 0
        If IsNumeric(TextBox1.Text) Then
            destination = TextBox1.Text
        End If

        'FF 9B 86 80

        ' HEADER
        buffer(0) = &H55      'Synchro
        buffer(1) = &H0       'Data lenght MSB
        buffer(2) = &H7       'Data lenght LSB
        buffer(3) = &H7       'optionnal lenght
        buffer(4) = &H1       'Packet type = RADIO Telegram
        buffer(5) = CalculCRC8(buffer, 1, 4)     'CRC8H

        ' DATAS
        buffer(6) = &HF6                      'TYPE F6 (RPS)
        destination = destination << 5
        buffer(7) = destination Or 16         'bit 4 = appuyĂ© ou relachĂ© / bit5 Ă  7 = rocker ID / bit 0 Ă  3 = seconde action
        buffer(8) = &HFF                      'ID1
        buffer(9) = &H9B                      'ID2
        buffer(10) = &H86                     'ID3
        buffer(11) = &H80                     'ID4
        buffer(12) = &H0                      'Status

        ' OPTIONNAL
        buffer(13) = &H3    'Numero sous telegramme
        buffer(14) = &H0    'Destination ID
        buffer(15) = &H0    'Destination ID
        buffer(16) = &H0    'Destination ID
        buffer(17) = &H0    'Destination ID
        buffer(18) = &HFF   'Dbm
        buffer(19) = &H0    'Niveau securite
        buffer(20) = CalculCRC8(buffer, 6, 14)     'CRC8D

        ' ENVOI DONNEES
        port.Write(buffer, 0, buffer.Length)

        System.Threading.Thread.Sleep(300)



        ' HEADER
        buffer(0) = &H55      'Synchro
        buffer(1) = &H0       'Data lenght MSB
        buffer(2) = &H7       'Data lenght LSB
        buffer(3) = &H7       'optionnal lenght
        buffer(4) = &H1       'Packet type = RADIO Telegram
        buffer(5) = CalculCRC8(buffer, 1, 4)     'CRC8H

        ' DATAS
        buffer(6) = &HF6     'TYPE F6 (RPS)
        buffer(7) = &H0       'bit 4 = appuyĂ© ou relachĂ© / bit5 Ă  7 = rocker ID / bit 0 Ă  3 = seconde action
        buffer(8) = &HFF                      'ID1
        buffer(9) = &H9B                      'ID2
        buffer(10) = &H86                     'ID3
        buffer(11) = &H80                     'ID4
        buffer(12) = &H0      'Status

        ' OPTIONNAL
        buffer(13) = &H3      'Numero sous telegramme
        buffer(14) = &H0      'Destination ID
        buffer(15) = &H0      'Destination ID
        buffer(16) = &H0      'Destination ID
        buffer(17) = &H0      'Destination ID
        buffer(18) = &HFF     'Dbm
        buffer(19) = &H0      'Niveau securite
        buffer(20) = CalculCRC8(buffer, 6, 14)     'CRC8D

        ' ENVOI DONNEES
        port.Write(buffer, 0, buffer.Length)

    End Sub

    Private Function CalculCRC8(ByVal datas As Byte(), ByVal start_idx As Integer, ByVal lenght As Integer) As Byte

        Dim u8CRC8Table() As Short = {
        &H0, &H7, &HE, &H9, &H1C, &H1B, &H12, &H15,
        &H38, &H3F, &H36, &H31, &H24, &H23, &H2A, &H2D,
        &H70, &H77, &H7E, &H79, &H6C, &H6B, &H62, &H65,
        &H48, &H4F, &H46, &H41, &H54, &H53, &H5A, &H5D,
        &HE0, &HE7, &HEE, &HE9, &HFC, &HFB, &HF2, &HF5,
        &HD8, &HDF, &HD6, &HD1, &HC4, &HC3, &HCA, &HCD,
        &H90, &H97, &H9E, &H99, &H8C, &H8B, &H82, &H85,
        &HA8, &HAF, &HA6, &HA1, &HB4, &HB3, &HBA, &HBD,
        &HC7, &HC0, &HC9, &HCE, &HDB, &HDC, &HD5, &HD2,
        &HFF, &HF8, &HF1, &HF6, &HE3, &HE4, &HED, &HEA,
        &HB7, &HB0, &HB9, &HBE, &HAB, &HAC, &HA5, &HA2,
        &H8F, &H88, &H81, &H86, &H93, &H94, &H9D, &H9A,
        &H27, &H20, &H29, &H2E, &H3B, &H3C, &H35, &H32,
        &H1F, &H18, &H11, &H16, &H3, &H4, &HD, &HA,
        &H57, &H50, &H59, &H5E, &H4B, &H4C, &H45, &H42,
        &H6F, &H68, &H61, &H66, &H73, &H74, &H7D, &H7A,
        &H89, &H8E, &H87, &H80, &H95, &H92, &H9B, &H9C,
        &HB1, &HB6, &HBF, &HB8, &HAD, &HAA, &HA3, &HA4,
        &HF9, &HFE, &HF7, &HF0, &HE5, &HE2, &HEB, &HEC,
        &HC1, &HC6, &HCF, &HC8, &HDD, &HDA, &HD3, &HD4,
        &H69, &H6E, &H67, &H60, &H75, &H72, &H7B, &H7C,
        &H51, &H56, &H5F, &H58, &H4D, &H4A, &H43, &H44,
        &H19, &H1E, &H17, &H10, &H5, &H2, &HB, &HC,
        &H21, &H26, &H2F, &H28, &H3D, &H3A, &H33, &H34,
        &H4E, &H49, &H40, &H47, &H52, &H55, &H5C, &H5B,
        &H76, &H71, &H78, &H7F, &H6A, &H6D, &H64, &H63,
        &H3E, &H39, &H30, &H37, &H22, &H25, &H2C, &H2B,
        &H6, &H1, &H8, &HF, &H1A, &H1D, &H14, &H13,
        &HAE, &HA9, &HA0, &HA7, &HB2, &HB5, &HBC, &HBB,
        &H96, &H91, &H98, &H9F, &H8A, &H8D, &H84, &H83,
        &HDE, &HD9, &HD0, &HD7, &HC2, &HC5, &HCC, &HCB,
        &HE6, &HE1, &HE8, &HEF, &HFA, &HFD, &HF4, &HF3
        }

        Dim checkSum As Byte = 0
        For index = start_idx To start_idx + (lenght - 1)
            checkSum = u8CRC8Table(datas(index) Xor checkSum)
        Next

        Return checkSum

    End Function

    ' RECUPERATION BASE ID

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim buffer(20) As Byte

        ' HEADER
        buffer(0) = &H55
        buffer(1) = &H0
        buffer(2) = &H1
        buffer(3) = &H0
        buffer(4) = &H5
        buffer(5) = &H70
        buffer(6) = &H8
        buffer(7) = &H38

        ' ENVOI DONNEES
        port.Write(buffer, 0, buffer.Length)

    End Sub
End Class
Touf2638
Membre Actif
 
Messages: 16
Inscription: 26 AoĂ» 2014, 14:00

Précédente

Retourner vers Enocean

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique


cron