コード例 #1
0
    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())
コード例 #2
0
ファイル: mqtt_parser.py プロジェクト: SzateX/InzynierkaV2
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)