C/C++:llä ruuvitägejä lukemaan?


#1

Taisin laittaa esimmäisen postini väärään alueeseen, joten laitan linkin tähän, mutta alla sama tiivistettynä: Ruuvitag C-pohjaiseen valvontaan

Tilasin setin tägejä ja tarkoitus on saada niitä kytkettyä sisälämpötiloja rekisteroimään talon energian kulutusta mittaamaan rakentamaani softaan, softa on totetutettu C:llä. Voisi joku ystävällisesti neuvoa miten pääsen lukemaan tägejä softaani. Järjestelmässä on mm. 2 RPitä keräämässä dataa, näistä Zerossa on Bluetooth.

Kiitti
Ripa

PS. Ilmeisesti eri vaihtoehtoja on muutama, tässä vaiheessa haluaisin ensimmäiseksi tietää mitkä ne ovat.


#2

Mulla on hyvin vähän kokemusta Cstä tai C++sta sulautettujen ulkopuolella, mutta oma lähestymistapani olisi ottaa jokin valmis koodinpätkä kuten https://people.csail.mit.edu/albert/bluez-intro/c404.html ja printata scannaustulokset konsoliin. Jos siellä seassa on Ruuvien dataa niin ollaan jo pitkällä :slight_smile:

Ruuvien datan tunnistaa merkkijonosta 0xFF9904 , eli “Manufacturer specific data - Ruuvi Innovations”


#3

Suurkiitos linkistä. Löysin seuraavan linkin etsiessäni tietoa miten dekryptata tagin RAW BL data:

http://mybeacons.info/packetFormats.html

Onko tuo ajan tasalla, vai saisiko teiltä tarkemmat/uusimmat ohjeet?

Kiitti
Ripa


#4

Ajantasaiset dataformaatit löytyy täältä, jonka pohjalta voi kirjoittaa parserin itse ruuvidatalle (itse kirjoitin Javalla parserin joka parsii raa’an hcidumpin tulostuksen, täällä, kun Javalle ei suoraan ole saatavilla “natiivia” BLE tukea/kirjastoa, mutta tämä ei pitäisi olla tarpeellinen noilla C-kirjastoilla)

En noihin BlueZ:n C-kirjastoihin ole perehtynyt mutta oletettavasti siellä on suurinpiirtein samat datat saatavilla, eli perus metatiedot (esim. event type, ruuvin tapauksessa normaalisti 03 eli "non-connectable undirected advertising) joista ei normaalisti tarvitse välittää.

Se mikä kiinnostaa on itse “AD structit”, joita tulee normaalisti 2kpl per viesti, toinen sisältää flageja (struct type 01, ei normaalisti kiinnosta) ja toinen “varsinaisen datan” (ruuvitagin “raw” dataformaateissa (esim. data format 3 ja 5) struct type FF, “manufacturer specific data”).

Tuon jälkimmäisen varsinainen payload alkaa sitten company identifierillä 99 04 (eli 0x0499, “Ruuvi Innovations Ltd.”) jonka jälkeen tulee “ruuvin data” joka on kuvattu tuossa ensimmäiseksi linkkaamassani ruuvi-sensor-protocols dokkarissa.

Toivottavasti näillä pääsee alkuun, helpoiten varmaan tosiaan pääsee liikkeelle kun saa jotain koodia kasaan jolla saa jotain raakaa tulostusta ulos, siitä on sitten helpompi tutkia sitä ja etsiä siitä tarvittavat asiat.


#5

Loistavaa, kiitoksia! Noilla iltalukemisilla pääsen varmaan jo hyvin alkuun.

Kiitti!
Ripa