Eğitmen: Özel işlev ekleme

Bu eğitmende, bir GitHub havuzunda paketlediğiniz ve sakladığınız özel bir işlevi yazıyorsunuz. İşlevi, katalogla kaydetmeden ve hesaplamalarınızda kullanmadan önce yerel ortamınızda sınanıyor musunuz?

Bu görev hakkında

Not: Bu eğitmeni tamamlamak için örnek bir aygıt tipi şablonu ve verileri kullanıyorsunuz. Örnek aygıt tipleri, aygıt tiplerinin en son sürümünü kullanmaz ve akış veri ölçümlerini desteklemez. Daha fazla bilgi için bakınız: Creating batch or streaming data metrics.

Bu eğitmende, bir giriş öğesini katsayı değerine göre katlayan, özel bir işlev ( MultiplyByFactor) yazıyorsunuz. İşlev kodunun bir parçası olarak, giriş ve çıkış öğeleri için Maximo® Monitor denetimlerinin nasıl gösterileceğini tanımlayın. Daha sonra, giriş öğesini ve faktör değerini belirtin.

İşlevi sınamak için execute_local_test yöntemini kullanın. Bu yöntemi, IoT işlevlerinde temel sınıflardan türetilen herhangi bir işlevi sınamak için kullanıyorsunuz. Yöntem, bir işlev için yerel olarak örnek veriler üretir. Sonuçları çalışma dizininde df_test_entitity_for_function_name adlı bir dosyaya yazar. İşlev çalışırsa, bunu Maximo Monitorile kaydettirin.

Son olarak, Maximo Monitor içinde örnek bir robot aygıt tipi yaratın ve aygıt tipine yeni MultiplyByFactor işlevini uygulayın.

Bu eğitmen, özel işlev için Python paketini oluşturmak için Pycharm IDE ' yi kullanır. Başka bir IDE ya da Watson™ Studiokullanıyorsanız, bununla birlikte Python 3.9.x uygulamasını kullanmaya özen gösteriniz.

Diğer bir seçenek olarak, bu eğitmenden ayrı olarak, kendi özel işlevlerinizi oluşturmaya başlamanıza yardımcı olmak için IoT işlevlerinde bir özel işlev başlangıç paketi kullanılabilir.

Başlamadan önce

Bir başlangıç paketini eşkopyalayabilir ve yerel ortamınızda örnek bir paket olarak kullanabilirsiniz. Bir başlangıç paketinin eşkopyalanması, özel işleviniz için gerekli paketleri ( IoT işlevleri de içinde olmak üzere) kolayca kurmanız için size kolay bir yol sağlar. Başlangıç paketi, özel paketiniz için gerekli dizin yapısına bir örnek sağlar.

  1. Ortamınıza Python 3.9.x ürününü kurun.
  2. GIT' i kurun.
  3. Pythoniçin pip3 paket yöneticisini kurun.
  4. Kod güncellemelerini yapmak için Xcodegibi bir düzenleyiciyi kurun.
  5. HelloWorld başlangıç paketini klonlayın
    1. Bir uçbirim penceresi açın.
    2. Başlangıç paketi için yeni bir proje klasörü yapın. Örneğin, mkdir project.
    3. Proje dizinine geçin. Örneğin, cd project.
    4. Başlangıç paketini klonlayın. Girin: git clone --branch starter_package https://github.com/ibm-watson-iot/functions.git
    5. Başlangıç paketini proje dizinine kopyaladığınızı doğrulayın.
    6. Başlangıç paketindeki functions (İşlevler) dizinine geçin. Girin: cd functions
    7. Girin: git status
    8. Çalışma dizini yolunu daha sonra kullanmak üzere kopyalayın. pwd komutunu girin ve yolu kopyalayın.
    9. setup.py dosyasını açın. setup.py dosyası, proje için gerekli olan paket adını ve paket listesini tanımlar.
    10. name parametresini custom{your_initials}olarak ayarlayın. {your_initials} değişkenini baş harflerinizle ya da başka bir benzersiz değerle değiştirin.
    11. ibm-watson-iot/functions havuzunda, iotfunction paketinin doğru sürüm olduğunu doğrulayın. Örneğin, Maximo Monitor 8.8için, paket 8.8.X GitHub şubesinden olmalıdır. Sürümdeki x değerini başka bir değerle değiştirmeyin. Aşağıdaki metin örnek bir setup.py dosyasıdır. Ad parametresi customId olarak ayarlanır ve 8.7.X şubesi kullanılır.
#!/usr/bin/env python 
from setuptools import setup, find_packages
setup(name='customld', version='0.0.1', packages=find_packages(),
install_requires=['iotfunctions@git+https://github.com/ibm-watson-iot/functions.git@8.7.x'])
  1. PyCharm topluluk basımı kurun.
  2. PyCharm' ta, ortamınızı eşkopyaladığınız başlangıç paketine yönlendirin. Kopyaladığınız dizini bulmak için simgesini tıklatın ve göz atın.
  3. Yeni bir Pycharm sanal ortamı ayarlayın.
    1. PyCharm > Tercihler > Project < your_project> > Project Interpreter öğelerini seçin.
    2. Yeni bir sanal ortam oluşturuyorsanız:
    3. Ayarlar simgesini tıklatın ve Ekle' yi tıklatın.
    4. Proje klasörünüzün yerini belirtin.
    5. Temel yorumlayıcıyı Python 3.9.x dizininize ayarlayın.
    6. Var olan bir sanal ortamınız varsa, proje yorumlayıcını Python 3.xolarak ayarlayın.
  4. iotfunctions paketini Python ortamınıza kurmak için aşağıdaki komutu çalıştırın. Sürümünüz için doğru dal adını kullandığınızdan emin olun.
        pip3 install git+https://github.com/ibm-watson-iot/functions.git@8.7.x --upgrade

Her zaman en son IoT İşlevinin sürümünü kullandığınızdan emin olun. Maximo Monitortarafından desteklenen her bir Python modülünün sürümünü denetleyin. Desteklenen tam sürümü kullanmayarsanız, ardışık işlem hattınızın bozulması gerekir.

Adımlar

Özel bir işlevi kullanarak örnek verilere bir hesaplama uygulamak için bu adımları tamamlayın.

Adım 1: Hesaplamalarınızı tanımlayın

robotik silah geliştiren bir şirket, yeni bir robot kolu tanıtıyor ve var olan robotik olarak performans gösterdiğini test ediyor. Ekip, ilk testlerde, bazı robotlar için test sırasında yapılan mesafenin çok yüksek olduğunu keşfetti. soruşturma sonrasında ekip, test yapmak için kullanılan araçların robotun hız ve seyahat sürelerinin gecikmesine bir gecikme katıldığını keşfetti. Operasyon yöneticisi iki değeri de 2 katsayısına göre ayarlamak istiyor, ancak esnekliğin bu değeri daha sonra değiştirmesini istiyor.

Analist, benzer bir hesaplamanın diğer hesaplamalarda yararlı olabileceğini tanımlar ve bir MultiplyByFactor sınıfı yazarak işlevi genelleştirir.

distance * factor

Adım 2: İşleğinizi paketle ve GitHub' da saklayın.

  1. Eşkopyaladığınız başlangıç paketi için GitHub ' da yeni bir havuz oluşturun.
    1. Havuz, pip kuruluşundan erişilebilen bir URL ' ye sahip olmalıdır.
    2. En iyi uygulama, havuzu özel yapmak olmalıdır. Havuza kişisel erişim belirteci kullanılarak erişilebilir.
  2. Ana dalı oluşturmak için havuza bir dosya ekleyin. Örneğin, test.md adını taşıyan boş bir dosya ekleyin ve Commit new filesimgesini tıklatın.
  3. Projeyi düzenlemek üzere yerel olarak PyCharm ' da açın.
  4. Projenin aşağıdaki dizin yapısına ve dosyalara sahip olduğunu doğrulayın:
    functions
    |
    |__ setup.py
    |
    |__ scripts
      |
      |_ local_test_of_function.py
    |
    |__ custom
      |
      |_ functions.py
      |_  __init__.py
  5. Change the module name, custom, to a unique name, such as customyourinitials. Örneğin, customld.
  6. custom<yourinitials> içinde bir multiplybyfactor<yourinitials>.py işlev modülü oluşturun ve aşağıdaki kodu yapıştırın. Update the variables in <> to match your environment. Örneğin, kodunuz GitHub'da ise, PACKAGE_URL ' yi 'git+https://<XXXXXX>@github.com/github.com/jones/starter@starter_package'olarak ayarlabilirsiniz.

    Bu işlevde, iki yöntem uyguluyorsunuz. Hesaplamalarınızı execute yöntemine ekliyorsunuz. You set the inputs and outputs arguments for the function in the build_ui method. Bu bağımsız değişkenler, yapılandırma kullanıcı arabirimi aracılığıyla yapılandırılır.

    import inspect
    import logging
    import datetime as dt
    import math
    from sqlalchemy.sql.sqltypes import TIMESTAMP,VARCHAR
    import numpy as np
    import pandas as pd
    
    from iotfunctions.base import BaseTransformer
    from iotfunctions import ui
    
    logger = logging.getLogger(__name__)
    
    # Specify the URL to your package here.
    # This URL must be accessible via pip install.
    # Example assumes the repository is private.
    # Replace XXXXXX with your personal access token.
    # After @ you must specify a branch.
    
    PACKAGE_URL = 'git+https://XXXXXX@github.com/<user_id><path_to_repository>@starter_package'
    
    class MultiplyByFactor<YourInitials>(BaseTransformer):
    
        def __init__(self, input_items, factor, output_items):
    
            self.input_items = input_items
            self.output_items = output_items
            self.factor = float(factor)
            super().__init__()
        def execute(self, df):
            df = df.copy()
            for i,input_item in enumerate(self.input_items):
                df[self.output_items[i]] = df[input_item] * self.factor
            return df
    
        @classmethod
        def build_ui(cls):
            #define arguments that behave as function inputs
            inputs = []
            inputs.append(ui.UIMultiItem(
                    name = 'input_items',
                    datatype=float,
                    description = "Data items adjust",
                    output_item = 'output_items',
                    is_output_datatype_derived = True)
                          )        
            inputs.append(ui.UISingle(
                    name = 'factor',
                    datatype=float)
                          )
            outputs = []
            return (inputs,outputs)   

Adım 3: Kimlik bilgilerinizi bir dosyaya kaydedin

Maximo Monitorolanağına bağlanmak için kimlik bilgilerini ayarlayın.

  1. credentials_as.json dosyasıdosyasını karşıdan yükleyin.
  2. Değişkenleri verilerinizle değiştirin ve sonra dosyayı yerel makinenizin üzerine kaydedin.

Kimlik bilgileri dosyası, işlevi yerel olarak çalıştırmak ya da sınamak için kullanılır. Bu dosyayı adım 4içindeki dış havuzunuza itmeyin.

Adım 4: Yerel değişikliklerinizi GitHub havuzunuza doğru itin

Bu adımları tamamladığınızı doğrulayın:

  • Değiştirdiğiniz dosyalar, kodu klonladığınız GitHub havuzunu göstermekte olmaya devam eder. Uzak havuzu GitHub havuzunuza değiştirin.
  • Dış dizininizde yapılan değişiklikleri kesinleştirmeden önce, kimlik bilgileri dosyanızın işlev kodunuza eklenmediğini doğrulayın.

İşlev kodunuzu GitHub' da dış havuzunuza doğru itin.

  1. Proje klasöründeki bir uçbirim penceresini açın.
  2. Girin: git remote -v. Uzak havuz hala https://github.com/ibm-watson-iot/functions' a işaret ediyor
  3. Uzak kaynak URL adresini aşağıdaki komutları kullanarak değiştirin:
    git remote set-url origin URL_To_YOUR_GITHUB_REPOSITORY
    Getirme ve İtme URL ' lerinin havuzunuzu gösterdiğini doğrulayın.
  4. Aşağıdaki komutu kullanarak yukarı uzak uzak akışı ekleyin. Girin:
    git remote add upstream https://github.com/ibm-watson-iot/functions.git
  5. Dosyalarınızı GIT ' e ekleyin ve kesinleştirin.
    1. PyCharmiçinde, custom<your_initials> dizinini seçin.
    2. Git > Ekle öğelerini seçin.
    3. Git > Commit seçeneğini belirleyin.
    4. Değişiklikleri Kesinleştir penceresinde Kesinleştirdüğmesini tıklatın.
    5. Git > Havuz > İt öğelerini seçin.
    6. İtdüğmesini tıklatın.
  6. Modülünüzün havuzunuzdaki bir starter_package dalına yönlendirilmiş olduğunu doğrulayın.

Adım 5: Özel işlevin yerel ortamınıza kurulması

Özel işlevi yerel ortamınıza kurun. Update the variables in <> to match your environment.

pip3 install git+https://<XXXXXX>@github.com/<user_id><path_to_repository>@starter_package --upgrade

Örneğin:

pip3 install git+https://<XXXXXX>@github.com/jones/starter@starter_package --upgrade

< xxxxxx> simgesini kişisel erişim simgizle değiştirin. < /xxxxxx>

Adım 6: Özel işlevinizi yerel olarak test edin.

  1. scripts klasöründeki test_my_custom_function.py adlı bir komut dosyası oluşturun. Komut dosyasında Python kitaplıkları ve paketleri içe aktarın:
    import datetime as dt
    import json
    import pandas as pd
    import numpy as np
    from sqlalchemy import Column, Integer, String, Float, DateTime, Boolean, func
    from iotfunctions.base import BaseTransformer
    from iotfunctions.metadata import EntityType
    from iotfunctions.db import Database
    from iotfunctions import ui
  2. Maximo Monitorolanağına bağlanın. test_my_custom_function.py komut dosyasında şunu ekleyin:
    with open('credentials_as.json', encoding='utf-8') as F:
      credentials = json.loads(F.read())
    db_schema = None
    db = Database(credentials=credentials)
  3. İşlevi içe aktarın ve somutlaştırır. test_my_custom_function.py komut dosyasında aşağıdaki kodu ekleyin. Update the variables in <> to match your environment.
    from custom<yourinitials>.multiplybyfactor<yourinitials> import MultiplyByFactor<YourInitials>
    fn = MultiplyByFactor<YourInitials>(
        input_items = ['speed', 'travel_time'],
        factor = '2',
        output_items = ['adjusted_speed', 'adjusted_travel_time']
                  )
    df = fn.execute_local_test(db=db, db_schema=db_schema, generate_days=1,to_csv=True)
    print(df)
  4. Komut satırını komut satırından çalıştırın. Tarih çerçeve sonuçları bir .csv dosyasına kaydedilir. Komut dosyaları dizininde df_test_entity_for_multiplybyfactor<your_initials>.csv dosyasını arayın. Girin:
    python3 test_my_custom_function.py

Adım 7: Özel işlevinizi kaydettirin.

  1. scripts klasöründeki register_my_custom_function.py adlı bir komut dosyası oluşturun. Komut dosyasında Python kitaplıkları ve paketleri içe aktarın:
    import datetime as dt
    import json
    import pandas as pd
    import numpy as np
    from sqlalchemy import Column, Integer, String, Float, DateTime, Boolean, func
    from iotfunctions.base import BaseTransformer
    from iotfunctions.metadata import EntityType
    from iotfunctions.db import Database
    from iotfunctions import ui
  2. Maximo Monitorolanağına bağlanın. register_my_custom_function.py komut dosyasında şunu ekleyin:
    with open('credentials_as.json', encoding='utf-8') as F:
      credentials = json.loads(F.read())
    db_schema = None
    db = Database(credentials=credentials)
    ``
  3. register_my_custom_function.py komut dosyasında, işlevi kaydettirmek için aşağıdaki kodu ekleyin. Update the variables in <> to match your environment.
    from custom<yourinitials>.multiplybyfactor<yourinitials> import MultiplyByFactor<YourInitials>
    
    db.register_functions([MultiplyByFactor<YourInitials>])
  4. Komut satırını komut satırından çalıştırın. Örneğin:
    python3 register_my_custom_function.py

Adım 8: Örnek bir aygıt tipi yaratın.

  1. Setup (Ayar) sayfasında, Devices (Aygıtlar) sekmesinde, yeni bir aygıt tipi eklemek için artı (+) simgesini tıklatın.
  2. Robot örnek tipi şablonunu seçin.
  3. Aygıt tipine bir ad atayın.
  4. Oluştur'u tıklatın.
  5. Örnek aygıt tipini seçin, Set up device type(Aygıt tipini ayarla) seçeneğini ve ardından Data(Veri) seçeneğini tıklatın.

Ölçümler oluşturmak için 5 dakikaya kadar sürer.

Adım 9: Özel işlevi aygıt tipine uygulayın.

  1. Bir distance metriği yaratmadıysanız, bu metriği ekleyin. Tutorial: Ekleme ifadeleriiçindeki adımları izleyin.
  2. Veri sekmesinden, Metrik oluştur' u tıklatın.
  3. Katalogdan MultiplyByFactor<YourInitials> işlevini seçin.
  4. Kapsamı ayarlayın ve İleri' yi tıklatın.
  5. Faktör alanına 2 girin.
  6. input_item alanında distanceseçeneğini belirleyin.
  7. İleri'yi tıklatın.
  8. Çıkışı 'adjusted_distance' olarak yeniden adlandırın.
  9. Oluştur'u tıklatın.
  10. Veri öğesi listesinde adjusted_distanceseçeneğini belirleyin. Örnek veriler için özel işlevi değerlendirmek üzere Maximo Monitor için en çok 5 dakika bekleyin.