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 ona:\> 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 usea:\>help format
Usage: format <drive:> [<volume label>]
<drive:> = specifies the drive name (followed by a colon)
<volume label> = specifies the volume labela:\> help netstat
Usage: netstata:\> help sendto
Usage: sendto <host> <port> [<length>] [<count>]
<host> = destination host
<port> = destination port
<length> = number of bytes
<count> = number of messagesa:\> help tftpd
Usage: tftpd [start|stop]a:\> help cd
Usage: cd <directory>
<directory> = name of directory to change toa:\> help copy
Usage: copy <source> <dest>
<source> = source file to copy
<dest> = name of new filea:\> help del
Usage: del <file>
<file> = name of file to deleteUsage: 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 labela:\> help mkdir
Usage: mkdir <directory>
<directory> = name of directory to createa:\> 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 offseta:\> 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 addra:\> help ren
Usage: ren <oldname> <newname>
<oldname> = name of file to change
<newname> = new name of filea:\> help rmdir
Usage: rmdir <directory>
<directory> = name of directory to removea:\> help lua
Usage: lua <filename>
<filename> – file to execute execute LUA script filea:\> help luakill
Usage: luakill
kill running LUA scripta:\> help boot
Usage: goes to bootloader after reseta:\> help cls
Usage: clear screena:\> help reset
Usage: resets CPUa:\> help mem
Usage:
mem – wyswietl pamiec uzywana przez poszczegolne modulya:\> help test
Usage:
test queue – test dzialania kolejkia:\> help hexdump
Usage:
hexdump <file> – wyswietl plik w formacie szesnastkowyma:\> 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 modulowa:\> 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 Ba:\> help remf
Usage: To delete no responding Z-Waves nodesa:\> 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 Zwavea:\> 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 00000000null = 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