Dijital İkiz

AWS IoT TwinMaker Alternatifleri: Bulut Bağımlılığı Olmadan 3D Dijital İkiz Oluşturun

Buluta özgü bir ikiz hizmeti yerine açık web teknolojisiyle etkileşimli 3D dijital ikizler oluşturabilirsiniz. Seçenekleri karşılaştırın ve tarayıcıda canlı MQTT verisini bir glTF modeline bağlayın.

Açık web 3D kütüphaneleri üzerine kurulu bir AWS IoT TwinMaker alternatifini gösteren, canlı MQTT değerleri içeren tarayıcı tabanlı 3D fabrika sahnesi
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Etkileşimli 3D dijital ikizler istiyor ancak açık formatları, standart protokolleri ve her yerde çalışabilme özgürlüğünü tercih ediyorsanız bir AWS IoT TwinMaker alternatifi mantıklıdır. Bu rehber, diğer platformlardan tamamen açık web yığınlarına kadar gerçekçi alternatifleri karşılaştırıyor ve ardından temel tekniği gösteriyor: tarayıcıda canlı MQTT verisini bir glTF modelinin node'larına bağlamak. Sonunda eksiksiz bir 3D ikize genişletebileceğiniz çalışan bir modele sahip olacaksınız.

Genel olarak ikizler hakkında arka plan için dijital ikiz teknolojisi rehberine bakın.

TwinMaker Neleri Bir Araya Getirir?

AWS IoT TwinMaker, bir 3D ikizin ihtiyaç duyduğu birkaç parçayı birleştirir:

  • Varlıklar ve bileşenler (entities and components): varlıklarınızı modeller ve veri kaynaklarına bağlar.
  • Bağlayıcılar: zaman serisi verileri, video ve belgeler için diğer AWS veri hizmetlerine bağlanır.
  • Bir sahne düzenleyici (scene composer): 3D modelleri yerleştirmek ve veri odaklı etiketler ile renk kuralları eklemek için.
  • Bir Grafana eklentisi üzerinden görselleştirme veya özel web uygulamaları için bir uygulama kiti.

Verileriniz zaten bu AWS hizmetlerinde bulunuyorsa bu kullanışlıdır. Bedeli ise ikizin, sahnelerinin ve veri bağlamalarının hizmete özgü kavramlarla ifade edilmesidir. Başka bir buluta veya şirket içindeki bir tesis ağına geçmek, bunları yeniden oluşturmak anlamına gelir. Platform yol haritaları da zamanla değişir; bu yüzden uzun ömürlü bir projeyi herhangi bir yönetilen ikiz hizmetine bağlamadan önce hizmetin güncel durumunu kontrol edin.

Taşınabilir Bir 3D İkiz Neye İhtiyaç Duyar?

Markaları bir kenara bırakırsanız her 3D ikiz aynı beş katmana sahiptir:

Katman Görev Taşınabilir seçenekler
Geometri Tesisin veya makinenin 3D modeli CAD'den veya Blender'dan dışa aktarılan glTF/GLB
Render Sahneyi tarayıcıda çizmek ve etkileşim sağlamak Three.js, Babylon.js, coğrafi veriler için CesiumJS
Canlı veri Güncel değerleri sahneye iletmek Secure WebSocket üzerinden MQTT
Bağlama Veri alanlarını node'lara, renklere, etiketlere, animasyonlara eşlemek Küçük bir JSON eşleme dosyası ve kendi kodunuz
Geçmiş Trendler, yeniden oynatma, analitik Zaman serisi veritabanı ve Grafana veya kendi grafikleriniz

Her katmanın olgun açık seçenekleri vardır ve her biri diğerlerine dokunmadan değiştirilebilir. Bu bağımsızlık, bağımlılık sorununun asıl cevabıdır.

Alternatiflerin Karşılaştırması

Yaklaşım 3D içerik üretimi Veri yolu Bağımlılık Efor
Diğer bulut ikiz hizmetleri Tedarikçinin sahne düzenleyicisi Tedarikçinin IoT ve veri hizmetleri Yüksek Düşükten ortaya
Oyun motorları (Unity, Unreal) Tam motor editörü Eklentiler veya özel MQTT client'ları Orta (motor lisansı, çalışma zamanları) Ortadan yükseğe
Three.js + MQTT Kod, herhangi bir araçtan glTF Doğrudan tarayıcıda WSS üzerinden MQTT Düşük Orta
Babylon.js + MQTT Kod ve Babylon araçları WSS üzerinden MQTT Düşük Orta
Grafana + paneller + MQTT ile beslenen veritabanı Sınırlı 3D, güçlü grafikler Telegraf veya bir abone veritabanına yazar Düşük Düşük

Oyun motorları fotogerçekçi eğitim ve VR için öne çıkar; Unity dijital ikiz rehberine bakın. Herkesin tarayıcıda açabileceği operasyon panelleri için ise web kütüphaneleri genellikle daha uygundur. Web tabanlı 3D dijital ikiz rehberi, Three.js ve Babylon.js'i daha ayrıntılı karşılaştırıyor.

MQTT Verisini Bir glTF Modeline Bağlamak

Her TwinMaker alternatifinin kalbi bağlama katmanıdır: "bu topic değiştiğinde şu 3D node'u güncelle". Geliştirici olmayanların da bakımını yapabilmesi için bağlamayı kodda değil veride tutun.

İşte bir eşleme dosyası. Her girdi bir topic'i ve payload alanını glTF sahnesindeki adlandırılmış bir node'a bağlar ve değerle ne yapılacağını söyler:

[
  { "topic": "furnace1/state", "field": "temp_c", "node": "Furnace_Body",
    "action": "color", "ranges": [[0, 600, "#4caf50"], [600, 900, "#ff9800"], [900, 2000, "#f44336"]] },
  { "topic": "conveyor1/state", "field": "running", "node": "Conveyor_Belt",
    "action": "visible-flag" },
  { "topic": "tank3/state", "field": "level_pct", "node": "Tank3_Liquid",
    "action": "scale-y", "max": 100 }
]

Ve bunu uygulayan tarayıcı modülü. three ve mqtt paketlerini npm ile kurun ve Vite veya benzeri bir araçla bundle edin. plant.glb modeli, eşlemede kullanılan adlara sahip node'lar içermelidir.

import * as THREE from "three";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import mqtt from "mqtt";
import bindings from "./bindings.json";

const PREFIX = "connectmq/demo/tm-alt-2h7/site1";
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, innerWidth / innerHeight, 0.1, 500);
camera.position.set(20, 15, 20);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
new OrbitControls(camera, renderer.domElement);
scene.add(new THREE.HemisphereLight(0xffffff, 0x404040, 3));

const nodes = {};
new GLTFLoader().load("/plant.glb", (gltf) => {
  scene.add(gltf.scene);
  for (const b of bindings) {
    const obj = gltf.scene.getObjectByName(b.node);
    if (!obj) { console.warn("Missing node", b.node); continue; }
    obj.traverse((o) => { if (o.isMesh) o.material = o.material.clone(); });
    nodes[b.node] = obj;
  }
});

function apply(b, value) {
  const obj = nodes[b.node];
  if (!obj) return;
  if (b.action === "color") {
    const hit = b.ranges.find(([lo, hi]) => value >= lo && value < hi);
    if (hit) obj.traverse((o) => o.isMesh && o.material.color.set(hit[2]));
  } else if (b.action === "visible-flag") {
    obj.traverse((o) => o.isMesh && o.material.emissive?.set(value ? 0x224422 : 0x000000));
  } else if (b.action === "scale-y") {
    obj.scale.y = Math.max(0.01, value / b.max);
  }
}

const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
  clientId: "tm-alt-2h7-view-" + Math.random().toString(16).slice(2, 8),
  protocolVersion: 5,
});
client.on("connect", () => client.subscribe(`${PREFIX}/+/state`));
client.on("message", (topic, payload) => {
  const rel = topic.slice(PREFIX.length + 1);
  const data = JSON.parse(payload.toString());
  for (const b of bindings) if (b.topic === rel && b.field in data) apply(b, data[b.field]);
});

renderer.setAnimationLoop(() => renderer.render(scene, camera));

Public MQTT test broker'ına retained durumlar yayınlayarak test edin:

mosquitto_pub -h broker.connectmq.com -p 1883 -i tm-alt-2h7-pub -r \
  -t "connectmq/demo/tm-alt-2h7/site1/furnace1/state" -m '{"temp_c":935}'
mosquitto_pub -h broker.connectmq.com -p 1883 -i tm-alt-2h7-pub2 -r \
  -t "connectmq/demo/tm-alt-2h7/site1/tank3/state" -m '{"level_pct":62}'

Durumlar retained olduğu için sahne yüklendiği anda doğru renkleri ve seviyeleri gösterir, ardından canlı olarak güncellenir. Bu, yönetilen bir sahne düzenleyicinin sunduğu deneyimin aynısıdır; yalnızca açık parçalardan oluşturulmuştur. IoT verisini bir 3D modele bağlama rehberi animasyonlar, etiketler ve alarm yanıp sönmesi gibi daha fazla eylemi ele alıyor; render tarafı için başvuru kaynağı ise Three.js dokümantasyonudur.

Yönetilen Bir İkiz Hizmetinden Ayrılırken Karşılaşılan Tuzaklar

  • Node adları değişir. Bir CAD modelini yeniden dışa aktarmak node'ları yeniden adlandırabilir ve bağlamaları sessizce bozabilir. Yukarıdaki kodda olduğu gibi eksik node'ları yükleme anında loglayın ve dışa aktarım sürecinizde adları sabit tutun.
  • Paylaşılan materyaller. glTF'de birçok mesh çoğu zaman tek bir materyali paylaşır; bu yüzden bir node'u renklendirmek hepsini renklendirir. Bağlanan node'lar için materyalleri klonlayın.
  • Ağır modeller. CAD dışa aktarımları devasa olabilir. Yükleme sürelerini makul tutmak için geometriyi sadeleştirin, statik mesh'leri birleştirin ve sıkıştırılmış glTF kullanın.
  • Geçmiş ayrıdır. Canlı MQTT verisi sahneyi yönetir, ancak trendler ve yeniden oynatma bir veritabanı gerektirir. Aynı topic'lere bir yazıcı hizmeti veya Telegraf abone edin.
  • Tarayıcı kimlik bilgileri. Bir tarayıcıya gönderilen her şey kullanıcısı tarafından okunabilir. Görüntüleyicilere, yayın yapan gateway'lerinkinden ayrı, okuma odaklı kimlik bilgileri verin.
  • İlk yüklemede eksik durum. Gateway'ler yalnızca değişiklikleri yayınlıyorsa, yeni açılan bir sahne bir şey değişene kadar boş kalır. Her görüntüleyicinin güncel resimden başlaması için tam durum mesajlarını retain bayrağıyla yayınlayın.
  • Her mesajı render etmek. Yüksek hızlı telemetri, ekranın gösterebileceğinden fazla sahne güncellemesi tetikleyebilir. Mesajlar geldiğinde en son değerleri saklayın ve bunları animasyon karesi başına bir kez uygulayın.

Dört Adımda Geçiş Yolu

Sıfırdan başlamak yerine mevcut bir yönetilen ikizin yerini alıyorsanız küçük ve geri alınabilir adımlarla ilerleyin:

  1. 3D varlıklarınızı glTF'ye aktarın ve bağlamalar için ihtiyaç duyduğunuz node adlarını doğrulayın.
  2. Gateway'lerin mevcut veri yoluna paralel olarak bir MQTT broker'a yayın yapmasını sağlayın.
  3. Sahne bağlamalarını bir eşleme dosyası olarak yeniden oluşturun ve yeni görüntüleyiciyi eskisiyle yan yana karşılaştırın.
  4. Geçmişi aynı topic'lerden beslenen bir zaman serisi veritabanına taşıyın, ardından eski yolu devreden çıkarın.

Veri Katmanını Barındırmak

Canlı veri katmanı, her zaman açık olması ve hem tesis hem de tarayıcı tarafından erişilebilir olması gereken tek parçadır. Secure WebSocket desteğine sahip barındırılan bir MQTT broker, tesiste port açmadan bunu çözer: gateway'ler TLS üzerinden dışa doğru bağlanır, tarayıcılar WSS üzerinden bağlanır.

ConnectMQ tam olarak bunu sunar: gateway'ler için 8883'te TLS, tarayıcılar için 8084 portunda /mqtt yolunda Secure WebSocket, MQTT 5 desteği ve canlı topic gezginine sahip bir portal. ConnectMQ ayrıca aynı tarayıcı artı MQTT modeli üzerine kurulu, WSS üzerinden canlı güncellenen bir CNC tezgâhı, robot kol, fırın, tank, konveyör ve pompadan oluşan bir fabrikayı gösteren public bir 3D dijital ikiz web demosu çalıştırır. Üretim için public uç noktayı portaldan alacağınız özel broker kimlik bilgilerinizle değiştirin: YOUR_USERNAME, YOUR_PASSWORD ve YOUR_CLIENT_ID.

3D İkizinizi ConnectMQ Üzerinde Oluşturun

Açık web 3D kütüphaneleri ve standart bir MQTT broker, tamamen sizin kontrolünüzde olan etkileşimli bir ikiz sunar. Kredi kartı gerekmeden ücretsiz bir ConnectMQ Serverless broker ile başlayın ve ilk glTF sahnenizi bugün canlı veriye bağlayın.

Sık Sorulan Sorular

3D için iyi bir AWS IoT TwinMaker alternatifi hangisidir?

Tarayıcı tabanlı operasyon ikizleri için glTF modelleri ve Secure WebSocket üzerinden MQTT ile birlikte Three.js veya Babylon.js esnek ve taşınabilir bir seçimdir. Unity gibi oyun motorları ise fotogerçekçi veya VR deneyimlerine uygundur.

TwinMaker'daki 3D modellerimi yeniden kullanabilir miyim?

glTF veya GLB formatındaysalar genellikle evet. Veri bağlamalarını ve etiket yerleşimlerini yeniden oluşturmanız gerekir; bunları yukarıda gösterildiği gibi bir eşleme dosyasında tutarsanız bu en kolay hâle gelir.

Tarayıcılar MQTT'ye doğrudan bağlanır mı?

Evet. MQTT.js, WebSocket veya Secure WebSocket üzerinden bağlanır; böylece bir web sayfası bir backend aktarıcısı olmadan topic'lere abone olabilir. Üretimde TLS ve ayrı görüntüleyici kimlik bilgileri kullanın.

TwinMaker olmadan geçmiş veriler nereye gider?

Telegraf veya küçük bir script gibi bir MQTT abonesiyle beslenen bir zaman serisi veritabanı kullanın ve verileri Grafana'da veya ikiz sayfanızdaki grafiklerde görselleştirin.

İlgili yazılar

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.