Discussion:
GNU Screen terminal + Python + RS232
(prestaro za odgovor)
Chupo
2016-10-12 02:58:15 UTC
Permalink
Napravio sam uredjaj s mikrokontrolerom koji komande koje primi preko
RS232 porta (UART) pomocu NRF24L01+ salje na drugu lokaciju a nakon
potvrde prijema ili izgubljenog paketa preko RS232 vraca ili string
'Ack' ili 'Err'.

Najprije sam komunikaciju debuggirao na PC-u s Hyperterminalom a sad
sam uredjaj spojio s Raspberry Pi-om tako da dalje moram koristiti
Linux pa umjesto Hyperterminala sad dalje koristim Screen:

https://www.gnu.org/software/screen/manual/screen.html

kojeg pokrecem s:

screen /dev/ttyUSB0 2400
(USB --> RS232 adapter, bitrate 2400 baud)

kako je to objasnjeno na:
https://www.gnu.org/software/screen/manual/screen.html#Window-Types

Iako to (kao i u Hyperterminalu) radi OK, ne razumijem recenice u man-u
koje kazu:

Screen has built in some functionality of 'cu' and 'telnet'.

This window type is similar to 'screen cu -l /dev/ttya'.

Zna netko na sta se odnosi 'cu' i sta to predstavlja u liniji s kojom
se poziva screen - nije switch a 'cu' nema niti na popisu komandi :-/

I jos jedna stvar - ako netko vidi u cemu je greska. Iako ova testna
Python skripta ispravno salje komande koje se na udaljenom mjestu
izvrse, program ispise samo jedan od dva 'Ack' stringa:

#!/usr/bin/env python

import time
import serial

rs232 = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 2400,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 1
)
rs232.write('t 19 45\n')
time.sleep(2) # debug
print(rs232.readline())
rs232.write('r 1\n')
time.sleep(2) # debug
print(rs232.readline())

Pretpostavljam da je neki problem s RS232 input buffer-om. Kao \n
mikrokontroler natrag salje 0x0d 0x0a (\r\n) i u Hyperterminalu i
Screen-u se sve prikazuje ispravno ali u ovom programu prvi print
ispise samo prazni red a drugi ispise Ack. Medjutim, ako zakomentiram
prvi print onda drugi ispise samo prazni red tako da skripta onda uopce
ne ispise nijedan 'Ack' string.

Sigurno je neka bezvezna greska koja mi ne pada na pamet, probao sam i
s flushInput() i s dodavanjem dodatnih print komandi, ali ne mogu
pronaci gdje je problem :-/

Komunikacija znaci radi OK, na udaljenoj lokaciji se desava sve sta se
posalje i mikrokontroler na prijemu 100% dva puta posalje string 'Ack'
a ako na kraju dodam slanje jos jedne komande i ispis povratne
informacije onda se prikaze samo drugi Ack a umjesto prvog i zadnjeg se
ispise samo novi red.
--
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo
Bruno Babic
2016-10-12 10:21:14 UTC
Permalink
Post by Chupo
Pretpostavljam da je neki problem s RS232 input buffer-om. Kao \n
mikrokontroler natrag salje 0x0d 0x0a (\r\n) i u Hyperterminalu i
Radis li nekakav "flush" nakon sto pises na port?
--
bbabic(a)globalnet.hr
2b||!2b?
Chupo
2016-10-13 00:20:00 UTC
Permalink
Post by Bruno Babic
Radis li nekakav "flush" nakon sto pises na port?
Argggh, bezvezna greska :-[ Iz razloga ljepseg formatiranja output-a na
terminalu sam u mikrokontroleru prije slanja Ack/Err ubacio jedan:

0x0d 0x0a

tako da recimo 'Ack' stize kao:

0x0d 0x0a 0x41 0x63 0x6b 0x0d 0x0a

Sad sam samo u Python skripti prije svakog:

print(rs232.readline())

ubacio po jedan:

rs232.readline()

i izlaz je sada OK.

Ovo sta pitas za flush - mislis na kod u mikrokontroleru? U
mikrokontroleru ne koristim buffer, stvar je u tome da port GCC
compiler-a za AVR mikrokontrolere (avr-gcc) ne moze automatski
generirati kod funkcija koje rade sa stream-ovima tipa stdin, stdout
ili stderr jer cak niti ti stream-ovi ne mogu biti automatski
inicijalizirani. Razlog je jer mikrokontroler nema standardni ulazni
niti izlazni hardware pa svatko moze koristiti ono sta ima ili sta
trenutni uredjaj omogucava. Zbog toga se komunikacija preko RS232 moze
realizirati ili direktno pozivanjem napisanih TX i RX funkcija (koje
opet mogu koristiti hardware-ski UART (ako ga ima) ili to mogu biti
bit-bang funkcije (ako ga nema ili treba vise RS232 interface-a nego ih
mikrokontroler ima)), a moze se i inicijalizirati neki od stream-ova pa
napraviti redirekcija tako da standarcne funkcije tipa printf() (koje
prethodno treba implementirati) podatke salju na RS232. Ovdje je dosta
dobro objasnjen princip:

http://tinyurl.com/jhkdkp9

Uglavnom, ja za sad - kad program jos debuggiram - koristim i jedan i
drugi nacin (i direktno slanje byte-ova na UART i redirekciju stdin i
stdout) ali kad taj dio bude dovrsen onda cu izbaciti koristenje
stream-ova jer to uzima oko 1100 byte-ova programske memorije + po 60
do 80 byte-ova programske i oko 20 byte-ova RAM-a po svakom printf() a
ukupno imam na raspolaganju 8 kB programske i 1 kB RAM-a :-)

Isto tako, trenutno dok jos sve isprobavam koristim i fgets() a dok
bude sve gotovo cu umjesto toga napisati rutine od najvise 500-600
byte-ova. BTW sam da bi printf() ispravno slao \n i da bi se s Enter
upisanim preko terminala mogo signalizirati \n za fgets() prilikom
slanja i primanja morao napraviti otprilike ovako:

//FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL,
_FDEV_SETUP_WRITE);
//FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getchar,
_FDEV_SETUP_READ);
FILE uart_io = FDEV_SETUP_STREAM(uart_putchar, uart_getchar,
_FDEV_SETUP_RW);

init_UART();
stdin = stdout = &uart_io; // preusmjeri stream-ove za printf
na UART

// za FDEV_SETUP_STREAM
int uart_putchar(char c, FILE *stream) {
// new line
// umjesto 0x0a salje se 0x0d 0x0a (umjesto \n salje se \r\n)
if(c=='\n')
uart_putchar('\r', stream); // rekurzivni poziv!!
// slanje
while(!(UCSRA & (1<<UDRE)))
; // cekaj da se transmit buffer
isprazni
UDR = c; // posalji podatak

return 0;
}

// za FDEV_SETUP_STREAM
int uart_getchar(FILE *stream) {

int c;

while(!(UCSRA & (1<<RXC)))
; // cekaj da stigne neki podatak
//return UDR; // vrati primljeni podatak
// umjesto 0x0d treba vratiti 0x0a (umjesto \r salje se \n)
// bez toga fgets() ne moze detektirati Enter
c = UDR; // procitaj primljeni znak
if(c != '\r')
return c;
else
return '\n';
}

Osim tih funkcija imam i direktne TX i RX funkcije tako da bufferiranja
nema nigdje. U prvom redu su BTW zakomentirani macro-i za
preusmjeranvanje samo jednog od stream-ova, tako se npr. stderr moze
preusmjeriti na driver za LCD ili na funkcije koje ce (na
mikrokontrolerima koji nemaju dovoljno pinova za upravljanje s ekranom)
paliti LED diode.
--
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo
Bruno Babic
2016-10-13 12:59:25 UTC
Permalink
Post by Chupo
Ovo sta pitas za flush - mislis na kod u mikrokontroleru? U
Mislio sam na tipicni flush kao signal OS-u da ono sto je u nekakvom
medjuspremniku proslijedi dalje jer obicno postoji neko cacheiranje kako
bi se postigla veca brzina prijenosa podataka.

Ali ocigledno to nije bio problem :)

P.S. ako nije tajna, to radis nekakvu kontrolu za pametne kuce i slicno?
--
bbabic(a)globalnet.hr
2b||!2b?
Chupo
2016-10-13 15:36:24 UTC
Permalink
Post by Bruno Babic
P.S. ako nije tajna, to radis nekakvu kontrolu za pametne kuce i slicno?
Da, nedavno su nam provalili u stan u ZG i to lomljenjem stoka uz
tresak kojega je cuo susjed kat iznad ali je mislio da nesta popravljam
pa je dosao tek za nekoliko minuta dok su lopovi vec pobjegli.

Zbog toga sad slazem alarm sa senzorima u svim prostorijama s remote
pristupm pa odma slazem i razne dodatne stvari tako da cu moci
ocitavati temperature, zalijevaci cvijece, pomicati zavjese, paliti
svjetla i slicno.

Za pocetak sam na I2C bus stavio DS1621 temperaturni senzor i DS1301
real time clock, 4x20 char LCD ekran, na SPI bus NRF24L01+ za RF
komunikaciju s ostalim node-ovima i s centralnom jedinicom, RS232 za
direktnu komunikaciju zbog debuggiranja i komunikacije sa serverom i
sad dodajem ostale stvari koje mi padnu na pamet.

Slozio sam parsiranje komandi pa tako s:

t hh mm

mogu podesiti sat, s:

d dd mm yy dan_u_tjednu

mogu podesiti vrijeme, s:

rx 0/1

paliti i gasiti relay itd. Sad slazem da ce se s:

t? n

moci ocitati temperatura na mjestu n pa cu onda moci u terminalu zadati
komande tipa:

t? soba
t? balkon
t? auto (ako je u dometu NRF cipa)

a isti sistem cu sloziti i u bakinoj kuci gdje ce se preko terminala
ili web interface-a moci upaliti ves masina, grijalica u kupani,
svjetlo na dvoristu i u prostorijama itd.

Ovo za paljenje ves masine slazem jer ce se onda moci masina aktivirati
u razdoblju jeftine struje :-)

Stavicu PIR senzore za detektiranje pokreta, laserske senzore,
mikrosklopke, senzore vibracija i slozti da se ocitanje istovremeno
salje u centralnu jedinicu gdje ce se zajedno s timestamp-om na SD
karticu logirati trenutak i opis dogadjaja i na server gdje ce se
podaci, za slucaj da netko unisti uredjaj(e) spremati na Dropbox, a
onda cu dodati jos i kamere.

Za sad sam u ATmega8 ubacio I2C, SPI, UART komunikaciju, bit-bang
komunikaciju s ekranom, slozio drivere za DS1621, DS 1301 i NRF cip,
slozio rutine za komunikaciju, debuggiranje komunikacije i istovremeni
prikaz svih podataka, plus scroll-irajuci text u zadnjem redu ekrana i
sve to je stalo u samo 4908 byte-ova s tim da je to debug build gdje su
u output-u compiler-a/linker-a ukljuceni i symbol-i za debuggiranje a
jos nisam niti sve optimizirao. Da sam koristio library-je koji se mogu
naci na internetu bi mi za sve to trebao mikrokontroler od 32 ili 64 kB
a ovako mi je od 8 kB koliko ima ATmega8 ostala jos cijela hrpa
programske memorije a ako bi mi 8 kB bilo premalo mogu lako umjesto
njega staviti ATmega328 koji ima isti pinout i 32 kB.

Koristio sam optimizirane library-je koje sam napravio ranije kad sam
radio druge uredjaje i koji su kombinacija C-a i assemblera pa mi zato
sve to stane u tako malo memorije. Zaboravio sam napisati da sam
stimanje parametara u prijenom uredjaju osim slanjem komandi preko RF
komunikacije slozio i s tipkama tako da se parametri modu stimati i
direktno pa ce se neki od node-ova (oni koji ce imati i ekran) moci
koristiti i bez da su umrezeni preko RF-a.

S obzirom da se koristim Arduino nego svoje plocice za mikrokontroler
velicine 42x40 mm mogu prilicno jeftino po stanu, kuci i dvoristu
rasporediti 15-20 node-ova pa tako istovremeno imati i alarmni sustav,
upravljanje s raznim uredajima i ocitavanje raznih parametara, sve
preko terminala i preko web interface-a. Ako jedan node stavim u auto
onda cu po zimi moci upaliti motor a u sobi na ekranu vidjeti
temperaturu u kabini pa krenuti kad u autu bude toplo :-) Tu se sad
odmah automatski samo po sebi namece i razmisljanje o tome da bi se na
daljinu trebao moci auto i upaliti. :-))
--
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo
Bruno Babic
2016-10-14 10:18:03 UTC
Permalink
Post by Chupo
Da, nedavno su nam provalili u stan u ZG i to lomljenjem stoka uz
tresak kojega je cuo susjed kat iznad ali je mislio da nesta popravljam
pa je dosao tek za nekoliko minuta dok su lopovi vec pobjegli.
Svako zlo za neko dobro - imati ces pametan stan i moci ces "gledati"
provalnike ral-time kako ti kradu TV :)
--
bbabic(a)globalnet.hr
2b||!2b?
Chupo
2016-10-14 14:34:45 UTC
Permalink
Post by Bruno Babic
Svako zlo za neko dobro - imati ces pametan stan i moci ces "gledati"
provalnike ral-time kako ti kradu TV :)
Samo trideset minuta ranije da sam dosao kuci i ne bi oni vise nikome
ukrali nista, to je gamad prema kojoj ne treba imati obzira, drugi dan
sam se sreo s zenom iz susjednog ulaza koja je cula sta se je desilo pa
mi je rekla da su njoj provalili u stan i ukrali sve vrijedne stvari i
to u 11 sati prije podne dok je otisla u ducan a njenim susjedima je
nedugo prije toga umro sin pa su im opljackali stan za vrijeme dok su
bili na sprovodu. Toj zeni su par mjeseci kasnije ukrali i auto s
parkiralista a jos kasnije nakon toga je u vecernjim satima primila
poziv gdje su se lopovi lazno predstavili kao policija i rekli joj da
je s njenje bankovne kartice neovlasteno podignuta velika svota, pitali
su ju da li joj je suprug kod kuce i kad je rekla da je su joj rekli
neka nikud ne idu i neka ih cekaju da dodju ponistiti karticu. Zeni je
na srecu poziv bio sumnjiv pa je nazvala pravu policiju tako da su onda
oni cijelu noc bili u stanu ali se nije nitko pojavio. Njenom muzu su
inace prilikom provale izmedju ostalog ukrali pistolj.

Prema takvim ljudima - koji u situaciji koja je vjerojatno najgore sta
se nekome moze desiti onda ljudima koje je zadesilo takvo zlo kradu sve
vrijedno sta se u stanu zatekne pa ih na taj nacin stavljaju u jos tezu
situaciju - nema milosti.

Radi se o organiziranim skupinama koje nadziru zgrade pa na time-lapse
snimkama prate na kojim se prozorima ne pali svjetlo, salju lazne
raznosace reklama koji kucaju na vrata, zovu na kucni telefon da bi
provjerili da li je netko kod kuce i tocno znaju gdje se u nekom
trenutku nalazi netko iz ulaza u kojem planiraju pljacku. U mojem ulazu
inace ima dosta ljudi koji su radili ili rade u policiji (neki s
cinovima) i dosta onih koji su u vojsci ili su prosli ratista, ta gamad
bez sumnje to zna ali su pratili ulaz i znali su u kojem trenutku imaju
sansu pobjeci bez da ih se uhvati.

Sad kasnije sam cuo da su u zadnje vrijeme i u susjednoj zgradi samo u
jednom ulazu opljackali 4 stana, u vijestima nema tih informacija niti
je igdje na info stranicama bilo vijesti o pljacki u nasem stanu. Gamad
koja to radi ljudima krade stvari koje se u obitelji nasljedjuju i
cuvaju generacijama pa ih preprodaju za par 100 kn.

Prvo sam do sljedeceg dana morao zabarikadirati vrata (jer je stok bio
razbijen) a drugi dan je frend cuvao stan dok sam ja isao kupiti sve
sta treba za popravak. Stao sam na benzinskoj natociti gorivo i covjek
koji radi na pumpi je rekao da su ga to jutro opljackali a kada sam u
Pevecu na blagajni placao dijelove za vrata je zena na blagajni rekla
da skoro svaki dan jedan do dva covjeka dodju po dijelove za vrata
nakon sta im provale u stan.
--
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo
Goran Mitrovic
2016-10-21 16:23:04 UTC
Permalink
Post by Chupo
Post by Bruno Babic
P.S. ako nije tajna, to radis nekakvu kontrolu za pametne kuce i slicno?
Da, nedavno su nam provalili u stan u ZG i to lomljenjem stoka uz
tresak kojega je cuo susjed kat iznad ali je mislio da nesta popravljam
pa je dosao tek za nekoliko minuta dok su lopovi vec pobjegli.
To mi nikad nije bilo jasno sto ti ukradu kad ti provale u stan? Novci su
na banci. Zlatninu nemamo (sto ce nam?). Televizor vrijedan 2kkn?
k***@k.com
2016-10-22 04:36:28 UTC
Permalink
Post by Goran Mitrovic
Post by Chupo
Post by Bruno Babic
P.S. ako nije tajna, to radis nekakvu kontrolu za pametne kuce i slicno?
Da, nedavno su nam provalili u stan u ZG i to lomljenjem stoka uz
tresak kojega je cuo susjed kat iznad ali je mislio da nesta popravljam
pa je dosao tek za nekoliko minuta dok su lopovi vec pobjegli.
To mi nikad nije bilo jasno sto ti ukradu kad ti provale u stan? Novci su
na banci. Zlatninu nemamo (sto ce nam?). Televizor vrijedan 2kkn?
Nemas zlato i novac ali imas satove, zlato i milion kuna:

http://m.24sata.hr/news/nudi-nagradu-provalili-mu-u-stan-i-olaksali-ga-za-mil-kuna-463570
Kizo
2016-10-22 14:14:12 UTC
Permalink
Post by k***@k.com
Post by Goran Mitrovic
To mi nikad nije bilo jasno sto ti ukradu kad ti provale u stan? Novci su
na banci. Zlatninu nemamo (sto ce nam?). Televizor vrijedan 2kkn?
http://m.24sata.hr/news/nudi-nagradu-provalili-mu-u-stan-i-olaksali-ga-za-mil-kuna-463570
Dobar odgovor! :-D
Luka Ćavara
2016-10-22 20:50:56 UTC
Permalink
Post by Kizo
Post by k***@k.com
Post by Goran Mitrovic
To mi nikad nije bilo jasno sto ti ukradu kad ti provale u stan? Novci su
na banci. Zlatninu nemamo (sto ce nam?). Televizor vrijedan 2kkn?
http://m.24sata.hr/news/nudi-nagradu-provalili-mu-u-stan-i-olaksali-ga-za-mil-kuna-463570
Dobar odgovor! :-D
Meni najduhovitiji komentar:

Pa ljudi se uče na velikanima koji je "zanat" najbolji... samo su
dečki morali provaliti i ilegalnim putem napraviti tu vrstu posla kada
ne mogu doći na visoki položaj da taj posao rade legalno...
Bruno Babic
2016-10-24 07:36:49 UTC
Permalink
Post by k***@k.com
http://m.24sata.hr/news/nudi-nagradu-provalili-mu-u-stan-i-olaksali-ga-za-mil-kuna-463570
A jest se isprsio... cak 20k kn za informaciju, a nekakav opceprihvaceni
finder's fee je barem 10% iliti 120k kn.

Cak i da ponudi 500k, opet je bolje imati ista nego nista, a ovako
sigurno nece imati nista :)
--
bbabic(a)globalnet.hr
2b||!2b?
Bruno Babic
2016-10-24 07:35:09 UTC
Permalink
Post by Goran Mitrovic
To mi nikad nije bilo jasno sto ti ukradu kad ti provale u stan? Novci su
na banci. Zlatninu nemamo (sto ce nam?). Televizor vrijedan 2kkn?
To ti je kao i kod provale u auto - nije toliko problem u tome sto ti
ukradu koliko je problem u steti koju usput naprave.
--
bbabic(a)globalnet.hr
2b||!2b?
Loading...