コード例 #1
0
def loop():
    global timestamp
    if current_status:
        if pwm_pin.duty() and millis_passed(timestamp) > 100:
            timestamp = get_millis()
            pwm_pin.duty(0)
        elif not pwm_pin.duty() and millis_passed(timestamp) >= 900:
            timestamp = get_millis()
            pwm_pin.duty(DUTY)
    else:
        if pwm_pin.duty():
            pwm_pin.duty(0)
コード例 #2
0
def loop():
    global timestamp
    if current_status:
        if led_pin.value() and millis_passed(timestamp) > 100:
            timestamp = get_millis()
            led_pin.off()
        elif not led_pin.value() and millis_passed(timestamp) >= sleep_timeout:
            timestamp = get_millis()
            led_pin.on()
    else:
        if led_pin.value():
            led_pin.off()
コード例 #3
0
async def process_time_measure(timeout=20):
    print("[RUNNER]: start process_time_measure")
    timestamp = common.get_millis()
    bigest = 0
    while True:
        await asyncio.sleep(0)
        timepassed = common.millis_passed(timestamp)
        if timepassed >= timeout:
            if timepassed > bigest:
                bigest = timepassed
            print("[RUNNER]: timeout warning %d ms with bigest %d" %
                  (timepassed, bigest))
        timestamp = common.get_millis()
コード例 #4
0
async def environment_sensors_action():
    print("[SENSORS]: environment_sensors_action")
    while True:
        for sensor in environment_sensors:
            if sensor.timestamp is None or common.millis_passed(
                    sensor.timestamp) >= sensor.timeout:
                sensor.timestamp = common.get_millis()
                await sensor.action()
                if sensor.dirty:
                    sensor.dirty = False
                    if "_ENV" in sensor.alias:
                        for key in sensor.data:
                            if on_state_change_cb is not None:
                                on_state_change_cb(f"{sensor.alias}_{key}",
                                                   sensor.data[key])
                    else:
                        if on_state_change_cb is not None:
                            on_state_change_cb(sensor.alias, sensor.data)

                if sensor.error_msg is not None:
                    if on_state_change_cb is not None:
                        on_state_change_cb(f"{sensor.alias}_ERROR",
                                           sensor.error_msg)
                    sensor.error_msg = None
            await asyncio.sleep_ms(0)
コード例 #5
0
def set_beep(status):
    global current_status, timestamp
    current_status = status
    if (status):
        timestamp = get_millis()
        pwm_pin.duty(DUTY)
    else:
        pwm_pin.duty(0)
コード例 #6
0
def loop():
    global beep_off_if_no_location_timestamp
    location = get_location()
    if location:
        timestamp = get_millis()
        lines = []
        lines.append("%s:%d" % (get_status(location), location.hacc))
        lines.append("TIME: %d" % (location.time))
        lines.append("LAT: %f" % (location.lat))
        lines.append("LON: %f" % (location.lon))
        if (location.hacc <= 100):
            beep_off_if_no_location_timestamp = get_millis()
            nearest_station = get_nearest_station(location, stations)
            if nearest_station:
                distance = get_distance(location, nearest_station)
                lines.append("%.1fkm in %s" % (distance, nearest_station.name))
                lines.append("%.1fkm/h" % (location.speed))
                if (distance <= 1.0 and not leds.is_on()):
                    leds.set(True)
                if (distance > 1.0 and leds.is_on()):
                    leds.set(False)
                if (distance <= 0.3 and not pwm.is_beep()):
                    pwm.set_beep(True)
                    leds.set_sleep_timeout(400)
                if (distance > 0.3 and pwm.is_beep()):
                    pwm.set_beep(False)
                    leds.set_sleep_timeout()
            else:
                print("ERROR: no nearest station?")
            print("duration %d" % (millis_passed(timestamp)))
        else:
            if pwm.is_beep():
                pwm.set_beep(False)
            if leds.is_on():
                leds.set(False)
        oled.display_lines(lines)

    if beep_off_if_no_location_timestamp != 0 and millis_passed(
            beep_off_if_no_location_timestamp) > 10000:
        beep_off_if_no_location_timestamp = 0
        print("No location in 10 seconds, turning off")
        if pwm.is_beep():
            pwm.set_beep(False)
        if leds.is_on():
            leds.set(False)
コード例 #7
0
def loop():
    if TESTING:
        return
    location = parse_location(uart.read())
    if location:
        location.timestamp = get_millis()
        location.speed = calculate_speed(location)
        global new_location
        new_location = location
コード例 #8
0
def set(status):
    global current_status, timestamp
    current_status = status
    if (status):
        timestamp = get_millis()
        led_pin.on()
    else:
        led_pin.off()
        set_sleep_timeout()
コード例 #9
0
def action():
    global timestamp, sent_impulses
    if timestamp is None or common.millis_passed(timestamp) >= timeout:
        sent_impulses = impulses
        value = sent_impulses / IMPULSES_PER_KWH
        timestamp = common.get_millis()
        print("[POWER_COUNTER]: %f kwh" % (value))
        if on_state_change_cb != None:
            on_state_change_cb("POWER_COUNTER", value)
コード例 #10
0
def check_button():
    global button_timestamp
    if millis_passed(button_timestamp) < 50:
        return
    button_timestamp = get_millis()
    global button_state
    state = not button.value()
    if state != button_state:
        button_state = state
        on_button_callback(button_state)
コード例 #11
0
def set_location(location):
    location.timestamp = get_millis()
    location.speed = calculate_speed(location)
    global new_location
    new_location = location
コード例 #12
0
def set_rollos(rollo, data):
    print("[PHY]: set_rollos[%s], data[%s]" % (rollo.path, data))
    if data == "STOP":
        if rollo.alarm.active == False:
            leds.set_state_by_name(rollo.up.pressed_light, 0)
            leds.set_state_by_name(rollo.up.idle_light, 1)
            leds.set_state_by_name(rollo.down.pressed_light, 0)
            leds.set_state_by_name(rollo.down.idle_light, 1)
        leds.set_state_by_name(rollo.up.relay, 0)
        if rollo.up.active:
            if common.millis_passed(rollo.timestamp) >= rollo.max_timeout:
                rollo.current_position = 100
            else:
                if rollo.current_position is not None:
                    rollo.current_position = rollo.current_position + int(
                        common.millis_passed(rollo.timestamp) /
                        rollo.max_timeout * 100)
                    if rollo.current_position > 100:
                        rollo.current_position = 100
        elif rollo.down.active:
            if common.millis_passed(rollo.timestamp) >= rollo.max_timeout:
                rollo.current_position = 0
            else:
                if rollo.current_position is not None:
                    rollo.current_position = rollo.current_position - int(
                        common.millis_passed(rollo.timestamp) /
                        rollo.max_timeout * 100)
                    if rollo.current_position < 0:
                        rollo.current_position = 0
        print("[PHY]: rollo[%s], position[%s]" %
              (rollo.path, str(rollo.current_position)))
        if on_state_change_cb is not None:
            on_state_change_cb(rollo.path, str(rollo.current_position))
        rollo.up.active = False
        leds.set_state_by_name(rollo.down.relay, 0)
        rollo.down.active = False
        rollo.timeout = None
        rollo.timestamp = None
    else:
        percent = get_percent_from_data(data)
        if percent is not None:
            direction_up = False
            direction_down = False
            timeout = None
            if percent == 100:
                direction_up = True
                timeout = rollo.max_timeout
            elif percent == 0:
                direction_down = True
                timeout = rollo.max_timeout
            else:
                if rollo.current_position is not None:
                    move_percent = percent - rollo.current_position
                    timeout = abs(int(move_percent / 100 * rollo.max_timeout))
                    if move_percent > 0:
                        direction_up = True
                    elif move_percent < 0:
                        direction_down = True
                else:
                    rollo.first_time_position = percent
                    direction_up = True
                    timeout = rollo.max_timeout

            if direction_up:
                if rollo.alarm.active == False:
                    leds.set_state_by_name(rollo.up.pressed_light, 0)
                    leds.set_state_by_name(rollo.up.idle_light, 1)
                if rollo.down.active:
                    leds.set_state_by_name(rollo.down.relay, 0)
                    rollo.down.active = False
                leds.set_state_by_name(rollo.up.relay, 1)
                rollo.up.active = True
                rollo.timeout = timeout
                rollo.timestamp = common.get_millis()
            elif direction_down:
                if rollo.alarm.active == False:
                    leds.set_state_by_name(rollo.down.pressed_light, 0)
                    leds.set_state_by_name(rollo.down.idle_light, 1)
                if rollo.up.active:
                    leds.set_state_by_name(rollo.up.relay, 0)
                    rollo.up.active = False
                leds.set_state_by_name(rollo.down.relay, 1)
                rollo.down.active = True
                rollo.timeout = timeout
                rollo.timestamp = common.get_millis()
コード例 #13
0
def set_activity():
    global activity_timestamp
    activity_timestamp = common.get_millis()
    leds.set_state_by_name(ACTIVITY_LED, 1)
コード例 #14
0
def send_mqtt_uptime():
    global timestamp
    if (millis_passed(timestamp) > 30000):
        timestamp = get_millis()
        print("uptime %d" % (timestamp))
        client.publish(TOPIC, "uptime %d".encode() % (timestamp))