Powiadomienia
Wyczyść wszystko

Owntracks + Openhab  

  RSS
lion77
(@lion77)
Młodzik

Witam.

Zwracam się z uprzejmą prośbą o pomoc w utworzeniu geolokalizacji w Openhab2.
Starałem się zrobić wszystko wg opisu Adriana:
https://www.smartnydom.pl/geolokalizacja-w-inteligentnym-domu/
Niestety w Openhabie nie umiem spowodować zmiany stanu Item – cały czas jest null.

Switch Lokalizacja_Dom   { mqttitude="MojMQTTBroker:owntracks/venom/event:Dom" }
Switch Lokalizacja_Praca { mqttitude="MojMQTTBroker:owntracks/venom/event:Praca"}

Dwa telefony łączą się bez problemu do brokera MQTT i wzajemnie w aplikacji Owntracks również widać, czy urządzenie jest w zdefiniowanym regionie.
Po uruchomieniu w terminalu subskrypcji, też widać informacje z aplikacji.

[21:30:48] openhabian@openhab:~$ mosquitto_sub -t owntracks/malina/venom -u malina -P ****
{"_type":"location","acc":62,"alt":320,"batt":71,"conn":"w","inregions":["Dom","Piekary Śląskie"],"lat":50.*******,"lon":18.*******,"t":"p","tid":"MK","tst":1600457135,"vac":2,"vel":0}

Nie wiem, czy binding „OwnTracks (formerly MQTTitude) Binding (1.x)” działa, ponieważ po zainstalowaniu nie widać go w konfiguracji razem z innymi bindingami.
Próbowałem użyć bindingu „GPSTracker Binding”, ale również bez efektu.

Cytuj
Dodane : 18/09/2020 10:21 pm
adrian
(@adrian)
Prezes Zasłużony dla Forum, Patron Strony

cześć @lion77

moja sugestia jest taka, żebyś zrezygnował zarówno z bindinga 1 Owntracks i GPSTracker i zrobił to bez nich poprostu przechwytując z MQTT Brokera informacje, które do niego trafiają z telefonów

Tutorial zrobiłem bardzo dawno temu i po różnych zmianach w OH2 i po zebranym doświadczeniu, tak Ci właśnie proponuję.

Nie mam osobiście w tym momencie zrobionych regionów, ale jutro, jak coś to moge Ci machnąć

Tutaj masz przykład, jak zbieram swoją lokalizację bezpośrednio zbierając dane z MQTT Brokera

Plik: owntracks.things

Bridge  mqtt:broker:serverBroker [ host="adres-mqtt-brokera", port="port-brokera", secure=true, username="", password="", clientID="OH2Server" ]
{
   Thing mqtt:topic:AdriansOwntrack "Owntrack: Adrian" {
   Channels:
       Type number : Lat "Lat" [ stateTopic="owntracks/adrian/phone", transformationPattern="JSONPATH:$.lat" ]
       Type number : Lon "Lon" [ stateTopic="owntracks/adrian/phone", transformationPattern="JSONPATH:$.lon" ]
       Type number : Batt "Batt" [ stateTopic="owntracks/adrian/phone", transformationPattern="JSONPATH:$.batt" ]
   }
}

Te tutaj "Things" później mapuje do item i mam lokalizację, którą sobie wyświetlam na mapie, jak poniżej.

Jeśli masz przechwycony temat+message do regionu to podeślij, spróbuje przerobić na Switch'a , jak nie masz to w weekend zrobię sobie jakiś region i podeślę Ci przykład

OdpowiedzCytuj
Dodane : 18/09/2020 11:16 pm
lion77 polubień
lion77
(@lion77)
Młodzik

Cześć @Adrian

Dziękuję za błyskawiczną reakcję i zaangażowanie.

Przerobiłem things, ale Visual Studio Code podpowiada mi, że zrobiłem chyba błąd w składni:

Bridge  mqtt:broker:serverBroker [ host="192.168.0.14", port="1883", secure=true, username="malina", password="***", clientID="OH2Server" ]
{
    Thing mqtt:topic:MarcinsOwntrack "Owntrack: Marcin" {
    Channels:
        Type number : Lat "Lat" [ stateTopic="owntracks/malina/venom", transformationPattern="JSONPATH:$.lat" ]
        Type number : Lon "Lon" [ stateTopic="owntracks/malina/venom", transformationPattern="JSONPATH:$.lon" ]
        Type number : Batt "Batt" [ stateTopic="owntracks/malina/venom", transformationPattern="JSONPATH:$.batt" ]
    }
}

Provide a thing type ID and a thing ID in this format: <thingTypeId> <thingId>

Jako temat mam "owntracks/malina/venom".

Z mosquitto_sub wywnioskowałem, że "inregions":["Dom","Piekary Śląskie"] muszę jakoś przerobić na Itemy z regionami, ale nie mam pojęcia jak to uczynić.

OdpowiedzCytuj
Dodane : 19/09/2020 1:17 am
adrian
(@adrian)
Prezes Zasłużony dla Forum, Patron Strony

@lion77 te warningi nie zaburzają funkcjonowania (starsza wersja) jak chcesz mieć bez warning to zrób tak:

w pliku *.things

Bridge  mqtt:broker:serverBroker [ host="192.168.0.14", port="1883", secure=true, username="malina", password="***", clientID="OH2Server" ]
{
    Thing topic MarcinsOwntrack "Owntrack: Marcin" {
    Channels:
        Type number : Lat "Lat" [ stateTopic="owntracks/malina/venom", transformationPattern="JSONPATH:$.lat" ]
        Type number : Lon "Lon" [ stateTopic="owntracks/malina/venom", transformationPattern="JSONPATH:$.lon" ]
        Type number : Batt "Batt" [ stateTopic="owntracks/malina/venom", transformationPattern="JSONPATH:$.batt" ]
    }
}

A items definiuj tak w pliku *.items

Number owntrack_marincs_lat "Marcin: lat: [%.15f °LAT]" { channel="mqtt:topic:serverBroker:MarcinsOwntrack:Lat" }
Number owntrack_marcins_lon "Marcin: lon: [%.15f °LON]" { channel="mqtt:topic:serverBroker:MarcinsOwntrack:Lon" }
Number owntrack_marcins_batt "Marcin: batt: [%d %%]" { channel="mqtt:topic:serverBroker:MarcinsOwntrack:Batt" }

W logo możesz pewnie zanleśc tego typu ostrzeżenie: Executing the JSONPATH-transformation failed: Invalid path

Ale nimi się ie przejmuj: Owntrack wysyła różne tematy MQTT i informację i nie potrzebujesz przewarzać ich wszystkich.

Z tymi regionami to jest temat który ma atrybut "_type": "transition" i jest tam informacja enter / leave region. Włączyłem sobie zbieranie wszystkich wiadomości przychodzących z owntrack - jak je pozbieram to zrobię tutaj trochę wiecej przykładów

OdpowiedzCytuj
Dodane : 19/09/2020 10:29 am
lion77 polubień
lion77
(@lion77)
Młodzik

Dzięki @Adrian

Bardzo się ucieszyłem gdy zadziałało, bo siedziałem kilka dni i nocy i nic sensownego nie umiałem wymyślić

Poprawiłem *.Items, bo na końcu channel były spacje i zanim na to wpadłem, to linkowałem w PaperUI.

Number owntrack_marcins_lat  "Marcin: lat:  [%.4f °LAT]" { channel="mqtt:topic:serverBroker:MarcinsOwntrack:Lat"  }
Number owntrack_marcins_lon  "Marcin: lon:  [%.4f °LON]" { channel="mqtt:topic:serverBroker:MarcinsOwntrack:Lon"  }
Number owntrack_marcins_batt "Marcin: batt: [%d %%]"     { channel="mqtt:topic:serverBroker:MarcinsOwntrack:Batt" }

Teraz myślę, jak w HABPanel zrobić mapę.

Nie wiem, czy widget "MAP" nie działa, bo nie wyświetla mapy.

Jeśli widget jest dobry, to muszę LAT i LON zamienić w jeden string i taki Item podać w widgecie.

OdpowiedzCytuj
Dodane : 19/09/2020 3:04 pm
adrian
(@adrian)
Prezes Zasłużony dla Forum, Patron Strony

@lion77

zrób tak

reguła

rule "Owntrack: Marcin's location conversion"
when
   Item owntrack_marcins_lat changed or
   Item owntrack_marcins_lon changed
then
   val temp_location = new PointType(owntrack_marcins_lat.state as DecimalTypeowntrack_marcins_lon.state as DecimalType)
   owntrack_marcins_location.postUpdate(temp_location)
end

item

Location owntrack_marcins_location "Marcins: location" 

I musisz jeszcze te wszystkie pliki wgrać do /etc/openhab/html/habpanel-map-widget

Później w widget'cie Map wybierz item location owntrack_marcins_location

OdpowiedzCytuj
Dodane : 19/09/2020 6:04 pm
lion77 polubień
lion77
(@lion77)
Młodzik

Dziękuję @Adrian

Wszystko działa jak należy.

Jeżeli znajdziesz kiedyś czas i ogarniesz regiony, to już będzie chyba wszystko, co potrzebne do automatyzacji opartej na geolokalizacji.

OdpowiedzCytuj
Dodane : 19/09/2020 7:48 pm
adrian
(@adrian)
Prezes Zasłużony dla Forum, Patron Strony

spoko - muszę te regiony złapać przez broker - może jutro wyjdę z domu 😉

OdpowiedzCytuj
Dodane : 19/09/2020 11:03 pm
adrian
(@adrian)
Prezes Zasłużony dla Forum, Patron Strony

@lion77 wracając do regionów. Przykład regionów:

W Owntrack zdefiniowałem dwa regiony o nazwie

  • dom
  • rolnicza

Do things dodałem takie

Type switch : RegionHouse "W domu" [stateTopic="owntracks/adrian/phone/event", transformationPattern="JSONPATH:$.[?(@.desc=='dom')].event", on="enter", off="leave" ]
Type switch : RegionRolnicza "Rolnicza" [stateTopic="owntracks/adrian/phone/event", transformationPattern="JSONPATH:$.[?(@.desc=='rolnicza')].event", on="enter", off="leave" ]

Zwróć uwagę na stateTopic u Ciebie pewnie musi być cos takiego

owntracks/malina/venom/event

oraz w tym JSONPATH desc == "" tutaj podajesz nazwę regionu

No i oczywiście items

Switch owntrack_adrian_region_house "Adrian w domu" { channel="mqtt:topic:serverBroker:AdriansOwntrack:RegionHouse" }
Switch owntrack_adrian_region_rolnicza "Adrian na rolniczej" { channel="mqtt:topic:serverBroker:AdriansOwntrack:RegionRolnicza" }

Powinno zadziałać, ale musisz trochę się po przemieszczać, żeby Owntrack coś ci powysyłał.

I jeszcze jedno doświadczenie z przeszłości z Regionami.

  • Owntrack nie wysyła regionów z tzw: MQTT retain ustawionym na 1 - czyli po podłączeniu się do MQTT brokera nie dostaniesz informację o ostatnim/aktualnym regionie.
  • Jeśli jest w OTrack ustawione ręczne wysyłanie info to oczywiście nic nie dostaniesz. Gdy wciśniesz wysłanie aktualnej lokalizacji (ręcznie) to nie wyśle Ci czy wszedłeś, wyszedłeś z regionu. Wyśle Ci lokalizację.
  • Coś co było dla mnie upierdliwe to, że jak Owntrack zarejestrował, że jesteś w jakimś regionie, a później np. na wyłączonej komórce z niego wyjdziesz to Owntrack nie wyśle Ci że wyszedłeś z tego regionu. Switch będziesz miał ON i nie będziesz w tym regionie. Ja rozwiązałem to sobie  przez dodatkową regułę.
    • Miałem sporo regionów. Dom, Praca, coś tam i jak
    • jak zarejestrował mi, że jestem w pracy, ale z jakiegoś powodu w OH miałem informację, że jestem w domu to przez regułę zmieniałem Switch dom na OFF. Analogicznie dla pracy i innych regionów
    • Było to trochę kulawe, ale działało
    • Tak się teraz zastanawiam, czy nie dało by się wysyłać z OH zapytania do komórki, "hey gdzie jesteś" - z tego co wiem to można włączyć obsługę komend i może coś się da zrobić - potestuje w wolnym czasie
    • Mam jeszcze inny pomysł z regułą, ale musze sprawdzić w dokumentacji.

Daj znać, czy Ci zadziała

Pzdr.a

OdpowiedzCytuj
Dodane : 20/09/2020 8:43 pm
lion77 polubień
lion77
(@lion77)
Młodzik

Cześć @Adrian

Dzięki za pomoc w zrealizowaniu tematu Geolokalizacji.

Nie obyło się bez problemów (przez pomyłkę pisałem nowy Things poza nawiasem 😀 ), ale można powiedzieć, że wszystko działa jak trzeba.

Przy testowaniu wchodzenia i wychodzenia z regionu, zmieniałem promień np. Dom na 8m lub Praca na 100km i po odświeżeniu informacji od razu był efekt.

Pozdrawiam

Marcin

OdpowiedzCytuj
Dodane : 20/09/2020 11:23 pm
adrian
(@adrian)
Prezes Zasłużony dla Forum, Patron Strony

@lion77 gitara - ja siedzę jeszcze nad odczytem regionów, które są wysyłane podczas każdej aktualizacji lokalizacji. Zobaczę czy nie da się dzięki temu zrobić tego bardziej precyzyjnego

I zimno u Ciebie na tym Dworze 😉 włącz tam jakieś ogrzewanie bo dworzanie pomarzną 😋

OdpowiedzCytuj
Dodane : 20/09/2020 11:33 pm
Udostępnij: