
Turkish: 
Projemizin tersine devam edelim
klimamın protokolünü mühendislik
Uzak.
En son kendi zavallı adamımızı uyguladık.
mantık analizörü, bu sefer bir şey kullanacağız
daha ileri.
Dijital çıkışı en son kaydetmeye çalıştık.
bir arduino ve seri iletişim ile
dizüstü bilgisayar.
Bu biraz yavaş olmasına rağmen.
Uygulamayı hızlandırmayı deneyebiliriz,
örneğin seri yoluyla metin göndermemek
Her yinede, çünkü bu yavaştır.
Bunu bir tampon uygulayarak yapabiliriz.
her zaman 100 örnek kaydeden bir dizi
sonra onları dışarı iter.
Ama size gerçek bir mantık analizcisi göstermek istiyorum
bu zaman.
Bu Saleae Mantığı Pro 8.
Bu profesyonel bir analog ve dijital
mantık analizörü.
hadi bunu devreye bağlayalım ve
örnekleri topla

English: 
Let’s continue with our project reverse
engineering the protocol of my air conditioner
remote.
Last time we implemented our own poor man’s
logic analyzer, this time we will use something
more advanced.
last time we tried to log the digital output
with an arduino and serial communication to
the laptop.
Though that was a little bit too slow.
We could try to speed up the implementation,
by for example not sending text via serial
in every iteration, because that is slow.
We could do this by implementing a buffer,
an array, that always saves 100 samples and
then pushes them out.
But I want to show you a real logic analyzer
this time.
This is the Saleae Logic Pro 8.
This is a professional analog and digital
logic analyzer.
let’s hook this one up to the circuit and
collect samples.

Turkish: 
Yani bu bir çok sinyal toplayabilir
paralel, ama sadece birine ihtiyacımız var.
bu durumda siyah topraklama kablosunu bağlarız
zemin pimine.
Kolayca olabilen bu hassas kancaları kullanır
bir pime bağlı.
Ve turuncu tel veri çıkışına gider.
ir alıcısı.
Arduino sadece hala bağlı çünkü
çünkü biz bunu 5 voltluk güç kaynağı için kullanıyoruz.
Ardından dizüstü bilgisayara bağlayıp başlatıyoruz.
Saleae Mantık uygulaması.
Büyük yeşil düğme ile yapılandırabilirsiniz
cihaz.
Örnekleme hızını, hızını seçebiliriz.
ile veri noktalarını toplar.
Yani şu anda exampel için toplayacak
Dijital saniyede 500 milyon örnek
veri ve saniyede 50 milyon örnek analog
veri.
Bu durumda turuncu kablomız kanaldı.
3 numara.
Ayrıca yalnızca bir günlüğe kaydetmeyi de belirleyebiliriz.
saniyenin onda biri.
O kadarı yeterli olacaktır.
Ancak, böyle bir şey toplamamıza gerek yok
çılgın bir detaylı iz.
Daha yavaş bir örnekleme oranı seçebiliriz.

English: 
So this one can collect a lot of signals in
parallel, but we only need one.
in this case we connect the black ground wire
to the ground pin.
It uses these precise hooks which can be easily
attached to a pin.
And the orange wire goes to the data-out of
the ir receiver.
The arduino is only still connected because
because we use it for the 5volt power supply.
Then we connect it to the laptop and launch
the Saleae Logic application.
With the big green button we can configure
the device.
We can select the sample rate, the speed it
collects data points with.
So for exampel currently it would collect
500 million samples per second of digital
data, and 50 million samples per second analog
data.
In this case our orange cable was channel
number 3.
And we can also specify to only log for a
tenth of a second.
That should be enough.
But, we really don’t need to collect such
a crazy detailled trace.
We can select a way slower sampling rate.

Turkish: 
Bizim arduino gibi şimdi tanımlayabiliriz
Tetik.
Kaydı ancak yalnızca
giriş DÜŞÜK olarak düşer.
Çünkü o zaman IR alıcısı kızılötesi gördü
Işık.
Hadi deneyelim.
Başla.
Tetikleyici bekleniyor.
Uzaktan kumandadaki bir düğmeye basmak.
Ve patlama.
Toplanan izimiz var.
Yani her şeyden önce iki iz görebilirsiniz
Kanal 3
En üstteki dijital iz, alt
bir analog iz.
Peki bu ne anlama geliyor?
Kenarlardan birine yaklaşalım.
Tamam, her zaman en üst kanalın olduğunu görebilirsiniz.
keskin bir dikey kenara sahiptir.
Çünkü dijital mantıkta sadece 1 veya
0.
Ancak analog dünyada voltajı ölçüyoruz
ve neredeyse 5V ölçtüğümüzü görebiliriz.
başlangıçta ve sonra kabaca, belki
5 mikrosaniye voltajı yavaş yavaş düştü
Temelde 0 Volt'a kadar.
Gerçek analog dünyasında belli ki voltaj
hemen düşmez, kısa sürer

English: 
Like with our arduino we can now define a
trigger.
We want to trigger the recording only when
the input drops to LOW.
Because then the IR receiver saw infrared
light.
Let’s try it.
Start.
Waiting for trigger.
Pressing a button on the remote.
And boom.
There is our collected trace.
So first of all you can see two traces of
channel 3.
The top one is the digital trace, the bottom
one the analog trace.
So what does this mean?
Let’s zoom into one of the edges.
Ok, you can see that the top channel always
has a sharp vertical edge down.
Because in digital logic there is only 1 or
0.
But in the analog world we meassure voltage
and we can see that we meassured almost 5V
at the start and then over roughly, maybe
5 microseconds the voltage slowly dropped
down to basically 0 Volt.
In the real analog world obviously voltage
doesn’t drop immediatly, it takes a short

Turkish: 
bırakma süresi.
Ve yaklaşık 2.5V altına düştüğünde,
mantıksal yorum daha sonra 0'dır.
Ve bunun kaç örneklem gösterdiğini görebilirsiniz
cihaz toplayabilir.
Burada var, bilmiyorum, toplanan yüzlerce
arduino ile
pik başına sadece 1 ila maksimum 3 numuneye sahipti.
Ve bu iz de artık çok daha güzel
Geniş tepeler yok.
Hepsi aynı genişliğe sahiptir, sadece bazen
birbirleri arasında daha büyük bir boşluk.
Şimdi son kez zaten biraz ima etti
bu izin yorumlanması.
Bu, bir IR tüketicisi için çok tipik bir kalıptır
Uzak.
Bildiğim kadarıyla protokole dayanıyor
NEC adlı bir şirket tarafından yaratılmıştır.
Ancak bant genişliği ve sıklıkta değişebilir
ve benzerleri kullanılmış.
Ama genel fikir aynı, hep sen
nabız olması ve sonra kısa veya kısa
Bir sonraki darbeye kadar uzun duraklama.

English: 
amount of time to drop down.
And when it dropped under roughly 2.5V, the
logical interpretation is then a 0.
And you can see how many sample points this
device can collect.
We have here, I don;t know, hundreds of collected
points per peak, while with the arduino we
only had 1 to maximum 3 samples per peak.
And this trace is also now much more beautiful,
there are no wide peaks.
They all have the same width, just sometimes
a bigger gap between each other.
Now last time I already hinted at the bit
interpretation of this trace.
This is a very typical pattern for an IR consumer
remote.
As far as I know it’s based on the protocol
created by a company called NEC.
But it can vary in bandwith and frequency
and so forth used.
But the general idea is the same, you always
have a pulse and then either a short or a
long pause until the next pulse.

Turkish: 
Ve uzun bir nabız, 1 ve kısa
Nabız 0 anlamına gelir.
Bu, artık bitlerini çıkarabileceğimiz anlamına geliyor
bir iletim ve mühendis tersine çevirmek için deneyin
hangi bitleri ne yapmak için kullanılır.
Haydi başlayalım.
Yani bu kesinlikle bir tane.
Bu bir tane.
Ve bu bir tane.
Bu sıfır.
Ve bu sıfır.
Urgh.
Zaten yeterince var.
Bu can sıkıcı bir durum.
Yani bu uygulama aynı zamanda serin bir özelliğe sahiptir
Analizörler denir.
Protokol Analizörleri.
Böylece büyük bir düşük seviye listesinden seçim yapabiliriz
Protokoller verilerimizi nasıl yorumlamak istediğimizi belirler.
Sorun sadece, sahip olmadığı
NEC veya IR tüketici protokolü varsayılan olarak.
Burada listede gördüğünüz,
Kendim yazdım
Demek yüzleşirsen, yapman gereken şey bu.
bilinmeyen, özel olan bir protokol
veya sadece desteklenmiyor.
Ancak Saleae, size bir Analizör SDK sunar.
kendi Protokol Analizörlerinizi uygulamak için kullanabilirsiniz.
Ve ben de öyle yaptım.
SDK'nın dokümantasyonu biraz zordu.
Ve C ++ idi.

English: 
And a long pulse refers to a 1 and a short
pulse refers to a 0.
This means we can now extract the bits of
a transmission and try to reverse engineer
which bits are used to do what.
So let’s start.
So that’s definetly a one.
That’s a one.
And that’s a one.
This is a zero.
And this is a zero.
Urgh.
I already have enough.
This is annoying.
So this application also has a cool feature
called Analyzers.
Protocol Analyzers.
So we can select from a big list of low level
protocols how we want to interpret our data.
The issue is only, that it doesn’t have
the NEC or IR consumer protocol by default.
The one you see here in the list, is the one
I have written myself.
So that’s what you have to do if you face
a protocol that is either unknown, custom
or just not supported.
But Saleae offers a Analyzer SDK which you
can use to implement your own Protocol Analyzers.
And that’s what I did.
The documentation of the SDK was a bit rough.
And it was C++.

Turkish: 
Ve birkaç saatimi aldı, ben de istemem
Bunu yine burada yap.
Ama kodumu github'a koyacağım, umarım ki
diğer insanlara yardım eder.
Infact bile Mantık Uygulamasını kurabilirsin
Bunun için cihaza ihtiyacın yok ve
İzleri kendin kontrol etmek için kodumu derle.
Onları da kullanılabilir yapacağım.
Hayır, analizörümü ekleyelim.
Her şeyden önce Analizöre söylemeliyiz
biraz bilgi.
Bu durumda darbe genişliği istiyor,
ikinci olarak ne demek istediğimi anlayın.
O zaman yorumlamak isteyip istemediğimizi de tanımlayabiliriz.
1 veya 0 olarak + 5V.
Genellikle 1 olarak görülür, ancak bu durumda
bunu ters çevirmek isteyebiliriz, çünkü
uzaktan kumanda LED'i ne zaman çıkar?
AÇIK.
Ama sonunda önemli değil.
Ayrıca görüntülemek istediklerimizi de seçebiliriz,
yani bu durumda tek bit ile gidelim.
KAYIT ETMEK.
Ayrıca metin çıktısını sadece hex olarak ayarlayalım.
ve sonra verilere bir göz atalım.
Bu oldukça havalı görünüyor.

English: 
And it took me several hours, so I will not
do this here again.
But I will put my code on github so it hopefully
helps other people.
Infact you can even install the Logic Application,
you don’t need the device for that, and
compile my code to check out the traces yourself.
I will also make them available.
No let’s add my analyzer.
First of all we have to tell the Analyzer
some information.
In this case it wants a pulse width, you will
see in a second what I mean by that.
Then we can also define if we want to interpret
+5V as 1 or 0.
Usually it’s seen as 1, but in this case
we might want to invert this, just because
the outout is LOW, when the LED of the remote
is ON.
But in the end it doesn’t matter.
We can also select what we want to display,
so in this case let’s go with single bits.
SAVE.
Let’s also set the text output to hex only,
and then let’s have a look at the data.
That looks pretty cool.

English: 
You can see those blue bubbles over the digital
data telling us if it was a 0 or 1.
Long pauses are a 1, short pauses are a 0.
You can also see those white dots, which I
have added to show you what is interpreted
as pulse width.
And you can see in a long 1, there are basically
4 pulses.
In a short 0, there are basically 2.
So if we had the pulse width a bit longer
or shorter, then we wouldn’t be able to
read the data properly.
For example if we would use 530, then you
see the pulse width slowly drift away and
kind of corrupt the data we read.
Another available setting is interpreting
the data as whole words, so now the whole
packet becomes one frame and the bits are
shifted into a 64bit variable.
And you can specify if you either want to
have the first bit to be the first or last
bit in the 64bit variable.
Now let’s document our test properly, that
when we collect a longer sample with a lot
of different commands, we are still able to
identify which one is which.
So let’s start.

Turkish: 
Bu mavi balonları dijitalin üzerinde görebilirsiniz.
veri bize 0 mı yoksa 1 mi olduğunu söylüyor.
Uzun duraklamalar 1, kısa duraklamalar 0'dır.
Ayrıca o beyaz noktaları görebilirsin.
neyin yorumlandığını göstermek için ekledik
Darbe genişliği olarak.
Ve uzun bir süre içinde görebilirsiniz, temelde var
4 vuruş.
Kısa bir 0, temelde 2 vardır.
Öyleyse nabız genişliğini biraz daha uzatsaydık
veya daha kısa, o zaman yapamazdık
verileri doğru şekilde okuyun.
Örneğin, 530 kullanırsak, o zaman
Darbe genişliğinin yavaşça kaydığını ve
okuduğumuz verileri bozuyor.
Kullanılabilir başka bir ayar yorumlama
veri bir bütün olarak, yani şimdi bütün
paket bir kare olur ve bit
64bit değişkene geçti.
Ve isteyip istemediğinizi belirtebilirsiniz
ilk veya son olmak için ilk bit
64bit değişkeninde bit.
Şimdi testimizi doğru bir şekilde belgeleyelim.
çok daha uzun bir örnek topladığımızda
farklı komutlardan hala yapabiliriz
Hangisinin hangisi olduğunu tanımlayın.
Haydi başlayalım.

Turkish: 
Ben onu açmaya başlamayı öneriyorum ve
en düşük sıcaklığa ayarlanmışken
hangisi 18.
Sonra sıcaklığı yükseltiriz.
en fazla 32
Bundan sonra kapatıp tekrar açıyoruz.
Sonra 3 mod arasında geçiş yaparız.
Daha sonra 4 fan modu arasında geçiş yapıyoruz,
a / c'deyken modu değiştiririz
fana, ve biz 3 fan arasında dolaşıyoruz
modları.
Klima moduna geri dönün.
Sonra santigrattan farenheit'e geçiyoruz ve
geri.
Gerçekten zamanlayıcının nasıl çalıştığını bilmiyorum
bu yüzden onu görmezden geliyorum.
Son iki mod, garip oldukları için kendilerini iyi hissettiler
şey ve sessiz mod.
Ve tekrar kapatarak bitiriyoruz.
Güzel.
Koleksiyonu durdurduk ve şimdi inceleyebiliriz
onlar.
Sağ tarafta kodu çözülmüş protokolü görebilirsiniz
süper havalı olan görünüm
Her bir ele geçirilen paketi bize.
Ve birini tıkladığımızda otomatik olarak
oraya atla.

English: 
I suggest we start with turning it on and
while it’s set to the lowest temperature
which is 18.
Then we increase the temperature up to the
maximum of 32.
After that we turn it off and on again.
Then we cycle through the 3 modes.
Afterwards we cycle through the 4 fan modes,
while we are on a/c, then we switch the mode
to the fan, and we cycle through the 3 fan
modes.
Back to the a/c mode.
Then we switch from celsius to farenheit and
back.
I honestly don’t know how the timer works
so I ignore that one.
Last two modes are their weird feel good home
thing and the silent mode.
And we finish by turning it off again.
Cool.
We stop the collection and now we can inspect
them.
On the right you can see the decoded protocol
view, which is super cool because it displays
us the each individual captured packet.
And when we click on one, we automatically
jump there.

English: 
We can now also export this data as a simple
CSV file for further analysis in python.
Now let’s explore this data in python.
We open the file and read it.
Split it by newlines.
To have a list of each line.
But we don’t want the csv header and the
last empty line, so let’s slice that.
And we can use python list comprehention to
already split each line at the comma.
And we loop over each command.
By the way, you can execute python scripts
directly in sublime with ctrl+B. Next let’s
convert the hex value to an integer, and then
a binary string.
Because we did like a sequence of commands,
it would make sense to compare each line and
visualize which characters change.
So let’s always safe the last printed value
and diff it with the current one.
We can simply define a function diff which
iterates over both strings and adds a character

Turkish: 
Artık bu verileri basit bir şekilde dışa aktarabiliriz.
Python'da daha fazla analiz için CSV dosyası.
Şimdi bu verileri python ile inceleyelim.
Dosyayı açıp okuduk.
Yeni satırlara bölün.
Her satırın bir listesine sahip olmak.
Ama biz csv başlığını ve istemiyoruz
son boş satır, öyleyse bunu keselim.
Ve biz python listesi anlama kullanabilirsiniz
zaten her satırı virgülle böl.
Ve her komutun üzerinden geçiyoruz.
Bu arada, python scriptlerini çalıştırabilirsiniz.
doğrudan ctrl + B ile yüce. Bir sonraki
hex değerini bir tam sayıya dönüştürün ve ardından
bir ikili dize.
Çünkü bir dizi komuttan hoşlandık.
Her bir çizgiyi karşılaştırmak mantıklı olacaktır.
hangi karakterlerin değiştiğini görselleştirin.
O zaman en son basılı değeri daima koruyalım.
ve onu şimdiki olanla paylaşın.
Basitçe bir fonksiyon farkını tanımlayabiliriz.
Her iki dizede de yinelenir ve bir karakter ekler

English: 
if the characters differ.
And now we can take this output and analyze
further.
So the first packet was 18 degrees celsius.
And then we incremented it up to 32.
And we notice that this one bit here changes
with every increment.
And the 2nd bit here changes with every 2nd
increment.
Si that looks like a counter jsut reversed.
So it looks like we do want to change the
endianess of those words, and we can do that
by changing the settings in the analyzer and
export it again.
So it looks like up to 5 bits are involved
in the temperature selection.
It’s not quite regular binary to decimal,
but it’s definitely incrementing.
After that we turned it off and on again,
and it looks like this bit is responsible
for that.
Next we cycle through the 4 different modes.
First one is dehumidifier.

Turkish: 
eğer karakterler farklıysa
Şimdi bu çıktıyı alıp analiz edebiliriz.
Daha ileri.
Yani ilk paket 18 santigrat derece oldu.
Sonra 32'ye yükselttik.
Ve buradaki bitlerin değiştiğini fark ettik
Her artış ile.
Ve buradaki 2. bit, her 2
arttırır.
Sayaç jsut gibi görünüyor Si ters.
Bu yüzden değiştirmek istiyoruz gibi görünüyor
bu kelimelerin soyu ve bunu yapabiliriz
Analizördeki ayarları değiştirerek
tekrar dışa aktar.
Bu yüzden 5 bit dahil gibi görünüyor
sıcaklık seçiminde.
Ondalık için düzenli bir ikili değil.
ama bu kesinlikle artıyor.
Ondan sonra kapatıp tekrar açtık.
ve bu bit sorumlu görünüyor
bunun için.
Daha sonra 4 farklı mod arasında geçiş yapacağız.
Birincisi nem alma cihazı.

Turkish: 
Basit artış
Ancak bir sonraki farklı olan bir fan
diğer modlara göre fan yoğunluğu.
Yani bu ikisi fan yoğunluğu olabilir.
Ve sonradan emirlere yakından bakarsak
4 fanı değiştirmeyi denediğimiz yerde
ayarları, bunların şimdi olduğunu görebiliriz.
artan.
Bundan sonra fan moduna geçtik;
yine fan yoğunluğunu da değiştirir, ancak
sonra farklı fan seviyelerini test ettik.
biz de bu değişimi de görüyoruz.
Sanırım nasıl çalıştığını şimdi anladın.
bu şekilde yavaşça tersine mühendislik yapabiliriz
hangi bit ne için sorumludur.
Şimdi sıra sizde, çözebilir misiniz?
hangi bitlerin ekranı değiştirmekle sorumlu olduğu
farenheit'ten santigrat dereceye kadar
sessiz mod?
Saleae mantık izi ve analizörüm
kod ve verilen hex değerleri mevcuttur
seninle oynamak için github üzerinde.

English: 
Simple increment.
But the one after is fan, which has a different
fan intensity than the other modes.
So those two might be the fan intensity.
And if we look closely at the commands after
those, where we tested changing the 4 fan
settings, we can see that those one are now
incrementing.
After that we switched to fan mode, which
again changes also the fan intensity, but
then we tested the different fan levels here
too and we see those change as well.
I guess you get the idea now how it works.
this is how we can slowly reverse engineer
which bit is responsible for what.
So now it’s your turn, can you figure out
which bits are responsible to change the screen
from farenheit to celsius or activate the
silent mode?
The saleae logic trace, as well as my analyzer
code and exported hex values are available
on github for you to play around with.
