Vera + urządzenia zewnętrzne (Ethernetowe)

  • 23 Odpowiedzi
  • 20235 Wyświetleń

0 użytkowników i 3 Gości przegląda ten wątek.

*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Vera + urządzenia zewnętrzne (Ethernetowe)
« dnia: 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
« Ostatnia zmiana: Lipiec 29, 2015, 11:46:01 am wysłana przez Asemka »
*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #1 dnia: Lipiec 29, 2015, 08:03:06 pm »
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

-------------------------------------------------------------------
« Ostatnia zmiana: Lipiec 29, 2015, 08:49:40 pm wysłana przez label »
*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #2 dnia: Lipiec 30, 2015, 07:16:54 am »
Witaj,

Możesz krok po kroku opisać jak dodać ten kod aby temperatura była wyświetlana w panelu Vera?
*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #3 dnia: Lipiec 30, 2015, 10:25:20 am »
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


« Ostatnia zmiana: Lipiec 30, 2015, 10:31:24 am wysłana przez label »
*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #4 dnia: Lipiec 30, 2015, 12:02:44 pm »
Coś na zepsułem, jak usunąć plik z kodem luup który dodałem???
*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #5 dnia: Lipiec 30, 2015, 06:03:24 pm »
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
*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #6 dnia: Lipiec 30, 2015, 06:51:01 pm »
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???

*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #7 dnia: Lipiec 30, 2015, 07:42:18 pm »
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?
*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #8 dnia: Lipiec 30, 2015, 08:50:50 pm »
Dziękuję za przesłanie kodu,


Jak sprawdzić gdzie mam błąd wyskakuje mi taki komunikat "Błąd w lua dla scen i zdarzeń" ????
*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #9 dnia: Lipiec 30, 2015, 09:13:20 pm »
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.
*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #10 dnia: Sierpień 03, 2015, 08:19:47 pm »
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?
*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #11 dnia: Sierpień 05, 2015, 02:21:02 pm »
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>




*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #12 dnia: Sierpień 06, 2015, 07:38:58 am »
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.

*

Offline label

  • * 9
  • 12
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #13 dnia: Sierpień 06, 2015, 11:35:14 am »
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.
*

Offline Asemka

  • ** 44
  • 1
  • Nazwa i wersja ID: Vera Lite
Odp: Vera + urządzenia zewnętrzne (Ethernetowe)
« Odpowiedź #14 dnia: Sierpień 06, 2015, 03:18:55 pm »
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?