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.
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.
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
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:
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ć.
@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
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.
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.
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 DecimalType, owntrack_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
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.
spoko - muszę te regiony złapać przez broker - może jutro wyjdę z domu 😉
@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
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
@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ą 😋