Как использовать?
Просто в коде сценариев и методов используйте синтаксис Python. Система пытается сама определить язык и использоваться соответствующий интерпретатор. В Linux-системах используется тот интерпретатор Python, который установлен по-умолчанию и вызывается через команду python (для системы на базовом образе (Raspberry Pi) это должно работать без дополнительных настроек). Если хотите использовать свой интерпретатор, то необходимо в файле config.php прописать константу PYTHON_PATH -- в Windows-системе это обязательно нужно сделать, чтобы данный функционал заработал.
Пример установки константы:
Код: Выделить всё
Define('PYTHON_PATH','/usr/bin/python');
Для работы с системой для Python-кода автоматически подключается библиотека mjdm (/lib/python/mjdm.py) из которой доступны следующие функции:
mjdm.runScript(scriptName, params) -- запуск скрипта scriptName с параметрами (не обязательно), params -- здесь и далее переменная типа "словарь"
mjdm.callMethod(objectMethodName, params) -- запуск метода объекта "object.method" с параметрами (не обязательно)
mjdm.setGlobal(propertyName, value) -- установка свойства "object.property"
mjdm.getGlobal(propertyName) -- получение значения свойства
mjdm.callAPI(api_url, method, params) -- вызов функции API (например "/api/method/object.method") с параметрами (не обязательно)
Пример кода сценария:
Код: Выделить всё
print("This is Python script code")
x = 1
print("x is " + str(x) + ".")
mjdm.runScript("timeNow",{'add': 'Привет'})
mjdm.callMethod("openClose01.unblockSensor")
mjdm.setGlobal("Openclose01.blocked",0)
mjdm.sg("Openclose01.blocked",0)
print(mjdm.gg("Openclose01.blocked"))
Python-код при использовании в методе может обращаться к данным/методам объекта, которому принадлежит, с помощью следующего кода:
self.setProperty(property_name,value) -- установка свойства "property_name" данного объекта
self.getProperty(property_name) -- получение свойства "property_name" данного объекта
self.callMethod(method_name , params); -- запуск метода "method" данного объекта с параметрами (не обязательно)
Пример кода метода:
Код: Выделить всё
print("This is Python method code")
self.setProperty("sampleProperty",2)
print(self.getProperty("sampleProperty"))
self.callMethod("sampleMethod2")
Вы можете без каких-либо проблем вызывать сценарии/методы "друг из друга" независимо от того, как они написаны (PHP/Blockly/Python).
При вызове сценария/метода на Python с передачей параметров, их можно использовать через переменную params -- она имеет тип "словарь" и будет содержать передаваемые параметры.
Python-код можно по идее и в модули встраивать, в системе появилась PHP-функция python_run_code($code, $params = '') -- она исполняет Python-код, но пока вариант встраивания в модуль лишь теоретический и на практике не использовался.
Обратите внимание! Поддержка Python реализована только в сценариях и методах. Если какой-то модуль позволяет в качестве реакции задавать код, то скорее всего поддерживается только код на PHP (например, код в Меню, Веб-переменных, Шаблонах поведения и т.п.)