Beispiel #1
0
    def variables(self, news: dict):

        trigger_key = self.param['trigger_key']
        if not trigger_key: return

        if trigger_key not in news: return

        new_val = news[trigger_key]
        trigger_val = self.param['trigger_val']
        if trigger_val and trigger_val != new_val: return

        #TODO if..

        out_time = int(float(self.param['out_time']) * 1000)  #TODO
        if self.triggered:
            trigger_re = self.param['trigger_re']
            #TODO retrigger
            self.timer_next = Timer.clock() + out_time

        else:
            self.triggered = True
            self.timer_next = Timer.clock() + out_time

            Variable.set(self.param['out_key'], self.param['out_val_1'])
            log(LOG_DEBUG, 'TimeSwitch for trigger {}', trigger_key)
Beispiel #2
0
 def timer(self, prepare: bool):
     while self.process():
         print(self.value, self.unit, self.form)
         key = self.param['RespVar']
         source = self.param['NAME']
         Variable.set(key, self.value, source)
     if self._ser:
         self._ser.write(COMMAND_READ)
Beispiel #3
0
 def timer(self, prepare: bool):
     name = self.param['RespVarCode']
     if name:
         val = touched()
         print(val)
         if val != self._last_val:
             self._last_val = val
             Variable.set(name, val)
 def timer(self, prepare: bool):
     name = self.param['RespVar']
     if name:
         val = self._i2c.read_byte()
         print(val)
         if val != self._last_val:
             self._last_val = val
             Variable.set(name, val)
Beispiel #5
0
 def timer(self, prepare: bool):
     name = self.param['RespVar']
     if name:
         data = self._i2c.read_buffer(2)
         val = (data[1] << 8) | data[0]
         #print(val)
         if val != self._last_val:
             self._last_val = val
             Variable.set(name, val)
Beispiel #6
0
 def timer(self, prepare:bool):
     for key, reg in (('RespVarA', MCP23017_GPIOA), ('RespVarB', MCP23017_GPIOB)):
         name = self.param[key]
         if name:
             val = self._i2c.read_reg_byte(reg)
             print(val)
             if val != self._last_val:
                 self._last_val = val
                 Variable.set(name, val)
Beispiel #7
0
 def timer(self, prepare: bool):
     name = self.param['RespVar']
     if name:
         #data = self._i2c.read_reg_buffer(0, 2)
         data = self._i2c.read_buffer(2)
         e = (data[0] >> 4) & 0x0F
         m = ((data[0] & 0x0F) << 8) | data[1]
         val = 0.01 * (1 << e) * m
         print(val)
         Variable.set(name, val)
Beispiel #8
0
 def timer(self, prepare: bool):
     name = self.param['RespVar']
     if name:
         data = self._i2c.read_buffer(2)
         val = ((data[0] & 0xFF) << 3) | ((data[1] & 0x01) >> 5)
         if val >= 0x400:
             val -= 0x800
         val /= 8
         print(val)
         Variable.set(name, val)
Beispiel #9
0
    def timer(self, prepare:bool):
        if self.sum_count:
            source = self.param['NAME']
            pm100 = self.sum_pm100 / self.sum_count
            print(pm100)

            key = self.param['RespVarPM100']
            Variable.set(key, pm100, source)

            self.sum_pm100 = 0
            self.sum_count = 0
Beispiel #10
0
 def timer(self, prepare: bool):
     name = self.param['RespVar']
     if name:
         val = self._i2c.read_reg_word(0, little_endian=False, signed=True)
         #print(val)
         if self._map_adc_0 != self._map_adc_1:
             val = (val - self._map_adc_0) \
                 / (self._map_adc_1 - self._map_adc_0) \
                 * (self._map_val_1 - self._map_val_0) \
                 + self._map_val_0
             #print(val)
         Variable.set(name, val)
Beispiel #11
0
 def timer(self, prepare:bool):
     name_t = self.param['RespVarT']
     name_h = self.param['RespVarH']
     if name_t or name_h:
         data = self._i2c.read_reg_buffer(self, 0, 5)
         #TODO Checksum data[4]
         print(data)
         if name_t:
             t = data[2] + data[3]/10
             Variable.set(name_t, t)
         if name_h:
             h = data[0] + data[1]/10
             Variable.set(name_h, h)
Beispiel #12
0
 def timer(self, prepare: bool):
     data = self._i2c.read_reg_buffer(self._ctrl_reg, 5)
     for i, key in enumerate(
         ['RespVar0', 'RespVar1', 'RespVar2', 'RespVar3'], 1):
         name = self.param[key]
         if name:
             val = data[i]
             if self._map_adc_0 != self._map_adc_1:
                 val = (val - self._map_adc_0) \
                     / (self._map_adc_1 - self._map_adc_0) \
                     * (self._map_val_1 - self._map_val_0) \
                     + self._map_val_0
                 print(val)
             Variable.set(name, val)
Beispiel #13
0
 def timer(self, prepare: bool):
     name_t = self.param['RespVarT']
     name_h = self.param['RespVarH']
     if name_t or name_h:
         self._i2c.write_buffer([0xE0, 0x00])
         data = self._i2c.read_buffer(6)
         #TODO Checksum data[2] data[5]
         #print(data)
         if name_t:
             t = ((data[0] << 8) | data[1]) / (65535 / 175) - 45
             Variable.set(name_t, t)
         if name_h:
             h = ((data[3] << 8) | data[4]) / 655.35
             Variable.set(name_h, h)
Beispiel #14
0
    def timer(self, prepare:bool):
        if self.sum_count:
            source = self.param['NAME']
            pm2_5 = self.sum_pm2_5 / self.sum_count * 0.1
            pm10 = self.sum_pm10 / self.sum_count * 0.1
            #print(pm2_5, pm10)

            key = self.param['RespVarPM2_5']
            Variable.set(key, pm2_5, source)
            key = self.param['RespVarPM10']
            Variable.set(key, pm10, source)

            self.sum_pm2_5 = 0
            self.sum_pm10 = 0
            self.sum_count = 0
Beispiel #15
0
    def timer(self, prepare: bool):
        if not self._i2c:
            return

        try:
            name = self.param['RespVar']
            if name:
                val = self._i2c.read_byte()
                print(val)
                if val != self._last_val:
                    self._last_val = val
                    Variable.set(name, val)

        except Exception as e:
            print(str(e))
            self._last_error = str(e)
    def timer(self, prepare: bool):
        self.idle()

        counter = self._counter
        clock = Timer.clock()
        clock_diff = clock - self._last_clock
        self._counter = 0
        self._last_clock = clock
        counter *= 1000 / clock_diff
        scale_str = self.param['Scale']
        if scale_str:
            counter *= float(scale_str)

        key = self.param['RespVar']
        source = self.param['NAME']
        Variable.set(key, counter, source)
Beispiel #17
0
    def _process_inputs(self):
        if not self._i2c:
            return
        print('+', end='')

        try:
            name = self.param['RespVar']
            if name:
                val = self._read()
                print(val)
                if val != self._last_val:
                    self._last_val = val
                    Variable.set(name, val)

        except Exception as e:
            print(str(e))
            self._last_error = str(e)
    def _process_inputs(self):
        if not self._ser:
            return

        try:
            name = self.param['RespVarDSR']
            if name:
                val = self._ser.dsr
                if val != self._last_dsr:
                    self._last_dsr = val
                    Variable.set(name, self._get_val_obj(val))

            name = self.param['RespVarCTS']
            if name:
                val = self._ser.cts
                if val != self._last_cts:
                    self._last_cts = val
                    Variable.set(name, self._get_val_obj(val))

            name = self.param['RespVarRI']
            if name:
                val = self._ser.ri
                if val != self._last_ri:
                    self._last_ri = val
                    Variable.set(name, self._get_val_obj(val))

            name = self.param['RespVarCD']
            if name:
                val = self._ser.cd
                if val != self._last_cd:
                    self._last_cd = val
                    Variable.set(name, self._get_val_obj(val))

            name = self.param['RespVarRXD']
            if name:
                val = self._ser.in_waiting > 0  # Hack: pull RXD pin to low get at least 1 char in buffer
                if val:
                    self._ser.reset_input_buffer(
                    )  # Hack: This leaves in_waiting to 1 if RXD pin is still low
                if val != self._last_rxd:
                    self._last_rxd = val
                    Variable.set(name, self._get_val_obj(val))
        except Exception as e:
            self._last_error = str(e)
            pass
Beispiel #19
0
def cmd_variable_set(cmd: dict) -> tuple:
    """ sets the value of a variable """
    key = cmd.get('key', None)
    value = cmd.get('value', None)
    source = cmd.get('SRC', None)
    source = cmd.get('source', source)

    try:
        if type(value) is str:
            value = json.loads(value)
    except:
        pass

    last_tick = Variable.set(key, value, source)

    return (0, last_tick)
Beispiel #20
0
    def idle(self):
        if not self._ser:
            return

        while self._ser.any():
            data = self._ser.read()
            data = data.decode()
            sentence = self._gps.update(data)
            if sentence:
                #print(sentence, self._gps.timestamp)
                if sentence == 'GPRMC' and self._gps.valid:
                    source = self.param['NAME']

                    #print(sentence, self._gps.timestamp, self._gps.local_offset)

                    key = self.param['RespVarPos']
                    if key:
                        lat = self._gps.latitude
                        lon = self._gps.longitude
                        pos = '{:d}°{:02d}\'{:02.1f}"{} {:d}°{:02d}\'{:02.1f}"{}'.format(
                            lat[0], int(lat[1]),
                            math.modf(lat[1])[0] * 60.0, lat[2], lon[0],
                            int(lon[1]),
                            math.modf(lon[1])[0] * 60.0, lon[2])
                        #pos = self._gps.latitude_string() + ' ' + self._gps.longitude_string()
                        Variable.set(key, pos, source)

                    key = self.param['RespVarLat']
                    if key:
                        lat = self._gps.latitude
                        value = lat[0] + lat[1] / 60
                        if lat[2] == 'S':
                            value = -value
                        Variable.set(key, value, source, '°', '{:.6f}')

                    key = self.param['RespVarLon']
                    if key:
                        lon = self._gps.longitude
                        value = lon[0] + lon[1] / 60
                        if lon[2] == 'W':
                            value = -value
                        Variable.set(key, value, source, '°', '{:.6f}')

                    key = self.param['RespVarAlt']
                    if key:
                        alt = self._gps.altitude
                        Variable.set(key, alt, source, 'm', '{:.1f}')

                    key = self.param['RespVarCrs']
                    if key:
                        crs = self._gps.course
                        Variable.set(key, crs, source, '°', '{:.1f}')

                    key = self.param['RespVarSpd']
                    if key:
                        spd = self._gps.speed[2]
                        Variable.set(key, spd, source, 'km/h', '{:.3f}')
Beispiel #21
0
 def timer(self):
     self.triggered = False
     self.timer_next = None
     Variable.set(self.param['out_key'], self.param['out_val_0'])
     log(LOG_DEBUG, 'TimeSwitch reset')
Beispiel #22
0
 def timer(self, prepare: bool):
     log(5, 'ggTestA Timer')
     Variable.set((self.param['NAME'], self.param['name_t']),
                  random.random())
Beispiel #23
0
 def timer(self, prepare: bool):
     while self.process():
         print(self.value, self.unit, self.form)
         key = self.param['RespVar']
         source = self.param['NAME']
         Variable.set(key, self.value, source, self.unit, self.form)
Beispiel #24
0
 def timer(self, prepare: bool):
     log(5, 'ggTestB Timer')
     Variable.set((self.param['NAME'], 'Voltage'), random.random() * 23.0)
 def timer(self, prepare: bool):
     gest_data = self._i2c_read_reg_buffer(0x43, 1)
     Variable.set(self.param["Gesture"], gest_data[0])
Beispiel #26
0
    def timer(self, prepare: bool):
        x, y, z = self._accel.x(), self._accel.y(), self._accel.z()

        Variable.set((self.param['NAME'], self.param['name_x']), x)
        Variable.set((self.param['NAME'], self.param['name_y']), y)
        Variable.set((self.param['NAME'], self.param['name_z']), z)
Beispiel #27
0
 def on_message(client, self, msg):
     topic = self.param['SubVarPrefix'] + msg.topic.replace('/', '.')
     payload = msg.payload.decode()
     print(topic + "     " + payload)
     Variable.set(topic, payload, 'MQTT')