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
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.
- Ortamınıza Python 3.9.x ürününü kurun.
- GIT' i kurun.
- Pythoniçin pip3 paket yöneticisini kurun.
- Kod güncellemelerini yapmak için Xcodegibi bir düzenleyiciyi kurun.
- HelloWorld başlangıç paketini klonlayın
- Bir uçbirim penceresi açın.
- Başlangıç paketi için yeni bir proje klasörü yapın. Örneğin,
mkdir project. - Proje dizinine geçin. Örneğin,
cd project. - Başlangıç paketini klonlayın. Girin:
git clone --branch starter_package https://github.com/ibm-watson-iot/functions.git - Başlangıç paketini proje dizinine kopyaladığınızı doğrulayın.
- Başlangıç paketindeki functions (İşlevler) dizinine geçin. Girin:
cd functions - Girin:
git status - Çalışma dizini yolunu daha sonra kullanmak üzere kopyalayın.
pwdkomutunu girin ve yolu kopyalayın. setup.pydosyasını açın.setup.pydosyası, proje için gerekli olan paket adını ve paket listesini tanımlar.nameparametresinicustom{your_initials}olarak ayarlayın. {your_initials} değişkenini baş harflerinizle ya da başka bir benzersiz değerle değiştirin.ibm-watson-iot/functionshavuzunda,iotfunctionpaketinin doğru sürüm olduğunu doğrulayın. Örneğin, Maximo Monitor 8.8için, paket8.8.XGitHub şubesinden olmalıdır. Sürümdekixdeğerini başka bir değerle değiştirmeyin. Aşağıdaki metin örnek birsetup.pydosyasıdır. Ad parametresicustomIdolarak ayarlanır ve8.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'])
- PyCharm topluluk basımı kurun.
- PyCharm' ta, ortamınızı eşkopyaladığınız başlangıç paketine yönlendirin. Kopyaladığınız dizini bulmak için Aç simgesini tıklatın ve göz atın.
- Yeni bir Pycharm sanal ortamı ayarlayın.
- PyCharm > Tercihler > Project < your_project> > Project Interpreter öğelerini seçin.
- Yeni bir sanal ortam oluşturuyorsanız:
- Ayarlar simgesini tıklatın ve Ekle' yi tıklatın.
- Proje klasörünüzün yerini belirtin.
- Temel yorumlayıcıyı Python 3.9.x dizininize ayarlayın.
- Var olan bir sanal ortamınız varsa, proje yorumlayıcını Python 3.xolarak ayarlayın.
iotfunctionspaketini 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.
- Eşkopyaladığınız başlangıç paketi için GitHub ' da yeni bir havuz oluşturun.
- Havuz, pip kuruluşundan erişilebilen bir URL ' ye sahip olmalıdır.
- En iyi uygulama, havuzu özel yapmak olmalıdır. Havuza kişisel erişim belirteci kullanılarak erişilebilir.
- Ana dalı oluşturmak için havuza bir dosya ekleyin. Örneğin,
test.mdadını taşıyan boş bir dosya ekleyin veCommit new filesimgesini tıklatın. - Projeyi düzenlemek üzere yerel olarak PyCharm ' da açın.
- 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 - Change the module name,
custom, to a unique name, such ascustomyourinitials. Örneğin,customld. custom<yourinitials>içinde birmultiplybyfactor<yourinitials>.pyiş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ı
executeyöntemine ekliyorsunuz. You set the inputs and outputs arguments for the function in thebuild_uimethod. 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.
credentials_as.jsondosyasıdosyasını karşıdan yükleyin.- 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.
- Proje klasöründeki bir uçbirim penceresini açın.
- Girin:
git remote -v. Uzak havuz halahttps://github.com/ibm-watson-iot/functions' a işaret ediyor - Uzak kaynak URL adresini aşağıdaki komutları kullanarak değiştirin:
Getirme ve İtme URL ' lerinin havuzunuzu gösterdiğini doğrulayın.git remote set-url origin URL_To_YOUR_GITHUB_REPOSITORY - Aşağıdaki komutu kullanarak yukarı uzak uzak akışı ekleyin. Girin:
git remote add upstream https://github.com/ibm-watson-iot/functions.git - Dosyalarınızı GIT ' e ekleyin ve kesinleştirin.
- PyCharmiçinde,
custom<your_initials>dizinini seçin. - Git > Ekle öğelerini seçin.
- Git > Commit seçeneğini belirleyin.
- Değişiklikleri Kesinleştir penceresinde Kesinleştirdüğmesini tıklatın.
- Git > Havuz > İt öğelerini seçin.
- İtdüğmesini tıklatın.
- PyCharmiçinde,
- Modülünüzün havuzunuzdaki bir
starter_packagedalı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.
scriptsklasöründekitest_my_custom_function.pyadlı 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- Maximo Monitorolanağına bağlanın.
test_my_custom_function.pykomut 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) - İşlevi içe aktarın ve somutlaştırır.
test_my_custom_function.pykomut 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) - 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>.csvdosyasını arayın. Girin:python3 test_my_custom_function.py
Adım 7: Özel işlevinizi kaydettirin.
scriptsklasöründekiregister_my_custom_function.pyadlı 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- Maximo Monitorolanağına bağlanın.
register_my_custom_function.pykomut 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) `` register_my_custom_function.pykomut 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>])- 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.
- Setup (Ayar) sayfasında, Devices (Aygıtlar) sekmesinde, yeni bir aygıt tipi eklemek için artı (+) simgesini tıklatın.
- Robot örnek tipi şablonunu seçin.
- Aygıt tipine bir ad atayın.
- Oluştur'u tıklatın.
- Ö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.
- Bir
distancemetriği yaratmadıysanız, bu metriği ekleyin. Tutorial: Ekleme ifadeleriiçindeki adımları izleyin. - Veri sekmesinden, Metrik oluştur' u tıklatın.
- Katalogdan
MultiplyByFactor<YourInitials>işlevini seçin. - Kapsamı ayarlayın ve İleri' yi tıklatın.
- Faktör alanına 2 girin.
input_itemalanındadistanceseçeneğini belirleyin.- İleri'yi tıklatın.
- Çıkışı 'adjusted_distance' olarak yeniden adlandırın.
- Oluştur'u tıklatın.
- 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.