Integrace Jablotron JA-100 do Loxone
How Can We Help?
Požadavky:
– JA-121T Sběrnicové rozhraní RS-485 (dokumentace v PDF)
– Loxone RS485 extension
Integrace samotného základu je poměrně bezproblémová:
Nastavení extension v Loxone Config
– Serial Protocol: None
– End character: do not use
– Checksum: None
– Positive acknowledge: do not use
– Negative acknowledge: do not use
Ovládání alarmu – RS485 actuator(aktor) – příkazy
– ovládání sekce (příklad pro sekci 1)
– Command for ON: “1234 SET 1\r\n”
– Command for OFF: “1234 UNSET 1\r\n”
– zjištění stavu sekcí – Command for ON: “1234 STATE\r\n”
– zjištění stavu PG – Command for ON: “1234 PGSTATE\r\n”
– zjištění stavu periferií – Command for ON: “1234 PRFSTATE\r\n”
– ovládání PG (příklad pro PG 2)
– Command for ON: “1234 PGON 2\r\n”
– Command for OFF: “1234 PGOFF 2\r\n”
(příkazy samozřejmě zadávejte bez úvozovek a místo 1234 zadejte svůj bezp. kód)
Vyčítání informací – RS485 sensor
– zaalarmováno (příklad pro sekci 1) – Command recognition “STATE 1 ARMED”
– odalarmováno (příklad pro sekci 1) – Command recognition “STATE 1 READY”
PG 11 OFF
PG 11 ON
Pouze vynucené vyčítání periferií z Jablotronu pomocí PRFSTATE (není nutné tak čekat jen na automatické notifikace se zpoždením 8s) je komplikovanější, protože alarm odpovídá dvojnásobně dlouhým hexadecimálním řetězcem (32 znaků), který už Loxone a jeho \h nezvládne. Vždy vrátí 0. Řešení je trochu kostrbaté, ale plně funkční – je nutné parsovat vybrané znaky jako 1-4 bytové čísla a použít na ně formuli + binární dekodér.
Postup:
– přidejte 8 RS485 senzorů:
– JA PRFSTATE 00, Command recognition “PRFSTATE \2\1”
– JA PRFSTATE 01, Command recognition “PRFSTATE \s2\2\1”
– JA PRFSTATE 02, Command recognition “PRFSTATE \s4\2\1”
– JA PRFSTATE 03, Command recognition “PRFSTATE \s6\2\1”
– JA PRFSTATE 04, Command recognition “PRFSTATE \s8\2\1”
– JA PRFSTATE 05, Command recognition “PRFSTATE \s8\s2\2\1”
– JA PRFSTATE 06, Command recognition “PRFSTATE \s8\s4\2\1”
– JA PRFSTATE 07, Command recognition “PRFSTATE \s8\s6\2\1”
Větvit kód (kvůli dekódování HEXA z ASCII, kde ‘0’=48, ‘1’=49, … ‘9’=58 a pak ‘A’=65, ‘B’=66, … ‘F’=70)? Ternární operátor nahradím součtem součinů s 0 / 1. Na určení 0/1 by se dal použít… ha! Logaritmus! A hele, na uživatelských stránkách někdo objevil nedokumentovanou funkci INT() vracející celou složku reálného čísla! Hotovo. Výsledný vzorec vypadá strašlivě. Ale funguje 🙂
Na schématu jsou jsou řešení dvě. Na vstupu je 16b číslo tvořené dvěma ASCII HEX. Spodní dvě větve si dělají mezivýpočty – rozpad na horní a dolní byte a k tomu příznaky zda jde o 0-9 (nutno odečíst 48) a nebo A-F (nutno odečíst 55). Poslední prvek napravo pak pouze podle (vynásobením) příznaků na AI2 a AI4 odečte 48 nebo 55, horní byte vynásobí 16 a sečte.
A horní větev je to, co mě vlastně tak pobavilo. All-in-1. Peklo. Ale kdo někdy něco takového dělal, pochopí. Ten pocit, když překonáte takové překážky a navenek to vypadá elegantně (jen 1 prvek ve schématu). Co na tom, že uvnitř je něco, co nepřečte ani učitel algebry
Celý, v ještě větším detailu (vč. vysvětlení) jsem to popsal tady
Loxone zdar,
A.
