Skip to content

Yazılım: Modül Yaratma

Emir HAMURCU edited this page Jul 7, 2023 · 1 revision

Python çerçevesi, işlevselliği ve davranışları genişletmek ve değiştirmek için ihtiyaç duyulan modülleri eklemek için tasarlanmıştır.

Modüller

modulesDizini içinde, çerçevede mevcut olan modüllerin mevcut listesi bulunmaktadır.

Bir modül aşağıdakileri içerir:

  • Bir modül adını tanımlayan bir sınıf tanımı
  • Oluşturulma sırasında modülü başlatmak için bir `__init__` yöntemi
  • Genellikle döngü döngüsü sırasında davranışı tetikleyen bir `loop` yöntemi
  • Modülle ilgili özel fonksiyonlar

Örnek Modül

Aşağıdaki Sensör örneğine bir göz atalım. İşlevselliği açıklamak için yorumlar eklendi.

import pigpio  # Pin erişimi için PiGPIO kütüphanesini içe aktar
from pubsub import pub  # Döngü olayına abone olmak için pubsub modülünü içe aktar

class Sensor: def init(self, pin, **kwargs): self.pi = kwargs.get('pi', pigpio.pi()) # PiGPIO örneğine referans oluştur self.pin = pin # Sensörün bağlı olduğu pin'i tanımla self.value = None # Sensörün mevcut değerini sakla pub.subscribe(self.loop, 'loop:1') # Her döngüde ana tarafından yayınlanan döngüye abone ol

def loop(self):
    if self.read():
        pub.sendMessage('motion')  # Sensör hareket algılarsa, diğer modüllerin tepki vermesi için bir mesaj gönder

def read(self):
    self.value = self.pi.read(self.pin)  # Sensörün pin değerini oku
    return self.value

Bu, modülün temel yapısını göstermektedir.

Modül interaksyonu

Modül ile programın ana etkileşimi şu şekildedir.main.pyDosyalar arasındaki ve modüller arasındaki temel etkileşim olaylar aracılığıyla gerçekleştirilir. Bu, diğer modüllere olan bağımlılığı ortadan kaldırır ve tüm modüllerin etkileşimde bulunma potansiyeline sahip olmasını sağlar.

Modül Yükleme

Çalışma zamanında hangi modüllerin yüklendiğini belirlemek için,main.pydosyası her bir modülü tek bir satırda başlatmak üzere yapılandırılmıştır.

motion = Sensor(Config.MOTION_PIN, pi=gpio)

Bazı durumlarda, başlatma koşullu olarak gerçekleştirilir ve bir bayrak veya değer kullanılarak belirlenir.modules/config.py:

if Config.MOTION_PIN is not None:
        motion = Sensor(Config.MOTION_PIN, pi=gpio)

Modülü Devredışı Bırakma

Bu uygulama yaklaşımı, hareket sensörü olmadan çerçevenin kullanılması durumunda bile sabit olan tüm modüllerin başlatılmayacağı anlamına gelir.MOTION_PINbu durumda sabit sadece Noneayarlanabilir ve hareket kodu yürütülmez. Ayrıca, normalde etkinlik tarafından tetiklenen herhangi bir davranış, koşula bağlı olarak gerçekleştirilmez.motionancak çalışma zamanında hatalara neden olacak eksik bağımlılıklar olmadığı için herhangi bir davranış gerçekleştirilmez.

Modül içerisinde periyodik davranışı tetiklemek için "loop" olayını kullanabiliriz.

Kodun çalışması sırasında periyodik olarak ateşlenen birkaç olay bulunur.

  • loop: main.py kodunun her döngüsünde bir kez yayınlanır.
  • loop:1: her saniye yayınlanır
  • loop:30: her 30 saniyede bir yayınlanır
  • loop:60: her 60 saniyede bir yayınlanır
  • loop:nightly: her gece belirli bir saatte yayınlanır.

Bu değişen frekans, farklı davranışların uygun frekansta zamanlanabilmesini sağlar. Örneğin, bir hareket algılayıcısının her saniye çalışması gerekebilirkenloopbir batarya izleyicisi sadece 60 saniyede bir çalışmayı gerektirebilir.loop:60 Benzer şekilde, bir yedekleme betiği sadece geceleyin, sistem üzerinde daha az talep olduğunda çalışabilir.