Grenton – co ma CLU pod maską?

Gdy pisałem poprzedni wpis odkryłem coś ciekawego. Chcąc się dowiedzieć jak komunikuje się CLU ze światem, włączyłem skaner portów i to co odkryłem zapewniło mi rozrywkę na kilka następnych godzin. Pamiętaj, że podane informacje nie są oficjalne i nieprawidłowe użycie może zepsuć CLU.

Chwilę po tym jak podłączyłem CLU pod router uruchomiłem skaner portów. Nie pokazał on zbyt wiele. Ciekawy był otwarty port 23 (telnet). Próbowałem się na niego dostać, ale bez sukcesów. Dopiero jak włączyłem OM i podłączyłem się do CLU okazało się, że na porcie 23 coś się zmieniło. Dostęp do portu telnetowego staje się możliwy, gdy OM i CLU wymienią ze sobą klucze i nawiążą połączenie. Tym razem zobaczyłem linię poleceń przypominającą starego DOSa.

Pozostało zapytać google co to jest RTCS. Jeden z wyników kierował na ten adres: http://embedded-access.com/products/rtcs-tcpip-stack/.

Wpisałem cokolwiek i otrzymałem podpowiedź.

Clu samo mi mówi co mam robić 🙂

W ten sposób mam listę dostępnych komend jakie mogę wywołać przez telnet na CLU.

Lista plików dostępna na dysku “A”.

Ale wróćmy do komend po kolei. Oto lista wszystkich komend CLU wraz z komentarzem:

a:\> help help
Usage: help [<command>]
<command> = command to get help on

a:\> help ipconfig
Usage: ipconfig [<device>] [<command>]
Commands:
init [<mac>] = Initialize ethernet device (once)
task [start <priority> <period> | stop] = Manage link status checking task
dns [add <ip> | del <ip>] = Manage dns ip list
staticip <ip> <mask> [<gateway>] = Bind with static ip
dhcp [<ip> <mask> [<gateway>]] = Bind with dhcp [use <ip> & <mask> in case dhcp fails]
autoip [<ip> <mask> [<gateway>]] = Obsolete, use staticip instead
unbind = Unbind network interface
Parameters:
<device> = Ethernet device number (default 0)
<mac> = Ethernet MAC address
<priority> = Link status task MQX priority
<period> = Link status task check period (ms)
<ip> = IP address to use
<mask> = Network mask to use
<gateway> = Network gateway to use

a:\>help format
Usage: format <drive:> [<volume label>]
<drive:> = specifies the drive name (followed by a colon)
<volume label> = specifies the volume label

a:\> help netstat
Usage: netstat

a:\> help sendto
Usage: sendto <host> <port> [<length>] [<count>]
<host> = destination host
<port> = destination port
<length> = number of bytes
<count> = number of messages

a:\> help tftpd
Usage: tftpd [start|stop]

a:\> help cd
Usage: cd <directory>
<directory> = name of directory to change to

a:\> help copy
Usage: copy <source> <dest>
<source> = source file to copy
<dest> = name of new file

a:\> help del
Usage: del <file>
<file> = name of file to delete

Usage: dir [<filespec> [<attr>]]
<filespec> = files to list
<attr> = attributes of files: adhrsv*

Usage: format <drive:> [<volume label>]
<drive:> = specifies the drive name (followed by a colon)
<volume label> = specifies the volume label

a:\> help mkdir
Usage: mkdir <directory>
<directory> = name of directory to create

a:\> help read
Usage: read <filename> <bytes> [<seek_mode>] [<offset>]
<filename> = filename to display
<bytes> = number of bytes to read
<seek_mode> = one of: begin, end or current
<offset> = seek offset

a:\> help reg
Usage:
reg addr — odczytaj rejestr z pod adresu addr
reg addr = val — zapisz wartosc val na adres addr
reg addr |= val — zapisz sume logiczna wartosci val i biezacej wartosci pod adresem addr

a:\> help ren
Usage: ren <oldname> <newname>
<oldname> = name of file to change
<newname> = new name of file

a:\> help rmdir
Usage: rmdir <directory>
<directory> = name of directory to remove

a:\> help lua
Usage: lua <filename>
<filename> – file to execute execute LUA script file

a:\> help luakill
Usage: luakill
kill running LUA script

a:\> help boot
Usage: goes to bootloader after reset

a:\> help cls
Usage: clear screen

a:\> help reset
Usage: resets CPU

a:\> help mem
Usage:
mem – wyswietl pamiec uzywana przez poszczegolne moduly

a:\> help test
Usage:
test queue – test dzialania kolejki

a:\> help hexdump
Usage:
hexdump <file> – wyswietl plik w formacie szesnastkowym

a:\> help log
Usage:
log save <file> – zapisz tablice logow do pliku
log reset – wyzeruj wskaznik bufora
log dump <file> – zapisz tablice logow do pliku i wyzeruj wskaznik
log level [error|warning|info|off] – ustaw poziom logowania
log console [error|warning|info|off] – ustaw poziom logowania na konsole
log print – wypisz zgromadzone logi
log parse <infile> [<outfile>]

a:\> help mount
Usage:
mount – zamontuj dysk m:\

a:\> help lsmod
Usage:
lsmod – wyswietl liste zarejestrowanych modulow

a:\> help testcr
Usage:

a:\> help debug
Usage: debug [filtry],
gdzie opcjonalny parametr “filtry” jest ciagiem znakow (bez spacji) mogacym zawierac znaki o nastepujacych znaczeniach:
t – uwzglednienie komunikacji TFBus,
z – uwzglednienie komunikacji Z-Wave,
m – uwzglednienie zdarzen modulow,
s – uwzglednienie systemowych informacji statusowych,

Aktualna liczba zapisanych komunikat▒w: 105. Rozmiar tablicy: 929 kB
rozmiar pojed. struktury: 56 B

a:\> help remf
Usage: To delete no responding Z-Waves nodes

a:\> help force_ask
Usage: Funkcja pytajaca o stan modulow wejsciowych. Po jej otrzymaniu moduly wysylaja swoj stan nawet jezeli nie zaszla jego zmiana. Mozliwe jest zapytanie bez parametru (broadcast) lub z adresem lokalnym urzadzenia docelowego.

a:\> help reset_zwave
reset_zwave – Resetuje pamiec flash z dodanymi modulami Zwave

a:\> help reset_tfbus
Usage: Funkcja resetujaca szyne TF-Bus i moduly sie na niej znajdujace. Mozliwe jest zapytanie bez parametru (broadcast) lub z adresem lokalnym urzadzenia docelowego.

Jak widać część komend wygląda jak standardowe komendy z systemu operacyjnego, część napisana jest przez developerów Grentona. Opisy czasem są po polsku a czasem po angielsku. Część poleceń strach włączać jak np. format czy boot. Ale niektóre aż się proszą o uruchomienie.

Spis bardzo podobnych komend znalazłem pod tym adresem: https://github.com/KunYi/MQX411/blob/master/rtcs/examples/shell/_README.txt.

Żeby wyświetlić zawartość pliku wystarczy użyć komendy “read”.

np.

a:\> read config.txt

Reading from config.txt:
00000000
021cf160
d9:60:10:eb:a7:40
00000003
00000195
00000000
00000000
0aaa9a19:00:00:10
0bebce50:01:01:0b
0bebeedd:01:01:0b
2c6b0ca8:08:00:11

Done.

Oraz ciekawy plik OM.LUA, który wygląda jak plik służący do inicjalizacji urządzenia.

a:\> read om.lua
Reading from om.lua:
— FwType 00000003
— FwVersion 00000195
— HwType 00000000
— HwVersion 00000000

null = OBJECT:new(0, 0xC0B602C8)
— NAME_CLU DOM=null

I dużo więcej kodu konfigurującego podłączone moduły, termostaty, kalendarze, harmonogramy. Zawartość pliku przeanalizuję w przyszłości. 

Następna interesująca mnie komenda to “mem”

a:\> mem
Peak RAM Usage: 1945935 Bytes (0%)
Current Lua RAM Usage: 32796
Peak Lua RAM Usage: 44764

Komenda “test” jest bardzo śmieszna

a:\> help test
Usage:
test queue – test dzialania kolejki
a:\> test queue
===
ktos
powiedzial
,
ze
ta
wiadomosc
sklada
sie
z
niezliczonej
ilosci
slow
roznej
dlugosci

Wygląda na to, że kolejka działa.

Komenda “ipconfig”

a:\> ipconfig
Eth#: 0
Link: off
Bind: staticip
MAC : d8:80:49:ee:a7:40
IP : 192.168.2.200
MASK: 255.255.255.0
GATE: 192.168.2.1
DNS1: 0.0.0.0
Link status task stopped

Wersja aplikacji:

a:\> ver
4.05.27
a:\> version
4.05.27

Serwer tftpd. Spróbowałem go włączyć:

a:\> tftpd start
TFTP Server Started.

Klient się podłączył do serwera, ale nie udało mi się ściągnąć plików:

tftp>get
(files) config.txt
getting from 192.168.2.200:config.txt to config.txt [netascii]
Error code 1: File Not Found
tftp>

Serwer działa, ale nie umiem jeszcze pobrać plików z jego pomocą.

I ostatnia komenda, która wydaje się być ciekawa “testcr”. Wygląda na to, że pozawala zdeszyfrować(?) wiadomość wysłaną do CLU. Sprawdzę to na poprzedniej wiadomości:

a:\> testcr 10636185295a6dbd45670d1e05db7d45b4d7db60c128a148c540df761691e25f3f531939e
:: Dlugosc ciagu znakow (razem z null): 73
:: Dlugosc po wyrownaniu: 80
:: Zaszyfrowano wiadomosc.
:: Deszyfrowanie zakonczone. Dlugosc odtworzonej wiadomosci: 10 :: Tresc:
“▒wrp▒▒rp

Chyba nic z tego 🙂

Ciekawostką jest to, że po wyłączeniu OM “tryb serwisowy” dalej działa, ale dostępny tylko z IP z którego nastąpiło połączenie.

Pozdrawiam,
T

Please follow and like us:

Leave a Reply

Your email address will not be published.