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
KNX_Data
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. //------------------------------------------------------------------------------ }
Main
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; }
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(); }
Partager