BACnet Nedir ve Java BACnet4J
Evet ilk tepki Iyyy isminde meymenet yok bunun dediniz... Sayfayı kapatmamanız için açılımını verelim o fena değil
"Building Automation Control"
İşin aslına gelirsek söylencek çok şey var ama özetlemeye çalışacam.
İşte karşınızda bina otomasyon kontrol ağlarının kralı diyebileceğimiz BacNet. Böyle daha iyi oldu :)
Bu protokol otomasyon entegrasyonu ile beraber cihazlarımızın birbiriyle haberleşmesini sağlar. E şimdi IoT falan konuşuyoruz hiç de fena bir konu olmasa gerek bence. Siemens,Schneider Electric gibi birçok otomasyon firması bu protokolü kullanarak yayın yapan ve sahada buna göre çalışan endüstriyel cihazlar üretiyor.
List of automation protocols - Wikipedia
Vikipedia ya şu ansiklopedik bilgi de eklenmiş ;
"İlk defa 1987 yılında ASHRAE (American Society of Heating, Refrigerating and Air-Conditioning Engineers) tarafından oluşturulmuş ve 1995 yılında standart olarak yayımlanmıştır."
Bilgisayar Mühendisleri olarak bizler IP network altyapısıyla çalışmaya alışmışız yalnız burada cihazlar sadece IP ile değil farklı ağ yapıları ile de çalışabiliyor. Sizin için OSI modelini aşağı yuvarladım. Gördüğünüz üzere Physical ve Data Link düzeyi var ve BacNet daha altt seviyelerden de konuşabiliyor. MSTP, Point to Point RS-232, RS-485 ıvır zıvır.
Bacnet4J e geçmeden önce bu protokolün bit düzeyinde taşıdığı bilgilere kabaca bir bakalım. Aşağıdaki objeler netwok üzerinden tüm dinleyiciler ile paylaşılıyor ve bu şekilde cihazlarımız yönetilebilir ya da yönetebilir hale geliyor. Bu objelerin kullanılmasından önce TCP handshake e benzetebileceğimiz Who-Is, I-Am, Who-Has, I-Have BacNet cihazlarının tanışma faslı kısmı var onu atlamayalım :)
Bacnet4J için ise adresimiz burası;
Readme dosyasına baktığınız da kütüphanenin IPV4,IPV6 ve MS/TP yi desteklediği görülüyor.
Şimdi basit iki senaryo düşünelim. Mesela bu kütüphaneyi kullanarak bir BacNET dinleyicisi olarak network e girebilir neler oluyor izleyebilirsiniz.
BacNetClient client = new BacNetIpClient("<bind ip>", "<broadcast ip>", <client device id>);
client.start();
Set<Device> devices = client.discoverDevices(500); // given number is timeout in millis
for (Device device : devices) {
System.out.println(device);
for (Property property : client.getDeviceProperties(device)) {
System.out.println(property.getName() + " " + client.getPropertyValue(property));
}
}Bir diğer senaryoda örneğin IP düzeyinde elde ettiğiniz bir bilgiyi -database ya da multicast broadcast bir yayını- sanal bir BacNet device olarak yayabilirsiniz. Bu şekilde çok farklı sistemleri bu protokol üzerinden konuşturabilirsiniz. Mesela CCTV sistemi bir alarm üretip multicast bir yayın yaptı Java ile bunu yakaladınız o bölgedeki tüm kartlı geçiş sistemlerine ait kapıları kilitle. Uff baya havalı oldu ama mümkün :)
Bunun için de MessagingTest ve diğer test sınıflarına bakabilirsiniz.
BACnet4J/src/test/java/com/serotonin/bacnet4j at master · infiniteautomation/BACnet4J (github.com)
Yorumlar
Yorum Gönder