Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program do INTEGRACJI centrali alarmowej INTEGRA z procesorem AVR

Duch__ 09 Maj 2016 21:31 12024 28
  • Program do INTEGRACJI centrali alarmowej INTEGRA z procesorem AVR

    Witam.

    Nie jest to konstrukcja DIY jakie znamy na co dzień, ale uważam że warto się nią podzielić, gdyż może przynieść wiele ciekawych funkcjonalności w domu.

    Jest to program napisany w BASCOM do obsługi centrali alarmowej INTEGRA.
    Osobiście testowałem go na Integrze 128 z firmware 1.14 i module INT-RS z firmware 1.13. Powinien współpracować z centralami 24 do 128.

    Zasada działania:
    Program wysyła ramkę 7F do centrali alarmowej i oczekuje odpowiedź z bitami informującymi co się zmieniło w systemie. Następnie w zależności od bitu następuje przeskok do odpowiedniego podprogramu w którym liczone jest CRC komendy do wysłania i oczekiwanie na odpowiedź od centrali.

    Program obsługuje następujące ramki / komendy:
    00 - stan wejść
    01 - sabotaż wejść
    02 - alarm z wejść
    03 - alarm sabotażowy z wejść
    04 - pamięć alarmu wejść
    05 - pamięć alarmu sabotażowego wejść
    06 - Blokady wejść
    07 - Wejście bez naruszenia
    08 - Wejścia z długim naruszeniem
    09,0A,0B,0C - Uzbrojenia
    OD - strefy z wprowadzonym pierwszym kodem
    0E - strefy z czasem na wejście
    0F - strefy z czasem na wyjście > 10s
    10 - strefy z czasem na wyjście < 10s
    11 - strefy zablokowane
    12 - strefy z obchodem wartownika
    13 - strefy w alarmie
    14 - strefy w pożarze
    15 - pamięć alarmu stref
    16 - pamięć pożaru stref
    17 - stan wyjść
    18 - drzwi otwarte
    19 - drzwi długo otwarte
    1A - Czas RTC
    1B - Usterki systemowe 1
    23 - Pamięć usterk systemowych 4
    7F - Zmiany systemie

    Dla wszystkich powyżej wymienionych komend wszędzie jest liczone CRC wysłane i odebrane z wyjątkiem komendy 7F (tylko wysłane CRC - odebrane CRC nie jest liczone gdyż są ciągłe zmiany ilości liczby odebranych bitów).

    W programie jest dużo zakomentowanych funkcji, ale one działają - poprostu w Atmedze16 skończyła mi się pamięć FLASH, ale obsługę pisałem dalej.

    Program wykorzystuje sprzętowy UART do komunikacji z centralą INTEGRA, oraz TX programowy do debugowania.

    Z racji bezpieczeństwa w programie nie ma opcji wysyłania rozkazów uzbrojenia i rozbrojenia systemu/stref- każdy kto chce może je dopisać na własną rękę.

    Mam nadzieję że dzięki temu programowi wielu osobom uda się zrealizować swoje namiastki inteligentnego domu w oparciu o procesor AVR.

    Zapraszam do testowania i komentowania. Przy okazji mile widziane propozycje rozwiązań w inteligentnym domu.

    Pod tym linkiem wersja V1 programu z uboższymi możliwościami, ale też działa.

    Oba programy napisane wykorzystując ten Opis protokołu Integracji.

    Program nie do użytku komercyjnego!!! W przypadku udostępniania dalej proszę o link do tego postu.

    Pozdrawiam, Duch__


    Fajne!
  • #2 10 Maj 2016 01:16
    george2002

    Poziom 19  

    Witam,
    kolejny udany projekt ;) z ciekawości kolega dostał się żeby odczytywać i przesyłać dalej np przez modem gprs czy tylko odczyty same bez przesyłania dalej :) ?

    Pozdrawiam
    George2002

  • #3 10 Maj 2016 06:06
    Duch__
    Poziom 31  

    Dostał się w znaczeniu skomunikował z centralą?

    Chciałem po prostu nauczyć się odpytywać centralę o informacje które mnie interesują. W przyszłości może je wykorzystam do inteligentnej instalacji w swoim domu. Mam już kilka pomysłów na wykorzystanie tych możliwości, ale nie chce ich na razie zdradzać :D

  • #4 10 Maj 2016 10:38
    george2002

    Poziom 19  

    Duch__ napisał:
    Dostał się w znaczeniu skomunikował z centralą?

    Chciałem po prostu nauczyć się odpytywać centralę o informacje które mnie interesują. W przyszłości może je wykorzystam do inteligentnej instalacji w swoim domu. Mam już kilka pomysłów na wykorzystanie tych możliwości, ale nie chce ich na razie zdradzać :D


    Tak tak, Literówka z tym dostał się :) chodziło Mi o skomunikował :) z innych projektów widziałem że w temacie jest zaawansowanie z kolegi strony - zakładam że monter central ;) ?

  • #6 10 Maj 2016 12:56
    george2002

    Poziom 19  

    Duch__ napisał:
    Pracuję w tej branży.


    Tak podejrzewałem :) swoją drogą integra 128 to już "leciwe" centrale a dalej idą jak świeże bułeczki ;)

  • #7 10 Maj 2016 17:30
    pch
    Poziom 14  

    Przy okazji tak się zastanawiam czy moduł int-rs jest niezbędny? Manipulatory mają przecież złącze rs do komunikacji z aplikacją GuardX. Czy czasem nie wystarczy tam się podłączyć?

    PC

  • #8 10 Maj 2016 18:06
    xury
    Poziom 38  

    Brawo kolego Duch__. Sam trochę pisałem obsługę Integry w php tyle, że wykorzystując ETHM-1.
    Miałem zamiar kiedyś to zrobić także w Bascom'ie, ale teraz już mnie uprzedziłeś i dzięki ci wielkie za udostępnienie kodu. Jeszcze nie wiem do czego, ale na pewno go wykorzystam kiedyś. Masz jakieś może pomysły do co do integracji ? Mnie na razie przychodzi do głowy tylko jeden, a mianowicie wykorzystania DS18B20 zamiast drogich i mało elastycznych ATD-100.
    Szkoda, że protokół integracji nie bardzo daje możliwość sterowania wyjściami Integry, ale da się to w miarę prosto obejść ustawiając przez protokół wejścia wirtualne. Ciekawi mnie do czego jeszcze można w domu to wykorzystać? Ja planuję dorobić sobie obsługę wysyłania emalii integrując z routerem z OpenWrt/Lede

  • #9 10 Maj 2016 18:48
    Duch__
    Poziom 31  

    xury napisał:
    Brawo kolego Duch__. Sam trochę pisałem obsługę Integry w php tyle, że wykorzystując ETHM-1.


    Masz może pomysł na odczytywanie eventów komendą 8C? Bo mi jak narazie zwraca same 0.

    xury napisał:
    Masz jakieś może pomysły do co do integracji ? Mnie na razie przychodzi do głowy tylko jeden, a mianowicie wykorzystania DS18B20 zamiast drogich i mało elastycznych ATD-100.


    Rozwiń swoją myśl? Na podstawie temperatury chcesz sterować wyjściem czy może sygnalizować jakieś przekroczenie temperatury?

    xury napisał:
    Szkoda, że protokół integracji nie bardzo daje możliwość sterowania wyjściami Integry, ale da się to w miarę prosto obejść ustawiając przez protokół wejścia wirtualne. Ciekawi mnie do czego jeszcze można w domu to wykorzystać?


    Daje możliwość sterowania wyjściami. Chyba mono i bistabilnymi ale muszę to sprawdzić.

    Wyobraź sobie 128 kanałowy nadajnik GPRS wysyłający zdarzenia naruszenia każdej linii lub też np. jakieś akcje w systemie (np. usterki). Odczytując stan wejść Integry możesz sterować oświetleniem w danym pomieszczeniu.
    Po uzbrojeniu gasisz światło w całym domu i wyłączasz obwody zostawiając tylko te strategiczne np. piec, lodówka.

  • #10 11 Maj 2016 07:41
    Duch__
    Poziom 31  

    Miło mi poinformować że została opracowana możliwość odczytu pamięci zdarzeń, ale w związku z tym że nie działa ona jeszcze do końca stabilnie trzeba będzie na nią chwilę poczekać. Szczegóły wkrótce.

  • #11 11 Maj 2016 21:23
    Duch__
    Poziom 31  

    Dorzucam screen by pobudzić apetyt odczytu pamięci zdarzeń :D Narazie tylko 10 ostatnich logów, ale można nieograniczoną ilość. Na screenie z terminala od lewej:

    Komórka pamięci, Dzień i miesiąc, Godzina, Opis eventu , numer wejścia / kod zdarzenia , Monitorowanie do Stacji 1 i Stacji 2, Klasa zdarzenia

    Program do INTEGRACJI centrali alarmowej INTEGRA z procesorem AVR

  • #12 11 Maj 2016 21:40
    george2002

    Poziom 19  

    Duch__ napisał:
    Dorzucam screen by pobudzić apetyt odczytu pamięci zdarzeń :D Narazie tylko 10 ostatnich logów, ale można nieograniczoną ilość. Na screenie z terminala od lewej:

    Komórka pamięci, Dzień i miesiąc, Godzina, Opis eventu , numer wejścia / kod zdarzenia , Monitorowanie do Stacji 1 i Stacji 2, Klasa zdarzenia

    Program do INTEGRACJI centrali alarmowej INTEGRA z procesorem AVR


    rozrasta się widzę ;)

  • #13 11 Maj 2016 21:43
    Duch__
    Poziom 31  

    Od razu przesiadłem się na Atmegę644 żeby nie zapchać pamięci FLASH. Jak dojdę do końca to zacznę odchudzać kod i bardziej optymalizować :D Obsługa aktualizacji RTC też już działa, tylko na razie jest wyłączona, bo inaczej cały czas sobie programowałem czas na płycie. W przyszłości wykorzystam i podłączę np. DCF77 i tak ustawię by raz na dobę się synchronizował. Hmmm..... a może GPS :D :?:

  • #14 11 Maj 2016 21:46
    george2002

    Poziom 19  

    Duch__ napisał:
    Od razu przesiadłem się na Atmegę644 żeby nie zapchać pamięci FLASH. Jak dojdę do końca to zacznę odchudzać kod i bardziej optymalizować :D


    Hehe dobre podejście :D może na Atmega128 od razu :D ? swoją droga to tyle ich mam z wylutu że ... na Kilogramy :D

  • #15 12 Maj 2016 08:29
    dariusz.bembenek
    Specjalista - Alarmy Stacjonarne

    Duch__ napisał:
    Daje możliwość sterowania wyjściami. Chyba mono i bistabilnymi ale muszę to sprawdzić.

    Tak. Do tego jeszcze można sterować wyjściami "roleta w górę" i "roleta w dół". Analogicznie jak w funkcji "Sterowanie" w manipulatorze.

    Protokół umożliwia załączenie / wyłączenie / przełączenie dowolnego wyjścia. Można też oczywiście odpytać o sam stan wyjść.

    pch napisał:
    moduł int-rs jest niezbędny? Manipulatory mają przecież złącze rs do komunikacji z aplikacją GuardX. Czy czasem nie wystarczy tam się podłączyć

    Protokół dla złącza pin5 w manipulatorze to wersja uproszczona, znacznie skromniejsza niż dla INT-RS. W załączniku uproszczony protokół (chyba najbardziej aktualny) dla RS-232 wbudowanego w manipulator. Oczywiście krążą tam też ramki przeznaczone dla GuardX, ale nie są one udokumentowane.

    Jeżeli więc chce się mieć pełne zarządzanie systemem (sterowanie) to tylko protokół dla INT-RS (ETHM to ten sam protokół) ma sens.

  • #16 16 Maj 2016 08:23
    Duch__
    Poziom 31  

    dariusz.bembenek napisał:

    Protokół dla złącza pin5 w manipulatorze to wersja uproszczona [...]Oczywiście krążą tam też ramki przeznaczone dla GuardX


    Najgorsze jest to że nie można zapytac bezpośrednio o stan wejść, wyjść, stref tylko trzeba czekać aż centrala sama wypluje te dane w niewiadomymi czasie.

  • #17 16 Maj 2016 08:28
    dariusz.bembenek
    Specjalista - Alarmy Stacjonarne

    Dokładnie. Ale też podobno jest tak (nie testowałem), że po zmianie stanu np. wyjścia - od razu będzie wysłana ramka ze stanem wyjść.
    To nie zmienia jednak faktu, że protokół "pytanie-odpowiedź" jest przyjemniejszy w kodowaniu.

  • #18 16 Maj 2016 08:32
    Duch__
    Poziom 31  

    Zastanawiam się czy po wysłaniu komendy uzbrojenia, nie pytać odrazu o eventy uzbrojenia. Wtedy można by to było sztucznie przyśpieszyć.

  • #19 19 Maj 2016 01:56
    Duch__
    Poziom 31  

    Wrzucam kolejną już odsłonę kodu po mocnym odchudzeniu i wywaleniu niektórych opcji (dla mnie zbędnych).

    Tym razem procesor odczytuje:

    -stan wszystkich 128 wejść - ich naruszenia, alarmy linii, sabotaże linii, blokowania
    -stan wszystkich 128 wyjść - ich aktualne włączenie lub wyłączenie
    -stan wszystkich 32 stref - ich aktualne uzbrojenia, rozbrojenia, alarmy
    -stan ostatnich dwóch zdarzeń pobranych z pamięci zdarzeń centrali

    Dodatkowo jako przykład daję programowanie zegara RTC centrali alarmowej (wymagany kod PIN i własna obsługa np. DCF-a czy NTP)

    Wszystkie wyżej wymienione odczytane funkcje są zapamiętywane przez procesor ATMEGA i można poddać je dalszej obróbce / analizie.

    Na screenie przykład prezentacja wszystkich informacji w terminalu:
    Program do INTEGRACJI centrali alarmowej INTEGRA z procesorem AVR

    Program dostosowany do procesora ATMEGA16 8MHz- wykorzystanie zasobów:

    -bufor danych wejściowych RS232 - 70 bajtów
    -użycie pamięci FLASH -15620 bajtów (95%)
    -użycie pamięci RAM -1024 bajty (100%)

    Dalsze prace nad oprogramowaniem to już tylko i wyłącznie większy procesor z co najmniej 2kb pamięci RAM.

    To jest moja ostateczna wersja tego softu. Dalsze prace będę wykonywał już bez publikacji na forum, gdyż widzę że jest dużo pobrań, a mała ilość chętnych do wypowiadania się w temacie.

    Załączniki:
  • #20 29 Maj 2016 00:46
    max666
    Poziom 12  

    Duch__

    Na marginesie sprawdzasz stan stref a nie wejść (komenda 00). Oznacza to że w Integrze przypisałeś jedno wejście do jednej strefy. A taka zagadka, jak sprawdzić stan wejścia kiedy do strefy masz przypisanych więcej niż jedno wejście?

    Brawo za użycie eventów (0x7F). Kolejna zagadka. Jeżeli dobrze pamiętam to po odczytaniu 7F następuje wykasowanie wskaźników. Co robisz w przypadku błędnej transmisji stanu eventów (np nie zgodne CRC)?

    Poniżej fragment dokumentacji do podparcia:
    0x00 zones violation 0x00 + 16/32 bytes (*)
    (e.g. 04 20 00 00 00 00 00 00 00 00 00 00 00 00 00 80 - zones 3, 14 and 128)
    0x01 zones tamper 0x01 + 16/32 bytes (*)
    0x02 zones alarm 0x02 + 16/32 bytes (*)
    0x03 zones tamper alarm 0x03 + 16/32 bytes (*)
    0x04 zones alarm memory 0x04 + 16/32 bytes (*)

    Używasz INT-RS v2 czy INT-RS v1?

    Pozdrawiam
    Max

  • #21 29 Maj 2016 14:32
    xury
    Poziom 38  

    Zone w interpretacji opisu protokołu oznacza wejście. Partition oznacza strefę. O partycji w opisie nie widziałem nic. Czyli wszystko jest OK.

  • #22 30 Maj 2016 14:00
    max666
    Poziom 12  

    Zgadza się, pomyłka po mojej stronie. A co do chochlika w związku z kasowaniem 0x7F po odczycie?

    Pozdrawiam
    Max

  • #24 18 Cze 2016 17:12
    max666
    Poziom 12  

    Jak odczytujesz statusy 0x7F następuje zwrot z Integry listy funkcji których parametry się zmieniły. Następuje również automatyczne wyzerowanie flag i w przypadku błędnej transmisji nie można już skorzystać z tej funkcji. Chyba ze się mylę.

    Inna sprawa jest zwrot informacji na zapytani 0x0A, otrzymuje nie oczekiwany znak nowej lini po pierwszych 3 bajtach a następienie dostaje pozostałe 8 bajtów ramki. Odczyt 0x09 działa prawidłowo. Miałeś jakieś problemy z 0x0A?

    Dzięki
    Max

  • #25 18 Cze 2016 22:58
    Duch__
    Poziom 31  

    Jak odbieram 7F to otrzymuje informacje o bitach które się zmieniły w centrali. Dopóki ich nie odczytam przez procesor to te bity będą dalej aktywne. Żeby wyeliminować błędną transmisję stosuje się liczenie sum kontrolnych.

    Nie miałem problemów z czytaniem 0A (obsługi stref). Problem ten występuje w moim programie?

  • #26 18 Cze 2016 23:03
    max666
    Poziom 12  

    Dzieki za wyjaśnienia z 7F. W miedzy czasie prowadziłem weryfikację i po odczytaniu funkcji dopiero zeruje sie bit.

    Problem nie wystepuje w twoim programie. Ja sie klopotam ze swoim programem. Mam raspberrego ktory odczytuje integre i podejmuje pewne dzialania, gdyby nie to ze sa drobne problemy, i wyglada na to ze jeszcze kilka innych kwiatkow mam.

    Przy okazji sprawdzania 7F, sprawdzasz rowniez otrzymane CRC?

    Dzieki
    Max

  • #27 18 Cze 2016 23:06
    Duch__
    Poziom 31  

    Zacytuje sam siebie z pierwszego postu.

    Duch__ napisał:
    ...wszędzie jest liczone CRC wysłane i odebrane z wyjątkiem komendy 7F (tylko wysłane CRC - odebrane CRC nie jest liczone gdyż są ciągłe zmiany ilości liczby odebranych bitów).

  • #28 20 Lut 2018 08:59
    bruner71
    Poziom 9  

    Fajny temat tylko szkoda że nie został rozwinięty w kierunku Delphi. Pozdrawiam!

  • #29 12 Lip 2018 07:59
    bruner71
    Poziom 9  

    Duch__ napisał:
    Dorzucam screen by pobudzić apetyt odczytu pamięci zdarzeń :D Narazie tylko 10 ostatnich logów, ale można nieograniczoną ilość. Na screenie z terminala od lewej:

    Komórka pamięci, Dzień i miesiąc, Godzina, Opis eventu , numer wejścia / kod zdarzenia , Monitorowanie do Stacji 1 i Stacji 2, Klasa zdarzenia

    Program do INTEGRACJI centrali alarmowej INTEGRA z procesorem AVR


    Mam pytanie do Kolegi Duch__ , Czy mógłby kolega opisać strukturę odczytu starszych zdarzeń? Potrafię odczytać ostatnie zdarzenie z komendy 8C i z bajtu 12,13,14 odczytuję poprzedni adres zdarzenia podstawiam za 4,5,6 przeliczam crc i z tymi danymi odczytuję komendę. Czy to zdarzenie jest pierwsze czy przedostatnie? Do kiedy podstawiać adresy aby odczytać całą pamięć zdarzeń?
    Proszę o odpowiedź.