Şu anda düğüm rollerini uygulamak gibi görünmüyor gibi, EasyMesh'in mevcut uygulamasını biraz değiştirirdim. Her düğüm eşittir ve yalnızca birbirleriyle bağlantılar kurabilirler. Gördüğüm gibi, yönlendirme tablolarına bir sunucu eklemenin veya bir sunucuya bağlantısı olan tablolarda belirli bir bağlantı kaydını işaretlemenin bir yolu yoktur.
Düğümler, mesaj yönlendirme / yönlendirme için bir bağlantı listesi kullanır. İhtiyacınız olan şey, sunucu için bir bağlantı kaydına sahip olan bir düğümdür, kök düğüm budur.
Şimdi, bir düğüme güç verildiğinde kullanılabilir AP'leri (Erişim Noktaları) tarayacak, mesh önekiyle başlamayanları filtreleyecek ve daha sonra en iyi RSSI ile AP'ye bağlanacaktır. Ayrıca her düğüm, ad mesh öneki + düğümü benzersiz çip kimliği ile kendi AP'sini oluşturur .
Başka bir düğüm yoksa, başkalarının bağlanmasını bekler. Ve bu, değişikliklerin uygulanması gereken ilk noktadır. Mesh öneki + "Sunucu" gibi bir adla benzersiz bir AP'yi sabit kodlayabilir veya yapılandırılabilir hale getirebilirsiniz ve başka bir EasyMesh AP yoksa düğüm bu AP'ye bağlanmalı ve önceden tanımlanmış bir meshConnectionType
nesneyi bağlantı listesinde saklamalıdır .
Bu nesnenin dosyalaması, sunucu ile düğüm arasındaki ileti alışverişi ile belirlenmez, ancak espconn
alan dışında sabit değerler olabilir . Bu, diğer durumlarda olduğu gibi edinilmelidir. Aşağıdaki yapıda yalnızca ilk üye değişkenine ihtiyacınız olacaktır.
struct meshConnectionType {
espconn *esp_conn;
uint32_t chipId = 0;
String subConnections;
timeSync time;
uint32_t lastRecieved = 0;
bool newConnection = true;
(...)
};
chipId
Örgü ağdaki sunucunun adresi olacak. ESP8266 çip kimliği olamayacak bir değer seçmelisiniz.
Yani temelde ağınıza güç veren ilk düğüm "kök" düğüm olacaktır. Diğer düğümler sunucuya mesaj göndermek istiyorsa, doğrudan bağlantı (kodda alt bağlantılar olarak adlandırılır) kayıtlarına göre mesaj "kök" düğümüne gönderilir.
"Kök" düğümü daha sonra sunucuya (yönlendiriciye / internete) doğrudan bağlantısı olduğunu ve sunucuya bu mesajı başka bir şekilde iletmesi gerektiği mesajı olarak (örgü benzeri bir yol değil) öğrenir. . Burada sunucunun IP adresi ve kullanılan port gibi ek bilgilere ihtiyaç duyulduğu açıktır. Bunlar ayrıca bir düğümü (her düğümde) varsayılan olarak veya bazı yapılandırma yöntemleriyle depolanmalıdır.
Son olarak, "root" düğümü sunucuya bir IP mesajı gönderecektir, bu sizin tarafınızdan tekrar uygulanmalıdır.
TL; DR; Sonuç:
- Bir sunucu AP'si olmalı ve ilk düğüm (yalnızca açılacak ilk düğüm) ona bağlanmalıdır, bu kök düğüm olacaktır.
- Sunucunun
destId
, sunucuya mesaj gönderirken mesh ağında kullanılacak bir adresi ( ) olmalıdır . Bu bilgi varsayılan olarak tüm düğümler tarafından kullanılabilir olmalıdır.
- Kök düğüm, sunucuya / internete "doğrudan" bağlı olduğunu bilmelidir. Bu, sunucunun
destId
kök düğümü bağlantı listesine bir bağlantı kaydı eklenerek gerçekleştirilebilir .
- Sunucuya bağlı olduğunu bilen kök düğüm, mesajları İnternet üzerinden uygun şekilde iletebilir.
Bu, EasyMesh'in uygulanmasını okuyarak bulduğum teorik bir fikir. Bunu gerçekleştirmeyi zorlaştıracak veya imkansız kılacak bazı önemli gerçekleri kaçırmış olabilirim. Ayrıca sorunu çözmenin en etkili yolu olmayabilir. Mesh ağı uzmanı değilim.
Ağda bir kök düğümü olması, "Kök bağlantısı kesilirse ne olur? Yeni bir kök nasıl seçilir?" Diye sorar.