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:
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:
1 2 3 4 5 6 7
|
public class KNX_Data
{
public byte[] AdrSource;
public byte[] AdrDestination;
public byte[] Donnees;
} |
Main
Code:
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();
} |