def Start(): sensorType = Constellation.GetSetting("SensorType") if sensorType == "DHT11": sensor = Adafruit_DHT.DHT11 elif sensorType == "DHT22": sensor = Adafruit_DHT.DHT22 elif sensorType == "AM2302": sensor = Adafruit_DHT.AM2302 else: Constellation.WriteError( "Sensor type not supported ! Check your settings") return sensorPin = int(Constellation.GetSetting("SensorPin")) Constellation.WriteInfo("%s on #%d is ready !" % (sensorType, sensorPin)) lastSend = 0 while Constellation.IsRunning: ts = int(round(time.time())) if ts - lastSend >= int(Constellation.GetSetting("Interval")): humidity, temperature = Adafruit_DHT.read_retry(sensor, sensorPin) if humidity is not None and temperature is not None: Constellation.PushStateObject( "Temperature", round(temperature, 2), lifetime=int(Constellation.GetSetting("Interval")) * 2) Constellation.PushStateObject( "Humidity", round(humidity, 2), lifetime=int(Constellation.GetSetting("Interval")) * 2) lastSend = ts else: Constellation.WriteError("Failed to get reading") time.sleep(1)
def OnStart(): # Register callback on package shutdown Constellation.OnExitCallback = OnExit # Write log & common properties Constellation.WriteInfo("Hi I'm '%s' and I currently running on %s and %s to Constellation" % (Constellation.PackageName, Constellation.SentinelName if not Constellation.IsStandAlone else 'local sandbox', "connected" if Constellation.IsConnected else "disconnected")) # GetSetting Constellation.WriteInfo("Demo1 = " + str(Constellation.GetSetting("Demo1"))) # If setting not exist, return None ! # Send message without parameter Constellation.SendMessage("DemoPackage", "HelloWorld", [], Constellation.MessageScope.package) # Send message with 2 parameter Constellation.SendMessage("DemoPackage", "SendMessage", [ "+33123456789", "Hi" ], Constellation.MessageScope.package) # Send message with complex parameter Constellation.SendMessage("DemoPackage", "DemoComplex", { "A": "This is a string", "B": 123, "C": True }, Constellation.MessageScope.package) # Send message "MessageCallbackWithComplexeResponse" with "123" as parameter to "Demo" pasckage and write the "A" property of the response Constellation.SendMessageWithSaga(lambda response: Constellation.WriteInfo("A=%s" % response.A), "Demo", "MessageCallbackWithComplexResponse", 123) # Push basic StateObject Constellation.PushStateObject("DemoStr", "Demo de seb") # StateObject with "String" as value Constellation.PushStateObject("DemoBool", False, lifetime=10) # StateObject with "Bool" as value and a lifetime (10 sec here) Constellation.PushStateObject("DemoInt", 123, metadatas={ "DeviceId":"RPi", "Serial":"123" }) # StateObject with "Int" as value and metadatas Constellation.PushStateObject("DemoFloat", 12.45, metadatas={ "DeviceId":"RPi", "Serial":"123" }, lifetime=10) # StateObject with "Float" as value, metadatas and lifetime # Custom type descriptions Constellation.DescribeMessageCallbackType("CredentialInfo", "Credential information", [ { 'Name':'Username', 'Type':'string', 'Description': 'The username' }, { 'Name':'Password', 'Type':'string', 'Description': 'The password' }, ]) Constellation.DescribeStateObjectType("DemoType", "Demo type", [ { 'Name':'Sender', 'Type':'string', 'Description': 'The demo' }, { 'Name':'Credential', 'Type':'CredentialInfo', 'Description': 'The credential nested demo' } ]) Constellation.DeclarePackageDescriptor() # Push complex StateObject Constellation.PushStateObject("Demo", { "Sender": "DemoPython", "Credential": { "Username": "******", "Password":"******" } }, "DemoType", { "DeviceId": "RPi", "Serial":"123" }) # StateObject with custom type # WriteInfo, WriteWarn & WriteError Constellation.WriteInfo("Hello world from Python !") Constellation.WriteWarn("This is a warning !") Constellation.WriteError("This is an error !") # Last StateObjects of the previous instance if Constellation.LastStateObjects: for so in Constellation.LastStateObjects: Constellation.WriteInfo(" + %s @ %s" % (so.Name, so.LastUpdate))
def OnStart(): # Récupération des informations de configuration (clé Twitter) if Constellation.GetSetting("twitter_access_token_key") <> None: Constellation.WriteInfo("Clés de configurations récupérées : (%s ; %s)" % (Constellation.GetSetting("twitter_access_token_key"), Constellation.GetSetting("twitter_access_token_secret"))) else: #Constellation.RequestSettings() Constellation.WriteError("Problèm lors de la configuration du paquet") while(True): # Informations basiques liées à un compte Twitter : basicInformations = Tw.basicInformations(Constellation.GetSetting("twitter_access_token_key"), Constellation.GetSetting("twitter_access_token_secret")) # Vérification de la connexion au serveur Twitter try: basicInformations.id except error: Constellation.WriteError("Impossible de se connecter au serveur Twitter...") else: # Push des données Constellation.WriteInfo("Connexion au serveur Twitter : récupération des informations de @%s terminée !" % basicInformations.screen_name) Constellation.PushStateObject(basicInformations.screen_name, basicInformations.AsDict(), lifetime = 30) time.sleep(30) pass
def OnStart(): #State Object Constellation.PushStateObject("Holographer", {"Sender": "Holographer"}, "Info", { "Device_Id": "RPi", "Etat du package": "lancé" })
def DoMeasure(): # Start process process = subprocess.Popen("./" + EXECUTABLE_FILENAME, stdout=subprocess.PIPE) # Reading output for line in iter(process.stdout.readline, ''): # Parse line matchObj = re.match( 'RC: (\d*)\((.*)\), broadband: (\d*), ir: (\d*), lux: (\d*)', line) if matchObj: # Reading value returnCode = int(matchObj.group(1)) broadband = int(matchObj.group(3)) ir = int(matchObj.group(4)) lux = int(matchObj.group(5)) # Push StateObject if returnCode != 0: Constellation.WriteWarn("Unknow return code %s : %s" % (returnCode, line)) else: Constellation.PushStateObject( "Lux", { "Broadband": broadband, "IR": ir, "Lux": lux }, "LightSensor.Lux", lifetime=int(Constellation.GetSetting("Interval")) * 2) else: Constellation.WriteError("Unable to parse the output: %s" % line)
def onEventDetect(channel): input = [i for i in inputs if i['Pin'] == channel] if any(input): Constellation.PushStateObject(input[0]['Name'], bool(GPIO.input(input[0]['Pin'])), metadatas={ "Mode": "Input", "Pin": input[0]['Pin'] })
def OnStart(): #declaration du StateObject Constellation.DescribeStateObjectType( "Sensors", "StateObject qui récupère données des capteurs ", [{ 'Name': 'CO2', 'Type': 'int', 'Description': 'Temperature en °C' }, { 'Name': 'Soundlevel', 'Type': 'int', 'Description': ' intensite sonore en dB' }, { 'Name': 'Temperature', 'Type': 'float', 'Description': 'niveau de co2(en ppm)' }, { 'Name': 'Ledstate', 'Type': 'bool', 'Description': 'niveau de co2(en ppm)' }]) #ouverture de port serie Constellation.WriteInfo( "Hi I'm '%s' and I currently running on %s and %s to Constellation" % (Constellation.PackageName, Constellation.SentinelName if not Constellation.IsStandAlone else 'local sandbox', "connected" if Constellation.IsConnected else "disconnected")) connected = [] ser = 0 while len(connected) <= 0 and ser == 0: ports_series = serial.tools.list_ports.comports() for element in ports_series: connected.append(element.device) if len( connected ) > 0: # on test si plusieurs ports ont été trouvée, si oui on utilise le 1er ser = serial.Serial(connected[0], 9600) ser.flushInput() while 1: #on lit le json sorti du port serie data = ser.readline() #on lui explique que c'est un json pushMe = json.loads(data) #Et on l'envoi a constellation Constellation.PushStateObject("Sensors", pushMe) time.sleep(1)
def Start(): global sm # Init du GSM Constellation.WriteInfo("Initializing GSM") sm = gammu.StateMachine() sm.ReadConfig( Filename=Constellation.GetSetting("GammuConfigurationFilename")) sm.Init() # Deleting SMS DeleteAllSMS() # Attach to incoming events AttachIncomingEvents() # Ready Constellation.WriteInfo("GSM package is started") while Constellation.IsRunning: q = sm.GetSignalQuality() Constellation.PushStateObject("SignalQuality", q['SignalPercent']) time.sleep(10)
def DigitalWrite(name, value): ''' Write a HIGH or a LOW value to a digital pin. :param string name: Name of the digital pin defined in the configuration :param bool value: The value applied to the digital pin ''' output = [o for o in outputs if o['Name'] == name] if any(output): Constellation.WriteInfo("Setting #%d to %s" % (output[0]['Pin'], value)) GPIO.output(output[0]['Pin'], value) Constellation.PushStateObject(output[0]['Name'], value, metadatas={ "Mode": "Output", "Pin": output[0]['Pin'] }) else: Constellation.WriteError("Unknown output !")
def Start(): GPIO.setmode(GPIO.BCM) Constellation.OnExitCallback = OnExit lastSend = 0 currentValue = 0 count = 0 if (bool(Constellation.GetSetting("EnablePhotoResistor") == 'true')): Constellation.WriteInfo("LightSensor is ready !") while Constellation.IsRunning: if (bool(Constellation.GetSetting("EnablePhotoResistor") == 'true')): currentValue = currentValue + RCtime( int(Constellation.GetSetting("PhotoResistorPin"))) count = count + 1 ts = int(round(time.time())) if ts - lastSend >= int(Constellation.GetSetting("Interval")): avg = int(round(currentValue / count)) Constellation.PushStateObject( "Light", avg, lifetime=int(Constellation.GetSetting("Interval")) * 2) currentValue = 0 count = 0 lastSend = ts time.sleep(1)
registers = ReadModbusRegister( device["RegisterAddress"], device["RegistersCount"], device["SlaveID"]) result = {} for prop in device["Properties"]: try: result[prop["Name"]] = eval( prop["Selector"]) except Exception, e: Constellation.WriteError( "Error on the property '%s' of '%s' : %s" % (prop["Name"], device["Name"], str(e))) Constellation.PushStateObject( device["Name"], result, "Modbus.%s" % device["StateObjectTypeName"], lifetime=(device["RequestInterval"] / 1000) * 2, metadatas={"SlaveID": device["SlaveID"]}) except Exception, e: Constellation.WriteError( "Error while requesting %s : %s" % (device["Name"], str(e))) except Exception, e: Constellation.WriteError("Error while reading configuration : %s" % str(e)) time.sleep(1) Constellation.Start(Start)
mode = GPIO.BCM elif config["PinMode"] == 'BOARD': mode = GPIO.BOARD else: Constellation.WriteError( "Invalid pin mode. Should be set to BCM or BOARD") return inputs = config['Inputs'] outputs = config['Outputs'] except Exception, e: Constellation.WriteError("Error while reading the configuration : %s" % str(e)) return # Init I/O GPIO.setmode(mode) Constellation.PushStateObject("Mode", "BCM" if mode == GPIO.BCM else "BOARD") for i in inputs: Constellation.WriteInfo("Setting pin #%d as input" % i['Pin']) GPIO.setup(i['Pin'], GPIO.IN) GPIO.add_event_detect(i['Pin'], GPIO.BOTH, callback=onEventDetect, bouncetime=i['BounceTime'] if 'BounceTime' in i else config['BounceTime'] if 'BounceTime' in config else DEFAULT_BOUNCE_TIME) if 'Pull' in i: GPIO.setup(i['Pin'], GPIO.IN, pull_up_down=GPIO.PUD_UP if i['Pull'].lower() == "up" else GPIO.PUD_DOWN) else: