2025-09-02 20:26:06 +02:00

411 lines
20 KiB
Python

import config
import random
import report
import time
from mqtt import mqtt_client
from simulation.rooms import house
from .help import testSession
from .help import STATES_SW, STATES_BR, STATES_CT, STATES_TEMP
from tests.common_testcases import device_follow, device_flash, FLASH_TRIGGER_LONGPUSH, FLASH_TRIGGER_ACTIVATE
def rand_tcel():
return random.choice(5 * [report.TCEL_FULL] + 3 * [report.TCEL_SHORT] + 2 * [report.TCEL_SMOKE])
def device_follow_sw_with_keys(ts, master, master_key, slave, slave_key, single=False):
master_name = master.get_name(master_key)
slave_name = slave.get_name(slave_key)
#
testcase_id = master_name + " -> " + slave_name
ts.testCase(
testcase_id, report.TCEL_SINGLE if single else rand_tcel(), device_follow,
master, master_key,
slave, slave_key,
STATES_SW, None
)
def device_follow_sw(ts, master, slave, single=False):
device_follow_sw_with_keys(ts, master, master.KEY_OUTPUT_0, slave, slave.KEY_OUTPUT_0)
def device_follow_br(ts, master, slave, switch_on=None, single=False):
master_name = master.get_name(master.KEY_BRIGHTNESS)
slave_name = slave.get_name(slave.KEY_BRIGHTNESS)
#
testcase_id = master_name + " -> " + slave_name
ts.testCase(
testcase_id, report.TCEL_SINGLE if single else rand_tcel(), device_follow,
master, master.KEY_BRIGHTNESS,
slave, slave.KEY_BRIGHTNESS,
STATES_BR, switch_on
)
def device_follow_ct(ts, master, slave, switch_on=None, single=False):
master_name = master.get_name(master.KEY_COLOR_TEMP)
slave_name = slave.get_name(slave.KEY_COLOR_TEMP)
#
testcase_id = master_name + " -> " + slave_name
ts.testCase(
testcase_id, report.TCEL_SINGLE if single else rand_tcel(), device_follow,
master, master.KEY_COLOR_TEMP,
slave, slave.KEY_COLOR_TEMP,
STATES_CT, switch_on
)
def device_follow_temp(ts, master, slave, single=False):
master_name = master.get_name(master.KEY_USER_TEMPERATURE_SETPOINT)
slave_name = slave.get_name(slave.KEY_TEMPERATURE_SETPOINT)
#
testcase_id = master_name + " -> " + slave_name
ts.testCase(
testcase_id, report.TCEL_SINGLE if single else rand_tcel(), device_follow,
master, master.KEY_USER_TEMPERATURE_SETPOINT,
slave, slave.KEY_TEMPERATURE_SETPOINT,
STATES_TEMP, None
)
def device_flash_by_vers(ts, flash_device, trigger_device, start_state, trigger_vers, single=False):
flash_device_flash_key = flash_device.KEY_OUTPUT_0
if trigger_vers == FLASH_TRIGGER_LONGPUSH:
trigger_device_key = trigger_device.KEY_LONGPUSH_0
elif trigger_vers == FLASH_TRIGGER_ACTIVATE:
trigger_device_key = trigger_device.KEY_OUTPUT_0
else:
raise AttributeError("Unknown trigger_vers in device_flash: %s", repr(trigger_vers))
trigger_name = trigger_device.get_name(trigger_device_key)
flash_name = flash_device.get_name(flash_device_flash_key) + " from %s" % repr(start_state)
#
testcase_id = trigger_name + " -> " + flash_name
ts.testCase(
testcase_id, report.TCEL_SINGLE if single else report.TCEL_SHORT, device_flash,
flash_device, flash_device_flash_key, trigger_device, trigger_device_key, start_state,
)
def preconditions(ts: testSession, mc: mqtt_client, h: house):
def precond_test(tLogger):
mc.send("videv/all/oof", True)
time.sleep(0.5)
tLogger.debug("Collecting precondition logs...")
# Clean-Up
ts.testCase('Clean-Up', report.TCEL_SINGLE, precond_test)
def ffe(ts: testSession, mc: mqtt_client, h: house):
#
# ffe.livingroom
#
room = h.ffe.livingroom
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# floor_lamp videv<->zigbee + main_light->zigbee
device_follow_sw(ts, room.videv_floor_light, room.light_floor_light)
device_follow_sw(ts, room.light_floor_light, room.videv_floor_light)
device_follow_sw(ts, room.switch_main_light, room.light_floor_light)
# xmas_tree videv<-->shelly
if config.CHRISTMAS:
device_follow_sw(ts, room.videv_xmas_tree_light, room.switch_xmas_tree_light)
device_follow_sw(ts, room.switch_xmas_tree_light, room.videv_xmas_tree_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_br(ts, room.videv_floor_light, room.light_floor_light, room.light_floor_light)
device_follow_br(ts, room.light_floor_light, room.videv_floor_light, room.light_floor_light)
device_follow_ct(ts, room.videv_floor_light, room.light_floor_light, room.light_floor_light)
device_follow_ct(ts, room.light_floor_light, room.videv_floor_light, room.light_floor_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffe.sleep
#
room = h.ffe.sleep
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# bed_light_di videv<-->zigbee
device_follow_sw(ts, room.videv_bed_dirk_light, room.light_bed_dirk_light)
device_follow_sw(ts, room.light_bed_dirk_light, room.videv_bed_dirk_light)
# bed_light_ma videv<-->zigbee
device_follow_sw(ts, room.videv_bed_marion_light, room.switch_bed_marion_light)
device_follow_sw(ts, room.switch_bed_marion_light, room.videv_bed_marion_light)
# wardrobe videv<-->zigbee
device_follow_sw(ts, room.videv_wardrobe_light, room.light_wardrobe_light)
device_follow_sw(ts, room.light_wardrobe_light, room.videv_wardrobe_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_br(ts, room.videv_bed_dirk_light, room.light_bed_dirk_light, room.light_bed_dirk_light)
device_follow_br(ts, room.light_bed_dirk_light, room.videv_bed_dirk_light, room.light_bed_dirk_light)
device_follow_br(ts, room.videv_wardrobe_light, room.light_wardrobe_light, room.light_wardrobe_light)
device_follow_br(ts, room.light_wardrobe_light, room.videv_wardrobe_light, room.light_wardrobe_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffe.diningroom
#
room = h.ffe.diningroom
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# floor_lamp videv<->zigbee + main_light->zigbee
device_follow_sw(ts, room.videv_floor_light, room.switch_floor_light)
device_follow_sw(ts, room.switch_floor_light, room.videv_floor_light)
device_follow_sw(ts, room.switch_main_light, room.switch_floor_light)
# garland
if config.CHRISTMAS:
device_follow_sw(ts, room.videv_garland_light, room.switch_garland_light)
device_follow_sw(ts, room.switch_garland_light, room.videv_garland_light)
#
# ffe.kitchen
#
room = h.ffe.kitchen
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# circulation_pump
device_follow_sw(ts, room.videv_circulation_pump, room.switch_circulation_pump)
device_follow_sw(ts, room.switch_circulation_pump, room.videv_circulation_pump)
# circulation pump feedback (flash test)
device_flash_by_vers(ts, room.switch_main_light, room.switch_circulation_pump, True, FLASH_TRIGGER_ACTIVATE)
device_flash_by_vers(ts, room.switch_main_light, room.switch_circulation_pump, False, FLASH_TRIGGER_ACTIVATE)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffe.floor
#
# Switching devices ##################################
room = h.ffe.floor
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# area all_off (flash test)
device_flash_by_vers(ts, room.switch_main_light, room.switch_main_light, True, FLASH_TRIGGER_LONGPUSH)
device_flash_by_vers(ts, room.switch_main_light, room.switch_main_light, False, FLASH_TRIGGER_LONGPUSH)
def ffw(ts: testSession, mc: mqtt_client, h: house):
#
# ffw.livingroom
#
room = h.ffw.livingroom
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffw.sleep
#
room = h.ffw.sleep
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
device_follow_sw(ts, room.videv_window_light, room.light_window_light)
device_follow_sw(ts, room.light_window_light, room.videv_window_light)
device_follow_sw(ts, room.switch_main_light, room.light_window_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_br(ts, room.videv_window_light, room.light_window_light, room.light_window_light)
device_follow_br(ts, room.light_window_light, room.videv_window_light, room.light_window_light)
device_follow_ct(ts, room.videv_window_light, room.light_window_light, room.light_window_light)
device_follow_ct(ts, room.light_window_light, room.videv_window_light, room.light_window_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffw.julian
#
room = h.ffw.julian
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffw.bath
#
room = h.ffw.bath
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# ffw.floor
#
room = h.ffw.floor
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# area all_off (flash test)
device_flash_by_vers(ts, room.switch_main_light, room.switch_main_light, True, FLASH_TRIGGER_LONGPUSH)
device_flash_by_vers(ts, room.switch_main_light, room.switch_main_light, False, FLASH_TRIGGER_LONGPUSH)
def gar(ts: testSession, mc: mqtt_client, h: house):
#
# ffw.livingroom
#
room = h.gar.garden
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_garland_light, room.switch_garland_light)
device_follow_sw(ts, room.switch_garland_light, room.videv_garland_light)
device_follow_sw(ts, room.videv_repeater, room.switch_repeater)
device_follow_sw(ts, room.switch_repeater, room.videv_repeater)
def gfe(ts: testSession, mc: mqtt_client, h: house):
#
# gfe.
#
# room = h.gfe
# Switching devices ##################################
pass
def gfw(ts: testSession, mc: mqtt_client, h: house):
#
# gfw.dirk
#
room = h.gfw.dirk
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# desk_light videv<-->tradfri
device_follow_sw(ts, room.videv_desk_light, room.light_desk_light)
device_follow_sw(ts, room.light_desk_light, room.videv_desk_light)
# desk_light videv<-->powerplug
device_follow_sw(ts, room.videv_pc_dock, room.switch_pc_dock)
device_follow_sw(ts, room.switch_pc_dock, room.videv_pc_dock)
# powerplug videv <-> channel
device_follow_sw_with_keys(ts, room.videv_amplifier, room.videv_amplifier.KEY_OUTPUT_0, room.switch_powerplug_4, room.KEY_POWERPLUG_AMPLIFIER)
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_AMPLIFIER, room.videv_amplifier, room.videv_amplifier.KEY_OUTPUT_0)
device_follow_sw_with_keys(ts, room.videv_phono, room.videv_phono.KEY_OUTPUT_0, room.switch_powerplug_4, room.KEY_POWERPLUG_PHONO)
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_PHONO, room.videv_phono, room.videv_phono.KEY_OUTPUT_0)
device_follow_sw_with_keys(ts, room.videv_cd_player, room.videv_cd_player.KEY_OUTPUT_0, room.switch_powerplug_4, room.KEY_POWERPLUG_CD_PLAYER)
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_CD_PLAYER, room.videv_cd_player, room.videv_cd_player.KEY_OUTPUT_0)
device_follow_sw_with_keys(ts, room.videv_bluetooth, room.videv_bluetooth.KEY_OUTPUT_0, room.switch_powerplug_4, room.KEY_POWERPLUG_BT)
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_BT, room.videv_bluetooth, room.videv_bluetooth.KEY_OUTPUT_0)
# powerplug follow
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_BT, room.switch_powerplug_4, room.KEY_POWERPLUG_AMPLIFIER)
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_CD_PLAYER, room.switch_powerplug_4, room.KEY_POWERPLUG_AMPLIFIER)
device_follow_sw_with_keys(ts, room.switch_powerplug_4, room.KEY_POWERPLUG_PHONO, room.switch_powerplug_4, room.KEY_POWERPLUG_AMPLIFIER)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_br(ts, room.videv_desk_light, room.light_desk_light, room.light_desk_light)
device_follow_br(ts, room.light_desk_light, room.videv_desk_light, room.light_desk_light)
device_follow_ct(ts, room.videv_desk_light, room.light_desk_light, room.light_desk_light)
device_follow_ct(ts, room.light_desk_light, room.videv_desk_light, room.light_desk_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# gfw.marion
#
room = h.gfw.marion
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# floor_lamp videv<->zigbee + main_light->zigbee
device_follow_sw(ts, room.videv_window_light, room.light_window_light)
device_follow_sw(ts, room.light_window_light, room.videv_window_light)
device_follow_sw(ts, room.switch_main_light, room.light_window_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_window_light, room.light_window_light, room.light_window_light)
device_follow_br(ts, room.light_window_light, room.videv_window_light, room.light_window_light)
device_follow_ct(ts, room.videv_window_light, room.light_window_light, room.light_window_light)
device_follow_ct(ts, room.light_window_light, room.videv_window_light, room.light_window_light)
# Temperature ########################################
device_follow_temp(ts, room.videv_heating, room.valve_heating)
#
# gfw.floor
#
room = h.gfw.floor
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# Brightness and Colortemperature ####################
device_follow_br(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_br(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
device_follow_ct(ts, room.videv_main_light, room.light_main_light, room.switch_main_light)
device_follow_ct(ts, room.light_main_light, room.videv_main_light, room.switch_main_light)
def stw(ts: testSession, mc: mqtt_client, h: house):
#
# stairways
#
room = h.stw.stairway
# Switching devices ##################################
# main_light videv<-->shelly
device_follow_sw(ts, room.videv_main_light, room.switch_main_light)
device_follow_sw(ts, room.switch_main_light, room.videv_main_light)
# area all_off (flash test)
device_flash_by_vers(ts, room.switch_main_light, room.switch_main_light, True, FLASH_TRIGGER_LONGPUSH)
device_flash_by_vers(ts, room.switch_main_light, room.switch_main_light, False, FLASH_TRIGGER_LONGPUSH)
def inter_room(ts: testSession, mc: mqtt_client, h: house):
#
# gfw.dirk.swith -> ffw.floor.switch
#
input = h.gfw.dirk.switch_main_light
output = h.gfw.floor.switch_main_light
device_follow_sw_with_keys(ts, input, input.KEY_INPUT_1, output, output.KEY_OUTPUT_0)