Supla - MQTT - Dashing

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
desaint
Posts: 109
Joined: Mon May 27, 2019 9:46 am

Post

dziwne, bo plik o ktory sie burzy w sumie jest.
Beku
Posts: 453
Joined: Tue Nov 06, 2018 1:49 pm

Post

desaint wrote: Mon Nov 25, 2019 6:45 am dziwne, bo plik o ktory sie burzy w sumie jest.
Wiem ale się zdarza ze ucieka mi z include jak robię kompilacje w eclipse. I tym razem tez się tak stało. Możesz spróbować edytować plik subdir.mk w katalogu Debug/src . Tam gdzie jest polecenie kompilacji musisz dopisać -I../src/json

Linia 51 i 58

Ewentualnie możesz pobrać źródła z repozytorium:

https://github.com/lukbek/supla-core.git

Bo tam już poprawiłem.
desaint
Posts: 109
Joined: Mon May 27, 2019 9:46 am

Post

dziala.
sensor tez.
dzieki.
:D
desaint
Posts: 109
Joined: Mon May 27, 2019 9:46 am

Post

Hej,
jeszcze mam pytanie odnosnie twojej koncecji zapisywania tych kanalow bo proboje jakos to pospinac.
dlaczego tak zrobiles, ze te sensory sa pod id modulu wykonawczego, a nie pod swoim i np zamiast:

Code: Select all

supla/channels/status/gate/1
i tam jest capy payload z sensorem zeby bylo:

Code: Select all

supla/channels/status/sensor/21
i tu tylko stan tego sensora.

Nie wiem tylko jak sprytnie powiazac to co publikuje supla-mqtt z tym co mam w cloudzie.
Beku
Posts: 453
Joined: Tue Nov 06, 2018 1:49 pm

Post

desaint wrote: Tue Nov 26, 2019 8:19 am Hej,
jeszcze mam pytanie odnosnie twojej koncecji zapisywania tych kanalow bo proboje jakos to pospinac.
dlaczego tak zrobiles, ze te sensory sa pod id modulu wykonawczego, a nie pod swoim i np zamiast:

Code: Select all

supla/channels/status/gate/1
i tam jest capy payload z sensorem zeby bylo:

Code: Select all

supla/channels/status/sensor/21
i tu tylko stan tego sensora.

Nie wiem tylko jak sprytnie powiazac to co publikuje supla-mqtt z tym co mam w cloudzie.
Sensory jeśli nie są spięte pod kanał w cloud pokazują się osobno. Jeśli natomiast są przypięte do urządzenia to stają się jego częścią i są publikowane razem z tym urządzeniem. W aplikacji tez nie widzisz osobno sensorów jeśli są przypięte do urządzenia. Widzisz je tylko wtedy gdy są niezależne - nie przypięte do urządzenia.
desaint
Posts: 109
Joined: Mon May 27, 2019 9:46 am

Post

Czesc,
udalo mi sie troche to oprogramowac, dziala fajnie.
jednak jest drobny klopot z wartosciami poczatkowymi. o ile dla wszystkich shelly wysyla stan poprawny, o tyle dla sonoff gateway i gatewaylock sensor_1 zawsze wysyla 0 po uruchomieniu, mimo ze bramki zamkniete.
czy to mozna jakos poprawic?
Beku
Posts: 453
Joined: Tue Nov 06, 2018 1:49 pm

Post

desaint wrote: Sat Dec 14, 2019 6:30 pm Czesc,
udalo mi sie troche to oprogramowac, dziala fajnie.
jednak jest drobny klopot z wartosciami poczatkowymi. o ile dla wszystkich shelly wysyla stan poprawny, o tyle dla sonoff gateway i gatewaylock sensor_1 zawsze wysyla 0 po uruchomieniu, mimo ze bramki zamkniete.
czy to mozna jakos poprawic?
https://github.com/SUPLA/supla-core/blo ... op.cpp#L61

W tym miejscu trzeba dopisać:

channels->set_channel_sub_value(channel->Id, channel->value.sub_value);

Oczywiście wrzuce to tez do źródeł ale chwile to potrwa
desaint
Posts: 109
Joined: Mon May 27, 2019 9:46 am

Post

no wlasnie do tego etapu doszedlem ze to ustawiam, ale swoja wartosc domyslna, czyli 1.
jak debugowalem, to channel->value.sub_value jest zawsze null w tym miejscu.

btw, jak wlaczac/wylaczac grupy kanalow?
Beku
Posts: 453
Joined: Tue Nov 06, 2018 1:49 pm

Post

desaint wrote: Sun Dec 15, 2019 1:12 pm no wlasnie do tego etapu doszedlem ze to ustawiam, ale swoja wartosc domyslna, czyli 1.
jak debugowalem, to channel->value.sub_value jest zawsze null w tym miejscu
sprawdzę jak będę przy kompie.

Co do grup to nie ma bezpośredniej obsługi, sterowanie tylko poszczególnymi kanałami.
tomekk87
Posts: 192
Joined: Fri Aug 02, 2019 12:19 pm

Post

Beku wrote: Mon Nov 04, 2019 8:25 pm Instalacja Smashing

Poniżej opis instalacji Smashing w wersji kontenerowej.

Pobieramy załączone archiwum zip.

smashing.zip

Rozpakowujemy np. w lokalizacji /opt/smashing
Wchodzimy do katalogu smashing

Uruchamiamy polecenie:

Code: Select all

 sudo docker build -t smashing .
to spowoduje zbudowanie obrazu docker z smashingiem.

edytujemy plik /opt/smashing/lib/hc_mqtt.rb

Dostosowujemy poniższą linię do swojej konfiguracji serwera MQTT.

Code: Select all

client = MQTT::Client.connect(:host => 'host', :port => 1883, :username => 'username', :password => 'password')
trzeba wpisać host port i ewentualnie nazwę użytkownika i hasło serwera MQTT

Uruchamiamy kontener poleceniem:

Code: Select all

sudo docker run -e GEMS=mqtt -v=/opt/smashing:/smashing -d -p 3030:3030 smashing:latest

Jeśli wszystko się powiedzie możemy w przeglądarce wpisać http://ip_maszyny:3030/default

Po chwili (cierpliwości) powinien pojawić się dashboard taki jaki wklejałem w poprzednich postach
Pierwsze uruchomienie trochę trwa, potem strona ładuje się już szybko.

Jeśli dashboard się otworzy możemy zacząć edytować widgety.

W tym celu edytujemy plik /opt/smashing/dashobards/default.rb

W tym pliku zdefiniowane są wszystkie widoczne widgety. Jak widać każdy widget ma określony rodzaj (ohtemp, ohswitch itp)
Możemy dostosować widgety do naszej instancji supli. Najważniejsze w każdym widgecie jest Id.
Jest to identyfikator kanału Supla. Jeśli mamy przycisk który w supla cloud ma id np. 2 to żeby spiąć go z dashingiem w pliku default.rb musi mieć także id 2.

Oczywiście w tej chwili jeszcze nie zobaczycie działających stanów swoich urządzeń supla.

Do tego potrzebny jest trzeci komponent supla-mqtt-client

Opiszę go w następnej części!. Pozdro!
Mój serwer MQTT jest w sieci pod adresem 192.168.100.87 na porcie 1883 bez dodatkowych zabezpieczeń. Sprawdziłem i mogę się z nim połączyć przez MQTT Explorer. Konfigurując Smashing w pliku /opt/smashing/lib/hc_mqtt.rb mam tak wpisane:

Code: Select all

require 'mqtt'

client = MQTT::Client.connect(:host => '192.168.100.87', :port => 1883,)

# Thread

Thread.new {
  begin
    client.subscribe('supla/channels/status/#')
    client.get do |topic, message|
      data = JSON.parse(message)
      send_event(data["id"], data)
    end
  rescue MQTT::NotConnectedException
    client.connect()
    retry
  rescue => e
    puts e.message
  end
}

# Messages

post '/mqtt/publish' do
  id = params['id']
  state = params['on']
  topic = "supla/channels/command/switch/#{id}"
  message = "{\"id\" : #{id}, \"on\" : #{state} }"
  begin
    client.publish(topic, message)
  rescue MQTT::NotConnectedException
    client.connect()
    retry
  rescue => e
    puts e.message
  end
end
Uruchamiam kontener poleceniem

Code: Select all

sudo docker run -e GEMS=mqtt -v=/opt/smashing:/smashing -d -p 3030:3030 smashing:latest
Otrzymuję takie coś:

Code: Select all

root@DebianTK:/opt/smashing# sudo docker run -e GEMS=mqtt -v=/opt/smashing:/smashing -d -p 3030:3030 smashing:latest
5b0f8e8b800b1cc4860500b365c184afde47933a222a23950e7bab0f2668ba66
root@DebianTK:/opt/smashing#
Niby wszystko ok, a jak w przeglądarce wybiorę http://192.168.100.87:3030/default to nie można wyświetlić strony. Co robię nie tak?

Return to “Pomysły i koncepcje”