Forum użytkowników automatyki budynkowej
Z-wave => Vera => Wątek zaczęty przez: Asemka w Lipiec 29, 2015, 11:42:34 am
-
Witam,
Jestem posiadaczem centrali Vera Lite.
Na pierwszy rzut oka widać że ma bardzo duże możliwości.
Po za możliwością komunikacji z urządzeniami drogą bezprzewodową zgodną z standardem Z-wave istnieje możliwość sterowania urządzeniami wpiętymi do tej samej sieci lan do której jest wpięty kontroler VERA.
Ze względu na dużą ilość urządzeń tego typu oraz możliwości rozproszenia całego systemy dodatkowo o urządzenia wpięte do sieci Lan.
Rozwiązania takie wydają się być sensowne... ale zostawię to do dyskusji
Dziś na tapetę pragnę przywołać urządzenie typu LAN kontroler posiadające następujące porty:
I/O
wejść analogowych: pomiar temperatury, napięcia i prądu (przez dodatkowe płytki) oraz pośrednio innych wielkości fizycznych
wejście cyfrowe w standardzie 1wire: pomiar od 4 do 6ciu sond temperatury DS18B20
wejście cyfrowe do obsługi czujnika temeratury i wilgotnosci DHT22
4 wejścia logiczne: jako czujnik stanu do monitoringu, jako licznik impulsów z licznika energii
1 przekaźnik (NZ, NO, C)
1 wyjście tranzystorowe, dające napiecie zasilania na zaciskach, do sterowania odbiornikami o poborze prądu do 1A
4 wyjścia do załączania przekaźników, tranzystorów itp.
1 wyjście PWM 2,6KHZ do 4MHz
pomiar temperatury i napięcia zasilania na płytce
zabezpieczenie przed odwrotną polaryzacją
Specyfikacja techniczna
napięcie zasilania: 8-28V
pobór mocy : 1W
zasilanie PoE: TAK, pasywne
interfejsy: ethernet 10Mbit/s
przekaźnik: 255VAC 10A
zakres temperatur pracy: -20 do +85st C
wymiary 60x68mm
waga 50g
Link do instrukcji w której jest wszystko dokładnie opisane --> http://tinycontrol.pl/pliki/lankontroler_instrukcja.pdf
Rzeczą najważniejszą jest cena urządzenia ok. 160 zł
Urządzenie wystawia plik pod swoim adresem xml. z wszystkimi danymi do odczytu...
To co udało mi się zrobić na chwilę obecną:
Sterowanie wyjściami 5 x przekaźnik, po przez dodanie sceny w Vera dla każdego z wyjścia z osobna + odpowiednim kodem LUUP
require 'luarocks.require'
http = require 'socket.http'
html = http.request 'http://192.168.1.204:100/outs.cgi?out=2'
Zapraszam do pracy nad tym tematem gdyż moje wiedza się skończyła.
Chciał bym mieć możliwość wyświetlenia temperatury z każde z 6 czujników z osobna w panelu Vera oraz w przyszłości wyświetlać informacje z wejsć dwustanowych...
Zapraszam do pociągnięcia tematu dalej
-
Witam
Posiadam starszą wersję lankontrolera 1.2 więc być może symbole czujników w odczytanym pliku st0.xml mogą się różnić ale zasada myślę że jest taka sama.
Przedstawiam fragment kodu lua z implementation file - przykład odczytu temperatury pierwszego czujnika ds18b20 - w Control Panel jest oznaczony jako inp6 w pliku st0.xml jako <ia7>. W podobny sposób możemy odczytać dane z pozostałych czujników - zmieniamy zmienną code.
---------------------------------------------------------------------------------------------------
local SWITCH_SERVICEID = "urn:upnp-org:serviceId:TemperatureSensor1"
function poll()
local status, result = luup.inet.wget("http://admin:admin@192.168.1.100/st0.xml", 5)
if status == 0 then
local code = 'ia7'
local len = string.len(code)
local x = string.find(result,code)
local y = string.find(result,'/'..code)
result = string.sub(result,x+len+1,y-2)
result = tonumber(result)
if result ~=-600 then
result = result / 10
luup.variable_set(SWITCH_SERVICEID, "CurrentTemperature", result , lul_device)
luup.variable_set(SWITCH_SERVICEID, "LastUpdate", os.time(os.date('*t')), lul_device)
end
end
luup.call_timer("poll", 1, "60", "")
end
-------------------------------------------------------------------
-
Witaj,
Możesz krok po kroku opisać jak dodać ten kod aby temperatura była wyświetlana w panelu Vera?
-
1. Utwórz implementaion file o dowolnej nazwie np. I_TempLan1.xml
Zawartość pliku
<?xml version="1.0"?>
<implementation>
<functions>
local TEMP_SERVICEID = "urn:upnp-org:serviceId:TemperatureSensor1"
function poll()
local code = luup.variable_get(TEMP_SERVICEID, "Code", lul_device)
if code ~= '' then
local len = string.len(code)
local status, result = luup.inet.wget("http://admin:admin@192.168.1.100/st0.xml", 5)
if status == 0 then
local x = string.find(result,code)
local y = string.find(result,'/'..code)
result = string.sub(result,x+len+1,y-2)
result = tonumber(result)
if result ~=-600 then
result = result / 10
luup.variable_set(TEMP_SERVICEID, "CurrentTemperature", result , lul_device)
luup.variable_set(TEMP_SERVICEID, "LastUpdate", os.time(os.date('*t')), lul_device)
end
end
end
luup.call_timer("poll", 1, "60", "")
end
function startup()
local code = luup.variable_get(TEMP_SERVICEID, "Code", lul_device)
if (code == nil) then
luup.variable_set(TEMP_SERVICEID, "Code", "ia7", lul_device)
end
local CurrentTemp = luup.variable_get(TEMP_SERVICEID, "CurrentTemperature", lul_device)
if (CurrentTemp == nil) then
luup.variable_set(TEMP_SERVICEID, "CurrentTemperature","33" , lul_device)
end
poll()
end
</functions>
<startup>startup</startup>
</implementation>
----------------------------------
Oczywiście wpisz swój adres ip lankontrolera
2. Prześlij utworzony plik do Vera. Przejdź do: Aplikacje - Rozwój aplikacji - Pliki Luup - Wybierz plik wskaż utworzony plik i wciśnij Start
3. Stwórz nowe urządzenie: Aplikacje - Rozwój aplikacji - Utwórz urządzenie
w polu 'Nazwa urządzenia UPnP' wpisz D_TemperatureSensor1.xml
w polu 'Nazwa implementacji UPnP' wpisz I_TempLan1.xml
i naciśnij Utwórz urządzenie
4. Zostanie utworzone nowe urządzenie - w zakładce Zaawansowane tego urządzenia możesz zmienić zmienną Code dla dowolnego czujnika temperatury - domyślnie jest ia7
Tworzenie urządzenia może chwilę potrwać. Temperatura będzie odczytywana co 60s - oczywiście możesz to zmienić.
W podobny sposób możesz tworzyć urządzenia innego typu np. czujnik wilgotności, pomiar energii lub motion sensor dla wejść cyfrowych.
Więcej możesz znaleźć na http://wiki.micasaverde.com/index.php/Plugin_Creation_Tutorial (http://wiki.micasaverde.com/index.php/Plugin_Creation_Tutorial)
-
Coś na zepsułem, jak usunąć plik z kodem luup który dodałem???
-
Nie musisz usuwać pliku luup. Możesz go poprawiać i wczytywać dowolną ilość razy. Interfejs Very (ja mam wersję UI5) nie pozwala na usuwanie plików luup. Jeśli jednak chciałbyś usunąć zbędne/błędne pliki luup możesz to zrobić ręcznie np. przy pomocy klienta SSH. Szczegółów musisz szukać np. na wiki.micasaverde.com lub forum.micasaverde.com
-
Nadpisałem sobie niechcący plik ---> D_TemperatureSensor1.xml
Możesz mi skopiować jego zawartość żebym mógł go nadpisać ???
Jak próbowałem nadpisać plik to został stworzony kolejny o tej samej nazwie???
Jak należy nadpisać istniejący plik???
-
Zawartość pliku D_TemperatureSensor1.xml
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-micasaverde-com:device:TemperatureSensor:1</deviceType>
<staticJson>D_TemperatureSensor1.json</staticJson>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:TemperatureSensor:1</serviceType>
<serviceId>urn:upnp-org:serviceId:TemperatureSensor1</serviceId>
<SCPDURL>S_TemperatureSensor1.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-micasaverde-com:service:HaDevice:1</serviceType>
<serviceId>urn:micasaverde-com:serviceId:HaDevice1</serviceId>
<SCPDURL>S_HaDevice1.xml</SCPDURL>
</service>
</serviceList>
</device>
</root>
Wiele razy modyfikowałem pliki luup i zawsze były nadpisywane. Nie wiem jaka może byc przyczyna?
-
Dziękuję za przesłanie kodu,
Jak sprawdzić gdzie mam błąd wyskakuje mi taki komunikat "Błąd w lua dla scen i zdarzeń" ????
-
Taki błąd pojawi się jeśli w utworzonej scenie masz błąd w kodzie luup. Dobrze jest sprawdzić działanie kodu w Aplikacje - Rozwój aplikacji - Testuj kod Luup (Lua). Sprawdź ostatnio utworzone/modyfikowane kody luup(lua) w scenach.
-
Pozwolę sobie skorzystać z Twojej bardzo szerokiej wiedzy związanej z implementacją urządzeń takich jak Lankontroler.
Na wejścia dwu stanowe mam podłączone następujące urządzenia:
1. INP1 --->kontaktrony z bramy przesuwnej lewej (1 - zamknięta, 0 - otwarta)
OUT1 --->sterowanie bramom(ustawione w lan kontrolerze pobudzenie aktywuje wyjście na 3 sec.)
2. INP2 --->kontaktrony z bramy przesuwnej prawej (1 - zamknięta, 0 - otwarta)
OUT2 --->sterowanie bramom(ustawione w lan kontrolerze pobudzenie aktywuje wyjście na 3 sec.)
3. INP3 --->kontaktrony z bramy garażowej segmentowej (1 - zamknięta, 0 - otwarta)
OUT3 --->sterowanie bramom(ustawione w lan kontrolerze pobudzenie aktywuje wyjście na 3 sec.)
4. INP4 --->Stan czuwania alarmu (1 - czuwanie, 0 - wyłączony)
OUT4 --->sterowanie alarmem(ustawione w lan kontrolerze pobudzenie aktywuje wyjście na 3 sec.)
Czy masz jakieś propozycje aby to z wizualizować w WERA?
Jest możliwość stworzenia przycisków zespolonych gdzie w zależności od stanu wejścia wyświetlało by się czy można bramę zamknąć albo otworzyć, to samo tyczy się alarmu?
-
Istnieje możliwość tworzenia własnych modułów z dowolnymi przyciskami, kontrolkami itp. Ponieważ swój system kontroluję miedzy innymi przy pomocy aplikacji Imperihome ,a aplikacja ta nie "widzi" niestandardowych urządzeń tworzę własne moduły oparte o moduły standardowe. Do kontrolowania otwarcia drzwi garażowych oraz bram wjazdowych proponuję utworzyć urządzenie DoorSensor (D_DoorSensor1.xml) lub MotionSensor (D_MotionSensor1.xml). Otwieranie/ zamykanie można zrealizować przy pomocy sceny. Dołaczam przykładwą zawartość pliku implementacji, który odczytuje stan wejścia dwustanowego z lankontolera.
<?xml version="1.0"?>
<implementation>
<functions>
local SECURITY_SID = "urn:micasaverde-com:serviceId:SecuritySensor1"
function reset_trip()
luup.variable_set(SECURITY_SID, "Tripped", "0", lul_device)
end
function poll()
local code = luup.variable_get(SECURITY_SID, "Code", lul_device)
if code ~= '' then
local len = string.len(code)
local status, result = luup.inet.wget("http://admin:admin@192.168.1.100/st0.xml", 5)
if status == 0 then
local x = string.find(result,code)
local y = string.find(result,'/'..code)
result = string.sub(result,x+len+1,y-2)
if result=="up" then
message="0"
else
message="1"
end
local stan = luup.variable_get(SECURITY_SID, "Tripped", lul_device)
if (stan == nil) then
stan = "0"
luup.variable_set(SECURITY_SID, "Tripped", stan, lul_device)
end
if stan~=message then
if message == "1" then
luup.variable_set(SECURITY_SID, "Tripped", "1", lul_device)
local time = os.time(os.date('*t'))
luup.variable_set(SECURITY_SID, "LastTrip", time, parentDevice)
else
local armed = luup.variable_get (SECURITY_SID, "Armed", lul_device)
if (armed == nil) then
armed= "0"
luup.variable_set(SECURITY_SID, "Armed", "0", lul_device)
end
if (armed == "0") then
luup.variable_set(SECURITY_SID, "Tripped", "0", lul_device)
end
end
end
end
end
luup.call_timer("poll", 1, "2", "")
end
function startup(parentDevice)
local code = luup.variable_get(SECURITY_SID, "Code", lul_device)
if (code == nil) then
luup.variable_set(SECURITY_SID, "Code", "di1", lul_device)
end
poll()
end
</functions>
<startup>startup</startup>
<actionList>
<action>
<serviceId>urn:micasaverde-com:serviceId:SecuritySensor1</serviceId>
<name>SetArmed</name>
<run>
luup.variable_set(SECURITY_SID, "Armed", lul_settings.newArmedValue, lul_device)
reset_trip()
return 4, 0
</run>
</action>
</actionList>
</implementation>
-
Bardzo dziękuje za przesłanie kodu, działa idealnie. W jaki sposób mogę obrócić stan (co należy zamienić w kodzie)
W przypadku jak użyłem "D_DoorSensor1.xml" Wyświetlana jest opcja "uzbrój" i "rozbrój" czemu aktywność klawiszy się nie zmienia podczas zmiany stanu bo grafika się zmienia.
-
Bardzo dziękuje za przesłanie kodu, działa idealnie. W jaki sposób mogę obrócić stan (co należy zamienić w kodzie)
W linii
if result=="up" then
zamiast "up" wstaw "dn"
W przypadku jak użyłem "D_DoorSensor1.xml" Wyświetlana jest opcja "uzbrój" i "rozbrój" czemu aktywność klawiszy się nie zmienia podczas zmiany stanu bo grafika się zmienia.
Zrestartuj centralkę - kliknij przycisk Przeładuj w prawym górnym rogu interfejsu.
-
Nie do końca się zrozumieliśmy, chodzi o to że jak zmienia się stan wejścia na lan kontrolerze to w "D_DoorSensor1.xml" wizualizacji zmienia się grafika (drzwi zamknięte lub otwarte) ale stan przycisków "uzbrój" i "rozbrój" sam się nie zmienia??? (tylko po ich przyciśnięciu stan ulega zmianie)
Czy można w "D_DoorSensor1.xml" przypisać każdy z przycisków do np. "uzbrój" do aktywacji danej sceny i "rozbrój" do innej sceny?
-
Stan przycisków "uzbrój" i "rozbrój" sam nie powinien się zmieniać. Przyciski służą właśnie do uzbrojenia i rozbrojenia czujnika. Czujniki obsługują dwa rodzaje zdarzeń: "gdy czujnik zostanie naruszony" lub "gdy uzbrojony czujnik zostanie naruszony"
Czy można w "D_DoorSensor1.xml" przypisać każdy z przycisków do np. "uzbrój" do aktywacji danej sceny i "rozbrój" do innej sceny?
Tak, można modyfikując plik implementacji. Jednak Door Sensor to jest czujnik i lepiej nie tworzyć takich połączeń.
Czujnik otwarcia bramy i przełącznik otwierający bramę to są w zasadzie dwa urządzenia. Istnieje plugin, Garage Door https://apps.mios.com/plugin.php?id=2998 (https://apps.mios.com/plugin.php?id=2998) do sterowania bramą łączący te urządzenia. Wymaga wskazania id czujnika do wykrywania otwarcia/zamknięcia bramy oraz id urządzenia przełączającego. Jako przełącznik bramy możesz wykorzystać plugin Virtual Switch https://apps.mios.com/plugin.php?id=1408 (https://apps.mios.com/plugin.php?id=1408). Powinno zadziałać.
-
Witaj,
Czy mogę prosić o podanie kodu impl. tak aby widział stan wejść dwustanowych dla aplikacji "D_GarageDoorLock.xml"
Jak skonfigurować "D_GarageDoorLock.xml" przyciski sterowały bramą?
Pragnę uzyskać następującą funkcjonalność:
Wyjście OUT3 steruję bramą każdy impuls 3 sec. powoduje ruch bramy.
Wejście INP3D kontaktron od bramy (1 - Brama zamknięta, 2 -Brama otwarta)
Tak skonfigurować "D_GarageDoorLock.xml" abym widział czy brama jest otwarta czy zamknięta oraz miał możliwość jej otwarcia lub zamknięcia.
"
-
Nie musisz modyfikować pliku implementacji dla GarageDoor.
Zainstaluj plugin VirtualSwitch. Stwórz dwie sceny - pierwszą wyzwalaną przyciskiem ON VirtualSwitch'a. W zakładce Luup wpisz kod lua:
luup.inet.wget("http://admin:admin@192.168.1.100/outs.cgi?out3=1", 5)
Drugą scenę wyzwalaną przyciskiem OFF - tu wstaw kod lua
luup.inet.wget("http://admin:admin@192.168.1.100/outs.cgi?out3=0", 5)
Włączenie-wyłączenie VirtualSwitch'a powinno dać impuls sterujący bramą. Być może będziesz musiał zamienić kody - nie wiem jakim impulsem sterujesz bramą.
W GarageDoor są zmienne:
DoorSensorDevNum - wstaw numer id urządzenia DoorSensor które sprawdza stan wejścia INP3D.
DoorSwitchDevNumber - wstaw numer id VirtualSwitch'a sterującego wyjściem OUT3
DoorSwitchPulseTime - wstaw czas trwania impulsu sterującego
GarageDoor wyświetli stan bramy,a włączenie przycisku spowoduje wysłanie impulsu sterującego bramą.
W lankontrolerze musisz dla wyjścia OUT3 ustawić Reset Time = 0.
-
Zauważyłem iż dodałem więcej czujników tzn. :
- odczyt 6 temperatur
- odczyt 4 wejść dwustanowych.
Pojawił się problem ze sterowaniem urządzeń po z-wave, włącznik oświetlenia reaguje z opóźnieniem i wyświetlany jest komunikat: Transmisja się powiodła Kod 2???
-
Czy da się utworzyć urządzenie w vera które będzie wyświetlać zużycie energii elektrycznej?
Oczywiście będę dane odczytywał z tabeli w xml.
Przeglądałem gotowe czujniki w vera ale nie znalazłem.
-
Może ktoś popełni plugin do urządzeń BleBox z funkcjami jak w aplikacji mobilnej?
Ktoś już integrował BleBox z Verą w większym zakresie niż pojedyncze komendy?
-
Udało się zaprojektować stabilnie pracujące urządzenie o następujących parametrach:
- zasilanie 6-36V
- komunikacja bezprzewodowa wi-fi
- odczyt 4xDS18B20
- 4xwejście licznikowe
Oparte na chipie esp 8266
Dane są wyświetlane w na stronie urządzenia + możliwość wpisywania mnożników.
Zastanawiam się jak wprowadzić dane z odczytów do Vera, np:
- licznik wody
- licznik gazu
- licznik energii elektrycznej
Jakiś czas temu kolega Label pomógł mi odczytać dane z Lan-kontrolera.
Czy może ktoś pomóc???
-
Witam,
Już minęło sporo czasu i nadal nie udało mi się dołożyć do very odczytu zużycia energii elektrycznej oraz gazu i wody.
Czy może ktoś już dokonał czegoś podobnego.
Z góry dziękuje :)
-
Znowu odświeżę wątek.
Mam zainstalowane panele fotwoltaiczne i falownik Fronius. Dodatkowo dla monitorowania przepływów energii zainstalowałem Lankontroler zmodyfikowany pod PV monitor http://pvmonitor.com.pl
Bez problemów czytam i wyświetlam w Vera temperatury z LK (dzięki @label). Jaki schemat (xml, json) mogę użyć by wyświetlać energię produkowaną/zużywaną prawidłowo w Vera?
EDIT: Dzięki LK czytam zużycie gazu, założony fabryczny moduł Apatora (kontaktron generujący impulsy czytane przez LK).