#Pi3, arkadaşlar ne yaptıysam python dosyamı rc.local üzerinden bir türlü başlatamadım. Tam olarak nasıl yapılıyor? Verdiği hata bu: "/etc/rc.local: 19: /etc/rc.local: 0: not found"
Her seferinde reboot edip, denememek için dosyayı doğrudan çalıştırıp, deniyorum. Dosyada ip numarasını söyleyen örnek bir kod var ve doğru şekilde çalışıyor ama benim komut satırımı bir türlü çalıştırmadı.

sudo /home/pi/Documents/DHT22_GPS_On_Haz.py & şeklinde girdim, sudo'suz denedim ki Pi Organizasyonu bile sudo'suz örnek vermiş ama bir türlü çalıştırmadı.

BeğenFavori PaylaşYorum yap
  • mrx @mrx

    nokta ekleyin ilk / işaretinin başına ./ şeklinde

  • qubit @qubit

    https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
    Buraya baktınız mı? Kimin o script dosyasını çalıştıracağını söylemek gerekiyor olabilir.

    Python kodunun içinde /usr/bin/python vs gibi tepede bu belirtilmiş mi?

    • lterlemez @lterlemez

      "Pi Organizasyonu bile sudo'suz örnek vermiş" kısmı verdiğiniz link zaten; python kodu içinde belitmeye gerek var mı, zaten "python /home/pi/Documents/DHT22_GPS_On_Haz.py &" şeklinde çalıştırmaya çalışıyorum.?

    • qubit @qubit

      @lterlemez Linux mevzubahis oldu mu malum adım adım sorunu aramak gerekiyor. Önce rc.local düzgün çalışıyor mu mesela. Bununla başlamalı. Basit echo komutu ile mesela denemeli. İki home klasörü mount edilmemiş olabilir, kodu /usr altına mesela koyun. Üç. python'u bulamıyor olabilir, Python'un tam adresini verin (which python). Dört. rc.local dosyasında bir hatanız olmasın. Nokta virgül şu bu vs. Mesela 0 not found ne demek anlamadım. 19 satır numarası mı oluyor?

      Pi hiç kullanmadım, kısıtlamalarını çok iyi bilmiyorum.

    • lterlemez @lterlemez

      @qubit;
      - Dosyada ip numarasını söyleyen örnek bir kod var ve doğru şekilde çalışıyor ama benim komut satırımı bir türlü çalıştırmadı. : Checked...

    • lterlemez @lterlemez

      @qubit; Onları ben de araştırdım ama düzgün bir bilgi yok. Verilen bir iki cevap var ama denemeye korkuyorum çoğunda, çünkü linux çöktü mü kurtaramam. İkinci bir Pi olsa elimde denemeyeceğim ama şu an da o da yok. Acaba, Virtualbox ile denesem nasıl olur, raspbian'ı çalıştırır mı ki? Şimdi aklıma geldi, bir araştırayım yarın.
      Çünkü, projeyi 220V'dan bağımsız olarak bir denemek istiyorum ve headless, sensörlerden ekrana yer kalmıyor. Belki beraber kullanılabilirler ama şimdilik amacım böyle şeyleri öğrenmek değil. En azından şimdilik. Pi ekranı da piyasada pek yok olanlarda biraz pahalı (kurdele kablolular).

    • qubit @qubit

      @lterlemez Önerdiklerimi denemenin bir tehlikesi yok; örneğin kodu /home klasörü yerine /usr gibi bir yere koyun, öyle deneyin. Çalışmadı mı bir sonraki teste geçin. echo komutunu ekrana yazdırmaya gerek yok; diske bir dosyaya çıktısını yazsın. Sistem açıldığında çıktı varsa ne ala.

      Virtualbox iyi bir fikir.

    • lterlemez @lterlemez

      @qubit; Sizinkileri kast etmedim, internette bulduklarımı kast ettim.

  • R.D. @rdr

    Dosyayı doğrudan çalıştırmayın, python uygulamasına parametre olarak geçin.

    /bin/python /home/........./blabla.py gibi. Python uygulama dosyasının tam yolunu yaşadığınızdan emin olun.

  • lterlemez @lterlemez

    Merhaba Arkadaşlar, systemd olayı çözdü. Tabi ki biraz detay okumam lazım, verilen örneği hemen uygulayarak yaptım ama biraz okumak lazım tam olarak nasıl kullanıldığını çözmek için...
    Herkese teşekkürler...

    • R.D. @rdr

      İs yerinde 30'dan fazla linux sunucum var, takildiginiz bir şey olursa cekinmeyin 🙂

    • lterlemez @lterlemez

      @rdr; Tamam, not aldım; teşekkür ederim 👍⭐️⭐️⭐️⭐️⭐️

    • lterlemez @lterlemez

      @rdr; O zaman ilk sorumu sorabilir miyim?
      Servis tanımını bu şekilde yaptım:
      [Unit]
      Description=DHT 22 GPS Kayıt Hizmeti
      After=network.target
      [Service]
      ExecStart=/usr/bin/python2.7 -u DHT22_GPS_On_Haz.py
      WorkingDirectory=/home/pi/Documents
      StandardOutput=inherit
      StandardError=inherit
      Restart=always
      User=pi
      [Install]
      WantedBy=multi-user.target

      ama şimdi saati internetten güncellemiyor ve hatalı saat gösteriyor. Şu an saati 16:25 mesela. Bunu nasıl düzeltebilirim? Bu servisi en son başlatmak istiyorum (farkındayım iki soru oldu), bunu nasıl sağlayabilirim?

    • lterlemez @lterlemez

      @lterlemez; After anahtarı mı düzenliyor çalışma sırasını? Bu hizmetlerin çalıştırılma sırasını nasıl görebilirim (Evet, soru sayısı 3 oldu 🙂 )?

    • lterlemez @lterlemez

      @rdr; Sistemi bozdu ya. Ben de bundan korkuyordum: hem tarih yanlış hem de saat... 🙁

    • lterlemez @lterlemez

      @rdr; Oluşturduğum hizmeti iptal ettim, şimdi VNC ile ara yüze bağlanamıyorum, time out veriyor. SSH çalışıyor ama uğraştıracak şimdi beni ya. Offff, bu yüzden nefret ediyorum ve kurcalamak istemiyorum. Özellikle de linux'u....

    • lterlemez @lterlemez

      @rdr; X (gui) de gitti, doğrudan cmd'ye düşüyor. Emekler gitti, yedekleri bir şekilde alsam bile hangi paketleri nasıl ve nereye indirdim bilmiyorum. Şimdi her ihtimale karşı bir bellek satın alıp, her şeyi sıfırdan kurmaya çalışacağım. Akşam fıstık gibi çalışıyordu. Bir kaç tane yükseltme somunu almıştım, onları takmak için açtım. Sonra bunlar oldu. Önce koordinatlar gelmedi, onlar geldi, tarih/saat şaşırdı. Şimdi de X gelmiyor. Linux'un daha 1001 fırın ekmek yemesi lazım, MacOS'u al Windows'a onu da al Linux'a vur işte.

    • R.D. @rdr

      @lterlemez sizin syatemd servisinin bütün bu sorunlara neden olması olası değil. Servisi nasıl iptal ettiniz? Systemctl disable servicename komutu yeterli bu iş için.

    • R.D. @rdr

      @lterlemez afte ile hangi başka servislerden sonra başlamasını istiyorsanız onları burada belirtiyorsunuz.

    • R.D. @rdr

      @lterlemez linux un tarih saati mi yanlış, yoksa sizin kod mu çalışınca tarihi saati yanlış okuyor? İnternet saati için hangi servisi kullanıyorsunuz? Ntpd?

    • R.D. @rdr

      @lterlemez SD kart gidici olmasın?

    • R.D. @rdr

      @lterlemez son yoruma katılmıyorum 🙂 linux'da gizemli registry vs tarzı kapalı kutu ayar mekanizmaları yok. Her servisin, uygulamanın bağımsız config dosyası var. Bunlar text tabanlı ve config dosyası doğru olduktan sonra servisin çalışmaması mümkün değil. Bu sebeple sunucu tarafında linux'u yönetmek gayet zahmetsiz.

      Tam olarak neyi nasıl yaptığınızı bilmediğim için neyin yanlış olduğu konusunda da birşey diyemiyorum. Ancak yaptığınız herşey python ile ilgili ise kurduğunuz hicbir şeyi doğrudan sistem paketi olarak kurmayin. Tüm python paketlerinizi venv içine kurun ve uygulamanizi da venv içinde çalıştırın.

    • lterlemez @lterlemez

      @rdr; Systemctl disable ettim. kendi ilk yüklendiği ne ise o güncelliyordu zamanı.

    • lterlemez @lterlemez

      @rdr; Sistem tarih, saati yanlış.

    • lterlemez @lterlemez

      @rdr; raspi-config ile hiçbir ayarı değitiremiyorum, update yapınca locked file var diyor kalıyor.

    • lterlemez @lterlemez

      @rdr; TTF1'de boot'a düşüyorum.

    • lterlemez @lterlemez

      @rdr; Ustam (işin ustası olduğu için, yanlış anlamayın lütfen), ben şimdi yeni bir imaj kurdum. Arızalı raspi'nin partition'ına nasıl erişebilir bana adım adım yazabilir misin? Eğer, mümkün ise böyle bir şey, en azından python kaynaklarımı ve kaynak kodlarımı kurtarayım.

    • R.D. @rdr

      @lterlemez SSH ile baglanabiliyorum demiştiniz? Eğer öyleyse ayni ağda windows bir makineyle winscp kullanarak dosyalara erişmek mümkün.

      Bunun haricinde yeni kurulumda gparted yukleyin yüklü değilse. Eski kurulumun kartını/flash belleğini bağlayınca gparted ile partitionlari görebilir, partitioni seçip mount edebilirsiniz. Mount ettiği klasorden de tüm dosyalar görülür.

      Raspbery pi'de hangi dağıtım çalışıyor, rasbian mı?

    • lterlemez @lterlemez

      @rdr; Raspbian; yeni karta da yeni adı ile Pi OS yükledim ama bu da başka uğraştırıyor. GPS'den doğrudan metin veri alıyordum, şimdi nedense byte veri alıyor. Çevirene kadar imanım gevredi. Mantığı anlıyorum ama o kadar karmaşık ki python, milletin kafayı yememesine şaşırıyorum. Gerçekten eziyet; R'ye karmaşık derdim ama meğer daha derli toplu imiş. En azından, derleme farklılıkları daha kolay giderilebiliyor. Bütün gün bununla uğraştım. Hem de o kadar saçma bir nedenle ki anlatamam. Rx-Tx için ttyAMA0 iptal edilmesi gerekiyor, anlatılanları yapıyorum hala Serial0 ile ilişkilendirilmiş gözüküyor. Konsoldan GPS verisi alıyorum ama python'dan alamıyorum. Sonra birden ne oldu ise almaya başladım. Gelin görün ki ttyAMA0 iptal olmuş ki python veriye ulaşabiliyor ancak kontrol ettiğinizde hala Serial0 ile bağlantısı var.
      Linux yetmezmiş gibi bir de python ile uğraşıyoruz yani. Neredeyse sıfırlayıp, raspian haline dönüp, herşeyi baştan yapacaktım.

    • lterlemez @lterlemez

      @rdr; Ne güzel çalışıyordu bir öncekinde. Sanırım, bir şekilde eski versiyonu da kurup deneyeceğim. Böyle olmuyor. Karman çorman, hepsi bir birine girmiş. Yardım bakıyorsun, her kafadan bir ses çıkıyor. Güncelleme bilgileri geç geliyor, vs vs vs. İnatçı olmasam, camdan atmıştım Pi'yi; yani, bir şeyler de çıkar ama bu kadar uğraştırmaması gerekir.

    • R.D. @rdr

      @lterlemez 🙂 python 2 mi 3 mü kullanıyor? String konusunda çok farklı bu ikisi. Bu konuda güzel makaleler var öncelikle onları okumak lazım. Yoksa unicode byte array dönüşümleri anlaşılmadan sac bas yoldurur.

      Hobi amaçlı uğraşırken doğrudan kodlamaya geçmek güzel geliyor ancak kullandığınız her şeyin nasıl çalıştigina hâkim olmak için bolca doküman okumak gerek. Dokümantasyonu kötü olan veya hic olmayan kütüphanelerden de uzak durun.

    • lterlemez @lterlemez

      @rdr; Programlama bilgim olmasa neyse, olup da dokümanlar arasında böyle hırpalanmak çok kötü. Hangi versiyon onu da anlamadım. 2.7, 3.4+ yazıyor ama anlamadım. Şu an çalışıyor, ne güzel string dönüyordu UART'tan şimdi Byte dönüyor (tüm örneklerde de metin dönüşe göre verilmiş). Ne gerek var ki? Belki de bir şeyler yanlış da uğraşamayacağım şu an. Sonuçta veriyi alıyorum bir şekilde...

    • lterlemez @lterlemez

      @rdr; Uğraşım ya hobi yarı araştırma amaçlı, o yüzden sabır ediyorum zaten 🙂

    • R.D. @rdr

      @lterlemez python 2.7 ile hic ugrasmayin derim. Kullandığınız kütüphane dokümanlarında neyin nasıl döndüğünü anlatıyorsa byte dönmesi bir sorun değil. Byte olarak Integer değer donduruyorsa onu intergere çevirirsiniz, yok byte olararak ASCII string döndürüyorsa onu da unicode string e çevirirsiniz. Yeter ki doküman sonucun ne olduğunu düzgünce anlatsın.

      Bilgisayarlarda string diye tabir edilen şey aslında ASCII tipinde byte dizisi. Siz ASCII haricinde karakterleri desteklemek istiyorsanız ki buna mecbursunuz artık, o zaman string encoding konusuna hakim olmak gerekiyor. Bu python haricindeki dillerde de böyle. Çünkü siz utf8 de kullansaniz, ISO-9xxxx vs de kullansaniz bunlar bilgisayar için byte array sonuçta. Programlama diline bu byte array'i hangi kodlama standartına göre işlemesi gerektiğini gostermeniz lazım.

    • lterlemez @lterlemez

      @rdr; Bunların hepsini biliyorum zaten; python'un bunları otomatik yapmıyor olmasını eksik görüyorum ben açıkçası; tabi ki profesyoneli değilim işin ama faydalı bir şeyler üretecek kadar da biliyorum ya da öğrenebiliyorum. Evet, bu hali belki daha iyi ama modüler bir dilde, temel dillerde olan bir şeyin olmaması garibime gidiyor. Mesela Java'da Javascrip'te de benzer sıkıntılar var, var ... diye bildirim yapıp geçiyorsun ve sonra numerik veya alfanumerik olduğunu garantilemen gerekiyor.

    • lterlemez @lterlemez

      @rdr; Pardon, Java da kesin tanımlama var.

    • R.D. @rdr

      @lterlemez iste tam da bu sebep ile dokümanı olan kütüphane kullanmanız lazım. Durum tam da dediğiniz şey ile ilgili. Python ve JavaScript değişkenlerin, metodların döndürdüğü değerlerin vs tipi belli değil. Java ve c# gibi static typed dil değiller. Bunun avantajını da yapay zeka gibi uygulamalarda görüyorlar. Bazı isler için bu yöntem daha esneklik sağlıyor. Ancak klâsik programlamada bu dinamik tip işi sac baş da yolduruyor çünkü bir değişkenin tipini ancak çalışma zamanında bile biliyor python. Java, c# dibi dillerde daha derleme aşamasında yakalayacağınız hataları göremediğimiz için dikkat etmezsek çalışma zamanında uygulama patlıyor.

      Bunu çözmek için yeni python versiyonlarına opsiyonel olarak type hinting denen bir özellik ekleyebiliyorsunuz. Uygulamanın çalışmasına bir etkisi olmuyor ama kodu taratinca değişken tiplerindeki uyumsuzlukları gösteriyor size.

    • lterlemez @lterlemez

      @rdr; Ama bu da son kullanıcıyı uğraştırıyor işte. Çalışırlığı ispatlanmış bir tekniğin terk edilmesi çok garip....

    • R.D. @rdr

      @lterlemez php, JavaScript,. Python benim bildiklerim, daha bir çok dinamik tip dil var 🙂 üstelik c# ve java gibi dillere yıllardır bu tip yetenekler kazandırmak için özellikler ekliyorlar, generic tipler vs gibi. İkisinin de yerine gore avantajları var demek ki.

    • lterlemez @lterlemez

      @rdr; Serial'dan bu şekilde geliyor gps verisi;

      b'\x19A\x1d11\xb1\xcd\xe5\xd1\xdd\xb9\xd9\xc5\xd9\xd1\xe1\xb19\xb1\xc1\xcd\xc1\xc9\xe5\xb9\xe1\xcd\xe5\xdd\xe5\xb1\x15\xb1\xc5\xe1\xc5\xdd\xd1\xcd\xb9\xc1\xc1\xb1\x05\xb1\x05\xa9\xd9\xc55)\xff$GPRMC,181744.00,A,3947.61598,N,03029.84017,E,1.063,,200720,,,A*74\r\n'
      b'$GPVTG,,T,,M,1.063,N,1.969,K,A*20\r\n'
      b'$GPGGA,181744.00,3947.61598,N,03029.84017,E,1,06,1.51,812.5,M,38.0,M,,*5D\r\n'

      şu baştakiler ne olabilir, fikrin var mı? Daha önce böyle şeyler yapmıyordu bu cihaz?

    • R.D. @rdr

      @lterlemez b' ile başlayan ilk değişken unicode karakterler içeriyor muhtemelen. O sonucu .decode('utf8') seklinde unicode stringe çevirince ilk baştaki karakterlerin ne olduğunu görebilirsin.

    • lterlemez @lterlemez

      @rdr; Dönüştürmüyor zaten sıkıntı orada?

    • lterlemez @lterlemez

      @rdr; Normalde, b'$GPRMC,181744.00,A,3947.61598,N,03029.84017,E,1.063,,200720,,,A*74\r\n'
      b'$GPVTG,,T,,M,1.063,N,1.969,K,A*20\r\n' başlaması lazım ama baştaki garip ifadeler çıkıyor...

    • R.D. @rdr

      @lterlemez tam anlamadım, neyi dönüşturmuyor? Tam olarak sorun nedir? Daha geniş kod blogu varsa daha anlaşılır olur.

    • R.D. @rdr

      @lterlemez onlar garip ifade değil iste 🙂 unicode karakterdir. Simdi kodu görmeden yorum yapıyorum, değerleri hangi kütüphane ile okuyorsan sana değer olarak byte dizisi döndürüyor. Donen değer insan için okunabilir bir değer olacaksa aslında kütüphane bunu kendi unicode stringe çevirip de dondurebilirdi ancak bu kısmı sana bırakmış anlaşılan.

    • R.D. @rdr

      @rdr elinin altında PC olmadığı için ornek paylasamiyorum. Kabaca şöyle deneyebilirsin:

      GPRS_verisi = GPRS_oku().decode('utf8')

      Bu şekilde nasıl görünüyor sonuç?

    • lterlemez @lterlemez

      @rdr; Aynen öyle yapıyorum zaten; ancak, gps'den gelen veri, 2.7'de doğrudan metin geliyordu ve b'\x19A\x1d11\xb1\xcd\xe5\xd1\xdd\xb9\xd9\xc5\xd9\xd1\xe1\xb19\xb1\xc1\xcd\xc1\xc9\xe5\xb9\xe1\xcd\xe5\xdd\xe5\xb1\x15\xb1\xc5\xe1\xc5\xdd\xd1\xcd\xb9\xc1\xc1\xb1\x05\xb1\x05\xa9\xd9\xc55)\xff şeklinde sonuçlar üretmiyordu.

    • lterlemez @lterlemez

      @rdr; pynmea2'den yararlanıyorum:

      import serial
      import pynmea2

      port = "/dev/ttyAMA0"
      serialPort = serial.Serial(port, baudrate = 9600, timeout = 0.5)

      while True:
      str = serialPort.readline()
      msg = pynmea2.parse(str)
      if msgKöşeParantez0:6KöşeParantez=="&GPGGA":
      print(msg.latitude,msg.longitude)

      şeklinde, şimdi açmaya üşendim cihazı, yarın tam kodu koyarım.

    • R.D. @rdr

      @lterlemez dokumanlara baktım, pynmea2.parse() parametre olarak string kabul ediyor görünüyor. Ancak senin yazdigin gibi seri porttan doğrudan satir okumak byte array döndürüyor. Arada decode islemi yapmadan byte array düzgün bir şekilde stringe dönüşmeyebilir.

      Ayrıca serial portan aşağıdaki örnekteki gibi veri okuma tavsiye ediyor kütüphane:
      https://github.com/Knio/pynmea2/blob/master/examples/read_serial.py

      Doğrudan serialden satir okumamış, onu textiowrapper aracılığı ile okumuş. Sen de kodu buna gore düzeltip deneyebilirsin. Yine de encoding problemi olursa textiowrapper dokümanında parametre olarak encioding ayarlaniyor, onu da denemek lazım.

      İsin özü serialden okuyunca donen satırın başında unicode karakterler var.

    • lterlemez @lterlemez

      @rdr; Bunlara bakmıştım ama bir daha bakayım. Belki bir şey kaçırmışımdır?

    • R.D. @rdr

      @lterlemez denemeleri de interaktif python konsolu ile canlı canlı yapmak daha faydalı olur. Kodun çalışmasını doğrudan görmüş olursun.

    • lterlemez @lterlemez

      @rdr; Konsoldan böyle, garip değerler ve/veya byte değerler almıyorum. Herşey olması gerektiği gibi çıkıyor.

    • lterlemez @lterlemez

      @rdr; En bu şekilde hallettim gibi, arada başka bir hata türü çıkar ise onları da eklerim artık. Bakalım, hoşuna gidecek mi? Tabi ki bir düzen gelecek, daha csv olarak yazılması var verinin. Onu da halledince, bu sefer belleğin imajını alıp, boot otomasyonuna geçeceğim. Daha sonra da 3B bir kasa tasarlamaya çalışacağım.

      import sys
      sys.path.append("/home/pi/Downloads/SSD1360-python")
      sys.getdefaultencoding()

      import serial
      import time
      import pytz,datetime
      import spidev as SPI
      from PIL import Image, ImageDraw, ImageFont
      import SSD1306
      import Adafruit_DHT
      import pynmea2

      #OLED Ekran Ayarları
      RST=19
      DC=16
      bus=0
      device=0
      disp=SSD1306.SSD1306(RST,DC, SPI.SpiDev(bus,device))

      disp.begin()
      disp.clear()
      disp.display()
      image=Image.new('1',(disp.width,disp.height))

      draw=ImageDraw.Draw(image)
      padding=1
      top=padding
      #x=padding
      x=0
      font_path_date = "/home/pi/Downloads/SSD1360-python/Montserrat-Medium.ttf"
      font_date = ImageFont.truetype(font_path_date, 14)
      font_path_stats = "/home/pi/Downloads/SSD1360-python/Montserrat-Medium.ttf"
      font_stats = ImageFont.truetype(font_path_stats, 11)

      disp.image(image)
      disp.display()

      #Zaman Ayarları
      tz=pytz.timezone("Asia/Istanbul")

      #GPS Ayarları
      port="/dev/ttyAMA0"
      ser=serial.Serial(port, baudrate=9600, timeout=.5)

      while True:
      try:
      curr_time = datetime.datetime.now(tz=tz)
      hum, temp =Adafruit_DHT.read_retry(22,4)
      newdata=ser.readline()
      #print(newdata)
      #print(newdata.encode('ascii', 'ignore'))
      newdata=newdata.decode() #.replace("\r\n", "\n")

      if newdata[0:6] == "$GPGGA":
      newmsg=pynmea2.parse(newdata)
      lat=round(newmsg.latitude,5)
      lng=round(newmsg.longitude,5)
      alt=round(newmsg.altitude,5)
      num_sat=newmsg.num_sats
      gps = "Lat: " + str(lat) + " Long: " + str(lng) + " Alt:" +str(alt)+ " Sat_Num: " +str(num_sat)
      print(gps,hum,temp)
      if hum is not None and temp is not None:
      draw.rectangle((0,0,disp.width,disp.height),outline=0,fill=0)
      draw.text((x,top),curr_time.strftime("%d/%m/%y")+" "+curr_time.strftime("%H:%M:%S"),font=font_date,fill=255)
      draw.text((x,top+12),"HU",font=font_stats,fill=255)
      draw.text((x+24,top+12),": "+str(round(hum,2))+"% TE: "+ str(round(temp,2))+"C",font=font_stats,fill=255)
      draw.text((x,top+22),"LAT",font=font_stats,fill=255)
      draw.text((x+24,top+22),": "+str(lat),font=font_stats,fill=255)
      draw.text((x,top+32),"L0N",font=font_stats,fill=255)
      draw.text((x+24,top+32),": "+str(lng),font=font_stats,fill=255)
      draw.text((x,top+42),"ALT",font=font_stats,fill=255)
      draw.text((x+24,top+42),": "+str(alt),font=font_stats,fill=255)
      draw.text((x,top+52),"SAT",font=font_stats,fill=255)
      draw.text((x+24,top+52),": "+str(num_sat),font=font_stats,fill=255)
      disp.image(image)
      disp.display()
      #time.sleep(1)
      except UnicodeDecodeError:
      draw.rectangle((0,0,disp.width,disp.height),outline=0,fill=0)
      draw.text((x,top),"İŞLEM HATASI",font=font_date,fill=255)
      print("HATA")
      pass

    • R.D. @rdr

      @lterlemez peki sorunu ne çözdü?

    • R.D. @rdr

      @lterlemez tavsiyem şu olur, encoding isini şansa bırakmayın.

      sys.getdefaultencoding()
      newdata=newdata.decode()

      Bu şekilde yapınca sistemin default encoding ayarını kullanmış oluyorsun. Simdi düzgün çalışıyor olabilir ancak başka bir default encoding kullanan işletim sisteminde ayni kod hata verebilir.

      Linux kurulurken dil bölge ayarı sorar mesela. O aşamada utf8 seçim ile ne bileyim ISO 8899 seçmek, unicode karakter içeren string ile veri alışverişi yapan kodların çalışmasını etkiler. Bu sebeple seri porttan, bir text dosyasindan, http api isteğinden veya veritabanından veri okunup yazilacaksa kod yazılırken mutlaka ama mutlaka encoding ayarlanip veri öyle işlenmeli, sistem encodingi kullanılmamalı.

    • lterlemez @lterlemez

      @rdr; try bloku ile hataları görmezden gelerek hal ettim gibi. Hatalı/işlenemeyen/nasıl işlenebileceğini bilmediğim-araştırmadığım okuma durumunda try'ın except UnicodeDecodeError: adımını kullanarak ilk okuma işlemine yeniden dönmesini sağladım. Aslında, temel dillerden hata işleme konusundan haberdardım ama python'da uğraşmak istemiyordum ancak mecbur kaldım. En azından veri elde edeyim diye, ortaya çıkabilecek diğer hata türlerini de except ekine ekler devam ederim dedim.

    • lterlemez @lterlemez

      @rdr; Sorun karakter seti değil zaten, bozulan sistemde doğrudan bu şekilde geliyordu veri (örnek serial okuma satırı):

      "$PLCJ,5F01,66FC,AA,9390,6373"

      yeni sistemde ise başlarda böyle gelmeye başladı;

      b'$PLCJ,5F01,66FC,AA,9390,6373'

      hadi, decode metodunu buldum, "tamam" en azından düzgün şekilde alabiliyorum diyemeden

      b'\x19A\x1d11\xb1\xcd\xe5\xd1\xdd\xb9\xd9\xc5\xd9\xd1\xe1\xb19\xb1\xc1\xcd\xc1\xc9\xe5\xb9\xe1\xcd\xe5\xdd\xe5\xb1\x15\xb1\xc5\xe1\xc5\xdd\xd1\xcd\xb9\xc1\xc1\xb1\x05\xb1\x05\xa9\xd9\xc55)\xff'

      şeklinde de veri gelmeye başladı. "Ne oldu şimdi?" dedim. Headless çalışacağım desem sorun değil, bağlantı ile hemen müdahale edebilirim sonuçta ama powerbank'a bağlayacağım ve mobil olarak standalone çalışacak. Yanımda pc olmayabilir, olabilir pili bitik olabilir falan filan. Üstelik veri dosyası olarak da saklayacak.

    • lterlemez @lterlemez

      @rdr; OLED ekran da sadece çalıştığını anlayabilmem için yoksa o da olmayacak. Sadece bir iki bilgiyi gösteriyor.

    • R.D. @rdr

      @lterlemez bayram sonuna kadar elimde PC yok, su karakterleri merak ettim gerçekten 🙂 Çince hata mesajı falan dönüyor olmasın arada 🙂

    • R.D. @rdr

      @lterlemez bir de GPS verisini aldığın cihazın marka / modeli nedir? Onun da dokümanı var mı? GPS verisi i okumadan önce ona bir komut göndermek gerekmiyor değil mi?

    • lterlemez @lterlemez

      @rdr; Bozulan raspian'da sıkıntı yoktu bunda oldu nedense. Ya bir şeyleri beceremedim ya da raspian'da çalışıyor ama Pi OS'ta bir şeyler değiştiği için faklı şekilde iletiyor veriyi UART. Neyse, sonuçta bir şekilde hatalarda takılmadan (işlemler durmadan devam ediyor en azından) doğru şekilde veri alabiliyorum. Tabi, hatada pas geçtiği için göreceli daha düzensin zaman aralıklarında veri alıyorum ama olsun. Sonuçta, kullanabileceğim veriye ulaşabiliyorum. Daha sonra, nedenini araştırırım. Şunu kullanıyorum: https://www.robotistan.com/gy-neo6mv2-gps-modulu-ucus-kontrol-sistem-gpsi

    • lterlemez @lterlemez

      @rdr; Şu an ki en son çıktı hali bu şekilde:

      Dosya mevcut, kullanılacak!
      2020-07-21 21:37:23.391322+03:00
      HATA
      Lat: 39.79372 Long: 30.49724 Alt:801.6 Sat_Num: 08 99.9 20.0 21/07/20 21:37:24
      Lat: 39.79372 Long: 30.49725 Alt:801.7 Sat_Num: 07 99.9 20.0 21/07/20 21:37:32
      Lat: 39.79372 Long: 30.49725 Alt:801.7 Sat_Num: 08 99.9 19.9 21/07/20 21:37:41
      Lat: 39.79372 Long: 30.49725 Alt:801.7 Sat_Num: 08 99.9 19.9 21/07/20 21:37:51
      Lat: 39.79372 Long: 30.49725 Alt:801.8 Sat_Num: 08 99.9 19.9 21/07/20 21:38:09

      CSV dosyasına da yazıyor artık. Önce yazılacak dosya var mı bakıyor. Varsa, yukarıdaki cevap veriyor ve dosyaya append yapıp, try-except karar yapısından hata alıyor ise "HATA" sonucu üretip tekrar While'ın başına dönüyor UART'tan istenen şekilde veri gelirse de alttaki gibi GPS ve DHT22 verisi derliyor ve append yaptığı csv dosyasının sonuna ekliyor.

    • lterlemez @lterlemez

      @rdr; Dosya yok ise "Dosya mevcut değil, yaratıldı!" diyor, dosyayı yaratıyor ve ona yazıyor değerleri...

    • lterlemez @lterlemez

      @rdr; Neyse, bugünlük başını bu kadar ağrıttığım yeter, teşekkür ederim yardımların için.

    • lterlemez @lterlemez

      @rdr; Söylemeyi unuttum, asıl dert DHT22'de sıcaklık okumaları accurate ama nemin kalibre edilmesi lazım ve çok meşakkatli bir iş, nasıl yapacağımı bilemiyorum. Talimatlar var ama ne o kadar zamanım var ne de teçhizatım.