Do zdekodowania i ustawienia sensorów w HA potrzebny jest twój beacon iNode.
{
"data": [
{
"timestamp": "2021-03-13T13:20:20Z",
"type": "iNode",
"mac": "D0F01843EE12",
"ip": "192.168.1.100",
"rtc": 1615641620,
"ethRx": 0,
"ethTx": 11,
"bleRx": 4142,
"bleTx": 0,
"workTime": 112,
"txp": 8,
"rst": 519,
"temp": 49,
"msg": 8,
"ack": 7,
"tx_time": 253817,
"juf": 128,
"period": 15,
"manuf": 244,
"rstr": 28
},
{
"timestamp": "2021-03-13T13:20:19Z",
"mac": "7974D27AB5CA",
"rssi": -59,
"rawData": "03039FFE17169FFE0000000000000000000000000000000000000000",
"rawResp": "09FFE0000195CA626FFF"
},
{
"timestamp": "2021-03-13T13:20:19Z",
"mac": "725A4E58F2F1",
"rssi": -74,
"rawData": "03039FFE17169FFE0000000000000000000000000000000000000000",
"rawResp": "09FFE00001FDCA8E9EC1"
},
{
"timestamp": "2021-03-13T13:20:19Z",
"mac": "445CE92648BB",
"rssi": -59,
"rawData": "1BFF75004204018066445CE92648BB465CE92648BA01900000000000",
"rawResp": ""
},
{
"timestamp": "2021-03-13T13:20:20Z",
"mac": "7C645689CE33",
"rssi": -79,
"rawData": "1BFF750042040180607C645689CE337E645689CE32014CF000000000",
"rawResp": ""
},
{
"timestamp": "2021-03-13T13:20:19Z",
"mac": "4F2156DE3481",
"rssi": -64,
"rawData": "03039FFE17169FFE0000000000000000000000000000000000000000",
"rawResp": "09FFE00001C4CA50ACB9"
},
{
"timestamp": "2021-03-13T13:20:20Z",
"mac": "775B4D3556BA",
"rssi": -72,
"rawData": "03039FFE17169FFE0000000000000000000000000000000000000000",
"rawResp": "09FFE0000154CA9CFC1A"
},
{
"timestamp": "2021-03-13T13:20:18Z",
"mac": "7A6259425640",
"rssi": -86,
"rawData": "02011A020A080CFF4C001007221B3EF3497578",
"rawResp": ""
},
{
"timestamp": "2021-03-13T13:20:19Z",
"mac": "4B8E2CCEE552",
"rssi": -57,
"rawData": "03039FFE17169FFE0000000000000000000000000000000000000000",
"rawResp": "09FFE000010CCA57E37C"
},
{
"timestamp": "2021-03-13T13:20:13Z",
"mac": "D0F01843EE9F",
"rssi": -81,
"rawData": "0201061107694E6F646520426561636F6E0000000003FF0080020AFE",
"rawResp": "0D09694E6F64652D343345453146"
}
]
}
mój jest ten ostatni, mam ich w sumie 4 ale reszty nie znam mac na chwile obecną.
na stronie CHROME 15 marca pojawiło się takie coś - pytanie czy upraszcza to konfigurację w HA, aplikacja współpracuje z serwerem MQTT da się to zintegrować?
Panowie jestem już tak blisko…
na nasłuchu mam dane:
{
"timestamp": "2021-03-31T15:32:24Z",
"mac": "D0F01843EE1F",
"rssi": -79,
"rawData": "0201061107694E6F646520426561636F6E0000000003FF0080020AFE",
"rawResp": "0D09694E6F64652D343345453146"
},
Jak z tego zrobić encję która będzie miała on-off 1-2 cokolwiek jest-brak?
Potrzebuje już teraz tylko encję która mi powie że ten beacon jest w domu (ewentualnie ile ma bateri)
Może jakoś tak?
@szopen robie tak:
# inode
device_tracker:
- platform: mqtt
devices:
"mac": "D0F01843EE1F"
"topic": "inodelan"
qos: 0
payload_home: "present"
payload_not_home: "not present"
source_type: bluetooth
i nic. Sory ale jestem troszkę jeszczę cieniutki w tym
- platform: mqtt
name: "beacon"
state_topic: "inodelan"
value_template: >
{% set ns = namespace(found=false) %}
{% for dev in value_json.data %}
{% if dev.mac == 'D0F01843EE1F' %}
{% set val = dev.rssi %}
{% if val %}
{% set ns.found = true %}
on
{% endif %}
{% endif %}
{% endfor %}
{% if not(ns.found) %}
off
{% endif %}
Najprościej sensor obecności bez pomiaru rssi i przeliczania na metry, tak jak powyżej.
@jacek - Szacun
Wreszcie działa.
Dziękuje - super, że mnie nikt nie pogonił tylko cierpliwie znosiliście moją niewiedze.
DZIEKI
Stan baterii pokazuje “unknown” ale to już nie jest problem - cel osiągnięty.
Sprawdziłem dokładniej i w ramce takiego beacon nie ma informacji o baterii. Nie można więc utworzyć sensora na podstawie danych.
ok. jest super. dzięki.
Można trochę naokoło bo też jestem posiadaczem INODE LAN.
Dongiel BT i Integracja BLE
Praktycznie sam iNODE LAN służy tylko wgrywania firmware i do zmiany siły nadawania przez pastylki , włączania tryby ECO w nich oraz co ile ma rozgłaszać swój sygnał ( fabrycznie robi to co 1.28 s na 3 kanałach ) - tego nie zrobimy z poziomu HA.
@jacek Ponieważ widzę że jesteś biegły w dekodowaniu pastylek czy mógłbyś ( a ja za cieńki w uszach aby to sobie wstawić do HA ) wstawić wpis aby uzyskać poniższą wartość którą opisałem.
Mam RAW data z pastylki tyle że nie zgadzają się wartości z linku który dałeś.
Doszedłem metodą ręczną które pole mnie interesuje , ręczne liczenie potwierdziło wartość.
Integracja BLE robi to sama w locie ale akurat do tej pastylki mam za daleko - natomiast widzi ją INODE LAN.
Wg oryginalnego opisu ( pastylka #3 ) Przykładowe wartości są takie:
92 93 01 b0 00 00 17 00 a8 19 e8 18 04 00 f4 bb ce 6e 77 a0 0b 97 d1 b5
Natomiast tak ona raportuje w rzeczywistości :
02 01 06 19 FF D0 93 01 B0 04 00 00 80 5C 1A 00 00 01 00 FE E7 FC 0C A3 0C 92 D7 45 EE
Dopiero od pola D0 93 mamy dane które są przedstawione w dokumentacji.
Zamieszczam tak aby było zgodnie jak w dokumentacji ( jest to ta sama pastylka tyle że dane wcześniejsze a nie które wstawiłem wyżej ):
02010619FF D0
93
01 B0
04 00
00 80
==> 57 1A
00 00
01 00
96 E6
1C 73 B5 5F
32 2A 44 D8
Znaczkiem “==>” zaznaczyłem to co mnie interesuje czyli temperatura.
Wiem że należy to przestawić odwrotnie czyli 1A57 co daje wartość 6743 co po przeliczeniu ze wzoru w dokumentacji : (175,72x6743x4/65536)-46,85 = 25,46 stopnia.
Skoro to BLE to może nie warto wyważać otwartych drzwi?
Jest za daleko i BLE już mi z tego miejsca pastylki nie czyta niestety.
Inne dwie które posiadam są w zasięgu.
Według tego co piszesz, dekodowanie i obliczenie temperatury dla takiego sensora przez iNodeLan może wyglądać tak:
…
{% set p = 25 %}
{{ (((((val[p+3]~val[p+4]~val[p+1]~val[p+2]) | int(base=16))*175.72)*4)/65536)-46.85 }}
…
Początek i koniec uzupełnij sobie tak jak we wcześniejszych przykładach. Jak coś nie działa to daj znac.
Ok - sprawdzę i się podzielę wynikiem…
EDIT 2022-03-24
Wstawiłem per analogia i niestety raczej jest błąd bo nie pokazuje temp :
- platform: mqtt
name: "PASTYLKATEMP"
state_topic: "iNodeLAN Central"
value_template: >
{% set ns = namespace(found=false) %}
{% for dev in value_json.data %}
{% if dev.mac == 'D0F0184411A6' %}
{% set val = dev.rawData %}
{% if (val[12:14] == "82") %}
{% set ns.found = true %}
{% set p = 25 %}
{{ (((((val[p+3]~val[p+4]~val[p+1]~val[p+2]) | int(base=16))*175.72)*4)/65536)-46.85 }}
{% endif %}
{% endif %}
{% endfor %}
{% if not(ns.found) %}
unknown
{% endif %}
MAAM - poprawiłem że zamiast 82 jest 93.
Tylko pleasee - round gdzie wstawić bo aż tyle po przecinku mi nie potrzeba ?
Ten if z 93 moża chyba usunąć, żeby uprościć.
Zaokrąglić możesz np. tak:
{{ ((((((val[p+3]~val[p+4]~val[p+1]~val[p+2]) | int(base=16))*175.72)*4)/65536)-46.85) | round(1) }}
gdzie w tym przypadku round
(precyzja , metoda )
metoda:
-
'common'
zaokrągla w górę lub w dół -
'ceil'
zawsze zaokrągla w górę -
'floor'
zawsze zaokrągla w dół
Jeśli nie określisz metody, zostanie użyta domyślna 'common'
.
Królu mój Złoty - zaraz sobie dopisze XD
Jak był 82 to nie widział temperatury bo najpierw na żywca skopiowałem.
Jak zamieniłem na 93 to się pokazała.
No cud , miód i kaszanka O to mnie właśnie chodziło.
EDIT 2022-04-04
@jacek Jak możesz wytłumacz mi ten zapis - wskazałem znaczkiem “==>”:
{% if (val[12:14] == "93") %}
{% set ns.found = true %}
==> {% set p = 25 %}
Bo chce sam zmodyfikować aby mi pokazywało % i V baterii tylko z liczenia cyferek mi to nie wychodzi ( a domyślam się że jest to offset ). Dla przykładowej pastylki 3 czyli kod jak wyżej tj 93 wartość napięcia baterii jest na 18 pozycji od początku. Wstawiam 18 , Twoje 30 z przykładu czy 25 i NIC nie pokazuje.
EDIT 2022-05-10 dorobiłem sobie sam V i stan %V pastylek. Błąd miałem w samej definicji bo kopiowałem z tego wątku a ja durny nie sprawdziłem nazwy mojego topic-u i mi się nic nie pokazywało.
Jak ktoś potrzebuje to wstawiam dla pastylek 93 i 9B ( inne tez pasują ):
- platform: mqtt
name: "PASTYLKA SYPIALNIA BATERIA %"
unit_of_measurement: '%'
state_topic: "iNodeLAN Central"
value_template: >
{% set ns = namespace(found=false) %}
{% for dev in value_json.data %}
{% if dev.mac == 'XXXXXXXXXX' %}
{% set val = dev.rawData %}
{% if (val[12:14] == "9B") %}
{% set ns.found = true %}
{% set p = 16 %}
{{ (((val[p]) | int(base=16)-2)*10) }}
{% endif %}
{% endif %}
{% endfor %}
{% if not(ns.found) %}
unknown
{% endif %}
icon: mdi:battery-80-bluetooth
- platform: mqtt
name: "PASTYLKA SYPIALNIA BATERIA V"
unit_of_measurement: 'V'
state_topic: "iNodeLAN Central"
value_template: >
{% set ns = namespace(found=false) %}
{% for dev in value_json.data %}
{% if dev.mac == 'XXXXXXXXXXX' %}
{% set val = dev.rawData %}
{% if (val[12:14] == "9B") %}
{% set ns.found = true %}
{% set p = 16 %}
{{ (((((val[p]) | int(base=16)-2)*10)*1.2)/100)+1.8 }}
{% endif %}
{% endif %}
{% endfor %}
{% if not(ns.found) %}
unknown
{% endif %}
icon: mdi:battery-plus
Witam, jestem tuż po zakupie iNode Energy Meter, mam go podłączonego do wyjścia optycznego w liczniku energii Apator, dane zaczytuję przez ble w esp32 z wgranym esphome.
Niestety dane są nieprawidłowe, pomoże mi ktoś z Was forumowiczów skonfigurować tłumacząc łopatologicznie tak aby dane pokrywały się z licznikiem ?
Dziękuję serdecznie za pomoc