GrandMA3 Plugin ile MAnet Üzerinden Veri Alışverişi
GrandMA3 plugin geliştirme ortamında MAnet protokolünü kullanarak konsol ve düğümler arasında veri alışverişini öğrenin.
MAnet ve Plugin Entegrasyonu
MAnet, GrandMA3 ekosisteminin omurgasını oluşturan tescilli ağ protokolüdür. Konsollar, NPU'lar, vizüalizörler ve diğer MA cihazları arasındaki tüm veri trafiğini bu protokol yönetir. Bir plugin yazarken MAnet üzerinden veri okumak veya göndermek, show verisiyle gerçek zamanlı etkileşim kurmanın en doğrudan yoludur.
GrandMA3 Lua ortamı, MAnet katmanına doğrudan erişim sağlayan bir dizi yerleşik fonksiyon sunar. Bu fonksiyonları doğru kullanmak; fixture değerlerini okumak, executor durumlarını takip etmek ve hatta harici sistemlerle veri paylaşmak için kritik öneme sahiptir.
Temel Veri Okuma Fonksiyonları
GetVar ve DataPool Erişimi
Plugin içinden konsol değişkenlerine ulaşmanın en sık kullanılan yöntemi GetVar fonksiyonudur. Ancak MAnet üzerindeki paylaşımlı veriye ulaşmak için önce doğru DataPool referansını almanız gerekir.
DataPool()— Aktif show'un veri havuzunu döndürürDataPool().Worlds— Tüm world nesnelerine erişim sağlarDataPool().Executors— Executor listesini getirirDataPool().Fixtures— Fixture patch bilgilerine ulaşır
Executor Durum Sorgusu
Bir executor'ın anlık değerini MAnet üzerinden okumak için aşağıdaki yapıyı kullanabilirsiniz:
local exec = DataPool().Executors[1][5] local faderVal = exec.FaderBurada [1] page numarasını, [5] ise executor numarasını temsil eder. Fader özelliği 0.0 ile 1.0 arasında normalize edilmiş bir değer döndürür.
Veri Gönderme: SetVar ve Komut Arayüzü
MAnet üzerinden veri göndermek için genellikle iki yöntem tercih edilir. İlki doğrudan Lua komut arayüzü üzerinden konsola komut göndermek, ikincisi ise desteklenen objelere doğrudan değer atamaktır.
- Konsol komut satırına yazılan her şeyi
Cmd()fonksiyonuyla plugin'den tetikleyebilirsiniz. - Executor fader değeri gibi bazı özellikler doğrudan atama ile değiştirilebilir.
- Daha karmaşık senaryolarda osc veya harici protokol köprüleri tercih edilmelidir.
Cmd('Executor 1.5 At 75')Önemli Not: Cmd() fonksiyonu komutları konsol kullanıcısı adına çalıştırır. Bu nedenle show'un aktif World ve Page ayarları komut sonucunu doğrudan etkiler. Plugin'inizi test ederken her zaman izole bir World üzerinde çalışın.MAnet Üzerinden Fixture Değeri Okuma
Patch edilmiş bir fixture'ın anlık DMX çıkış değerini okumak, özellikle geri besleme gerektiren otomasyon senaryolarında çok işe yarar. Bunun için GetDmxValue benzeri düşük seviye fonksiyonlar yerine fixture objesinin attribute değerlerine erişmek daha güvenilirdir.
local fix = DataPool().Fixtures[1] local dimVal = fix.Attributes.Dimmer.ValueBu yaklaşım size preset veya programmer katmanından bağımsız olarak sahne çıkış değerini verir; DMX merge senaryolarında hangi katmanın baskın olduğunu anlamak için oldukça faydalıdır.
Gerçek Zamanlı Döngü ve Performans
MAnet verisiyle sürekli çalışan bir plugin yazıyorsanız, coroutine yapısını mutlaka kullanın. Ana thread'i bloklayan senkron döngüler konsolda performans sorunlarına yol açar.
- Veri okuma döngüsünü
coroutine.yield()ile periyodik olarak uyku moduna alın - Gereksiz yere her frame'de sorgu yapmaktan kaçının; değişim tespiti için önceki değeri önbelleğe alın
- Plugin'i kapatırken açık kalan coroutine'leri temizlemeyi unutmayın
İpucu: Geliştirme sürecinde konsolun yerleşik Lua Console penceresini (Setup → Plugins → Lua Console) kullanarak fonksiyonları canlı test edebilirsiniz. Bu, MAnet verisiyle çalışırken hata ayıklama süresini önemli ölçüde kısaltır.