Na ile realny jest zasięg do 200m w otwartym terenie?
Zasięg ten zmierzyliśmy w otwartym terenie, z dala od wszelkich sieci Wi-Fi, bez żadnych przeszkód pomiędzy nadajnikiem i odbiornikiem. Za kryterium działania przyjęliśmy odebranie minimum 1 na 10 pakietu rozgłoszeniowego, w trybie pasywnym skanowania. Pakiety były wysyłane przez nadajnik co 100 ms. Należy też pamiętać, że ze względu na spadek mocy nadawania i czułości odbierania wraz z temperaturą, zasięg maleje ze wzrostem temperatury. W temperaturze +30 st. C (TX power = 8,5 dBm, RX sensitivity = -92,5 dBm) jest on mniejszy niż przy -30 st. C (TX power = 9 dBm, RX sensitivity = -94 dBm). Zauważyliśmy też, że im cześciej wysyłane są ramki rozgłoszeniowe, tym zasięg odbierania ich jest większy (rośnie prawdopodobieństwo odebrania przynajmniej jednej ramki w danym czasie).
Zasięg iNode z ustawioną mocą nadawania +8dBm jest taki sam jak w innych beaconach nadających z mocą +4dBm.
Proszę pamiętać, że w przypadku aktywnego skanowania, kiedy potrzebne są ramki rozgłoszeniowe i z odpowiedzią na skanowanie aktywne, zasięg zależy również od mocy nadawania układu odbiorczego i jest określony przez mniejszą z mocy nadawania beacona i odbiornika. Można również porównywać wartość RSSI w odbieranych ramkach lub przełączyć odbiornik na skanowanie pasywne. Najlepiej użyć do odbierania danych iNode Serial Transceiver lub iNode LAN, w których można ustawić tryb skanowania (pasywne/aktywne), moc nadawania, a wsp. scan window / scan interval jest 100 %.
Czy program iNode Setup działa pod systemem Linux z urządzeniami Bluetooth Low Energy?
Tak, jest to możliwe z wykorzystaniem Wine. Sprawdziliśmy to w praktyce na Ubuntu 12.04 LTS i Wine 1.9.3.
Dodatkowo jest potrzebny iNode Serial Transceiver USB lub iNode LAN oraz iNode Setup w wersji co najmniej 2.40.
Jeżeli zamierzamy używać programu iNodeSetup.exe razem z iNode Serial Transceiver USB to po jego zainstalowaniu pod Wine należy wykonać następujące czynności:
- ustalić nazwę pod jaką jest widziany iNode Serial Transceiver USB, uruchamiając polecenie ls -al /dev/ttyU* w terminalu.
- utworzyć dowiązanie symboliczne w katalogu .wine/dosdevices (znajduje się w katalogu użytkownika, jako ukryty), uruchamiając w terminalu sudo ln -s /dev/ttyUSB0 com1
- utworzyć w katalogu programu iNodeSetup.exe plik interfaces.txt i wpisać do niego COM1
W przypadku iNode LAN nie należy niczego konfigurować.
Po uruchomieniu programu należy wybrać COM1 lub iNode LAN (zostanie automatycznie wyszukane w sieci) jako adapter, którego wykorzystujemy do komunikacji z tagami iNode, a następnie kliknąć na przycisku wyszukiwania urządzeń BLE (Bluetooth Low Energy).
Obsługa typowego adaptera USB BT4.0 w ten sposób nie jest możliwa.
W przypadku Ubuntu 16.04 LTS wymagany jest Wine 2.0 + Wine Gecko 2.4.7 + Wine Mono 4.5.6. Wersja Wine Mono 4.6.4, która zastępuje środowisko .NET 4.0 zawiera błąd i aplikacja iNode Hub Server nie będzie z nią działać. Należy ją odinstalować i zainstalować wersję 4.5.6 z pliku wine-mono4.5.6.msi. Opis instalacji Wine można znaleźć tutaj: How to Install Wine 2.0. Stable in Ubuntu 16.04
Jestem zainteresowany zakupem kilku z Państwa produktów. Chciałem zapytać, czy czujniki (np. wymieniony Care Sensor #3) działają z dowolnym smartfonem posiadającym obsługę BLE. Chciałbym wykorzystać czujniki w projekcie na Raspberry Pi, w międzyczasie testując je smartfonem.
Spróbuję odpowiedzieć na Pańskie pytania. Rzeczywiście, aby skonfigurować urządzenia trzeba posiadać adapter BT4.0 USB z układem CSR8510 (do kupienia w sklepie), albo iNode Serial Transceiver USB lub iNode LAN. Oprogramowanie konfiguracyjne iNode Setup działa tylko pod Windows lub Linux/Wine.
Co Raspberry Pi to w przypadku wersji 2 można wykorzystać adapter BT4.0 USB lub iNode LAN, a w przypadku wersji 3 wbudowany adapter lub iNode LAN.
Co do smartfona to dla wersji z Androidem mamy do pobrania aplikację iNode Monitor (wyświetla informacje z czujników iNode) oraz iNode Thermo (obsługuje czujniki z temperaturą i wilgotnością np. iNode CS #3).
Co do informacji dotyczącej ramek wysyłanych przez czujniki proszę skorzystać ze strony, którą przygotował jeden z naszych klientów:
https://docs.google.com/document/d/1hcBpZ1RSgHRL6wu4SlTq2bvtKSL5_sFjXMu_HRyWZiQ/edit?usp=sharing
Natomiast na GitHub jest kilka jego projektów Node.js:
https://github.com/morkai/h5.bluetooth.hci.inode - biblioteka do dekodowania ramek iNode BLE, iNode LAN i iNode GSM
https://github.com/morkai/h5.modbus.inode - biblioteka do tworzenia serwerów MODBUS udostępniających dane z iNode LAN
https://github.com/morkai/inode-server - aplikacja łącząca powyższe bilbioteki do zbierania danych przez BLE, iNode LAN i iNode GSM, żeby udostępnić je przez HTTP i MODBUS (to mam uruchomione na RPI3 obok GSMa).
Skrypt bash dla RPi do obsługi iNode CS#1 można znaleźć tutaj:
https://github.com/ewojtach/RPiScripts/blob/master/readTempAndMotionDetector.sh
Teoria rozgłaszania się w BLE jest następująca:
1. Każda ramka rozgłoszeniowa wysyłana jest co określony czas na wybranych kanałach (domyślnie trzech).
2. Jeżeli urządzenie jest skanowane aktywnie, to przeważnie wysyłana jest przez nie także ramka z odpowiedzią na to skanowanie.
3. Ograniczenie liczby kanałów na których urządzenie nadaje zmniejszy na pewno zużycie energii z baterii. Należy jednak pamiętać, że jest ona również zużywana na inne cele niż nadawanie. Poza tym może być trudniej je wyszukać, jeżeli będzie taka potrzeba.
4. Zmiana okresu rozgłaszania również zmienia zużycie energii z baterii jednak nie wprost proporcjonalnie do zmiany interwału. Większy interwał to również konieczność dłuższego wyszukiwania urządzenia w BLE, jak również opóźnienie w nawiązaniu z nim połączenia.
W związku z powyższym należy wybrać optymalną konfigurację do danego zastosowania. Uważamy jednak, że lepiej jest mieć tę możliwość niż zdawać się na ustawienia domyślne.
Proszę o poradę .
W systemie z-wave firmy fibaro wykorzystuję zmodyfikowany skrypt państwa autorstwa, który „wciska” przycisk w urządzeniu wirtualnym.
Problem polega na bardzo częstej zmianie stanu obecny nie obecny, mimo że w aplikacji iNode urządzenia są widoczne.
W aplikacji iNode Monitor (iNode LAN) można poznać poziom RSSI w dBm najeżdzając wskaźnikiem myszki nad wartość podaną w %. W skrypcie w Pythonie wartość RSSI w dBm przeliczana jest na % na zasadzie zwykłego dodania wartości 145. Minimalny poziom sygnału jaki może uzyskać RSSI w dBm to ok. -93dBm. maksymalny zaś ok. -30dBm. To, że wartości RSSI fluktuują to normalne. Dlatego w skrypcie przewidzieliśmy inny próg poziomu sygnału RSSI na wejście w zasięg (IN) oraz inny na wyjście (OUT) - plik range.csv; można wtedy uzyskać histerezę:
00126f6d3a28,CAR#A,-80,IN,127.0.1.1,8080,/json.htm?type=command¶m=switchlight&idx=16&switchcmd=On
00126f6d3a28,CAR#A,-85,OUT,127.0.1.1,8080,/json.htm?type=command¶m=switchlight&idx=16&switchcmd=Off
Przybliżony wzór na odległość dla mocy nadajnika +8dBm:
zasięg [m]=10^(((|RSSI|-55)/6+1)*log2)
czyli dla RSSI=-81dBm i TX=-2dBm (zasięg 33%)
zasięg=10^((26/6+1)*log2)=10^(5,3333*log2)=10^1,6055=40m
ze względu na poziom mocy zasięg 40*0,3333=13m
Według mnie żle Pan podał poziom sygnału na wejście i wyjście. Wartość dla IN powinna być większa niż dla OUT. U Pana jest odwrotnie.
A proszę powiedzieć czy zwykły bluetooth w komputerze/smartfonie nie wystarczy do odbioru danych?
Jeżeli ma Pan komputerze/smartfonie bluetooth 4.0/4.1 oparty o układ CSR 8510 to tak. Należałoby to sprawdzić instalując drivery i program iNodeSetup.exe (jest dla Windows, ale nie wykorzystuje systemowych API do obsługi BT4.0). Wszystko jest do pobrania ze strony sklepu, zakładka - pomoc techniczna.
Czy blutetooth 4.0 w komórce lub w laptopie wystarczy do odczytu i konfiguracji ?
Przy okazji zapytam do jakich liczników gazu nadaje się drugi typ czujnika ? gdzie go się przykleja bo tego nie ma w instrukcji
Aplikacja iNodeSetup służąca do konfiguracji działa tylko na Windows i tylko z konkretnym typem adaptera opartym o układ CSR 8510. Na Androida są aplikacje np. iNode Monitor, które pokazują informacje wysyłane przez tagi iNode. Co do licznika gazowego to urządzenia pracujące w strefie zagrożenia wybuchem, a tak niektóre zakłady gazownicze traktują licznik gazowy, muszą mieć certyfikat ATEX. iNode EM mag go nie ma, a więc nie może być używany do pomiaru zużycia gazu.
Na chwilę obecną mam:
Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) i generalnie znajduje mi ono urządzenia zgodne z Bluetooth 4.x BLE choć nie zaglądałem do środka.
Pod Windows wystarczy zainstalować sterowniki ze strony naszego sklepu, żeby to sprawdzić. Po prostu wszystko będzie działać. Pod linuksem generalnie nie ma to znaczenia, gdyż musi mieć Pan jakiś program, który będzie wykorzystywał ten adapter. U mnie pod linuksem VirtualBox zgłasza taki adapter jako CSR8510 A10 [8891] - numer w nawiasie to wersja firmware adaptera.
Jak rozumiem dane są w iNode Energy Meter gromadzone a potem je się odczytuje. Dobrze rozumiem?
Czy komputer z windows musi jednak chodzić cały czas?
Dane są zapisywane w pamięci i można je odczytać w dowolnym momencie. Pamięć powinna wystarczyć na minimum 7 dni. Czas jest zależny od profilu zużycia - liczby zmian w poborze mocy.
Odbieram beacon ale nie wiem które bajty co oznaczają.
Tryb ascii także nie pomaga. Jest dokumentacja opisująca to?
Interesuje mnie parametr baterii i ilość zarejestrowanych mrugnięć diody z ostatniej minuty, aby załadować to do domoticza.
To co Pan odbiera to jest właśnie to co jest potrzebne.
2016-01-29 12:11:23.878108 > 04 3E 1E 02 01 00 00 47 3A 6D 6F 12 00 15 02 01 06 0E FF 90 82 04 00 CF E4 00 00 DC 05 B0 ED 10 02 0A 08 A5
Sposób dekodowania takiej ramki jest podany w instrukcji dla iNode Serial Transciever USB - strona 9.
To co Pana interesuje to ten fragment:
0E FF 90 82 04 00 CF E4 00 00 DC 05 B0 ED 0D
0E - liczba bajtów = 14
FF - Manufacturer SpecificData
90 82 - 0x8290 identyfikator iNode Energy Meter; jeśli bit 2 jest ustawiony (maska 0x0004) to napięcie baterii jest niskie; jeśli bit 1 jest ustawiony (maska 0x0002) to upłynęły 24h od ostatniego odczytu pamięci danych;
04 00 - 0x0004 - wartość zliczona w minucie; średnia moc pobierana w danej minucie to (0x0004/0x05DC)*60=(4/1500)*60=0,16 kW
CF E4 00 00 - 0x0000E4CF całkowita liczba zliczonych impulsów; ilość kWh = 0x0000E4CF/0x05DC=27 kWh
DC 05 - 0x05DC = 1500 imp/kWh (stała licznika wpisana przez Pana w programie iNodeSetup.exe' to najmłodsze 14 bitów tej wartości); najstarsze 2 bity niosą informację o wybranej jednostce zliczania: 0-[kWh], 1-[m³], 2 lub 3 - impulsy;
B0 - 0xB0 - cztery najstarsze bity wartość 0xB to zakodowane napięcie baterii: 0xb=11 -> Vbat=(11-2)*10=90%; wartość procentową przeliczamy na napięcie wg wzoru: (((Vbat*1.2V)/100)+1.8V); cztery najmłodsze bity to poziom oświetlenia z fototranzystora (0-minimum, 15-maksimum);
ED 10 -> 0x10ED - 4 najstarsze bity to zakodowany dzień tygodnia (0-niedziela, 1-poniedziałek, .., 7-sobota) dla którego na najmłodszych 13 bitach przesyłana jest zliczona w ciągu ostatniej doby wartość w jednostkach ustawionych w urządzeniu; w tym przypadku dzień tygodnia to 1 -> poniedziałek, a wartość pobranej energii to 0x00ED=237 kWh;
Domoticz, przynajmniej u mnie, po aktualizacji przestał podawać dla czujników wirtualnych poziom sygnału i napięcie baterii.
Czy jest możliwość wgrania do iNode LAN firmware poprzez USB? Niestety po wgraniu przez sieć, urządzenie przestało być widoczne. Być może wybrałem zły firmware.
Wydaje mi się, że problem jest ze stronami systemowymi HTML. Jeżeli zna Pan adres IP urządzenia (np. 192.168.1.25) to proszę wpisać w przeglądarce adres url: http://192.168.1.25/flash.cgi Powinna się wczytać strona do wymiany stron systemowych, które może Pan wtedy wgrać do urządzenia i je odratować. Proszę sprawdzić. Do tej pory zawsze to pomagało. Nigdy nie udało się uszkodzić urządzenia przy wymianie firmware.
ile pamięci posiada iNode EM? Na jak długo starczy miejsca we wbudowanej pamięci, gdy dane będą zapisywane co 1 minutę?
Urządzenie może zapamiętać 8192 rekordy po 8 bajtów. Jeżeli zmiany w mierzonej energii są takie, że liczba impulsów zliczona w minucie jest większa niż ± 1 to zapisywany jest do pamięci nowy rekord z danymi. Gdy tak nie jest to nic nie jest zapisywane i dopiero przy zmienionym zużyciu jest zapisywany najpierw rekord ze znacznikiem czasu, a później rekord z danymi.
Przyjmując, że dane są zapisywane co minutę to pamięć wystarczy na zapisanie danych pomiarowych z 5 dni 16 godzin i 32 minut.
Chciałbym uruchomić w domoticzu pomiar temperatury oraz wilgotności. Kupiłem iNode LAN + dwa czujniki (iNode Care Sensor #2 oraz iNode Care Sensor PHT). System mam postawiony na RP2. Wrzuciłem skrypt, który Państwo udostępniacie na swojej stronie. Ale mam problem z uruchomieniem.
Czasami są problemy ze skryptem polegające na tym, że trzeba zmienić w skrypcie localhost na 127.0.0.1 lub odwrotnie.
W ostatnich dniach parowałem iNode Care Sensor T z FIBARO (i Imperi Home) oraz z serwisem ThingSpeak.
Rozwiązanie może mało eleganckie: iNode Care Sensor -> iNode Lan -> Raspberry (skrypt Python ze strony inode.pl) -> Domoticz -> Fibaro -> Imperi Home.
Wszystko poszło dobrze i ładnie działa - oprócz Thing Speak.
Na Raspberry mam Python'a 2.7.3 (pewnie z tego wynika problem - wersja Python) dostawałem błąd: Certificate Error (związany z SSL).
Temat udało mi się obejść małą zmianą w kodzie inode.py:
W funkcji TS_POST(A) dodałem jedną linię (zaznaczenie BOLD).
Jest to pewna luka bezpieczeństwa (brak weryfikacji certyfikatu ThingSpeak), ale rozwiązanie po tej modyfikacji działa.
Być może przyda się to Państwu lub użytkownikom. Jeśli jest jakiś lepszy sposób obejścia tego problemu, będę wdzięczny za informacje.
Poniżej fragment kodu inode.py:
(...)
def TS_POST(a):
global thingspeak_host_ip
try:
ssl._create_default_https_context = ssl._create_unverified_context
http_conn = httplib.HTTPSConnection(thingspeak_host_ip)
(...)
Jedna uwaga co do skryptu inode.py_4.91_26.01.2017:
Na mojej malinie mam pythona w wersji 2.7.9. Bodajże od wersji 2.6 socket zwraca "address type" w związku z tym musiałem zmodyfikować skrypt żeby działał:
domoticz_host_ip, domoticz_host_port = socket.getaddrinfo(domoticz_host_name, domoticz_port,socket.AF_INET)[0][-1]
Być może warto to uwzględnić gdyż dla wielu osób mniej obeznanych może to być bariera nie do przeskoczenia.
Oraz na początku pliku: import ssl