Properties¶
Properties can be use in all extensions. During the startup the server scans all extension for variables of type Property. Theses properties are exposed to the user for configuration during run time. For example the user can set the GPIO number or the 1Wire Id.
Typical example how to use properties in an actor module.
Custom Actor¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | import logging
from unittest.mock import MagicMock, patch
from cbpi.api import *
logger = logging.getLogger(__name__)
try:
import RPi.GPIO as GPIO
except Exception:
logger.error("Failed to load RPi.GPIO. Using Mock")
MockRPi = MagicMock()
modules = {
"RPi": MockRPi,
"RPi.GPIO": MockRPi.GPIO
}
patcher = patch.dict("sys.modules", modules)
patcher.start()
import RPi.GPIO as GPIO
class CustomActor(CBPiActor):
# Custom property which can be configured by the user
def init(self):
pass
def on(self, power=0):
logger.info("ACTOR %s ON" % self.id)
self.state = True
def off(self):
logger.info("ACTOR %s OFF " % self.id)
self.state = False
class GPIOActor(CBPiActor):
# Custom property which can be configured by the user
gpio = Property.Select("GPIO", options=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27], description="GPIO to which the actor is connected")
def init(self):
try:
GPIO.setup(int(self.gpio), GPIO.OUT)
GPIO.output(int(self.gpio), 0)
except Exception as e:
raise CBPiException("FAILD TO INIT ACTOR")
def on(self, power=0):
print("GPIO ON %s" % str(self.gpio))
GPIO.output(int(self.gpio), 1)
self.state = True
def off(self):
print("GPIO OFF %s" % str(self.gpio))
GPIO.output(int(self.gpio), 0)
self.state = False
class GPIORelayBoardActor(CBPiActor):
# Custom property which can be configured by the user
gpio = Property.Select("GPIO", options=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27], description="GPIO to which the actor is connected")
def init(self):
try:
GPIO.setup(int(self.gpio), GPIO.OUT)
GPIO.output(int(self.gpio), 1)
except Exception as e:
raise CBPiException("FAILD TO INIT ACTOR")
def on(self, power=0):
print("GPIO ON %s" % str(self.gpio))
GPIO.output(int(self.gpio), 0)
self.state = True
def off(self):
print("GPIO OFF %s" % str(self.gpio))
GPIO.output(int(self.gpio), 1)
self.state = False
def setup(cbpi):
'''
This method is called by the server during startup
Here you need to register your plugins at the server
:param cbpi: the cbpi core
:return:
'''
cbpi.plugin.register("CustomActor", CustomActor)
|
-
class
cbpi.api.
Property
¶ -
class
Actor
(label, description='')¶ The user select an actor which is available in the system. The value of this variable will be the actor id
-
class
Kettle
(label, description='')¶ The user select a kettle which is available in the system. The value of this variable will be the kettle id
-
class
Number
(label, configurable=False, default_value=None, unit='', description='')¶ The user can set a number value
-
class
Select
(label, options, description='')¶ Select Property. The user can select value from list set as options parameter
-
class
Sensor
(label, description='')¶ The user select a sensor which is available in the system. The value of this variable will be the sensor id
-
class
Text
(label, configurable=False, default_value='', description='')¶ The user can set a text value
-
class