Beacony iNode w HA

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ć?
Zrzut ekranu 2021-03-21 o 16.02.16

Zrzut ekranu 2021-03-21 o 16.21.46

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 :frowning:

- 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.

Pany - u mnie też działą Super @jacek 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.
image

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'.

1 polubienie

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.

image
No cud , miód i kaszanka :slight_smile: 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.
image

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