Kategori: raspberry pi

Dotnet Minimal Api Denemeleri

.Net 6 ile Minimal Api geldi. Node.js benzeri tek bir dosyada bütün apimizi yazabiliyoruz. Kullanılabilen record yapısı ile birlikte tek sayfa içinde modelleri ile komple bir api oluşturulabiliyor.

Başlamak için öncelikle dotnet cli üzerinden minimal bir web api oluşturmamız gerekmekte:

dotnet new webapi -minimal -o Api1

Ardından Minimal web api projeniz oluşturulmuş olacak:

Ardından Program.cs’in içine baktığımızda bütün apimizin Program.cs’de olduğunu görmekteyiz.

Endpointler aşağıdaki gibi tanımlanabilmektedir:

    app.MapGet("api/getAnil",()=>{
   Human human=new Human("anil",88,"Computer Engineer");
    return human;
    }); //That's so Node.js

Tabi direkt olarak express.js’in eski günlerini hatırlatan bu kullanım yerine aşağıdaki gibi bir kullanım daha mantıklı olacaktır.

Get Parametrelerini yine klasik webapilerdeki gibi kullanabiliyoruz:

app.MapGet("/parametredeneme",(int id,string onemli)=>{
     return id+" onemli: "+onemli;
    }); //https://localhost:7125/parametredeneme?id=44&onemli=deneme

Aynı şekilde post isteği de aşağıdaki gibi yapılabilmekte:

app.MapPost("/postDeneme",(Human human)=>{
    return human;
    }); 
//curl -H "Content-Type: application/json" -X POST -d '{"name":"bir","Age":2,"Profession":"Sociologist"}'   https://localhost:7125/postDeneme/

Görüldüğü üzere kullanımı oldukça kolay

Microsoft’un kendi dökümantasyonunda aşağıdaki gibi bir yapı kurulmuş:

app.MapGet("/Model",null);
app.MapGet("/Model/{id}",null);
app.MapPost("/Model",null);
app.MapPut("/Model/{id}",null);
app.MapDelete("/Model/{id}",null);

Şeklinde tam anlamıyla bir model bazlı controller’ın yaptığı bütün işleri yapması istenmekte. Ki gerçekten de yapar.

Tabiki Http kullandığımızı hatırlıyoruz ve istediğimiz status code ile cevap oluşturabiliyoruz:

app.MapGet("/badrequest",()=>{
     return Results.BadRequest("Problems");
    });

Son olarak yukarıda belirttiğim /Model/{id}‘deki id’yi nasıl aldığımıza gelelim:

app.MapGet("/birdiger/{id}",(int id)=>{
    return Results.Ok(id);
    }); //https://localhost:7125/birdiger/1446544

Evet gördüğünüz gibi gayet kullanılabilir ve Node.js 🙂 gözüken bir yapı. Özellikle küçük denemeler yaparken şimdiden kullanmaya başladım ben.

Not: Bütün Kodlar Raspberry Pi 400 üzerinde yazılmış ve çalıştırılmıştır.

Raspbian (Raspberry Pi OS)’da Python Scriptini Crondan çalıştırmak

Cron ile çalıştırmak için python scriptinizi executable olarak kullanmanızı önermekteyim. Executable olarak kullanabilmeniz için öncelikle shebang satırını eklemeniz gerekmektedir. Şöyleki seçtiğiniz python interpretarına göre değişecektir ancak python3 ile kullandığınızda:

#!/usr/bin/env python3

Ardından executable yetkisini vermeniz gerekmektedir:

chmod +x scriptname.py

Sonrasında da crontab -e ile aşağıdaki gibi bir satırı ekliyoruz:

*/5 * * * * /home/pi/Documents/scriptname.py

Artık 5 dakikada bir çalışan python scriptiniz var. Artık Sensör verilerinizini kontrolünü mü yaparsanız yoksa birtakım uzak servisler ile mi konuşursunuz bilemem 🙂 .

Raspberry Pi Zero W ve Basit bir Usb Webcam ile Güvenlik Kamerası Benzeri bir sistem Kurmak

Öncelikle fotoğrafları çekmek için fswebcam’i yüklemeniz gerekmektedir. Fswebcami şu şekilde yükleyebirsiniz:

sudo apt install fswebcam

fswebcam ile bağladınız usb kamerayı test etmek için şu şekilde Raspiban’ın Masaüstüne fotoğraf kaydedebilirsiniz:

fswebcam /home/pi/Desktop/denemefotosu.jpg

Eğer görüntü alıyorsanız kamera açınızdan memnunsanız sonraki aşamalara geçebilirsiniz.

Sonrasında çekilen fotoğrafı nereden kontrol edeceğimiz gerçeği ile karşı karşıya kalıyoruz. Yapabileceklerimiz arasında direkt olarak dropbox hesabına yollamak veya Telegrama atmak gibi seçenekler de var ancak şu anlık en basit olan yöntem olan lokalde bir webserver kurup oradan almak yöntemini tercih edeceğim. Öncelikle lighttpd isimli Apache Web Server forkunu kuruyoruz:

sudo apt-get install lighttpd

Ardından fotoğrafları direkt olarak var/www/html içine atan (Best Practive değil) fswebcam komutunu yazıyoruz:

sudo fswebcam -r 640x480 /var/www/html/sonfoto.jpg

Ardından fotoğrafı görmemiz için index.html’i şu şekilde değiştiriyoruz:

<html lang="tr">
<head>
<meta charset="utf-8">
<title>Güvenlik Kamerası Görüntüsü </title>
</head>
<h1>Kamera Görüntüsü </h1>
<p>
Sorumluluk Kabul Etmemekteyiz. 
 </p>
<img src="sonfoto.jpg"> </img>
</html>

Evet Sonrasında görüntümüzü local ağ içinde Raspberry’nin ip adresini browsera yazarak sonfotoyu görebilirsiniz. Şöyleki:

Evet peki fotoğrafta belli aralıklar ile güncellenmesini nasıl sağlayacaksınız? Cron ile tabikide. Öncelikle Cron ile örnek olarak 5 dakikada bir fotoğraf güncellensin demek için yazmamız gereken komut şudur:

*/5 * * * * sudo fswebcam -r 640x480 /var/www/html/sonfoto.jpg

Yukarıdaki komutu crontab -e komutunu terminale yazdıktan sonra direkt olarak açılan editöre yapıştırabilirsiniz.

Evet artık 5 dakikada bir güncellenen bir kameraya sahipsiniz. Uzak ağdan da görmek isterseniz Raspberryinizi internete açmak yerine Dropbox gibi bir cloud servisine saatte bir güncelleyecek şekilde yükleyebilirsiniz. Dropbox’un Python apisinin Raspberry Pi ile kullanmaya oldukça yatkın olduğunu da söyleyebilirim.

Sonrasında çeşitli Computer Vision yetenekleri kazandırabilirsiniz. Örnek olarak kadrajda bir insan var veya Sahne değişti gibi basit işlemleri size direkt olarak mail atmasını sağlayabilirsiniz. Belirtilen Vision işlemlerini Cloud’dan Triggerlayarak (Storage’a dosya eklendiğinde) da gerçekleştirebilirsiniz.

Evet size kalmış. Raspberry Pi Zero W yerine en az Raspberry Pi 3 kullanmanızı öneriyorum Computer Vision işlemleri için ancak geriye kalan (cloud’a gönderme vb’de) Zero W’nun bir problem yaşatacağını zannetmiyorum.

fake-hwclock ile Raspberry Pi’de Hardware Clock Varmış gibi davranmak

fake-hwclock basitçe o anki tarihi (belli aralıklar ile) dosyaya yazmakta ve network bağlantısı kesildiğinde dosyadan geri çağırmaktadır. Yaptığı işlem sayesinde 1970 Ocak veya 2009 Ocak tarihlerine dönmek yerine büyük ihtimal ile bir saat veya daha az öncesine dönmektesiniz. Örnek olarak Raspbian (Raspberryi Pi OS) işletim sisteminde fake-hwclock kullanılmaktadır.

Örnek olarak Raspbian üstünde etc/fake-hwclock.data isminde bir klasörde saklanmakta son kaydedilen tarih ve saat. Şöyleki:

Gördüğünüz gibi Saat 12:21 iken son kaydedilen tarih saat bugün 09:17 +3:00 (+3’te olduğumuz için 3 saat ekliyoruz.) yani 12:17 saatini göstermekte. Bir çok işlem için yeterli ve veri bütünlüğü açısından da bir çok projeyi kurtarabilir gibi gözükmektedir. Hardware Clock’u olmayan her sistem için hayat kurtaran bir özellik olarak göze çarpmaktadır.

Manuel olarak tarih ve saati kayıt etmek isterseniz:

sudo fake-hwclock save

komutu ile kayıt işlemini gerçekleştirebilirsiniz. Şöyleki:

Elektrik kesildikten sonra makinenin açılması süresinde sıralı bir şekilde birtakım tarihe ve saate bağlı işlemler yaptığınız durumlarda verinizin ve yaptığınızın işlemin çöp olmamasını sağlayan fake-hwclock gerçekten güzel ve faydalı bir Daemon. Yine de Raspberryi Pi ile tarih ve saatin önemli olduğu işler yapacak iseniz bir RTC (Hardware Clock) almanızı öneriyorum.