IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Application pour récupérer des trames KNX


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Par défaut Application pour récupérer des trames KNX
    Bonjour alors voilà je suis sur un projet qui doit récupérer des trames KNX (KNX étant un bus pour les maison domotique).

    Pour mon projet j'utilise une bibliothèque java Calimero qui me permet de communiquer avec ce bus.
    Je post pour demander de l'aide pour débugger.
    Mon problème est n'a rien a voir avec Calimero.

    Pourquoi aux lignes 100 à 101 de KNX_Materiel j'obtiens un résultat différent entre Adresse source 1 et Adresse source 2 ??

    Pourquoi la ligne 27 du Main me provoque :
    "Exception in thread "main" java.lang.NullPointerException
    at knx.Main.main(Main.java:27)
    Java Result: 1"


    Un grand merci a ceux qui pourrons m'aider


    Class KNX_Materiel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    //Ce code nécéssite Eibd.
     
    //Import...
    import java.io.UnsupportedEncodingException;
    import java.util.*;
    import java.util.LinkedList;//Import pour l'utilisation de LinkedList
     
    //Import pour la recuperation de l'adresse local
    import java.net.InetAddress;
    import java.net.InetSocketAddress;
    import java.net.UnknownHostException;
     
    //Import pour l'utilisation de calimero
    //Pour télécharger Calimero : http://calimero.sourceforge.net/
    //Puis sous netbeans clic droit sur le projet
    //-> Properties -> Libraries -> Add Jar -> fichier calimero : calimero-2.0a4.jar
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import tuwien.auto.calimero.CloseEvent;
    import tuwien.auto.calimero.FrameEvent;
    import tuwien.auto.calimero.GroupAddress;
    import tuwien.auto.calimero.datapoint.CommandDP;
    import tuwien.auto.calimero.exception.KNXException;
    import tuwien.auto.calimero.exception.KNXFormatException;
    import tuwien.auto.calimero.knxnetip.KNXnetIPConnection;
    import tuwien.auto.calimero.link.KNXLinkClosedException;
    import tuwien.auto.calimero.link.KNXNetworkLinkIP;
    import tuwien.auto.calimero.link.event.NetworkLinkListener;
    import tuwien.auto.calimero.link.medium.TPSettings;
    import tuwien.auto.calimero.process.ProcessCommunicator;
    import tuwien.auto.calimero.process.ProcessCommunicatorImpl;
     
    public class KNX_Materiel implements KNX
    {
        private String Ip_Distante;
        private String Ip_Local;
        private LinkedList <KNX_Data> ListData;
        private boolean Fin = false;
        private KNXNetworkLinkIP netLinkIp = null;
     
    //--------------------------------KNX_Materiel----------------------------------
        KNX_Materiel (String paramIpDistante)
        {
            Ip_Distante = paramIpDistante;
     
            try
            {
                InetAddress adrLocale = InetAddress.getLocalHost();
                Ip_Local = adrLocale.getHostAddress();
            }
            catch (UnknownHostException e)
            {
            }
        }//Enregistr-e les Ip pour la connection Local & Distante.
     
    //--------------------------------Open------------------------------------------
        public boolean Open()
        {
            boolean Flag = false;
     
     
            try
            {
    //Cree un lien nouveau réseau base sur le protocole KNX/IP,
    //en utilisant un KNXnetIPConnection. KNXnetIPConnection : Interface pour
    //travailler avec les réseaux KNX via une connexion réseau IP. L'échange de
    //données (envoi et réception) se fait à travers des messages de CEMI.
    //Les événements asynchrones ou entrant sont relayés vers les écouteurs
    //d'événements enregistrés.
                        //Mode de fonctionnement ici en tunnel.
            netLinkIp = new KNXNetworkLinkIP( KNXNetworkLinkIP.TUNNEL,
                        //Adresse IP de l'ordinateur local.
                        new InetSocketAddress(InetAddress.getByName(Ip_Local),0),
                        //Adresse IP de l'ordinateur distant.
                        new InetSocketAddress(InetAddress.getByName(Ip_Distante),
                        KNXnetIPConnection.IP_PORT),
                        //Boolean useNAT
                        false,
                        //Fournit les paramètres nécessaires à la communication sur
                        //les TP (paire torsadée) à moyen terme. Ce type est utilisé
                        //pour les réglages médium paire torsadée
                        //TP0 (false) et TP1 (true).
                        new TPSettings(false));
     
                System.out.println("*** Connected ***");
                //Fournit un processus de communication avec un réseau KNX.
                ProcessCommunicator pc = new ProcessCommunicatorImpl(netLinkIp);
                //Ajoute un écouteur d'évènement sur netLinkIP
                netLinkIp.addLinkListener(
                        new NetworkLinkListener()
                        {
                            @Override public void confirmation(FrameEvent arg0)
                            {
                            }
                            @Override public void indication(FrameEvent arg0)
                            {
                                KNX_Data Data = new KNX_Data();
     
                                Data.AdrSource= (((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame()).getSource().toByteArray());
                                System.out.print("Adresse source 1: "+ ((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame()).getSource().toByteArray()+"\n");
                                System.out.print("Adresse source 2: "+Data.AdrSource+"\n");
     
                                System.out.print("Adresse destination : "+ ((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame()).getDestination().toByteArray()+"\n");
                                Data.AdrDestination= (((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame()).getDestination().toByteArray());
     
                                System.out.print("Données : "+ ((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame()).getPayload()+"\n\n");
                                Data.Donnees= (((tuwien.auto.calimero.cemi.CEMILData)arg0.getFrame()).getPayload());
     
                                ListData.add(Data);
     
                            }//Execute a chaque reception de trame KNX.
                            @Override public void linkClosed(CloseEvent arg0)
                            {
                            }
                        });
                Flag = true;
            }
            catch (KNXLinkClosedException e)
            {
            }
            catch (KNXFormatException e)
            {
            }
            catch (KNXException e)
            {
            }
            catch (UnknownHostException e)
            {
            }
     
            return Flag;
        }//Connexion au bus KNX via EIBD et Enregistrement des trames.
     
    //--------------------------------Close-----------------------------------------
        public boolean Close()
        {
            Fin = true;
            netLinkIp.close();
            System.out.println("*** Connexion closed ***");
            return Fin;
        }//envoie le signal de fin de connexion pour open.
     
    //--------------------------------getFrames-------------------------------------
        public LinkedList <KNX_Data> getFrames()
        {
            LinkedList <KNX_Data> BufferList;
            BufferList = ListData;
            ListData = new LinkedList<KNX_Data>();
            return  BufferList;
        }//Permet de recuperer les trames.
     
    //------------------------------------------------------------------------------
     
    }
    KNX_Data
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class KNX_Data
    {
        public byte[] AdrSource;
        public byte[] AdrDestination;
        public byte[] Donnees;
    }
    Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.io.IOException;
    import java.util.*;
    import java.util.LinkedList;
    import java.lang.Runnable;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    public class Main
    {
        public static LinkedList <KNX_Data> List;
        public static KNX_Materiel Test = null;
     
        public static void main(String[] args) 
        {
                Test = new KNX_Materiel("127.0.0.1");
                Test.Open();
            try
            {
                Thread.sleep(15000);
            }
            catch (InterruptedException ex)
            {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
                List = Test.getFrames();
     
                System.out.print("Main : "+List.get(1)+"\n");
     
     
     
                Test.Close();
        }

  2. #2
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Par défaut
    Peut importe, cela ne change rien j'ai quand même un problème.

    Et existe t'il un autre moyen pour stocker mes données qu'une LinkedList <KNX_Data>?
    J'ai constaté que la ligne 109 du KNX_Materiel ralenti mon programme et bloque la réception des trame suivante.

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Tjrs pour le probleme 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private LinkedList <KNX_Data> ListData;
    Tu le crée uniquement dans getFrames, apres l'avoir assigné a BufferList (qui donc devient nulle). Ce qui evidement va te provoquer ton nullpointer.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Par défaut
    Merci beaucoup (je répond un peu tard).

    Effectivement il y avait un problème ici que j'ai corriger en modifiant la ligne 39 par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private LinkedList <KNX_Data> ListData = new KNX_Data ();
    puis j'ai aussi modifier la ligne 97 par :
    Et en rajoutant après la ligne 39 :
    voilà avec ceci mon code fonctionne et je parviens a récupérer :

    l'adresse source
    l'adresse de destination
    la donnée

    de mes trames KNX.

    Encore merci et bon courage pour ceux qui s'attaque à du KNX

  5. #5
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Par défaut questions sur le code
    Bonsoir à tous,

    Nous sommes étudiants et essayons de développer un code Java afin de pouvoir communiquer avec le bus KNX. Nous avons essayer d"implémenter votre code mais cela ne donne rien notamment avec le problème de cette ligne:

    private LinkedList <KNX_Data> ListData = new KNX_Data ();

    On comprend pas car à droite on instancie un objet de la classe KNX_Materiel et à gauche on essaye de mettre l'objet dans une liste LinkedList

    De plus on sait pas ce qu'est KNX notamment à la ligne suivante:

    public class KNX_Materiel implements KNX

    Merci d'avance pour l'aide que vous pourrez nous apporter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/10/2006, 10h56
  2. fonction pour récupérer des données xml
    Par jeff29 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/06/2006, 16h46
  3. Pb pour récupérer des mots de passe
    Par m@thieu84 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 26/05/2006, 19h07
  4. [Javascript] PB pour récupérer des valeurs !
    Par chaser_T dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/04/2006, 11h26
  5. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo