def form_valid(self, form): if self.unit['type_of_unit'] == UnitType.TEMPERATURE_UNIT: obj = TemperatureUnitValue(timestamp=timezone.now(), incoming=True, **form.cleaned_data) serializer_obj = json.dumps( serializers.TemperatureUnitValueSerializer(obj).data) prepared_objs = [ json.dumps({ 'data': serializer_obj, 'type': 'TemperatureUnitValue' }) ] elif self.unit['type_of_unit'] == UnitType.SWITCH_UNIT: obj = SwitchUnitValue(timestamp=timezone.now(), incoming=True, **form.cleaned_data) serializer_obj = json.dumps( serializers.SwitchUnitValueSerializer(obj).data) prepared_objs = [ json.dumps({ 'data': serializer_obj, 'type': 'SwitchUnitValue' }) ] elif self.unit['type_of_unit'] == UnitType.HUMIDITY_UNIT: obj = HumidityUnitValue(timestamp=timezone.now(), incoming=True, **form.cleaned_data) serializer_obj = json.dumps( serializers.HumidityUnitValueSerializer(obj).data) prepared_objs = [ json.dumps({ 'data': serializer_obj, 'type': 'HumidityUnitValue' }) ] else: raise Exception("Invalid Type Of Device") payload = { 'device': int(self.kwargs.get('device')), 'unit': self.unit['pk'], 'data': prepared_objs } InternalApi.send_data_to_unit(self.hub, payload) connected_units = InternalApi.get_connected_units_with_unit( self.token, self.hub, self.unit['pk']) for connected_unit in connected_units: payload = { 'device': connected_unit['dest_device'], 'unit': connected_unit['dest_unit'], 'data': prepared_objs } hub = AuthServiceApi.get_hub(connected_unit['dest_hub']) InternalApi.send_data_to_unit(hub, payload) return HttpResponseRedirect(self.get_success_url())
def mqtt_callback(client, userdata, message): global models global serializers print(message.payload) try: obj = json.loads(message.payload if not isinstance( message.payload, bytes) else message.payload.decode("UTF-8")) except Exception as e: print(e) if 'device' not in obj or 'unit' not in obj or 'data' not in obj: return device = models.Device.objects.get(pk=obj['device']) unit = models.DeviceUnit.objects.get(pk=obj['unit'], device=device) if device.type_of_device == DeviceType.GENERIC_HUMIDITY_SENSOR: return elif device.type_of_device == DeviceType.GENERIC_TEMPERATURE_SENSOR: objs = drivers.GTS.driver.driver_function(models, unit, obj['data']) elif device.type_of_device == DeviceType.GENERIC_LAMP: objs = drivers.GL.driver.driver_function(models, unit, obj['data']) else: return prepared_objs = [] for o in objs: o.save() if isinstance(o, models.TemperatureUnitValue): serializer_obj = json.dumps( serializers.TemperatureUnitValueSerializer(o).data) prepared_obj = { 'data': serializer_obj, 'type': 'TemperatureUnitValue' } prepared_objs.append(json.dumps(prepared_obj)) if isinstance(o, models.SwitchUnitValue): serializer_obj = json.dumps( serializers.SwitchUnitValueSerializer(o).data) prepared_obj = {'data': serializer_obj, 'type': 'SwitchUnitValue'} prepared_objs.append(json.dumps(prepared_obj)) connected_units = models.ConnectedUnit.objects.filter(from_unit=unit) print(connected_units) for connected_unit in connected_units: payload = { 'device': connected_unit.dest_device, 'unit': connected_unit.dest_unit, 'data': prepared_objs } try: hub = AuthServiceApi.get_hub(connected_unit.dest_hub) except Exception as e: print(e) try: InternalApi.send_data_to_unit(hub, payload) except Exception as e: print(e)