Wired Pro İşlem Modları

❗️ Wired Pro, iki farklı işlem moduna sahip çok yönlü bir IoT veri toplama cihazıdır.

1. RS485 modu:

Bu modda Wired Pro, bir RS485 kablosu üzerinden Senseway’e (veya üçüncü taraf bir ağ geçidine) bağlanır. Ağ geçidi tarafından kontrol edilir ve 3 eksenli ivmeölçer ile sıcaklık sensörü olarak çalışır. Hat protokolü aşağıdaki RS485 Entegrasyonu bölümünde belgelenmiştir. Senseway ağ geçidinin kendisi için Senseway Entegrasyon Dokümantasyonu’na bakınız.

2. Wi-Fi modu:

Wi-Fi modunda Wired Pro kendi ağ geçidi olarak çalışır ve sensörlerini bağımsız olarak yönetir. MQTT Entegrasyonu ve HTTP Entegrasyonu bölümleri bu modu anlatır.

Wired Pro sensör ve ağ geçidi

Wired Pro, 3 eksenli ivme ve sıcaklık ölçümleri alabilen, ağ geçidi ve sensör dizisi birleşimi bir cihazdır. Ölçümleri işleyebilir, ölçüm stratejilerini uygulayabilir ve verileri buluta yükleyebilir. 5-24V DC girişle beslenen Wired Pro, şarj edilmesine gerek olmadan çalışır.

Wired Pro sistem entegrasyonuna başlamadan önce Wired Pro’nuzun MQTT, NTP ve HTTP ayarlarını yapılandırın.

Yapılandırma Sayfasına Erişim

Wired Pro takıldıktan kısa bir süre sonra WiredPro-CA:B8:41:XX:XX:XX SSIDsi ile bir Wi-Fi erişim noktası ağı yayınlar. Erişim noktasına bağlanmak için varsayılan şifreyi kullanın. Cihazınız yapılandırma sayfasını bir captive portal içinde açacaktır. Cihazınız captive portalı otomatik olarak açmazsa, varsayılan tarayıcınızdan http://192.168.4.1 adresine gidin. Wired Pro Wi-Fi üzerinden bir ağa bağlandıktan sonra yapılandırma sayfasına, aynı ağdan cihazın yerel IP adresi üzerinden erişilebilir. Yerel IP adresi yapılandırma sayfasının ana sekmesinde görüntülenir ve ayrıca MQTT bilgi mesajında da yer alır.

Bağlantı

Wi-Fi

Wired Pro, kablosuz ağ bağlantıları için Wi-Fi destekler.

NTP :id=ntp

Wired Pro tarafından gönderilen ölçüm mesajlarında zaman bilgisi kullanıldığından zaman senkronizasyonu gereklidir. OnPremise veya özel kurulumlarda varsayılan NTP sunucusu, Wired Pro yapılandırma sayfasındaki Settings > NTP bölümünden ya da /sntp uç noktası üzerinden değiştirilebilir.

❗️ Bu değer bir URL değil, NTP sunucu ana bilgisayar adıdır. Başına şema ekleyip sonuna yol eklemeyin. pool.ntp.org geçerlidir, http://pool.ntp.org/ geçerli değildir ve cihazın saatini senkronize etmesini engeller.

Varsayılan: pool.ntp.org

MQTT

Wired Pro, MQTT / TLS yapılandırmasına ihtiyaç duyar ve şu kimlik doğrulama mekanizmalarını destekler: düz metin MQTT, parolalı veya parolasız MQTTs ve istemci sertifikalı MQTTs. Kullanılacak MQTT broker sunucusu TLS desteklemeli ve sertifika tabanlı bağlantılar için aşağıdakileri sağlamalıdır:

  • MQTT uç noktası (mqtts: //my-mqtt-broker.server: 8883)
  • CA (CA sertifikası)
  • İstemci Sertifikası (CA tarafından oluşturulan ve imzalanan sertifika)
  • İstemci Anahtarı (CA aracılığıyla üretilen sertifikanın özel anahtarı)

Gerekli sertifikalar ve uç nokta bilgileri, Wired Pro yapılandırma sayfasındaki Settings > MQTT bölümünde tanımlanır. Wired Pro sonraki MQTT bağlantıları için bu sertifikaları kullanır.

Detaylar https://www.hivemq.com/blog/mqtt-security-fundamentals-tls-ssl/

HTTP

Wired Pro, HTTP üzerinden kontrol edilebilir; bu sayede yapılandırma değişiklikleri ve ölçüm işlemleri yapılabilir. HTTP uç noktalarına erişim önce bir giriş yapmayı gerektirir, ardından alınan token sonraki iletişimlerde kullanılmalıdır. Ayrıntılı bilgi HTTP Entegrasyonu bölümünde yer alır.

RS485

RS485 modunda Wired Pro, yarı çift yönlü bir RS485 veri yolunda slave olarak çalışır ve EasyCom çerçeve protokolünü konuşur. Bkz. RS485 Entegrasyonu.

Ölçüm Stratejisi :id=measurement-strategy

❗️ 3.1.x ile değişti. Önceki yazılım sürümleri sabit periyotlu bir zamanlayıcı (scheduler_period) sunuyordu. Bu alan artık mevcut değildir. Wired Pro artık akıllı ölçüm stratejisiyle çalışır: sürekli olarak hafif bir RMS değerini izler ve tam ölçümü yalnızca titreşim seviyesi gerçekten değiştiğinde tetikler; verinin hiç kesilmemesi için garantili bir heartbeat (kalp atışı) aralığı da vardır.

Aşağıdakilerden herhangi biri sağlandığında tam ölçüm tetiklenir:

  1. Açılıştan veya bir yapılandırma değişikliğinden sonraki ilk değerlendirmedir.
  2. now - last_trigger >= hearthbeat_interval_seconds, yani heartbeat aralığı.
  3. Her iki değişim eşiği de aşılmıştır ve minimum aralık dolmuştur:
    • |rms - previous_rms| >= absolute_change, ve
    • |rms - previous_rms| / previous_rms >= relative_change, ve
    • now - last_trigger >= min_trigger_interval_seconds

Hem mutlak hem de bağıl eşiğin birlikte aranması, makine boştayken sensör gürültüsü yüzünden tekrar tetiklenmeyi önler ve titreşim yükseldiğinde cihazın tepkisel kalmasını sağlar.

Yapılandırma alanları

Bu alanlar /configuration HTTP uç noktası ile device/<mac>/config/set MQTT konusu tarafından ortak kullanılır.

AlanTipGeçerli değerlerVarsayılanAçıklama
accelerometer_rangesayı2, 4, 8, 1616g cinsinden tam ölçek aralığı
sampling_ratesayı800, 1600, 3200, 6400, 12800, 2560025600Hz
sample_sizesayı10012000050000Eksen başına örnek sayısı
scheduler_enablednota bakHTTP’de 0/1, MQTT’de true/false0Akıllı ölçümü etkinleştirir
hearthbeat_interval_secondssayı>= 9001800Garantili ölçüm aralığı
min_trigger_interval_secondssayı>= 60 ve <= hearthbeat_interval_seconds300Değişimle tetiklenen ölçümler için hız sınırı
relative_changesayı>= 00.10Oran, örn.0.10 = %10
absolute_changesayı>= 00.05g cinsinden mutlak değişim

❗️ Dikkat edilmesi gereken iki nokta:

  • hearthbeat_interval_seconds tam olarak burada yazıldığı gibidir (th ile). Bu, hat üzerindeki anahtarın kendisidir; yazım hatası geriye dönük uyumluluk için korunmuştur.
  • scheduler_enabled alanının tipi taşımaya göre değişir: HTTP üzerinden JSON sayı (0/1), MQTT üzerinden JSON boolean (true/false) olmalıdır. Yanlış tip gönderimi reddedilir.

Her yazma işleminde sekiz alanın tamamı zorunludur. Alanlardan herhangi birinin eksik olduğu veya yukarıdaki aralık kısıtlarını ihlal eden bir istek reddedilir. HTTP 400 döndürür, MQTT ise ilgili .../rejected konusuna, durum mesajında hatalı alanın adıyla birlikte yayın yapar.

MQTT Entegrasyonu :id=mqtt-integration

Bu bölüm, Wired Pro ile MQTT üzerinden iletişim kurarken hangi konuların kullanılacağını ve mesajların nasıl yorumlanacağını açıklar.

Actor, Topic konusuna PayloadType biçiminde Payload gönderir

Bilgi

Wired Pro açıldığında, Yazılım Sürümü dahil temel cihaz bilgilerini içeren bir durum mesajı yayınlar. Bu durum mesajı aşağıdaki konu kullanılarak da alınabilir:

Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/info JSON Empty JSON
Wired Pro sensemore/<GatewayMac>/info/accepted JSON
{
  "Product": "WIREDPRO",
  "Current Running Application": "<WIREDPRO_APPLICATION_NAME>",
  "Version": "<FIRMWARE_VERSION>",
  "Compile Date": "<FIRMWARE_COMPILE_DATE>",
  "Compile Time": "<FIRMWARE_COMPILE_TIME>",
  "ESP-IDF Version": "<ESPRESSIF_IDF_VERSION>",
  "RSSI": <RECEIVED_SIGNAL_STRENGTH_INDICATOR>,
  "Local IP": "<ASSIGNED_LOCAL_IP>",
  "Network MAC": "<NETWORK_MAC_ADDRESS>",
  "Last Reset Reason": "<RESET_REASON>",
  "Runtime MS": <TIME_SINCE_LAST_RESET>,
  "Memory Info": {
    "Total Free Bytes": <TOTAL_FREE_HEAP_BYTES>,
    "Total Allocated Bytes": <TOTAL_ALLOCATED_HEAP_BYTES>,
    "Min Free Bytes": <MIN_FREE_HEAP_BYTES>,
    "Largest Free Bytes": <LARGEST_FREE_HEAP_BLOCK_BYTES>
  }
}
{
  "Product": "WIREDPRO",
  "Current Running Application": "WiredPro-3-1-2",
  "Version": "3.1.2",
  "Compile Date": "Jan 8 2018",
  "Compile Time": "12:00:00",
  "ESP-IDF Version": "v5.1.4",
  "RSSI": -60,
  "Local IP": "192.168.1.161",
  "Network MAC": "00:00:00:00:00:00",
  "Last Reset Reason": "POWERON",
  "Runtime MS": 1231660,
  "Memory Info": {
    "Total Free Bytes": 66576,
    "Total Allocated Bytes": 198868,
    "Min Free Bytes": 60216,
    "Largest Free Bytes": 40960
  }
}

❗️ Memory Info, depolama kapasitesini değil heap (yığın) istatistiklerini bildirir.

Havadan Yazılım Güncellemesi (OTA)

Sensemore cihazları HTTP üzerinden yazılım güncellemesi kabul eder. Cihazda yazılım güncellemesi başlatmak için yazılım güncelleme konusuna geçerli bir ikili dosya bağlantısı gönderin. Wired Pro, verilen URL’den ikili dosyayı indirir ve güncellemeyi başlatır.

❗️ URL düz http:// olmalıdır. https:// URL’leri reddedilir, çünkü TLS yığını MQTT bağlantısı ve ölçüm yüklemesi için ayrılmıştır. Güncelleme dosyasını, cihazdan erişilebilen düz metin bir HTTP uç noktasında barındırın.

Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/ota JSON http url
{
  "url": "http://link.mydomain.com/WiredPro.bin"
}
Wired Pro sensemore/<GatewayMac>/ota/accepted JSON Status JSON
{
  "status": "OTA accepted"
}
Wired Pro sensemore/<GatewayMac>/ota/rejected JSON Status JSON
{
  "status": "'url' is not exists or invalid!"
}
Wired Pro sensemore/<GatewayMac>/ota/done JSON Status JSON
{
  "status": "Restarting device due to OTA"
}

Yeniden Başlatma

Wired Pro aşağıdaki konu kullanılarak yeniden başlatılabilir.

Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/restart JSON Empty JSON

❗️ Bu yalnızca abone olunan bir konudur. Cihaz onay yayınlamaz: yalnızca yeniden başlar ve tekrar bağlandığında info/accepted mesajını yeniden yayınlar.

Cihaz Yapılandırması

Wired Pro’nun ölçüm stratejisi ve yapılandırması aşağıdaki konu kullanılarak alınabilir.

Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/devices/get JSON Empty JSON
Wired Pro sensemore/<GatewayMac>/devices/get/accepted JSON Device Config JSON
{
  "devices": [
    {
      "mac": "CA:B8:41:XX:XX:XX",
      "status": "connected",
      "version": "3.1.2",
      "device_config": {
        "accelerometer_range": 16,
        "sampling_rate": 25600,
        "sample_size": 50000,
        "scheduler_enabled": true,
        "hearthbeat_interval_seconds": 1800,
        "min_trigger_interval_seconds": 300,
        "relative_change": 0.1,
        "absolute_change": 0.05
      }
    }
  ]
}

MQTT Ölçüm Yapılandırması :id=mqtt-measurement-configuration

Wired Pro’nun ölçüm yapılandırması, aşağıdaki konular ile MQTT üzerinden görüntülenebilir veya değiştirilebilir. Alan anlamları ve kısıtlar Ölçüm Stratejisi bölümünde belgelenmiştir.

Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/device/<GatewayMac>/config/get JSON Empty JSON
Wired Pro sensemore/<GatewayMac>/device/<GatewayMac>/config/get/accepted JSON Config JSON
{
  "device_mac": "CA:B8:41:XX:XX:XX",
  "device_config": {
    "accelerometer_range": 16,
    "sampling_rate": 25600,
    "sample_size": 50000,
    "scheduler_enabled": true,
    "hearthbeat_interval_seconds": 1800,
    "min_trigger_interval_seconds": 300,
    "relative_change": 0.1,
    "absolute_change": 0.05
  }
}
Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/device/<GatewayMac>/config/set JSON Config JSON: sekiz alanın tamamı zorunludur
{
  "device_mac": "CA:B8:41:XX:XX:XX",
  "device_config": {
    "accelerometer_range": 16,
    "sampling_rate": 25600,
    "sample_size": 50000,
    "scheduler_enabled": true,
    "hearthbeat_interval_seconds": 1800,
    "min_trigger_interval_seconds": 300,
    "relative_change": 0.1,
    "absolute_change": 0.05
  }
}
Wired Pro sensemore/<GatewayMac>/device/<GatewayMac>/config/set/accepted JSON Status JSON
{
  "device_mac": "CA:B8:41:XX:XX:XX",
  "device_config": {
    "accelerometer_range": 16,
    "sampling_rate": 25600,
    "sample_size": 50000,
    "scheduler_enabled": true,
    "hearthbeat_interval_seconds": 1800,
    "min_trigger_interval_seconds": 300,
    "relative_change": 0.1,
    "absolute_change": 0.05
  },
  "status": "Device config updated"
}
Wired Pro sensemore/<GatewayMac>/device/<GatewayMac>/config/set/rejected JSON Status JSON
{
  "status": "Invalid payload! 'hearthbeat_interval_seconds' is missing or invalid"
}

❗️ Bu taşımada scheduler_enabled bir JSON boolean olmalıdır.

Ölçüm :id=measurement

Wired Pro, otomatik ölçümleri akıllı ölçüm stratejisi ile başlatır. Ayrıca daha önce belirlenmiş yapılandırmaya göre Sensemore Lake platformundan, MQTT üzerinden ve HTTP üzerinden manuel ölçüm de kabul eder. MQTT ölçüm konuları aşağıdaki gibidir.

Actor Topic Payload Type Payload Schema Example
User sensemore/<GatewayMac>/device/<GatewayMac>/measure/<MEASUREMENT_UUID> JSON Empty JSON
Wired Pro sensemore/<GatewayMac>/device/<GatewayMac>/measure/<MEASUREMENT_UUID>/accepted JSON Status JSON
{
  "status": "success"
}
Wired Pro sensemore/<GatewayMac>/device/<GatewayMac>/measure/<MEASUREMENT_UUID>/metadatas JSON Metadata JSON
{
  "unixtimestamp": 1734617027,
  "sum_x": -3250.361328125,
  "sum_y": 1844.42333984375,
  "sum_z": -7643.8251953125,
  "mean_x": -0.39005896173346932,
  "mean_y": 0.2213396543674247,
  "mean_z": -0.91729571526611065,
  "peak_x": 0.038008180483469323,
  "peak_y": 0.0423322206325753,
  "peak_z": 0.039735534733889355,
  "peak_to_peak_x": 0.07373046875,
  "peak_to_peak_y": 0.0791015625,
  "peak_to_peak_z": 0.07080078125,
  "clearance_x": 164.31150332922692,
  "clearance_y": 193.61163139253921,
  "clearance_z": 195.9534386192756,
  "crest_x": 7.6797359331360573,
  "crest_y": 8.9543432043988656,
  "crest_z": 9.27409693825784,
  "vrms_x": 0.017510145845642453,
  "vrms_y": 0.050003347640017633,
  "vrms_z": 0.01880110921075584,
  "grms_x": 0.0049491520039737225,
  "grms_y": 0.00472756288945675,
  "grms_z": 0.0042845718562603,
  "kurtosis_x": 17.458915614260821,
  "kurtosis_y": 18.276360133218649,
  "kurtosis_z": 17.757537090857209,
  "skewness_x": 0.65933222563406724,
  "skewness_y": 1.4794854818975853,
  "skewness_z": -1.0167293724548387,
  "temperature": 41.1187515258789,
  "calibrated_sampling_rate": 26513,
  "sampling_rate": 25600,
  "sample_size": 50000,
  "accelerometer_range": 16,
  "measurement_buffer_size": 300000
}
Wired Pro sensemore/<GatewayMac>/device/<GatewayMac>/measure/<MEASUREMENT_UUID>/done JSON Status JSON
{
  "status": "Measurement done"
}

Birimler: grms_*, peak_*, peak_to_peak_*, mean_* g cinsindendir; vrms_* mm/s cinsindendir; temperature °C cinsindendir. calibrated_sampling_rate, ivmeölçerin ölçülen gerçek ODR değeridir ve ham sinyali yorumlarken kullanılması gereken değerdir. Sensörün dahili frekans ayarı nedeniyle istenen sampling_rate değerinden farklıdır.

Cihazın kendi ürettiği ölçüm UUID’leri WR-SMRT- (akıllı ölçüm) ve WR-TRIG- (HTTP tetikleme) öneklerini kullanır.

HTTP Entegrasyonu :id=http-integration

Wired Pro, ayarlarını görüntülemek veya değiştirmek için HTTP uç noktaları sunar.

Bazı uç noktalar başlıkta bir kimlik doğrulama tokenı gerektirir. Başlıkta token gerektiren uç noktalar 🔐 simgesiyle işaretlenmiştir. Bu token, aşağıda gösterildiği gibi Giriş uç noktası kullanılarak elde edilir.

Giriş

Method Endpoint Content-Type Request Response
POST /login application/json
{
  "password": "<DEVICE_PASSWORD>"
}
{
  "token": "CLjziyTeTzlMsv100mvgkxnTQl1nGYXpQvsIStAW16WrMjxzLvhNTOGhcFFzU38mT8sHKFhxBOm3309qxSmzKIHJux3rUbjVTkywmayA1O05hKaQn9jlY99YMmp1NorF"
}

❗️ Token, POST /login isteğinin yanıt gövdesinde döner. GET /login diye bir uç nokta yoktur. Aynı anda yalnızca tek bir token geçerlidir; tekrar giriş yapmak önceki tokenı geçersiz kılar; /logout ve /change_password de aynı etkiyi yapar.

Tokenınızı başlığa ekleyin

Kimlik doğrulama tokenı Giriş uç noktası aracılığıyla alındıktan sonra, 🔐 uç noktalarına yapılan her HTTP isteğinin başlığına aşağıdaki gibi eklenmelidir.

Authorization: CLjziyTeTzlMsv100mvgkxnTQl1nGYXpQvsIStAW16WrMjxzLvhNTOGhcFFzU38mT8sHKFhxBOm3309qxSmzKIHJux3rUbjVTkywmayA1O05hKaQn9jlY99YMmp1NorF

🔐 Çıkış

Mevcut tokenı geçersiz kılar.

Method Endpoint Content-Type Example
POST /logout application/json No body

Bilgi

Cihaz hakkındaki temel bilgiler, Yazılım Sürümü dahil, aşağıdaki HTTP uç noktası kullanılarak alınabilir. Token gerektirmeyen tek uç nokta budur.

Method Endpoint Content-Type Example
GET /info application/json
{
  "mac_address": "CA:B8:41:XX:XX:XX",
  "version": "3.1.2",
  "is_network_connected": true,
  "is_internet_connected": true
}

🔐 Şifre Değişimi

Cihazın HTTP ve web yapılandırma arayüzü şifresi aşağıdaki HTTP uç noktası kullanılarak değiştirilebilir. İşlem başarılı olduğunda mevcut token geçersiz kılınır ve yeniden giriş yapılması gerekir.

Method Endpoint Content-Type Example
PUT /change_password application/json

İstek:

{
  "old_password": "<CURRENT_PASSWORD>",
  "new_password": "12345678"
}

Yanıt:

{
  "success": true
}

🔐 NTP :id=-ntp

Zaman bilgisi, Wired Pro tarafından gönderilen ölçüm mesajlarının bir parçasıdır. NTP yapılandırması aşağıdaki HTTP uç noktası kullanılarak alınabilir veya değiştirilebilir.

Method Endpoint Content-Type Example
GET /sntp application/json
{
  "sntp_server": "pool.ntp.org"
}
POST /sntp application/json

İstek:

{
  "sntp_server": "pool.ntp.org"
}

Yanıt:

{
  "success": true
}

❗️ Yalnızca ana bilgisayar adı. Yukarıdaki NTP notuna bakınız.

🔐 Havadan Yazılım Güncellemesi (OTA)

Yazılım ikili dosyasını doğrudan cihaza yükler. İstek gövdesi ham .bin dosyasıdır. Cihaz, yanıt verdikten yaklaşık 3 saniye sonra yeniden başlar.

Method Endpoint Content-Type Example
POST /ota application/octet-stream Ham yazılım ikili dosyası. {"success": true} yanıtı döner. 10 saniye içinde yeni bir parça gelmezse aktarım 408 ile iptal edilir.

🔐 Yeniden Başlatma

Wired Pro aşağıdaki uç nokta kullanılarak yeniden başlatılabilir.

Method Endpoint Content-Type Example
POST /restart application/json Gövde yoktur. Cihaz anında yeniden başladığından bağlantı yanıt gövdesi olmadan kapanır.

❗️ Bu uç nokta GET değil POST’tur.

🔐 Ölçüm Yükleme URL’si :id=-measurement-upload-url

Wired Pro, ölçüm yüklemelerini kendisi yönetir: meta verileri MQTT üzerinden yayınlar, sinyal ikili dosyalarını ise HTTPS ile aktarır. Varsayılan ikili dosya yükleme URL’si https://core.sensemore.io/measurement olup aşağıdaki uç nokta kullanılarak alınabilir veya değiştirilebilir.

Method Endpoint Content-Type Example
GET /binary-url application/json
{
  "url": "https://core.sensemore.io/measurement"
}
POST /binary-url application/json

İstek:

{
  "url": "https://core.sensemore.io/measurement"
}

Yanıt:

{
  "success": true
}

🔐 HTTP Ölçüm Yapılandırması :id=-http-measurement-configuration

Wired Pro’nun ölçüm yapılandırması aşağıdaki uç nokta ile görüntülenebilir veya değiştirilebilir. Alan anlamları ve kısıtlar Ölçüm Stratejisi bölümünde belgelenmiştir.

Method Endpoint Content-Type Example
GET /configuration application/json
{
  "accelerometer_range": 16,
  "sampling_rate": 25600,
  "sample_size": 50000,
  "scheduler_enabled": 1,
  "hearthbeat_interval_seconds": 1800,
  "min_trigger_interval_seconds": 300,
  "relative_change": 0.1,
  "absolute_change": 0.05
}
POST /configuration application/json

İstek, sekiz alanın tamamı zorunludur:

{
  "accelerometer_range": 16,
  "sampling_rate": 25600,
  "sample_size": 50000,
  "scheduler_enabled": 1,
  "hearthbeat_interval_seconds": 1800,
  "min_trigger_interval_seconds": 300,
  "relative_change": 0.1,
  "absolute_change": 0.05
}

Yanıt:

{
  "success": true
}

❗️ Bu taşımada scheduler_enabled bir JSON sayı (0/1) olmalıdır.

🔐 HTTP Ölçümü :id=-http-measurement

Kayıtlı mevcut yapılandırmayı kullanarak tek bir ölçüm alır ve meta verisini yanıt gövdesinde döndürür. Bu yerel bir işlemdir: MQTT’ye yayın yapmaz ve ham sinyal ikili dosyasını yüklemez. Tam bir bulut turu için /trigger-measurement kullanın.

İstek, ölçüm tamamlanana kadar bloklanır; sample_size 50000 ve sampling_rate 25600 değerlerinde bu birkaç saniye sürer. İstemci zaman aşımı sürenizi buna göre ayarlayın.

Method Endpoint Content-Type Request Response
POST /measure application/json Gövde gerekmez. Boş bir JSON nesnesi {} gönderin.

MQTT metadatas yükü ile aynı biçimdeki ölçüm meta verisi:

{
  "unixtimestamp": 1734617027,
  "sum_x": -3250.361328125,
  "sum_y": 1844.42333984375,
  "sum_z": -7643.8251953125,
  "mean_x": -0.39005896173346932,
  "mean_y": 0.2213396543674247,
  "mean_z": -0.91729571526611065,
  "peak_x": 0.038008180483469323,
  "peak_y": 0.0423322206325753,
  "peak_z": 0.039735534733889355,
  "peak_to_peak_x": 0.07373046875,
  "peak_to_peak_y": 0.0791015625,
  "peak_to_peak_z": 0.07080078125,
  "clearance_x": 164.31150332922692,
  "clearance_y": 193.61163139253921,
  "clearance_z": 195.9534386192756,
  "crest_x": 7.6797359331360573,
  "crest_y": 8.9543432043988656,
  "crest_z": 9.27409693825784,
  "vrms_x": 0.017510145845642453,
  "vrms_y": 0.050003347640017633,
  "vrms_z": 0.01880110921075584,
  "grms_x": 0.0049491520039737225,
  "grms_y": 0.00472756288945675,
  "grms_z": 0.0042845718562603,
  "kurtosis_x": 17.458915614260821,
  "kurtosis_y": 18.276360133218649,
  "kurtosis_z": 17.757537090857209,
  "skewness_x": 0.65933222563406724,
  "skewness_y": 1.4794854818975853,
  "skewness_z": -1.0167293724548387,
  "temperature": 41.1187515258789,
  "calibrated_sampling_rate": 26513,
  "sampling_rate": 25600,
  "sample_size": 50000,
  "accelerometer_range": 16,
  "measurement_buffer_size": 300000
}

🔐 Tetiklemeli Ölçüm :id=-trigger-measurement

Anında bir ölçüm alır ve tam yükleme hattını çalıştırır. MQTT ölçüm konularında accepted, metadatas ve done yayınlar ve ham sinyal ikili dosyasını yapılandırılmış ikili dosya URL’sine yükler; tıpkı zamanlanmış bir akıllı ölçümün yapacağı gibi.

❗️ Bu uç nokta, yan etki olarak akıllı ölçümü devre dışı bırakır. Ölçümü almadan önce scheduler_enabled değerini false yapar (diğer dört akıllı ölçüm parametresini korur), bu nedenle siz /configuration veya config/set MQTT konusu üzerinden tekrar etkinleştirene kadar periyodik ölçümler durur.

Cihaz ölçüm UUID’sini WR-TRIG-<14 rastgele karakter> biçiminde kendisi üretir. Sonucu izlemek için sensemore/<GatewayMac>/device/<GatewayMac>/measure/+/# konusuna abone olun.

İstek, ölçüm ve ikili dosya yüklemesi boyunca bloklanır. Yavaş bir bağlantıda büyük örnek boyutlarında onlarca saniye sürebileceğini hesaba katın.

Method Endpoint Content-Type Request Response
POST /trigger-measurement application/json Gövde gerekmez. Boş bir JSON nesnesi {} gönderin.
{
  "success": true
}

Hata durumunda cihaz 500 ve bir hata nesnesi döndürür:

{
  "success": false,
  "error": "Failed to trigger measurement and upload"
}

RS485 Entegrasyonu :id=rs485-integration

RS485 modunda Wired Pro, yarı çift yönlü bir RS485 veri yolunda slave’dir ve trafiği hiçbir zaman kendisi başlatmaz. Master, ağ geçididir. İletişim, aşağıda anlatılan EasyCom çerçeveleme protokolünü kullanır. Bu modda Wi-Fi, MQTT ve HTTP uç noktaları devre dışıdır.

Cihazı modlar arasında geçirmek için veri yolu üzerindeki Set Operational Mode fonksiyonunu ya da Wi-Fi yapılandırma sayfasındaki mod seçicisini kullanın. Cihaz seçimi kalıcı olarak saklar ve seçilen modda yeniden başlar.

Elektriksel ve UART Ayarları

ParametreDeğer
Fiziksel katmanRS485, yarı çift yönlü, 2 telli
Çerçeve formatı8 veri biti, parity yok, 1 stop biti (8N1)
Akış kontrolüYok (driver enable cihaz tarafından yönetilir)
Varsayılan baud hızı921600
Desteklenen baud hızları9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000
Veri yolu sonlandırmaYazılımdan anahtarlanabilir 120 Ω direnç, varsayılan olarakkapalı

Hem baud hızı hem de sonlandırma direncinin durumu yeniden başlatmalar arasında korunur. Sonlandırmayı yalnızca veri yolunun fiziksel iki ucundaki cihazlarda etkinleştirin.

Çerçeve Formatı

Her istek ve her yanıt, taşıdığı yük miktarından bağımsız olarak sabit 256 baytlık bir çerçevedir. Çok baytlı tüm tam sayılar little-endian’dır. Veri alanı sıfırlarla doldurulur.

OfsetBoyutAlanAçıklama
01preambleHer zaman0xA3
16addressİsteklerde hedef MAC, yanıtlarda gönderen MAC
71statusYanıt durumu. İsteklerde yok sayılır (0x00 gönderin)
81functionFonksiyon kodu. Yanıtta aynen geri döner
91data_sizedata içindeki anlamlı bayt sayısı, 0–243
10243dataYük, 243 bayta kadar sıfırlarla doldurulur
2532crc16Aşağıya bakınız
2551postambleHer zaman0x51

❗️ Referans C package_t yapısı, sonunda yerel durum olan ve hatta gönderilmeyen bir is_broadcast bayrağı taşır. Hatta sizeof(package_t) değil, tam olarak 256 bayt yazın.

Adresleme

address, hedef Wired Pro’nun hat sırasındaki 6 baytlık MAC adresidir. MAC, cihaz etiketinde yazılıdır ve aynı zamanda Wi-Fi modunda kullanılan <GatewayMac> değeridir.

FF:FF:FF:FF:FF:FF broadcast adresi kabul edilir: veri yolundaki her cihaz isteği yürütür ancak hiçbir cihaz yanıt göndermez. Bunu yalnızca yanıt beklenmeyen komutlar için kullanın. Farklı bir MAC’e adreslenmiş çerçeve sessizce yok sayılır.

CRC

crc16, ofset 1’den başlayan 252 baytı kapsar: address, status, function, data_size ve sıfır dolgusu dahil 243 baytlık data alanının tamamı. Preamble, CRC alanının kendisi ve postamble hariçtir.

Algoritma; 0x1021 polinomlu (yansıtılmış: 0x8408), başlangıç değeri 0x0000 ve son XOR değeri 0xFFFF olan yansıtılmış (reflected) bir CRC-16’dır:

uint16_t easycom_crc16(const uint8_t *data, uint32_t size) {
    uint16_t crc = 0x0000;                       /* note: init 0, not 0xFFFF */
    for (uint32_t i = 0; i < size; i++) {
        crc = crc16_le_table[(crc ^ data[i]) & 0xFF] ^ (crc >> 8);
    }
    return ~crc;
}
/* called as: pkg.crc16 = easycom_crc16(((uint8_t *)&pkg) + 1, 252); */

crc16_le_table, standart 256 girdili yansıtılmış CCITT tablosudur (0x0000, 0x1189, 0x2312, 0x329b, ...).

Master işlem kuralları

  1. 256 baytlık istek çerçevesinin tamamını yazın.
  2. 256 baytlık yanıtı okuyun. Referans master 250 ms’lik bir UART okuma zaman aşımı kullanır.
  3. Preamble, postamble ve CRC’yi doğrulayın. Herhangi bir uyuşmazlıkta isteğin tamamını tekrarlayın. Referans master, zaman aşımı bildirmeden önce 5 keze kadar dener.
  4. Yanıt, isteğin function kodunu aynen geri döndürür ve address alanında cihazın kendi MAC adresini taşır; master hangi slave’in yanıt verdiğini böyle anlar.

Cihaz, gönderim yapmadan önce UART alma tamponunu boşaltır; bu nedenle master, bir önceki isteğin yanıtını okumadan yeni bir istek göndermemelidir.

Veri yolu 60 saniye boyunca tamamen boş kalırsa cihaz UART sürücüsünü yeniden yükler. Bu durum master açısından şeffaftır, ancak tam o anda gönderilen bir çerçeve kaybolabilir ve 3. adımdaki yeniden deneme ile telafi edilir.

Yanıt Durum Kodları

DeğerAdAnlamı
0x00RESPONSE_OKİstek tamamlandı
0x01RESPONSE_ERRORİstek başarısız: geçersiz parametreler ya da işlem hata verdi
0x02RESPONSE_BUSYBir ölçüm devam ediyor veya cihaz dahili kilidini 10 ms içinde alamadı
0x03RESPONSE_NOT_FOUNDAyrılmış
0x04RESPONSE_INVALID_ARGAyrılmış
0x05RESPONSE_NOT_IMPLEMENTEDBilinmeyen fonksiyon kodu
0x06RESPONSE_TIMEOUTAyrılmış
0xFFRESPONSE_CRC_ERRORAyrılmış

❗️ RESPONSE_BUSY, cihaz meşgulken gelen düzgün biçimli bir istek için de döner. Bunu bir hata değil, “daha sonra tekrar dene” olarak değerlendirin.

Fonksiyon Kodları

KodFonksiyonİstek yüküYanıt yükü
0x00Restartnonenone
0x01Ping4 bayt8 bayt
0x02Measure8 baytnone
0x03Get Chunk8 bayt224 bayt
0x04Get Metadata32 bayt40 bayt
0x05Enter FactorySensemore üretim kullanımına ayrılmıştır
0x06Firmware Begin4 baytnone
0x07Firmware Package205 bayt4 bayt
0x08Set Baud Rate4 baytnone
0x09Set RS485 Resistor1 baytnone
0x0ASet Operational Mode1 baytnone

Aşağıdaki tüm yük yapıları __attribute__((packed)) ve little-endian’dır.

0x00 Restart

Yanıt gönderildikten yaklaşık 1 saniye sonra cihazı yeniden başlatır.

/* request  */ struct { } restart_request;
/* response */ struct { uint32_t timestamp; } restart_response;   /* not populated, ignore */

0x01 Ping

Sağlık kontrolü ve yazılım sürümü sorgusu. Master, ölçümün tamamlanıp tamamlanmadığını da bu yolla yoklar: veri toplama sürerken durum RESPONSE_BUSY olur.

/* request */
struct {
    int32_t timestamp;          /* currently ignored by the device */
} ping_request;

/* response */
struct {
    struct { uint8_t major, minor, patch; } version;
    uint32_t timestamp;         /* device uptime in ms */
    uint8_t  rs485_resistor_enabled;
} ping_response;

❗️ Referans başlık dosyası ping_request.timestamp alanını long int olarak tanımlar; bu, 32 bitlik cihazda 4 bayttır. 64 bitlik bir master bunu int32_t olarak göndermelidir, aksi hâlde çerçeve yerleşimi uyuşmaz.

Durum: boştayken RESPONSE_OK, ölçüm sürerken RESPONSE_BUSY.

0x02 Measure

Verilen parametrelerle bir veri toplama başlatır. Hemen döner. Toplama asenkron olarak çalışır. Durum RESPONSE_BUSY olmaktan çıkana kadar Ping ile yoklayın, ardından sonuçları okuyun.

/* request */
struct {
    uint32_t sample_size;         /* 100 – 120000 samples per axis */
    uint16_t sampling_rate;       /* 800, 1600, 3200, 6400, 12800, 25600 Hz */
    uint8_t  accelerometer_range; /* 2, 4, 8, 16 g */
    uint8_t  measurement_type;    /* reserved, send 0 */
} start_measurement_request;

/* response */
struct { } start_measurement_response;

❗️ Alan sırasına dikkat edin: sample_size ilk gelir. Aralık dışı parametreler RESPONSE_ERROR ile reddedilir.

Toplama süresi yaklaşık sample_size / sampling_rate saniyedir; buna birkaç saniyelik flash yazma ve sinyal işleme ek yükü eklenir.

0x03 Get Chunk

Son ölçümde kaydedilen ham sinyalin bir dilimini okur.

/* request */
struct {
    uint32_t offset;    /* byte offset into the raw signal */
    uint32_t size;      /* bytes to read, max 220 */
} get_chunk_request;

/* response */
struct {
    uint32_t size;      /* not populated; use the size you requested */
    uint8_t  data[220];
} get_chunk_response;

❗️ size 220’yi aşmamalıdır (MAX_CHUNK_SIZE). Cihaz bu sınırı doğrulamaz; daha büyük bir istek yanıt çerçevesini bozar.

❗️ Yanıttaki size alanı mevcut yazılım tarafından doldurulmaz. Master zaten kaç bayt istediğini bilir, bu değeri kullanın ve data alanını yanıt yükünün 4. ofsetinden itibaren okuyun.

Ham sinyal yerleşimi. Kayıt sample_size × 6 bayttır: X, Y, Z sırasıyla araya yerleştirilmiş üç adet işaretli 16 bit little-endian değerden oluşan sample_size adet çerçeve.

offset 0    2    4    6    8   10   12  ...
       x0   y0   z0   x1   y1   z1   x2 ...

Ham sayacı g’ye çevirmek için accelerometer_range × 2 / 65536 ile çarpın. Örneğin ±16 g’de 0.00048828125 g/LSB. Zaman tabanı olarak istenen sampling_rate değerini değil, meta verideki calibrated_sampling_rate değerini kullanın.

0x04 Get Metadata

Son ölçümden ada göre hesaplanmış tek bir telemetri değerini okur.

/* request */
struct {
    char name[32];      /* zero-padded, e.g. "grms_z" */
} metadata_request;

/* response */
struct {
    char   name[32];    /* echoed */
    double value;
} metadata_response;

Geçerli adlar, MQTT Ölçüm bölümünde belgelenen meta veri nesnesinin anahtarlarıdır: sum_*, mean_*, peak_*, peak_to_peak_*, clearance_*, crest_*, vrms_*, grms_*, kurtosis_*, skewness_* (her biri _x, _y veya _z sonekiyle) ve ayrıca unixtimestamp, temperature, calibrated_sampling_rate, sampling_rate, sample_size, accelerometer_range ve measurement_buffer_size.

Bilinmeyen bir ad RESPONSE_ERROR döndürür.

0x06 Firmware Begin

Güncelleme bölümünü, verilen boyuttaki bir yazılım imajı için hazırlar. Herhangi bir Firmware Package çerçevesinden önce gönderilmelidir.

/* request  */ struct { uint32_t size; } firmware_begin_request;
/* response */ struct { } firmware_begin_response;

0x07 Firmware Package

Yazılım imajının 200 baytlık bir dilimini yazar. İmajın tamamı aktarılana kadar sırayla gönderin; yazma tamamlandığında cihaz yeni imajla yeniden başlar.

/* request */
struct {
    uint32_t offset;
    uint8_t  data[200];
    uint8_t  size;      /* note: after data, not before */
} firmware_package_request;

/* response */
struct { uint32_t timestamp; } firmware_package_response;

0x08 Set Baud Rate

Veri yolu baud hızını değiştirir ve kalıcı olarak saklar.

/* request  */ struct { uint32_t baudrate; } set_baudrate_request;
/* response */ struct { } set_baudrate_response;

❗️ Cihaz, yanıtı göndermeden önce baud hızını değiştirir. Master, isteği eski hızda göndermeli, ardından onayı okuyabilmek için kendi UART’ını hemen yeni hıza göre yeniden yapılandırmalıdır. Master onayı kaçırsa bile cihaz zaten yeni hızda çalışıyordur, bu yüzden eski hızda tekrar denemek yerine yeni hızda ping atarak toparlanın.

Desteklenmeyen bir değer hızı değiştirmez ve RESPONSE_ERROR döndürür.

0x09 Set RS485 Resistor

Kart üzerindeki 120 Ω veri yolu sonlandırma direncini etkinleştirir veya devre dışı bırakır. Yeniden başlatmalar arasında korunur.

/* request  */ struct { uint8_t rs485_resistor_enabled; } set_rs485_resistor_request;
/* response */ struct { } set_rs485_resistor_response;

0x0A Set Operational Mode

Cihazı Wi-Fi ve RS485 modu arasında geçirir. Kalıcıdır; cihaz seçilen modda yeniden başlar.

/* request */
struct {
    uint8_t mode;       /* 0 = Wi-Fi mode, 1 = RS485 mode */
} set_operational_mode_request;

/* response */
struct { } set_operational_mode_response;

❗️ mode = 0 göndermek cihazı RS485 veri yolundan çıkarır. Bu noktadan sonra cihaza yalnızca Wi-Fi üzerinden erişilebilir.

Tipik Ölçüm Dizisi

Master                                   Wired Pro
  |-- 0x01 Ping ------------------------->|
  |<-- OK, version 3.1.2 -----------------|

  |-- 0x02 Measure (50000, 25600, 16) --->|
  |<-- OK ---------------------------------|   acquisition starts

  |-- 0x01 Ping ------------------------->|
  |<-- BUSY -------------------------------|   repeat until OK
  |-- 0x01 Ping ------------------------->|
  |<-- OK ---------------------------------|

  |-- 0x04 Get Metadata "sample_size" --->|
  |<-- OK, 50000 --------------------------|
  |-- 0x04 Get Metadata "grms_z" -------->|
  |<-- OK, 0.004284 -----------------------|   repeat per telemetry

  |-- 0x03 Get Chunk (offset 0, 220) ---->|
  |<-- OK, 220 bytes ----------------------|
  |-- 0x03 Get Chunk (offset 220, 220) -->|
  |<-- OK, 220 bytes ----------------------|   repeat until sample_size*6 bytes read