Giter Club home page Giter Club logo

pyhon's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyhon's Issues

Error adding integration

Home Assistant throws the following error when adding new integration.

Error setting up entry p**********@gmail.com for hon
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 383, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/config/custom_components/hon/__init__.py", line 32, in async_setup_entry
    await hon.setup()
  File "/usr/local/lib/python3.10/site-packages/pyhon/api.py", line 60, in setup
    await asyncio.gather(*[
  File "/usr/local/lib/python3.10/site-packages/pyhon/device.py", line 116, in load_commands
    await self._recover_last_command_states(commands)
  File "/usr/local/lib/python3.10/site-packages/pyhon/device.py", line 95, in _recover_last_command_states
    for key, data in command.settings.items():
  File "/usr/local/lib/python3.10/site-packages/pyhon/commands.py", line 70, in settings
    return {s: self._parameters[s] for s in self.setting_keys}
  File "/usr/local/lib/python3.10/site-packages/pyhon/commands.py", line 70, in <dictcomp>
    return {s: self._parameters[s] for s in self.setting_keys}
KeyError: 'airWashPara3'

The only device I have in my hOn account is a Washer-Dryer combination HWD90xxxxxx. I tried running pyhOn on my PC, but it also throws a bunch of errors after entering username and password.

Error setting up entry to [email protected] for hon

Hi,

When testing your integration I get the following error at the first connection:

Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 383, in async_setup
result = await component.async_setup_entry(hass, self)
File "/config/custom_components/hon/init.py", line 32, in async_setup_entry
await hon.setup()
File "/usr/local/lib/python3.10/site-packages/pyhon/api.py", line 57, in setup
device = HonDevice(self, appliance)
File "/usr/local/lib/python3.10/site-packages/pyhon/device.py", line 8, in init
appliance["attributes"] = {v["parName"]: v["parValue"] for v in appliance["attributes"]}
KeyError: 'attributes'

Tested on 0.2.1

Incorrect Program Selection When Starting Washing Machine

I am using this library to control my washing machine programmatically. While I can successfully pause the running machine, I encounter an issue when trying to start a specific program.

When I attempt to launch the program (All in One 59’), which is already configured on the machine, the machine starts successfully. However, it selects a different program (iot_checkup) instead of the one I configured.

Code:

Below is the code snippet I used to start the program:

import asyncio
import ssl
from pyhon import Hon

ssl._create_default_https_context = ssl._create_unverified_context
USER = input("Username for the machine: ")
PASSWORD = input("Password: ")


async def start_program():
    async with Hon(USER, PASSWORD) as hon:
        washing_machine = hon.appliances[0]

        start_command = washing_machine.commands["startProgram"]
        start_command.parameters["program"].value = "All in One 59'"
        await start_command.send()

asyncio.run(start_program())

Note: I am new to Python.

Request:
Could someone provide an example or guidance on how to correctly launch an existing program on the washing machine using this library? Any help would be greatly appreciated.

HomeAssistantType depracated alias (to be removed in HA Core 2025.5)

Hi!
I just saw this in my HA logs:

2024-06-12 08:17:41.789 WARNING (ImportExecutor_0) [homeassistant.helpers.typing] HomeAssistantType was used from hon, this is a deprecated alias which will be removed in HA Core 2025.5. Use homeassistant.core.HomeAssistant instead, please report it to the author of the 'hon' custom integration

The last version return Oven and Oven Z1

Hi.

I am testing the last version and now, I don't know why, the last version return two devices: Oven a Oven Z1. With version of 14th works fine.

I think that Zone Support is the problem, but I don't know how solved.

The Z1 device return errors when HA try create some sensors (others works fine)

How use oven filter?

Hi, I don't undertand how works the oven program filter.

My problem is the very long list of programs in my oven:

settings:
  startProgram:
    delayTime:
      max: 1439
      min: 0
      step: 1
    prTime:
      max: 240
      min: 0
      step: 1
    preheatStatus:
      max: 1
      min: 0
      step: 1
    program:
      - bottom_heating
      - bottom_heating_fan
      - convection_fan
      - conventional
      - h20_clean
      - iot_guided_a_thousand_leaves
      - iot_guided_apple_pie
      - iot_guided_baked_apples
      - iot_guided_baked_fish
      - iot_guided_baked_pasta
      - iot_guided_baked_vegetables
      - iot_guided_beef_wellington
      - iot_guided_biscuits
      - iot_guided_braised
      - iot_guided_braised_vegetables
      - iot_guided_brioches
      - iot_guided_butter_biscuits
      - iot_guided_chicken_in_pieces
      - iot_guided_cookies
      - iot_guided_cream_puffs
      - iot_guided_creme_caramel
      - iot_guided_fish_fillet
      - iot_guided_fish_souffle
      - iot_guided_fresh_cannelloni
      - iot_guided_fresh_lasagna
      - iot_guided_frozen_croissants
      - iot_guided_frozen_fish
      - iot_guided_frozen_lasagna_and_cannelloni
      - iot_guided_frozen_pizza
      - iot_guided_fruit_in_syrup
      - iot_guided_fruit_tart
      - iot_guided_leavened_cakes
      - iot_guided_macaron
      - iot_guided_meatloaf
      - iot_guided_mini_croissants_and_brioche
      - iot_guided_muffin
      - iot_guided_panettone
      - iot_guided_pastries_and_brioches
      - iot_guided_pears_cake
      - iot_guided_pizza_or_focaccia
      - iot_guided_plum_cake
      - iot_guided_potato_croquettes
      - iot_guided_pudding
      - iot_guided_rice_pie
      - iot_guided_rice_pilaf
      - iot_guided_roast_chicken
      - iot_guided_roast_pork
      - iot_guided_roasted_pig
      - iot_guided_salt_crusted_fish
      - iot_guided_salty_sheets
      - iot_guided_savoury_cake
      - iot_guided_single_portion_souffle
      - iot_guided_souffle
      - iot_guided_sponge_cake
      - iot_guided_strudel
      - iot_guided_stuffed_chicken
      - iot_guided_stuffed_peppers
      - iot_guided_stuffed_puff_pastry
      - iot_guided_sweet_puffs
      - iot_guided_terrine
      - iot_guided_vegetable_bain_marie_flan
      - iot_guided_vegetable_flan
      - iot_guided_vegetable_gratin
      - iot_guided_white_bread
      - iot_guided_whole_fish
      - iot_guided_yeast_cakes
      - iot_guided_yogurt
      - iot_recipe_5_spices_roasted_lamb_rack
      - iot_recipe_anchovy_courgette_flan
      - iot_recipe_apricot_cake_with_marzipan
      - iot_recipe_apricots_clafoutis
      - iot_recipe_artichokes_and_cream_lasagna
      - iot_recipe_asparagus_and_puff_pastry_tarte
      - iot_recipe_aubergine_pies_with_lamb_reduction_and_rice
      - iot_recipe_aubergine_salad_with_parsley
      - iot_recipe_baby_octopus_with_olives_and_tomato
      - iot_recipe_baguettes_with_olives
      - iot_recipe_baked_aubergines__mussaka_style
      - iot_recipe_baked_beetrots_gazpacho_and_capers
      - iot_recipe_baked_coq-au-vin_
      - iot_recipe_baked_duck_breast_honey_and_pears
      - iot_recipe_baked_duck_fricassee
      - iot_recipe_baked_panzerotti
      - iot_recipe_baked_pears_with_camembert_and_chives
      - iot_recipe_baked_swordfish_rolls_with_red_lentils
      - iot_recipe_barley_stew_and_lamb_fillet
      - iot_recipe_barley_stuffed_peppers_with_citrus_fruits
      - iot_recipe_basque_style_beef_with_peppers_and_tomatoes
      - iot_recipe_bass_fillets_roasted_with_lemon_and_orange
      - iot_recipe_beef_brisket_with_horseradish_sauce_and_chives_oil
      - iot_recipe_beef_satay_with_broccoli
      - iot_recipe_beetroot_and_blue_cheese_flan
      - iot_recipe_beetroot_and_gorgonzola_cheese_rice_timbale
      - iot_recipe_beetroots_and_goat_cheese_chutney
      - iot_recipe_beetroots_pancakes
      - iot_recipe_black_forest_cake
      - iot_recipe_black_pepper_curry_chicken
      - iot_recipe_black_rice_casserole_with_lamb_and_artichokes
      - iot_recipe_black_rice_with_prawns_and_scallops
      - iot_recipe_blanched_salmon_carpaccio
      - iot_recipe_blueberry_scones
      - iot_recipe_braided_yeast_bread
      - iot_recipe_braised_beef_with_stout
      - iot_recipe_braised_boar_in_red_wine
      - iot_recipe_broccoli_and_ham_flan
      - iot_recipe_brussels_sprouts_a_la_creme
      - iot_recipe_bulgur_vegetarian_couscous
      - iot_recipe_burgul_and_seitan_pancakes
      - iot_recipe_caesar_salad_with_roasted_cod
      - iot_recipe_cashew_thai_chicken
      - iot_recipe_catalan-style_lobster_medallions
      - iot_recipe_catalan_cream_and_red_berries
      - iot_recipe_cauliflower_and_broccoli_flan_in_currant_sauce
      - iot_recipe_cauliflower_and_cheese_mash
      - iot_recipe_cauliflower_souffle
      - iot_recipe_cheese_and_saffron_bread
      - iot_recipe_cheese_brisee_triangles
      - iot_recipe_cherry_tomatoes_bread_dough_baskets
      - iot_recipe_chicken_biryani
      - iot_recipe_chicken_cacciatore
      - iot_recipe_chicken_casserole_with_mustard_lemon_and_honey
      - iot_recipe_chicken_cream_rolls
      - iot_recipe_chicken_samsa
      - iot_recipe_chicken_stuffed_with_figs_and_marjoram
      - iot_recipe_chicken_with_butter_and_ginger
      - iot_recipe_chicken_with_cocoa_and_smoked_ham
      - iot_recipe_chocolate_brownies_with_raspberry_reduction
      - iot_recipe_chorizo_tarte_(pissaladiere)
      - iot_recipe_cider_chorizo
      - iot_recipe_coconut_and_curry_vegetable_compote
      - iot_recipe_cod_hearts_with_milk_and_onions
      - iot_recipe_cold_veal_with_tuna_sauce_at_low_temperature
      - iot_recipe_creamy_chocolate_pudding_and_almond_cookies
      - iot_recipe_creamy_potato_and_scampi_pies
      - iot_recipe_crispy_chicken_toast
      - iot_recipe_crock_pot_nachos_and_pulled_chicken
      - iot_recipe_croque_monsieur_with_mushrooms
      - iot_recipe_crumble_with_aubergines_provençal_style
      - iot_recipe_crumbly_citrus_scented_almond_cookies
      - iot_recipe_crunchy_beef_with_peppers
      - iot_recipe_curry_and_burghul_aubergines
      - iot_recipe_curry_flan_with_courgettes_spelt_and_prawns
      - iot_recipe_dill_and_lemon_gilthead_seabream_fillet
      - iot_recipe_dorset_apple_traybake
      - iot_recipe_duchess_potatoes
      - iot_recipe_duck_breast_rolls
      - iot_recipe_duck_breast_salad_with_raspberry_vinegar
      - iot_recipe_duck_terrine_with_glazed_shallots
      - iot_recipe_duck_with_orange_sauce
      - iot_recipe_duck_with_peaches_and_raisins
      - iot_recipe_eggs_in_casserole_with_mushrooms
      - iot_recipe_fabada_asturiana
      - iot_recipe_fillet_of_suckling_pig_in_bread_crust
      - iot_recipe_fillet_of_tub_gurnard_on_stewed_endive_and_malt_vinegar
      - iot_recipe_fillet_of_veal_in_phyllo_crust_and_mashed_pumpkin
      - iot_recipe_fish_tajine
      - iot_recipe_five_spice_suckling_pig
      - iot_recipe_fois_gras_stuffed_mushrooms
      - iot_recipe_fondant_au_chocolat
      - iot_recipe_fried_artichokes_with_wine_and_garlic_sauce
      - iot_recipe_fried_chicken_with_pineapple_and_celery
      - iot_recipe_fried_cubes_of_parmesan_cheese
      - iot_recipe_ginger_and_vinegar_glazed_carrots
      - iot_recipe_gingerbread_crumble
      - iot_recipe_glazed_cucumbers_with_mostarda_and_honey
      - iot_recipe_glazed_monkfish_teriyaki_sauce
      - iot_recipe_glazed_salmon_yakitori
      - iot_recipe_gluten-free_buckwheat_bread
      - iot_recipe_gluten-free_corn_muffins
      - iot_recipe_gluten_free_cauliflower_pizza
      - iot_recipe_glutenfree_bread
      - iot_recipe_gran_cru_chocolate_biscuits
      - iot_recipe_green_peppers_with_herbs_and_cheese
      - iot_recipe_green_yellow_and_red_sweet_and_sour_peppers_with_raisins_and_pine_nuts
      - iot_recipe_guinea_fowl_breast_on_red_potato_mash_and_beetroots
      - iot_recipe_guinea_fowl_glazed_with_orange_and_asparagus
      - iot_recipe_gyros_pitta_rolls
      - iot_recipe_herb_sword_millefeuille
      - iot_recipe_irish_stew
      - iot_recipe_lamb_and_rice_baked_pot-au-feux
      - iot_recipe_lamb_casserole
      - iot_recipe_lamb_fillet_with_cocoa_and_rum
      - iot_recipe_lamb_keema
      - iot_recipe_leeks_stew_with_turmeric
      - iot_recipe_lemon_and_pistachio_grain_cupcakes
      - iot_recipe_lemon_risotto_with_red_prawn_carpaccio
      - iot_recipe_macarons
      - iot_recipe_masala_ratatouille
      - iot_recipe_mash_of_red_lentils_with_sweet_and_sour_onions
      - iot_recipe_mashed_jerusalem_artichoke_and_potatoes
      - iot_recipe_millefeuille_of_tomatoes_and_courgettes
      - iot_recipe_mini_apple_strudel
      - iot_recipe_mini_muffins_with_onion_bacon_and_cheddar
      - iot_recipe_mini_shepherds_pie
      - iot_recipe_mint_stuffed_whole_artichokes
      - iot_recipe_mosaic_of_salmon_and_sole
      - iot_recipe_mushroom_croutons
      - iot_recipe_mushrooms_mini_empanadas
      - iot_recipe_mussels_in_vermouth_reduction
      - iot_recipe_mussels_with_curry
      - iot_recipe_mussels_with_pak_choi
      - iot_recipe_new_york_cheesecake
      - iot_recipe_oatmeal_cookies
      - iot_recipe_octopus_stewed_in_pinot_nero_and_pearl_onions
      - iot_recipe_oil_flat_bread_with_rock_salt
      - iot_recipe_paccheri_stuffed_with_aubergines_and_basil
      - iot_recipe_panbrioche_and_wild_berries_pudding
      - iot_recipe_parmesan_cheese_and_saffron_choux_bun
      - iot_recipe_pavlova_merengue
      - iot_recipe_pears_with_pinot_bianco_and_cinnamon
      - iot_recipe_pepper_fillet_stroganoff
      - iot_recipe_pernod_roasted_scallops_casserole
      - iot_recipe_picana’s_churrasco_cuberoll
      - iot_recipe_piccadilly_tomatoes_stuffed_with_feta_and_mint
      - iot_recipe_pistachio_and_almond_cakes
      - iot_recipe_plum_cake
      - iot_recipe_polenta_and_gorgonzola_timbale
      - iot_recipe_poppy_seeds_rolled_meatballs
      - iot_recipe_pork_cheeks_in_wine_sauce
      - iot_recipe_pork_loin_with_aromatic_milk
      - iot_recipe_pot_au_feu
      - iot_recipe_potato_and_jewish_artichokes_flan
      - iot_recipe_potato_pancake
      - iot_recipe_potato_salad_with_curry_and_paprika_yoghurt
      - iot_recipe_potatoes_and_green_tomatoes_au_gratin
      - iot_recipe_potatoes_stuffed_with_cheese_fondant_and_paprika
      - iot_recipe_prawns_in_white_bread_crust
      - iot_recipe_pumpkin_flan_with_turmeric
      - iot_recipe_purple_potato_dumplings_casserole_with_pepper_flavour
      - iot_recipe_quails_with_sage_and_lemon
      - iot_recipe_quenelle_of_ricotta_cheese_and_marjoram_turnip_tops
      - iot_recipe_red_chicory_with_marinated_beef
      - iot_recipe_red_onions_with_lean_duck
      - iot_recipe_red_rice_prawn_and_black_sesami_croquettes
      - iot_recipe_red_velvet_mini_cupcake
      - iot_recipe_rhubarb_and_raspberry_crumble
      - iot_recipe_rice_and_saffron_pudding
      - iot_recipe_rice_pilaf_with_prawns_and_vegetables
      - iot_recipe_rice_timbales_in_fennel_fondue_with_saffron
      - iot_recipe_ricotta_spinach_and_cinnamon_dumplings_au_gratin
      - iot_recipe_rioja_style_potatoes
      - iot_recipe_risotto_with_pecorino_cheese_and_pears
      - iot_recipe_roasted_ray_with_almond_salad
      - iot_recipe_roasted_stuffed_onions
      - iot_recipe_rolls_of_anchovies_in_herb_crust
      - iot_recipe_rosemary_flat_bread_with_potatoes
      - iot_recipe_round_courgettes_in_pine_nut_beet_compote
      - iot_recipe_rounds_of_polenta_in_artichoke_cream
      - iot_recipe_salmon_and_fennel_pie
      - iot_recipe_salmon_and_leek_quiche
      - iot_recipe_salmon_and_parmesan_mini_muffins
      - iot_recipe_salmon_in_black_sesame_crust
      - iot_recipe_salmon_roses_and_wasabi_mayonnaise
      - iot_recipe_salmon_salad_with_oregano_croutons
      - iot_recipe_salmon_supreme_with_celeriac_mash
      - iot_recipe_salt-baked_roastbeef_at_low_temperature
      - iot_recipe_salt_cod_and_prawn_salad_with_garlic_sauce
      - iot_recipe_savoy_cabbage_rolls_with_asparagus_and_barley
      - iot_recipe_scallop_with_cream_and_potatoes
      - iot_recipe_scampi_borgouignonne_style
      - iot_recipe_seabass_rolls_with_sweet_potatoes
      - iot_recipe_sherry_and_orange_scallops_skewers
      - iot_recipe_shi_drum_pave_in_hazelnut_and_mushroom_crust
      - iot_recipe_shortcrust_pastry
      - iot_recipe_shortcrust_pastry_biscuits_with_cherry_tomatoes_confit
      - iot_recipe_shortcrust_pastry_without_butter
      - iot_recipe_shrimp_and_fresh_garlic_bread_croutons
      - iot_recipe_sliced_beef_with_sweet_and_belgian_potatoes
      - iot_recipe_smoked_mackerel_croquettes
      - iot_recipe_smoked_pork_chops_with_cabbage_and_pearl_onions
      - iot_recipe_spicy_currant_bread
      - iot_recipe_spicy_lamb_peppers_and_cabbage_salad
      - iot_recipe_spicy_quinoa_balls
      - iot_recipe_spicy_stewed_apples
      - iot_recipe_spätzle_with_cheeses
      - iot_recipe_squids_in_armoricain_sauce
      - iot_recipe_squids_stuffed_with_apples_and_parmesan_cheese
      - iot_recipe_stewed_chickpeas_and_chorizo
      - iot_recipe_stir_fried_potatoes_with_herbs
      - iot_recipe_stuffed_phillo_miniquiche
      - iot_recipe_suckling_pig_fillet_in_bacon_strip_and_sesame
      - iot_recipe_suckling_pig_fillet_with_lentils
      - iot_recipe_suckling_pig_fillet_with_wild_herbs_and_fennel
      - iot_recipe_sugar-free_banana_plumcake_and_dates
      - iot_recipe_sweet_and_sour_lamb
      - iot_recipe_sweet_pepper_jam
      - iot_recipe_swordfish_with_chorizo_salad
      - iot_recipe_tajine
      - iot_recipe_tandoori_e_orange_chicken
      - iot_recipe_tangerine_french_clafouti
      - iot_recipe_terrine_of_scallops_and_mint_peas
      - iot_recipe_thai_noodles_with_chicken
      - iot_recipe_thai_style_sauteed_squids_with_basil_and_coriander
      - iot_recipe_the_baguette
      - iot_recipe_tikka_masala_chicken
      - iot_recipe_tomatoes_stuffed_with_lamb_rice_and_peas
      - iot_recipe_trout_and_wood_sorrel_terrine
      - iot_recipe_trout_rolls_with_almonds
      - iot_recipe_tuna_mousse_with_candied_tomatoes
      - iot_recipe_tuna_sesame_and_ginger_bits
      - iot_recipe_turkey_casserole
      - iot_recipe_turnips_and_beetroot_skewers
      - iot_recipe_two_salmon_rillette_and_stewed_shallot
      - iot_recipe_veal_blanquette
      - iot_recipe_veal_liver_with_honey_red_onions_and_sage
      - iot_recipe_veal_rolls_with_asparagus_and_cheese
      - iot_recipe_veal_truffles_in_black_sesame_crust_with_sweet_potato_rosti
      - iot_recipe_vegan_quiche_with_beetroots
      - iot_recipe_vegetable_strudel_with_ginger_and_sesame
      - iot_recipe_vegetarian_stuffed_minipizzas
      - iot_recipe_veggy_vietnamese_rolls
      - iot_recipe_vietnamese_beef_salad_and_noodles
      - iot_recipe_vietnamese_rolls_with_mango_cucumber_and_prawns
      - iot_recipe_white_bread_with_olive_oil
      - iot_recipe_whole_wheat_blueberry_and_yoghurt_muffins
      - iot_recipe_wholegrain_bread
      - iot_recipe_wholemeal_pizza
      - iot_recipe_wild_salmon_fillet_with_apple_sauce_and_potatoes
      - iot_recipe_wild_trout_on_red_turnip_and_garlic_sprouts
      - iot_recipe_wraps_of_turkey_with_spelt_and_shallot_with_balsamic_vinegar
      - multi_level
      - soft_plus
      - tailor_bake_cata
    tempSel:
      max: 280
      min: 50
      step: 5
  stopProgram:

The programs that start with "iot_recipe_" there are a standar program with presset time and in the hOn has the complete recipe (ingredients), so, there are useless from HA.

I want get only the "normal" (convention, multi_level, bottom...) and the "iot_guided", and can sort by first the normal and after the guided would be awesome.

H-WASHER 500 - Error while trying to get /commands/v1/retrieve

I was trying to use the HA addon with my washing machine (HDQ 496AMBS/1-S). However it did not work. While I was trying to debug, I downloaded this library code and found that the following call is not working.

GET /commands/v1/retrieve

The Result is:

{
    "error": {
        "message": "Invalid dictionaryId",
        "code": "RC_MDI",
        "statusCode": 400
    }
}

I tried and successfully replicated the error with Postman. However, even if I add a param named dictionaryId from my appliance info, it still not work properly.

This is my GET /commands/v1/appliance call

{
    "payload": {
        "appliances": [
            {
                "purchaseDate": "2022-07-06T22:00:00.000Z",
                "fwVersion": "5.12.0",
                "applianceTypeId": 2,
                "firstEnrollment": false,
                "attributes": [
                    {
                        "parValue": "6.A.B",
                        "id": <ID>,
                        "parName": "acuVersion",
                        "status": 1,
                        "lastUpdate": "2022-07-07T14:22:40Z"
                    },
                    {
                        "parValue": "ESP32D0WDQ5",
                        "id": <ID>,
                        "parName": "chipset",
                        "status": 1,
                        "lastUpdate": "2022-07-07T14:22:40Z"
                    },
                    {
                        "parValue": "888",
                        "id": <ID>,
                        "parName": "dictionaryId",
                        "status": 1,
                        "lastUpdate": "2023-03-09T04:48:03Z"
                    },
                    {
                        "parValue": "it-IT",
                        "id": <ID>,
                        "parName": "lang",
                        "status": 1,
                        "lastUpdate": "2022-07-07T14:22:40Z"
                    },
                    {
                        "parValue": "7.A.0",
                        "id": <ID>,
                        "parName": "uiVersion",
                        "status": 1,
                        "lastUpdate": "2022-07-07T14:22:40Z"
                    }
                ],
                "applianceModelId": 888,
                "series": "h-wash500",
                "firstEnrollmentTBC": false,
                "code": "88888888",
                "SK": "app#XX-XX-XX-XX-XX-XX",
                "macAddress": "XX-XX-XX-XX-XX-XX",
                "eepromName": "88888888",
                "applianceId": "XX-XX-XX-XX-XX-XX#2022-07-07T14:22:40Z",
                "id": 888,
                "modelName": "HDQ  496AMBS/1-S",
                "applianceTypeName": "WD",
                "connectivity": "wifi|ble",
                "serialNumber": "<MYSERIAL>",
                "nickName": "Washer Dryer",
                "enrollmentDate": "2022-07-07T14:22:40.442Z",
                "brand": "hoover",
                "lastUpdate": "2022-07-07T14:33:05Z",
                "eepromId": 888,
                "applianceStatus": 1,
                "coords": {
                    "lng": 88.8888888,
                    "lat": 88.8888888
                },
                "PK": "user#eu-west-1:<UUID>",
                "sections": {
                    "chatbot": true,
                    "ecoDelayStart": true
                },
                "topics": {
                    "publish": [],
                    "subscribe": [
                        "$aws/events/presence/disconnected/XX-XX-XX-XX-XX-XX",
                        "$aws/events/presence/connected/XX-XX-XX-XX-XX-XX",
                        "haier/things/XX-XX-XX-XX-XX-XX/event/appliancestatus/update",
                        "haier/things/XX-XX-XX-XX-XX-XX/event/discovery/update"
                    ]
                }
            }
        ]
    },
    "authInfo": {}
}

Any ideas how to debug or fix this issue?

Connection Error

It worked for me in the first versions, but it stopped working from version 2.X, I am currently using the integration "https://github.com/gvigroux/hon", but it works worse than yours.

I have a Candy dryer connected to hOn

I have tried with pyhOn and it always gives me connection errors.

Traceback (most recent call last):
File "/home/jangelgon/.local/bin/pyhOn", line 8, in
sys.exit(start())
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/main.py", line 108, in start
asyncio.run(main())
File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
return future.result()
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/main.py", line 90, in main
async with HonConnection(user, password) as hon:
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/api.py", line 29, in aenter
await self.setup()
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/api.py", line 60, in setup
await asyncio.gather(*[
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/device.py", line 116, in load_commands
await self._recover_last_command_states(commands)
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/device.py", line 95, in _recover_last_command_states
for key, data in command.settings.items():
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/commands.py", line 70, in settings
return {s: self._parameters[s] for s in self.setting_keys}
File "/home/jangelgon/.local/lib/python3.10/site-packages/pyhon/commands.py", line 70, in
return {s: self._parameters[s] for s in self.setting_keys}
KeyError: 'remainingTimeMM'
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fec927dbee0>
Unclosed connector
']
connector: <aiohttp.connector.TCPConnector object at 0x7fec927dbfa0>

Add support for Wizard devices

I have a Hoover HDPN 4S603PX dishwasher which only works with the Hoover Wizard app. However, it is possible to integrate this into ioBroker, and looking into the ioBroker adapter code at https://github.com/TA2k/ioBroker.hoover/blob/main/main.js it seems that there are only a few changes between hOn and Wizard devices. (see where this.config.type !== "wizard" is used.) Would it be possible to allow this library to also implement those differences?

Add support for 2FA protected accounts

The h0n account can be protected with two factor authentication. In such case, upon logon the user is asked for username, password and one time code that is sent to one's email address.

This is how the setting looks like after logging onto https://account2.hon-smarthome.com/ page.
image

Right now the following stack trace is returned

blaze@macos ~ % pyhOn 
User for hOn account: ***@gmail.com
Password for hOn account: 
hOn Authentication Error
  1     401 - https://account2.hon-smarthome.com/setup/secur/RemoteAccessAuthorizationPage.apexp?source=CAAAAYkQ0sk4MDAwMDAwMDAwMDAwMDAwAAAA9BRscpNkjBtCfgBMGCRMEuoQcDTLq-21KDYzdjyjNdafLwCFRlu7TOnwWbbCp1GRWAxtrUTje_Dj8Ykr23uRpw2TmeYoJoVnlbu1B3U_8h_0U0A_KkPJZu9AhEwc-3YlhZ9sW4SBPe0n9Shh980rJq36dA8iMHejW7r8DsjyPMg9BUr8enj98j-hrQ2XvPeqtrSA56lN9TRE2PiZU-jE8LDgbKiv1bZkAueMIaMOrc_RYCJ6MB_xqozqbrHOV45ab_MfTpBoEySLmWvvnKLZA3UJPNR3h7ma2Y1D5Rmzzbn02s5SQ8TaY8SRhyIpmgdk4oljd7WvTV-dqTlapiUm_r7Aqlj64OvNzOA-F3NNii_-9tGlytUmil105lGuYkk50hXdSfNt55PfWmJba1VSvZ9r0pDVz7cmFsb4rBaCMNu01gm4XXBRZwMNL8QrkUtPpb_y6Nvz9Mahr0IKEAtH_cE8fMN1YRFrVuPfCKPb8xS8SmnDAxUM6z-e4qG0PZObdrLaWS34ZGKM9lRm2qsIMVFyN_8g2eF4B1757mAzSYY0gI0HgwMgt4zdD7CcRmeghloPNbktWVe5lTf772C9TN-JHUsei5uBqXMKW8nNqKOiN8oKUjG4w683OiKS6tMz2S8J79cBu9CJLMOuy-igSBq24bnJJy4EUoBx7FKBfNrfjjFoQJzT5NNUJFkPpaENfiBCoiBqb39GawKkDSHmIUzwp8xdGnaMW8uPA-50Vp1N&display=touch
  2     302 - https://account2.hon-smarthome.com/s/login?display=touch&ec=302&inst=68&startURL=/setup/secur/RemoteAccessAuthorizationPage.apexp?source%3DCAAAAYkQ0sk4MDAwMDAwMDAwMDAwMDAwAAAA9BRscpNkjBtCfgBMGCRMEuoQcDTLq-21KDYzdjyjNdafLwCFRlu7TOnwWbbCp1GRWAxtrUTje_Dj8Ykr23uRpw2TmeYoJoVnlbu1B3U_8h_0U0A_KkPJZu9AhEwc-3YlhZ9sW4SBPe0n9Shh980rJq36dA8iMHejW7r8DsjyPMg9BUr8enj98j-hrQ2XvPeqtrSA56lN9TRE2PiZU-jE8LDgbKiv1bZkAueMIaMOrc_RYCJ6MB_xqozqbrHOV45ab_MfTpBoEySLmWvvnKLZA3UJPNR3h7ma2Y1D5Rmzzbn02s5SQ8TaY8SRhyIpmgdk4oljd7WvTV-dqTlapiUm_r7Aqlj64OvNzOA-F3NNii_-9tGlytUmil105lGuYkk50hXdSfNt55PfWmJba1VSvZ9r0pDVz7cmFsb4rBaCMNu01gm4XXBRZwMNL8QrkUtPpb_y6Nvz9Mahr0IKEAtH_cE8fMN1YRFrVuPfCKPb8xS8SmnDAxUM6z-e4qG0PZObdrLaWS34ZGKM9lRm2qsIMVFyN_8g2eF4B1757mAzSYY0gI0HgwMgt4zdD7CcRmeghloPNbktWVe5lTf772C9TN-JHUsei5uBqXMKW8nNqKOiN8oKUjG4w683OiKS6tMz2S8J79cBu9CJLMOuy-igSBq24bnJJy4EUoBx7FKBfNrfjjFoQJzT5NNUJFkPpaENfiBCoiBqb39GawKkDSHmIUzwp8xdGnaMW8uPA-50Vp1N%26display%3Dtouch
  3     301 - https://account2.hon-smarthome.com/s/login/?display=touch&ec=302&inst=68&startURL=/setup/secur/RemoteAccessAuthorizationPage.apexp?source%3DCAAAAYkQ0sk4MDAwMDAwMDAwMDAwMDAwAAAA9BRscpNkjBtCfgBMGCRMEuoQcDTLq-21KDYzdjyjNdafLwCFRlu7TOnwWbbCp1GRWAxtrUTje_Dj8Ykr23uRpw2TmeYoJoVnlbu1B3U_8h_0U0A_KkPJZu9AhEwc-3YlhZ9sW4SBPe0n9Shh980rJq36dA8iMHejW7r8DsjyPMg9BUr8enj98j-hrQ2XvPeqtrSA56lN9TRE2PiZU-jE8LDgbKiv1bZkAueMIaMOrc_RYCJ6MB_xqozqbrHOV45ab_MfTpBoEySLmWvvnKLZA3UJPNR3h7ma2Y1D5Rmzzbn02s5SQ8TaY8SRhyIpmgdk4oljd7WvTV-dqTlapiUm_r7Aqlj64OvNzOA-F3NNii_-9tGlytUmil105lGuYkk50hXdSfNt55PfWmJba1VSvZ9r0pDVz7cmFsb4rBaCMNu01gm4XXBRZwMNL8QrkUtPpb_y6Nvz9Mahr0IKEAtH_cE8fMN1YRFrVuPfCKPb8xS8SmnDAxUM6z-e4qG0PZObdrLaWS34ZGKM9lRm2qsIMVFyN_8g2eF4B1757mAzSYY0gI0HgwMgt4zdD7CcRmeghloPNbktWVe5lTf772C9TN-JHUsei5uBqXMKW8nNqKOiN8oKUjG4w683OiKS6tMz2S8J79cBu9CJLMOuy-igSBq24bnJJy4EUoBx7FKBfNrfjjFoQJzT5NNUJFkPpaENfiBCoiBqb39GawKkDSHmIUzwp8xdGnaMW8uPA-50Vp1N%26display%3Dtouch
  4     200 - https://account2.hon-smarthome.com/s/login/?language=en_US&display=touch&ec=302&inst=68&startURL=%2Fsetup%2Fsecur%2FRemoteAccessAuthorizationPage.apexp%3Fsource%3DCAAAAYkQ0sk4MDAwMDAwMDAwMDAwMDAwAAAA9BRscpNkjBtCfgBMGCRMEuoQcDTLq-21KDYzdjyjNdafLwCFRlu7TOnwWbbCp1GRWAxtrUTje_Dj8Ykr23uRpw2TmeYoJoVnlbu1B3U_8h_0U0A_KkPJZu9AhEwc-3YlhZ9sW4SBPe0n9Shh980rJq36dA8iMHejW7r8DsjyPMg9BUr8enj98j-hrQ2XvPeqtrSA56lN9TRE2PiZU-jE8LDgbKiv1bZkAueMIaMOrc_RYCJ6MB_xqozqbrHOV45ab_MfTpBoEySLmWvvnKLZA3UJPNR3h7ma2Y1D5Rmzzbn02s5SQ8TaY8SRhyIpmgdk4oljd7WvTV-dqTlapiUm_r7Aqlj64OvNzOA-F3NNii_-9tGlytUmil105lGuYkk50hXdSfNt55PfWmJba1VSvZ9r0pDVz7cmFsb4rBaCMNu01gm4XXBRZwMNL8QrkUtPpb_y6Nvz9Mahr0IKEAtH_cE8fMN1YRFrVuPfCKPb8xS8SmnDAxUM6z-e4qG0PZObdrLaWS34ZGKM9lRm2qsIMVFyN_8g2eF4B1757mAzSYY0gI0HgwMgt4zdD7CcRmeghloPNbktWVe5lTf772C9TN-JHUsei5uBqXMKW8nNqKOiN8oKUjG4w683OiKS6tMz2S8J79cBu9CJLMOuy-igSBq24bnJJy4EUoBx7FKBfNrfjjFoQJzT5NNUJFkPpaENfiBCoiBqb39GawKkDSHmIUzwp8xdGnaMW8uPA-50Vp1N%26display%3Dtouch&System=IoT_Mobile_App&RegistrationSubChannel=hOn
  5     200 - https://account2.hon-smarthome.com/s/sfsites/aura?r=3&other.LightningLoginCustom.login=1
  6     200 - https://account2.hon-smarthome.com/secur/frontdoor.jsp?allp=1&apv=1&cshc=8000005Lc690000000Lkcq&refURL=https://account2.hon-smarthome.com/secur/frontdoor.jsp&retURL=/setup/secur/RemoteAccessAuthorizationPage.apexp?source%3DCAAAAYkQ0sk4MDAwMDAwMDAwMDAwMDAwAAAA9BRscpNkjBtCfgBMGCRMEuoQcDTLq-21KDYzdjyjNdafLwCFRlu7TOnwWbbCp1GRWAxtrUTje_Dj8Ykr23uRpw2TmeYoJoVnlbu1B3U_8h_0U0A_KkPJZu9AhEwc-3YlhZ9sW4SBPe0n9Shh980rJq36dA8iMHejW7r8DsjyPMg9BUr8enj98j-hrQ2XvPeqtrSA56lN9TRE2PiZU-jE8LDgbKiv1bZkAueMIaMOrc_RYCJ6MB_xqozqbrHOV45ab_MfTpBoEySLmWvvnKLZA3UJPNR3h7ma2Y1D5Rmzzbn02s5SQ8TaY8SRhyIpmgdk4oljd7WvTV-dqTlapiUm_r7Aqlj64OvNzOA-F3NNii_-9tGlytUmil105lGuYkk50hXdSfNt55PfWmJba1VSvZ9r0pDVz7cmFsb4rBaCMNu01gm4XXBRZwMNL8QrkUtPpb_y6Nvz9Mahr0IKEAtH_cE8fMN1YRFrVuPfCKPb8xS8SmnDAxUM6z-e4qG0PZObdrLaWS34ZGKM9lRm2qsIMVFyN_8g2eF4B1757mAzSYY0gI0HgwMgt4zdD7CcRmeghloPNbktWVe5lTf772C9TN-JHUsei5uBqXMKW8nNqKOiN8oKUjG4w683OiKS6tMz2S8J79cBu9CJLMOuy-igSBq24bnJJy4EUoBx7FKBfNrfjjFoQJzT5NNUJFkPpaENfiBCoiBqb39GawKkDSHmIUzwp8xdGnaMW8uPA-50Vp1N%26display%3Dtouch%26System%3DIoT_Mobile_App%26RegistrationSubChannel%3DhOn&sid=00DU0000000Lkcq!ARUAQGeOG4rtVPPiNaf86jSrZmq5OFa.tq.npdUMA4g.hICQu_4q3ozmL5_WT5xfl9p_oEjbBcJwW47.rOR3KvOzW70.yjwG&untethered=
  7     200 - https://account2.hon-smarthome.com/apex/ProgressiveLogin?retURL=/setup/secur/RemoteAccessAuthorizationPage.apexp?source%3DCAAAAYkQ0sk4MDAwMDAwMDAwMDAwMDAwAAAA9BRscpNkjBtCfgBMGCRMEuoQcDTLq-21KDYzdjyjNdafLwCFRlu7TOnwWbbCp1GRWAxtrUTje_Dj8Ykr23uRpw2TmeYoJoVnlbu1B3U_8h_0U0A_KkPJZu9AhEwc-3YlhZ9sW4SBPe0n9Shh980rJq36dA8iMHejW7r8DsjyPMg9BUr8enj98j-hrQ2XvPeqtrSA56lN9TRE2PiZU-jE8LDgbKiv1bZkAueMIaMOrc_RYCJ6MB_xqozqbrHOV45ab_MfTpBoEySLmWvvnKLZA3UJPNR3h7ma2Y1D5Rmzzbn02s5SQ8TaY8SRhyIpmgdk4oljd7WvTV-dqTlapiUm_r7Aqlj64OvNzOA-F3NNii_-9tGlytUmil105lGuYkk50hXdSfNt55PfWmJba1VSvZ9r0pDVz7cmFsb4rBaCMNu01gm4XXBRZwMNL8QrkUtPpb_y6Nvz9Mahr0IKEAtH_cE8fMN1YRFrVuPfCKPb8xS8SmnDAxUM6z-e4qG0PZObdrLaWS34ZGKM9lRm2qsIMVFyN_8g2eF4B1757mAzSYY0gI0HgwMgt4zdD7CcRmeghloPNbktWVe5lTf772C9TN-JHUsei5uBqXMKW8nNqKOiN8oKUjG4w683OiKS6tMz2S8J79cBu9CJLMOuy-igSBq24bnJJy4EUoBx7FKBfNrfjjFoQJzT5NNUJFkPpaENfiBCoiBqb39GawKkDSHmIUzwp8xdGnaMW8uPA-50Vp1N%26display%3Dtouch%26System%3DIoT_Mobile_App%26RegistrationSubChannel%3DhOn
  8     200 - https://account2.hon-smarthome.com/sCSS/58.0/sprites/1685524212000/Theme3/default/gc/zen-componentsCompatible.css
ERROR - 200 - https://account2.hon-smarthome.com/sCSS/58.0/sprites/1685524212000/Theme3/default/gc/zen-componentsCompatible.css
=============== Response ===============
/*
 * This code is for Internal Salesforce use only, and subject to change without notice.
 * Customers shouldn't reference this file in any web pages.
 */
.zen ul,.zen ol,.zen li,.zen h1,.zen h2,.zen h3,.zen h4,.zen h6,.zen form,.zen fieldset,.zen legend,.zen input,.zen textarea,.zen p,.zen blockquote{margin:0;padding:0}.zen h1,.zen h2,.zen h3,.zen h4,.zen h5,.zen h6{display:block}.zen li{list-style:none}.zen table{border-collapse:collapse;border-spacing:0}.zen th{text-align:inherit}.zen fieldset,.zen img{border:0}.zen input,.zen textarea,.zen select{font-family:inherit;font-size:inherit;font-weight:inherit}.zen legend{color:#222}.zen a{color:#015ba7;text-decoration:none}.zen-headerTop a{color:#015ba7;text-decoration:none}.zen-headerTop a:hover,.zen-headerTop a:focus{text-decoration:underline}.zen .zen-line:after{clear:both;display:block;visibility:hidden;overflow:hidden;height:0 !important;line-height:0;content:"."}.zen .zen-unit,.zen .zen-start{float:left}.zen .zen-unitExt,.zen .zen-end{float:right}.zen .zen-size1of1{float:none}.zen .zen-size1of2{width:50%}.zen .zen-size1of3{width:33.33333%}.zen .zen-size2of3{width:66.66666%}.zen .zen-size1of4{width:25%}.zen .zen-size3of4{width:75%}.zen .zen-size1of5{width:20%}.zen .zen-size2of5{width:40%}.zen .zen-size3of5{width:60%}.zen .zen-size4of5{width:80%}.zen .zen-lastUnit{float:none;display:table-cell;width:9999em}.zen .zen-body{display:table;vertical-align:top}.zen .zen-body,.zen .zen-footer,.zen .zen-header{display:table;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.zen .zen-body.zen-cropH,.zen .zen-body.zen-cropMe,.zen .zen-header.zen-cropH,.zen .zen-header.zen-cropMe{display:block}.zen .zen-footer{text-align:center}.zen .zen-inner:after,.zen .zen-header:after,.zen .zen-body:after,.zen .zen-footer:after{clear:both;display:block;visibility:hidden;overflow:hidden;height:0 !important;line-height:0;content:"."}.zen .zen-inner{position:relative}.zen .zen-arrow{display:block;background-repeat:no-repeat;font-size:.01em;position:relative;z-index:10}.zen .zen-basic{-moz-border-radius:7px;border-radius:7px;background-color:#fff}.zen .zen-basic .zen-header{-moz-border-radius-topleft:7px;-moz-border-radius-topright:7px;border-top-left-radius:7px;border-top-right-radius:7px}.zen .zen-simple{border:1px solid #eaeaea;-moz-border-radius:4px;border-radius:4px}.zen .zen-faq .zen-topRight{background-image:url(/img/oocss/box_faq_folded_corner.png);background-color:#fff;width:18px;height:18px}.zen .zen-themed{border:1px solid #eaeaea;-moz-border-radius:4px;border-radius:4px;border-top-width:3px}.zen .zen-chart{border:2px solid #dcdcdc;-moz-border-radius:0;border-radius:0}.zen .zen-stats{-moz-border-radius:8px;border-radius:8px;border:1px solid #eaeaea}.zen .zen-instructions{border:1px solid #eaeaea;-moz-border-radius:0;border-radius:0}.zen .zen-chattyBackground{background:#fff5db;background:-moz-linear-gradient(top,#fff5db 0,#ffe5a9 100%);background:-webkit-linear-gradient(top,#fff5db 0,#ffe5a9 100%);background:-ms-linear-gradient(top,#fff5db 0,#ffe5a9 100%)}.zen .zen-standardBackground{background-color:#f8f8f8}.zen .zen-wizardBackground{color:#fff;background-color:#1797c0}.zen .zen-instructionsBackground{background-color:#ffc}.zen .zen-chartBackground{background-color:#dcdcdc}.zen .zen-recycleBackground{background-color:#dcfbdc}.zen .zen-alertBackground{background-color:#fdedea}.zen .zen-warnBackground{background-color:#ffffdc}.zen .zen-confirmBackground{background-color:#edfff1}.zen .zen-infoBackground{background-color:#f5fcff}.zen .zen-faqBackground{background:-moz-linear-gradient(top,#fff7c1,#fff 60px);background:-webkit-linear-gradient(top,#fff7c1,#fff 60px);background:-ms-linear-gradient(top,#fff7c1,#fff 60px)}.zen .zen-innerBackground{background-color:#fff}.zen .zen-header .zen-boxHeading{font-size:1.167em}.zen .zen-pageBoxHeader{border-bottom:1px solid #fff;-moz-box-shadow:inset 0 -1px 0 #dbdbdb;-webkit-box-shadow:inset 0 -1px 0 #dbdbdb;box-shadow:inset 0 -1px 0 #dbdbdb}.zen .zen-stepsHeader{background-color:#fff9d6;border-bottom:1px solid #dbdbdb}.zen .zen-stepsHeader .zen-boxHeading{font-size:1.083em}.zen .zen-importHeader{background-color:#7b80b9;border-bottom:1px solid #767cb6}.zen .zen-importHeader .zen-boxHeading{color:#fff;font-size:1.083em}.zen .zen-chartHeader{background-color:#dcdcdc}.zen .zen-chartHeader .zen-boxHeading{color:#30519d;font-size:1.083em}.zen .zen-popHeader{background-color:#ebeeef;background:-moz-linear-gradient(top,#fdfdfd 0,#ebeeef 100%);background:-webkit-linear-gradient(top,#fdfdfd 0,#ebeeef 100%);background:-ms-linear-gradient(top,#fdfdfd 0,#ebeeef 100%)}.zen .simpleHeader{color:#000;font-weight:bold;font-size:1em}.zen .zen-simpleHeader .zen-boxHeading{font-size:1em}.zen .zen-themed .zen-boxHeading{font-size:1.167em}.zen .zen-emphasisHeader .zen-boxHeading{font-size:1.3em;color:000;font-weight:bold}.zen .zen-pageBoxFooter{border-top:1px solid #dbdbdb;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.zen .zen-quickHeader .zen-boxHeading{color:#fff;font-size:1em}.zen .zen-quick .zen-header,.zen .zen-quick .zen-body{padding:0 9px;-moz-border-radius:7px;border-radius:7px;background-color:#1797c0}.zen .zen-quick .zen-body{background-color:#cfeef8;margin-top:3px}.overlayDialog .zen-boxHeading{margin:0}.zen .zen-message{border:1px solid #000;background-color:#e2e2e2;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:inset 0 3px 0 -2px #fff;-webkit-box-shadow:inset 0 3px 0 -2px #fff;box-shadow:inset 0 3px 0 -2px #fff}.zen .zen-alert{border-color:#f2a199;background-color:#fdedea}.zen .zen-warn{border-color:#f8e38e;background-color:#ffffdc}.zen .zen-confirm{border-color:#9bebb3;background-color:#edfff1}.zen .zen-info{border-color:#bee6ff;background-color:#f5fcff}.zen .zen-toggle .zen-body{display:none}.zen .zen-toggleOpen .zen-body{display:block}.zen .zen-toggleArrow{float:left;display:block;width:0;height:0;border-style:solid;margin-right:10px;margin-top:2px}.zen .zen-toggleOpen .zen-toggleArrow{margin-top:4px}.zen .zen-toggleArrow{border-width:5px;border-right-width:0;border-color:transparent;border-left-color:#464646}.zen .open .zen-toggleArrow{border-width:5px 5px 0 5px;border-color:#464646 transparent transparent}.zen .zen-toggle{border-top:3px solid #1797c0}.zen .zen-toggleShowAll{border-top:0}.zen .zen-toggleShowAll .zen-header{border-bottom:1px solid gray}.zen .zen-tabs .zen-header{z-index:5;padding:0;position:relative;overflow:visible}.zen .zen-tabs .zen-header:after{content:""}.zen .zen-tabs .zen-header ul{padding:0 5px;margin:0}.zen .zen-tabs .zen-header li{float:left}.zen .zen-tabs .zen-body{position:relative;z-index:4;display:block}.zen .zen-tabControl a{display:inline-block;padding:7px 10px 3px 10px}.zen .zen-tabControl .zen-current{z-index:1;position:relative;top:4px}.zen .zen-tabControl .zen-current a{cursor:default}.zen .zen-tabs .zen-tabBody li{display:none}.zen .zen-tabs .zen-tabBody li li{display:block}.zen .zen-tabs .zen-tabBody .zen-current{display:block}.zen .zen-simpleTabs .zen-tabControl .zen-current{top:2px}.zen .zen-tabs .zen-body{border:1px solid #eaeaea;-moz-border-radius:4px;border-radius:4px;border-top-width:3px;border-top-color:#1797c0;background-color:#f8f8f8}.zen .zen-tabControl a{color:#333;font-weight:normal;text-decoration:none}.zen .zen-tabControl li{border:1px solid #e0e0e0;border-bottom:0;background-color:#efefef;-moz-border-radius-topleft:7px;-moz-border-radius-topright:7px;border-top-left-radius:7px;border-top-right-radius:7px;-moz-box-shadow:inset 0 0 2px #f6f6f6;-webkit-box-shadow:inset 0 0 2px #f6f6f6;box-shadow:inset 0 0 2px #f6f6f6}.zen .zen-tabControl .zen-current{background-color:#f7f7f7;-moz-box-shadow:2px -2px 2px #c8c8c8,-2px -2px 2px #c8c8c8,inset 0 3px 5px #e0e0e0;-webkit-box-shadow:2px -2px 2px #c8c8c8,-2px -2px 2px #c8c8c8,inset 0 3px 5px #e0e0e0;box-shadow:2px -2px 2px #c8c8c8,-2px -2px 2px #c8c8c8,inset 0 3px 5px #e0e0e0;border-width:0}.zen .zen-tabs .zen-header li:hover{background-color:#fff}.zen .zen-tabs .zen-header .zen-current:hover{background-color:#efefef}.zen .zen-simpleTabs .zen-body{border-top:1px solid #eaeaea}.zen .zen-callout{margin:5px;position:relative}.zen .zen-callout .zen-arrow{position:absolute;background-repeat:no-repeat}.zen .zen-callout .zen-inner{-moz-border-radius:5px;border-radius:5px;overflow:hidden}.zen .zen-sideNorth{margin-top:20px}.zen .zen-sideEast{margin-right:16px}.zen .zen-sideSouth{margin-bottom:16px}.zen .zen-sideWest{margin-left:16px}.zen .zen-sideNorth .zen-arrow,.zen .zen-sideSouth .zen-arrow{width:25px;height:16px}.zen .zen-sideEast .zen-arrow,.zen .zen-sideWest .zen-arrow{width:16px;height:25px}.zen .zen-sideNorth .zen-arrow{background-position:1px -91px;top:-14px}.zen .zen-sideEast .zen-arrow{background-position:1px -28px;right:-13px}.zen .zen-sideSouth .zen-arrow{background-position:2px -60px;bottom:-14px}.zen .zen-sideWest .zen-arrow{background-position:-2px 1px;left:-13px}.zen .zen-arrowLeft .zen-arrow{left:15px}.zen .zen-arrowCenter .zen-arrow{left:50%;margin-left:-13px}.zen .zen-arrowRight .zen-arrow{right:15px}.zen .zen-arrowTop .zen-arrow{top:15px}.zen .zen-arrowMiddle .zen-arrow{top:50%;margin-top:-13px}.zen .zen-arrowBottom .zen-arrow{bottom:15px}.zen .zen-callout{border:1px solid #c1c1c1;background-color:#fff;-moz-border-radius:5px;border-radius:5px;-moz-box-shadow:0 2px 5px #a0a6ab;-webkit-box-shadow:0 2px 5px #a0a6ab;box-shadow:0 2px 5px #a0a6ab}.zen .zen-callout .zen-arrow{background-image:url(/img/sprites/callout_arrows.png)}.zen .zen-hasActionsInHead .zen-header,.zen .zen-hasActionsInFoot .zen-footer{background-color:#e9eaea}.zen .zen-hasActionsInHead .zen-arrow{background-position:1px -119px}.zen .zen-hasActionsInFoot .zen-arrow{background-position:1px -148px}.zen .zen-guidedTour .zen-arrow{background-image:url(/img/sprites/callout_arrows_guided_tours.png)}.zen .zen-guidedTour .zen-inner{border:2px solid #fff;background-color:#fedf95}.zen .zen-callout .chatterHover{min-width:272px;padding:10px}.zen .zen-callout .chatterHover .zen-mediaBody{width:auto;max-width:191px}.zen .zen-callout .chatterHover .name{font-size:1.2em;color:#015ba7}.zen .zen-media:after,.zen .zen-mediaBody:after{clear:both;display:block;visibility:hidden;overflow:hidden;height:0 !important;line-height:0;content:"."}.zen .zen-mediaBody{display:table-cell;width:1000em}.zen .zen-img{float:left;background-repeat:no-repeat;margin-right:10px}.zen .zen-img img{display:block}.zen .zen-imgExt{float:right;margin-left:10px}.zen .zen-mediaExt{white-space:nowrap}.zen .zen-mediaExt,.zen .zen-mediaExt .zen-img,.zen .zen-mediaExt img,.zen .zen-mediaExt .zen-imgExt,.zen .zen-mediaExt .zen-mediaBody{display:inline;display:inline-block;vertical-align:middle;width:auto}.zen .zen-mediaExt:after,.zen .zen-mediaExt .zen-mediaBody:after{content:""}.zen .zen-mediaExt .zen-img{margin:0;margin-right:5px;float:none}.zen .zen-mediaExt .zen-imgExt{margin:0;margin-left:5px;float:none}.zen .zen-mediaExt a,.zen .zen-mediaExt img{vertical-align:middle;display:inline}.zen .zen-label,.zen .zen-form label{color:#4a4a56;font-size:.917em;font-weight:bold}.zen .zen-form label,.zen .zen-form .zen-label{width:200px;display:inline-block;text-align:right;vertical-align:middle;margin-top:5px;margin-right:20px;float:left;clear:left}.zen .zen-form:before,.zen .zen-form:after{content:"";display:table}.zen .zen-form:after{clear:both}.zen .zen-labelSmall label,.zen .zen-labelSmall .zen-label{width:65px}.zen .zen-labelMedium label,.zen .zen-labelMedium .zen-label{width:120px}.zen .zen-labelMediumLarge label,.zen .zen-labelMediumLarge .zen-label{width:200px}.zen .zen-labelLarge label,.zen .zen-labelLarge .zen-label{width:280px}.zen .zen-inlineForm .zen-label,.zen .zen-inlineForm label{width:auto;margin-right:5px}.zen .zen-skinnyForm .zen-label,.zen .zen-skinnyForm label{width:auto;display:block;text-align:left;float:none;margin-bottom:2px}.zen .zen-skinnyForm .zen-help{margin-left:5px}.zen .zen-formBody{display:inline-block}.zen .zen-input{box-sizing:border-box;padding:3px;margin:1px 0}.zen .zen-inputTiny{width:30px}.zen .zen-inputSmall{width:150px}.zen .zen-inputMedium{width:250px}.zen .zen-inputLarge{width:350px}.zen .zen-inputFull{width:100%}.zen .zen-form textarea{vertical-align:top;padding:4px;box-sizing:border-box}.zen .zen-form .zen-input,.zen .zen-form textarea{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;-moz-box-shadow:inset 0 1px 0 #c3c3c3;-webkit-box-shadow:inset 0 1px 0 #c3c3c3;box-shadow:inset 0 1px 0 #c3c3c3;border:1px solid gray;border-color:#7c7c7c #c3c3c3 #ddd}.zen .zen-form .zen-requiredMark{color:#c00;padding-right:1px}.zen .zen-help{margin-top:3px;clear:left;color:#767676}.zen .zen-errorMessage{color:#d74c3b;margin-top:3px}.zen .zen-formFieldInfo{vertical-align:top;margin-top:4px}.zen .zen-formFieldAction{margin:4px;position:relative}.zen .zen-formFieldAction img{vertical-align:middle}.zen .zen-formFieldAction:active{bottom:-1px}.zen .zen-checkGroup label{float:none;width:auto;text-align:left;margin-top:0;font-weight:normal}.zen .zen-checkGroup>ul{margin-top:0;margin-bottom:0}.zen .zen-progress{display:inline-block;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;background-color:#ccc;-moz-box-shadow:inset 1px 1px 3px #8d8d8d;-webkit-box-shadow:inset 1px 1px 3px #8d8d8d;box-shadow:inset 1px 1px 3px #8d8d8d;width:50px}.zen .zen-value{display:inline-block;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;-moz-box-shadow:inset 1px 1px 3px #8d8d8d;-webkit-box-shadow:inset 1px 1px 3px #8d8d8d;box-shadow:inset 1px 1px 3px #8d8d8d;visibility:hidden}.zen .zen-valueNotOk{width:25%;background-color:#c33929;visibility:visible}.zen .zen-valueOk{width:50%;background-color:#f8c933;visibility:visible}.zen .zen-valueStrong{width:100%;background-color:#74c205;visibility:visible}.zen .zen-field{margin:10px 0}.zen .zen-fieldSmall{margin:5px 0}.zen .zen-fieldMedium{margin:16px 0}.zen .zen-fieldLarge{margin:22px 0}.zen .zen-select{position:relative;margin:0 10px;z-index:99}.zen .zen-select .zen-trigger{text-align:left;display:block}.zen .zen-select .zen-selectArrow{float:right;display:block;width:0;height:0;margin-top:5px;margin-left:10px}.zen .zen-inlineSelect,.zen .zen-inlineSelect .zen-trigger,.zen .zen-inlineSelect .zen-selectArrow{display:inline-block}.zen .zen-options{position:absolute;top:100%;left:3px;right:3px;margin:0;display:none;overflow:hidden}.zen .zen-open .zen-options{display:block}.zen .zen-options a{display:block;padding:3px}.zen .zen-select .zen-selectArrow{border-style:solid;border-width:5px 4px 0;border-color:#000 transparent transparent}.zen .zen-options{border:1px solid #4997bf;background-color:#fff;-moz-box-shadow:0 0 4px #b1b2b4;-webkit-box-shadow:0 0 4px #b1b2b4;box-shadow:0 0 4px #b1b2b4}.zen .zen-select.zen-open{z-index:100}.zen .zen-open .zen-options{display:block}.zen .zen-options a{color:#000;text-decoration:none}.zen .zen-options a:hover,.zen .zen-options a:focus,.zen .zen-options a:active{color:#015ba7;background-color:#e3f3ff;text-decoration:none;outline:none}.zen .zen-options .zen-disabled{color:#c2c2c2}.zen h1 strong,.zen .h1 strong{display:block;padding-left:1px}.zen .zen-inlineHeading{margin:0;display:inline-block}.zen h1,.zen h2,.zen h3,.zen h4,.zen h5,.zen h6,.zen .zen-h1,.zen .zen-h2,.zen .zen-h3,.zen .zen-h4,.zen .zen-h5,.zen .zen-h6{font-weight:bold}.zen h1,.zen .zen-h1{font-size:1.833em;font-weight:normal}.zen h1 strong,.zen .zen-h1 strong{font-size:.5em;font-weight:bold;margin-bottom:-3px}.zen h2,.zen .zen-h2{font-size:1.667em}.zen h3,.zen .zen-h3{font-size:1.5em}.zen h4,.zen .zen-h4{font-size:1.333em}.zen h5,.zen .zen-h5{font-size:1.167em}.zen h6,.zen .zen-h6{font-size:1em}.zen h1,.zen h2,.zen h3,.zen h4,.zen h5,.zen h6,.zen dl,.zen p,.zen blockquote,.zen .zen-box,.zen pre{margin:10px 0}.zen .zen-header h1,.zen .zen-header h2,.zen .zen-header h3,.zen .zen-header h4,.zen .zen-header h5,.zen .zen-header h6{margin:5px 0}.zen h1,.zen h2,.zen h3,.zen h4,.zen h5,.zen h6,.zen img{padding-bottom:0}.zen table h1,.zen table h2,.zen table h3,.zen table h4,.zen table h5,.zen table h6,.zen table p,.zen table ul,.zen table ol,.zen table dl{padding:0}.zen .zen-header,.zen .zen-body,.zen .zen-footer,.zen .zen-intro{padding:0 7px}.zen .zen-ptn,.zen .zen-pvn,.zen .zen-pan{padding-top:0 !important}.zen .zen-pts,.zen .zen-pvs,.zen .zen-pas{padding-top:5px !important}.zen .zen-ptm,.zen .zen-pvm,.zen .zen-pam{padding-top:10px !important}.zen .zen-ptl,.zen .zen-pvl,.zen .zen-pal{padding-top:20px !important}.zen .zen-prn,.zen .zen-phn,.zen .zen-pan{padding-right:0 !important}.zen .zen-prs,.zen .zen-phs,.zen .zen-pas{padding-right:5px !important}.zen .zen-prm,.zen .zen-phm,.zen .zen-pam{padding-right:10px !important}.zen .zen-prl,.zen .zen-phl,.zen .zen-pal{padding-right:20px !important}.zen .zen-pbn,.zen .zen-pvn,.zen .zen-pan{padding-bottom:0 !important}.zen .zen-pbs,.zen .zen-pvs,.zen .zen-pas{padding-bottom:5px !important}.zen .zen-pbm,.zen .zen-pvm,.zen .zen-pam{padding-bottom:10px !important}.zen .zen-pbl,.zen .zen-pvl,.zen .zen-pal{padding-bottom:20px !important}.zen .zen-pln,.zen .zen-phn,.zen .zen-pan{padding-left:0 !important}.zen .zen-pls,.zen .zen-phs,.zen .zen-pas{padding-left:5px !important}.zen .zen-plm,.zen .zen-phm,.zen .zen-pam{padding-left:10px !important}.zen .zen-pll,.zen .zen-phl,.zen .zen-pal{padding-left:20px !important}.zen .zen-mtn,.zen .zen-mvn,.zen .zen-man{margin-top:0 !important}.zen .zen-mts,.zen .zen-mvs,.zen .zen-mas{margin-top:5px !important}.zen .zen-mtm,.zen .zen-mvm,.zen .zen-mam{margin-top:10px !important}.zen .zen-mtl,.zen .zen-mvl,.zen .zen-mal{margin-top:20px !important}.zen .zen-mrn,.zen .zen-mhn,.zen .zen-man{margin-right:0 !important}.zen .zen-mrs,.zen .zen-mhs,.zen .zen-mas{margin-right:5px !important}.zen .zen-mrm,.zen .zen-mhm,.zen .zen-mam{margin-right:10px !important}.zen .zen-mrl,.zen .zen-mhl,.zen .zen-mal{margin-right:20px !important}.zen .zen-mbn,.zen .zen-mvn,.zen .zen-man{margin-bottom:0 !important}.zen .zen-mbs,.zen .zen-mvs,.zen .zen-mas{margin-bottom:5px !important}.zen .zen-mbm,.zen .zen-mvm,.zen .zen-mam{margin-bottom:10px !important}.zen .zen-mbl,.zen .zen-mvl,.zen .zen-mal{margin-bottom:20px !important}.zen .zen-mln,.zen .zen-mhn,.zen .zen-man{margin-left:0 !important}.zen .zen-mls,.zen .zen-mhs,.zen .zen-mas{margin-left:5px !important}.zen .zen-mlm,.zen .zen-mhm,.zen .zen-mam{margin-left:10px !important}.zen .zen-mll,.zen .zen-mhl,.zen .zen-mal{margin-left:20px !important}.zen .zen-lowlight{}.zen .zen-midlight{font-weight:bold}.zen .zen-highlight{}.zen .zen-healthyPlanet{color:#360}.zen .zen-goToRecord{color:#222;font-weight:normal;text-decoration:underline}a.zen-goToRecord:hover{color:#2861a1}.zen strong{font-weight:bold}.zen em{font-style:italic}.zen .zen-date{color:gray;font-size:.917em}.zen .zen-note{color:gray;font-style:italic}.zen .zen-legal{font-size:.917em}.zen .zen-deemphasize{font-size:.917em}.zen .zen-list{margin:10px 0}.zen .zen-list>li{padding:.2em 0}.zen .zen-inlineList>li{display:inline-block;padding-right:.5em;vertical-align:top}.zen .zen-inlineListExt>li{display:inline}.zen .zen-inlineListExt>li:after{content:"\2022";padding:0;padding-right:4px;padding-left:6px}.zen .zen-inlineListExt>li:last-child:after{content:""}.zen .zen-breadcrumbList{padding:2px 0 0;font-size:.917em;display:inline-block}.zen .zen-breadcrumbList>li{display:inline-block}.zen .zen-breadcrumbList>li:before{content:"\003E";display:inline-block;padding:0;padding-right:7px;padding-left:4px}.zen .zen-breadcrumbList>li:first-child:before{content:"";padding:0}.zen .zen-breadcrumbList a{color:#797979}.zen .zen-numberedList{padding-left:20px}.zen .zen-numberedList>li{list-style:decimal outside;margin:3px 0}.zen .zen-bulletedList{padding-left:20px}.zen .zen-bulletedList>li{list-style:disc outside;margin:3px 0}.zen .zen-pipedList>li{box-sizing:border-box;display:inline-block;padding:0 5px}.zen .zen-pipedList:before,.zen .zen-pipedList:after{content:"";display:table}.zen .zen-pipedList:after{clear:both}.zen .zen-pipedList>li{border-left:1px solid #7d7d84}.zen .zen-pipedList>li:first-child,.zen .zen-pipedList>.zen-firstItem{border-left:0}.zen .zen-pipedList .zen-img,.zen .zen-pipedList .zen-imgExt{float:none}.zen .zen-pipedList>.zen-lastItem{position:relative;top:-1px}.zen .zen-detailList{overflow:auto}.zen .zen-detailList>dt{padding-top:.3em;color:#4a4a56;font-weight:bold;font-size:.917em;width:200px;float:left;clear:left;padding-right:20px;text-align:right}.zen .zen-detailList>dd{padding-top:.3em}.zen .zen-labelSmall>dt{width:65px}.zen .zen-labelMedium>dt{width:120px}.zen .zen-labelLarge>dt{width:280px}.zen .zen-detailListExt>dd{border-bottom:1px solid #ececec}.zen .zen-detailListExt>dd,.zen .zen-detailListExt>dt{padding-top:5px;padding-bottom:5px}.zen .zen-listSmall>li{margin:5px 0}.zen .zen-listSmall>dt,.zen .zen-listSmall>dd{padding-top:5px;padding-bottom:5px}.zen .zen-listMedium>li{margin:10px 0}.zen .zen-listMedium>dt,.zen .zen-listMedium>dd{padding-top:10px;padding-bottom:10px}.zen .zen-listLarge>li{margin:20px 0}.zen .zen-listLarge>dt,.zen .zen-listLarge>dd{padding-top:20px;padding-bottom:20px}.zen-inlineList.zen-listLarge>li{padding-right:20px;margin:0}.zen .zen-listView{}.zen .zen-listView>.zen-content{position:relative;z-index:1}.zen .zen-listView .zen-footer,.zen .zen-listView .zen-header{display:block;padding:0}.zen .zen-listView .zen-title:after,.zen .zen-listView .zen-header:after,.zen .zen-listView .zen-navigation:after .zen .zen-listView .zen-footer:after{content:"";clear:both;display:table}.zen .zen-listView .zen-pager .zen-label{font-size:inherit;font-weight:inherit}.zen .zen-listView.zen-listViewFixed .zen-data{table-layout:fixed}.zen .zen-listView.zen-listViewFixed .zen-data th,.zen .zen-listView.zen-listViewFixed .zen-data td,.zen .zen-listView.zen-listViewFixed .zen-data td .zen-cellShim{height:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen .zen-listView.zen-listViewFixed .zen-data td.emptyText{overflow:inherit;white-space:normal}.zen .zen-listView.zen-listViewHeaderless .zen-data thead{display:none}.zen .zen-listView.zen-listViewFixedHeader .zen-data{height:100%}.zen .zen-listView.zen-listViewFixedHeader .zen-data tbody{height:auto}.zen .zen-listView.zen-listViewFixedHeader .zen-data thead tr{display:block;position:relative}.zen .zen-listView.zen-listViewFixedHeader .zen-data tbody{display:block;min-height:150px;overflow:auto;width:100%}.zen .zen-listView.zen-listViewFixedHeader .zen-data tbody td{border-right:1px solid transparent}.zen .zen-listView.zen-listViewFixedHeader .zen-data tbody td:last-child{border-right-color:#ededed}.zen .zen-listView.zen-listViewFixedHeader .zen-columnSort tr:last-child td{border-bottom:1px solid #ededed}.zen .zen-listView{background-color:white}.zen .zen-listView.zen-listViewHeaderless .zen-data tbody{border-top:1px solid #e0e3e5}.zen .zen-listView .zen-data thead{background-color:#f2f3f3;border-bottom:1px solid #e0e3e5;min-height:1.8em}.zen .zen-listView .zen-data tr.zen-selected{background-color:#b0e1fa}.zen .zen-listView .zen-data tr.zen-hover{background-color:#e3f3ff}.zen .zen-listView .zen-data th,.zen .zen-listView .zen-data td{vertical-align:middle}.zen .zen-listView .zen-footer{background:#f2f3f3;border:1px solid #e0e3e5;border-top:1px solid #fff;min-height:1.8em}.zen .zen-listView.zen-listViewSmall .zen-data th,.zen .zen-listView.zen-listViewSmall .zen-data td{padding:2px}.zen .zen-listView.zen-listViewMedium .zen-data th,.zen .zen-listView.zen-listViewMedium .zen-data td{padding:7px}.zen .zen-listView.zen-listViewLarge .zen-data th,.zen .zen-listView.zen-listViewLarge .zen-data td{padding:10px}.zen .zen-listView .zen-selector{width:10px}.zen .zen-listView .zen-selectionInfo{float:left;font-size:.9em}.zen .zen-listView .zen-selectionInfo .zen-trigger{line-height:2em;margin:.5em}.zen .zen-listView .zen-selectionInfo .zen-trigger .zen-facettrigger{display:inline-block}.zen .zen-listView .zen-selectionInfo .zen-trigger .zen-visualization{background:url(/img/func_icons/util/selectArrow12.gif) no-repeat left 0;display:inline-block;height:12px;margin:.2em 0 0 .7em;width:14px}.zen .zen-listView .zen-selectionInfo .zen-open .zen-trigger .zen-visualization{background-position:-15px 0}.zen .zen-listView .zen-selectionInfo .zen-options{position:absolute;text-align:left;top:-62px;width:165px}.zen .zen-listView .zen-selectionInfo .zen-option{padding:2px 5px}.zen .zen-listView .zen-action{width:84px}.zen .zen-listView .zen-pager{float:left}.zen .zen-listView .zen-pagerPageSize,.zen .zen-listView .zen-pagerJumpToPage{float:right}.zen .zen-pagerNextPrevious{line-height:1.9em}.zen .zen-pagerNextPrevious .zen-first .zen-label,.zen .zen-pagerNextPrevious .zen-last .zen-label{color:transparent;height:1px;overflow:hidden;position:absolute;width:1px}.zen .zen-listView .zen-searchBox{float:left}.zen .zen-select .zen-trigger a:hover{text-align:left;display:block}.zen .listViewportWrapper .listViewport .listBody{border:0 none;height:auto}.zen .listViewportWrapper .subNav .linkBar,.zen .listViewportWrapper .bottomNav{display:none}.zen .listViewportWrapper .zen-navigation{border-top:3px solid #56458c;background-color:#f8f8f8;border-left:1px solid #e0e3e5;border-right:1px solid #e0e3e5;border-bottom:0;padding:2px 5px 10px;margin-top:5px;border-top-left-radius:4px;border-top-right-radius:4px}.zen .listViewportWrapper .zen-buttons{margin-top:2px}.zen .listViewportWrapper .zen-buttons .zen-refresh{background:url(/img/alohaSkin/sync.png) top left no-repeat;width:24px;background-position:3px 3px;vertical-align:middle}.zen .listViewportWrapper .zen-buttons .zen-refreshNeeded{background-position:3px -41px}.zen .printerIcon,.zen .zen-showFeed .feedContainer,.zen .zen-showFeed .printerIconDisabled{display:inherit !important;visibility:inherit !important}.zen .zen-showFeed .printerIcon,.zen .zen-showFeed .zen-listView .zen-content,.zen .zen-showFeed .zen-listView .zen-footer{display:none !important}.zen .zen-loader{display:none;height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:80}.zen .zen-loading .zen-loader{display:block}.zen .zen-loader .zen-background{height:100%;left:0;position:absolute;top:0;width:100%;z-index:0}.zen .zen-loader .zen-content{display:inline-block;line-height:normal;padding-left:25px;position:relative;top:80px;vertical-align:middle;z-index:1}.zen .zen-loader .zen-background{background-color:#fff;opacity:.6}.zen .zen-loader .zen-content{background-image:url('/img/loading.gif');background-position:left center;background-repeat:no-repeat;color:#666;font-weight:bold;height:16px;text-shadow:.1em .1em .01em #fff,.1em -.1em .01em #fff,-.1em -.1em .01em #fff,-.1em .1em .01em #fff;vertical-align:middle}.zen hr{height:0;border:0;margin:5px 0}.zen .zen-divider{border-top:1px dotted #d9d9d9}.zen .zen-dividerStrong{border-top:2px solid #000}.zen .zen-searchBox input{border:1px solid #ccc;border-radius:3px;color:#777;margin:0;outline:medium none;padding:8px 35px 7px 25px;width:190px}.zen .zen-searchBox input[placeholder]{text-overflow:ellipsis}::-moz-placeholder{text-overflow:ellipsis}:-ms-input-placeholder{text-overflow:ellipsis}.zen .zen-searchBox input:-moz-placeholder{text-overflow:ellipsis}.zen .zen-searchBox input:focus{border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 2px rgba(226,226,226,.3);-webkit-transition:all .3s ease-in-out .3s;-moz-transition:all .3s ease-in-out .3s;-o-transition:all .3s ease-in-out .3s;transition:all .3s ease-in-out .3s}.zen .zen-searchBox .zen-clearInput{cursor:pointer;display:inline-block;visibility:hidden}.zen .zen-searchBox.zen-populated .zen-clearInput{visibility:inherit}.zen .zen-searchBox input::-ms-clear{display:none}.zen .zen-searchBox input{background:url("/img/func_icons/util/search16.png") no-repeat scroll 3px #fff;box-shadow:0 1px 1px #e7e7e8 inset}.zen .zen-searchBox.zen-active input,.zen .zen-searchBox.zen-populated input{color:#222}.zen .zen-searchBox .zen-clearInput{background:white url('/img/alohaSkin/search_clear_sprite.png') no-repeat 0 0;height:16px;margin-left:-23px;overflow:hidden;position:absolute;top:9px;width:16px}.zen .zen-data{width:100%;text-align:left}.zen .zen-data tr{vertical-align:top}.zen .zen-data th,.zen .zen-data td{padding:4px 2px 4px 5px}.zen .zen-data th{font-weight:bold}.zen .zen-data thead th,.zen .zen-data thead td{white-space:nowrap}.zen .zen-textCenter,.zen table .zen-textCenter,.zen table tr .zen-textCenter{text-align:center}.zen .zen-textLeft,.zen table .zen-textLeft,.zen table tr .zen-textLeft{text-align:left}.zen .zen-textRight,.zen table .zen-textRight,.zen table tr .zen-textRight{text-align:right}.zen .zen-textTop,.zen table .zen-textTop,.zen table tr .zen-textTop{vertical-align:top}.zen .zen-textBottom,.zen table .zen-textBottom,.zen table tr .zen-textBottom{vertical-align:bottom}.zen .zen-textMiddle,.zen table .zen-textMiddle,.zen table tr .zen-textMiddle{vertical-align:middle}.zen .zen-columnSort{border:1px solid #e0e3e5}.zen .zen-columnSort th{background:#f2f3f3;color:#000;font-size:.9em;border:1px solid #e0e3e5;border-width:0 0 1px 1px}.zen .zen-columnSort th:first-child{border-left:0}.zen .zen-columnSort th.zen-sortable{cursor:pointer}.zen .zen-columnSort th.zen-sortable:hover{background:#e6eaea;color:#015ba7}.zen .zen-columnSort td{border-bottom:1px solid #ededed}.zen .zen-columnSort tr:last-child td{border-bottom:0}.zen .zen-columnSort .zen-sorted{background-color:#e0e3e6}.zen .zen-columnSort .zen-sorted:after{padding:0 4px;display:inline-block;position:relative;top:-1px;text-shadow:1px 1px 1px hsla(0,0%,0%,.2);margin-left:5px}.zen .zen-columnSort .zen-ascending:after{content:"\2191"}.zen .zen-columnSort .zen-descending:after{content:"\2193";color:#222}.zen .zen-columnSort tfoot{background:#f2f3f3}.zen .zen-columnSort tfoot td,.zen .zen-columnSort tfoot th{border-top:1px solid #e0e3e5}.zen .zen-detailTable th{text-align:right;font-weight:bold;width:33%}.zen .zen-detailTable td{padding:5px 2px 5px 10px}.zen .zen-detailTable tr{border-bottom:1px solid #ececec}.zen .zen-detailTable tr:last-child{border-bottom:0}.zen .zen-btn{overflow:visible;cursor:pointer;display:inline-block;position:relative;padding:2px 3px;margin:1px}.zen .zen-btn:active{bottom:-1px}.zen .zen-closeBtn{height:16px;line-height:16px;width:16px;display:block;text-align:center;padding:0;margin:0}.zen .zen-btn.zen-disabledBtn,.zen .zen-btn[disabled]{bottom:0}.zen .zen-btn{padding:3px 6px}.zen .zen-closeBtn{padding:0;margin:0}.zen .zen-btn{color:#222;border:1px solid #c3c3c3;border-color:#c3c3c3 #aaa #909090;font-size:.917em;font-weight:bold;text-decoration:none;-moz-border-radius:3px;border-radius:3px;background:#f0f0f0;background:-moz-linear-gradient(#fff,#f0f0f0);background:-webkit-linear-gradient(#fff,#f0f0f0);background:-ms-linear-gradient(#fff,#f0f0f0)}.zen .zen-btn:hover,.zen .zen-btn:focus{background:#e4f5ff;background:-moz-linear-gradient(#fff,#e4f5ff 60%);background:-webkit-linear-gradient(#fff,#e4f5ff 60%);background:-ms-linear-gradient(#fff,#e4f5ff 60%)}.zen .zen-btn:active{border-color:#6a6a6a #888 #a5a5a5;background:#cbcbcb;background:-moz-linear-gradient(#cbcbcb,#e5e5e5 10%,#f8f8f8);background:-webkit-linear-gradient(#cbcbcb,#e5e5e5 10%,#f8f8f8);background:-ms-linear-gradient(#cbcbcb,#e5e5e5 10%,#f8f8f8)}.zen .zen-primaryBtn{background:#eaf9ff;background:-moz-linear-gradient(top,#eaf9ff 0,#ccedfb 68%,#bee9f8 100%);background:-webkit-linear-gradient(top,#eaf9ff 0,#ccedfb 68%,#bee9f8 100%);background:-ms-linear-gradient(top,#eaf9ff 0,#ccedfb 68%,#bee9f8 100%)}.zen .zen-primaryBtn:hover,.zen .zen-primaryBtn:focus{background:#d3f2fd;background:-moz-linear-gradient(top,#f9fdff 0,#d3f2fd 100%);background:-webkit-linear-gradient(top,#f9fdff 0,#d3f2fd 100%);background:-ms-linear-gradient(top,#f9fdff 0,#d3f2fd 100%)}.zen .zen-primaryBtn:active{background:#bee7f6}.zen .zen-promoBtn{color:#fff;padding:5px 7px;font-size:1em;border:2px solid #fff;-moz-border-radius:7px;border-radius:7px;-moz-box-shadow:0 1px 3px 1px rgba(0,0,0,.15);-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.15);box-shadow:0 1px 3px 1px rgba(0,0,0,.15);background:#6bc7e4;background:-moz-linear-gradient(#6bc7e4,#0599cc 65%);background:-webkit-linear-gradient(#6bc7e4,#0599cc 65%);background:-ms-linear-gradient(#6bc7e4,#0599cc 65%)}.zen .zen-promoBtn .zen-selectArrow{border-color:#fff transparent transparent}.zen .zen-promoBtn:hover,.zen .zen-promoBtn:focus,.zen .zen-promoBtn:active{background:#1b99c3;border-color:#fff}.zen .zen-closeBtn{color:#707474;border:0;background:#f6f7f7;font-size:1em;font-family:Verdana,Arial,Helvetica,sans-serif;-moz-border-radius:4px;border-radius:4px;-moz-box-shadow:inset 0 1px 0 0 #e4e4e4;-webkit-box-shadow:inset 0 1px 0 0 #e4e4e4;box-shadow:inset 0 1px 0 0 #e4e4e4}.zen .zen-highlightBtn{font-family:Arial;font-size:1.08em;background-color:#8ab529;border:1px solid #6c8049;background-image:-ms-linear-gradient(top,#8AB529 0,#87AC31 100%);background-image:-moz-linear-gradient(top,#8AB529 0,#87AC31 100%);background-image:-webkit-linear-gradient(top,#8AB529 0,#87AC31 100%);background-image:linear-gradient(top,#8AB529 0,#87AC31 100%);display:inline-block;padding-top:0;padding-bottom:1px;padding-left:10px;padding-right:10px;height:30px;color:#fff;-moz-border-radius:3px;border-radius:2px;-moz-box-shadow:0 1px 2px 0 #adadad;-webkit-box-shadow:0 1px 2px 0 #adadad;box-shadow:0 1px 2px 0 #adadad;margin:0}.zen .zen-btn.zen-highlightBtn:hover,.zen .zen-btn.zen-highlightBtn.onHover{background-color:#a0cb3d;background-image:-ms-linear-gradient(top,#a5cd48 0,#97bf3a 100%);background-image:-moz-linear-gradient(top,#a5cd48 0,#97bf3a 100%);background-image:-webkit-linear-gradient(top,#a5cd48 0,#97bf3a 100%);background-image:linear-gradient(top,#a5cd48 0,#97bf3a 100%)}.zen .zen-highlightBtn:active{background-color:#769b24;background-image:-ms-linear-gradient(top,#7ba229 0,#8ab237 100%);background-image:-moz-linear-gradient(top,#7ba229 0,#8ab237 100%);background-image:-webkit-linear-gradient(top,#7ba229 0,#8ab237 100%);background-image:linear-gradient(top,#7ba229 0,#8ab237 100%)}.zen .zen-highlightBtn:focus{background-color:#8ab529;background-image:-ms-linear-gradient(top,#8AB529 0,#87AC31 100%);background-image:-moz-linear-gradient(top,#8AB529 0,#87AC31 100%);background-image:-webkit-linear-gradient(top,#8AB529 0,#87AC31 100%);background-image:linear-gradient(top,#8AB529 0,#87AC31 100%)}.zen .zen-btn.zen-highlightBtn[disabled]{-webkit-appearance:none;background:#dcdfe0;color:#fff;border:1px solid #c7ccce;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.zen .zen-closeBtn:hover,.zen .zen-closeBtn:focus{color:#015ba7;background:#e3f3ff;-moz-box-shadow:inset 0 1px 0 0 #d2d2d2;-webkit-box-shadow:inset 0 1px 0 0 #d2d2d2;box-shadow:inset 0 1px 0 0 #d2d2d2}.zen .zen-closeBtn:active{background:#dadfdf;-moz-box-shadow:inset 0 1px 0 0 #c7c7c7;-webkit-box-shadow:inset 0 1px 0 0 #c7c7c7;box-shadow:inset 0 1px 0 0 #c7c7c7}.zen .zen-btn[disabled],.zen .zen-btn.zen-disabledBtn{-webkit-appearance:none;cursor:default;color:#c2c2c2;border-color:#e2e2e2;background:#fafafa}.zen .zen-promoBtn[disabled],.zen .zen-promoBtn.zen-disabledBtn{color:#fff;border-color:#fff;background:#e9e8e8}.zen .zen-closeBtn[disabled],.zen .zen-closeBtn.zen-disabledBtn{color:#bcbcbc;background:#f0f1f1}.zen .zen-promoBtn,.zen .zen-promoBtn:hover,.zen .zen-promoBtn:focus,.zen .zen-promoBtn:active{padding:5px 14px}.zen .zen-tooltip{position:relative}.zen .zen-tooltipBox{display:inline-block;position:relative}.zen .zen-tooltip .zen-tooltipBox{display:none;position:absolute}.zen .zen-tooltip:focus .zen-tooltipBox{display:inline-block;padding:6px;width:200px}.zen .zen-tooltip:hover .zen-tooltipBox{display:inline-block;padding:6px;width:200px}.zen .zen-tooltip .zen-tooltipBox.zen-tooltipTop{bottom:1.4em;left:0}.zen .zen-tooltip .zen-tooltipBox.tooltipBottom{top:1.4em;left:0}.zen .zen-pager{margin:.5em 1em}.zen .zen-pagerNextPrevious .zen-pagerControl{margin:0 .25em;text-decoration:none}.zen .zen-pagerNextPrevious .zen-disabled{cursor:default}.zen .zen-pagerNextPrevious{margin-left:25%;white-space:nowrap}.zen .zen-pagerNextPrevious .zen-pagerControl .zen-visualization{display:inline}.zen .zen-pagerJumpToPage span.zen-pagerControl{margin-left:.5em}.zen .zen-pager{font-size:.9em}.zen .zen-pagerJumpToPage .zen-pagerControl{margin-left:.5em;margin-right:.5em}.zen .zen-pagerNextPrevious .zen-pagerControl{color:#333;text-decoration:none}.zen .zen-pagerNextPrevious .zen-disabled .zen-label{color:#777}.zen .zen-pagerNextPrevious .zen-pagerControl .zen-visualization{background-image:url('/img/paginationArrows.gif');background-repeat:no-repeat;display:inline-block;margin:0 .18em;width:9px;height:10px}.zen .zen-pagerNextPrevious .zen-first .zen-visualization{background-position:left 1px}.zen .zen-pagerNextPrevious .zen-first.zen-disabled .zen-visualization{background-position:left -10px}.zen .zen-pagerNextPrevious .zen-previous .zen-visualization{background-position:-10px 1px}.zen .zen-pagerNextPrevious .zen-previous.zen-disabled .zen-visualization{background-position:-10px -10px}.zen .zen-pagerNextPrevious .zen-next .zen-visualization{background-position:-17px 1px}.zen .zen-pagerNextPrevious .zen-next.zen-disabled .zen-visualization{background-position:-17px -10px}.zen .zen-pagerNextPrevious .zen-last .zen-visualization{background-position:right 1px}.zen .zen-pagerNextPrevious .zen-last.zen-disabled .zen-visualization{background-position:right -10px}.zen .zen-pagerPageInfo{line-height:2em}.zen.zen-popup{background:0}.zen body.zen-popupBody{overflow:hidden}.zen .zen-popupOverlay{position:fixed;top:0;left:0;z-index:100;width:100%;height:100%;background-color:hsla(0,0%,0%,.75)}.zen .zen-centerPopup{position:absolute;top:40%;left:35%;width:400px}.zen .zen-cropMe,.zen .zen-cropH{overflow-x:hidden !important}.zen .zen-cropMe,.zen .zen-cropV{overflow-y:hidden !important}.zen .zen-cropEllipsis{overflow:hidden;text-overflow:ellipsis;-moz-binding:url(/sync/ellipsis.xml#ellipsis)}.zen .zen-assistiveText{position:absolute !important;height:1px;width:1px;overflow:hidden;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.zen .zen-assistiveLink{padding:0 !important;margin:0 !important;height:1px !important;width:1px !important;line-height:0 !important;background-color:transparent !important;overflow:visible !important;text-decoration:none;color:#222}.helpIcon{background-image:url(/img/sprites/master.png);background-position:0 -142px;width:16px;height:16px}.recycleIcon{background-image:url(/img/func_icons/util/recycle.gif);background-position:0 0;width:19px;height:19px}.datePickerIcon{background-image:url(/img/func_icons/util/datePicker16.gif);background-position:0 0;width:16px;height:16px}.escalatedLarge{background-image:url(/img/func_icons/util/escalation16.gif);background-position:0 0;width:16px;height:16px}.printerIcon{background-image:url(/img/func_icons/util/print20.gif);background-position:0 0;width:20px;height:20px}.alertIcon{background-image:url(/img/func_icons/util/alert16.gif);background-position:0 0;width:16px;height:16px}.checkmarkIcon{background-image:url(/img/func_icons/util/checkmark16.gif);background-position:0 0;width:16px;height:16px}.groupEventIcon{background-image:url(/img/group_event.gif);background-position:0 0;width:16px;height:16px}.doubleArrowUp{background-image:url(/img/double_arrow_up.gif);background-position:0 0;width:24px;height:20px}.doubleArrowDwn{background-image:url(/img/double_arrow_dwn.gif);background-position:0 0;width:24px;height:20px}.colorPickerIcon{background-image:url(/img/func_icons/util/colorPicker16.gif);background-position:0 0;width:16px;height:16px}.downArrowIcon{background-image:url(/img/arrow_dwn.gif);background-position:0 0;width:24px;height:20px}.leftArrowIcon{background-image:url(/img/arrow_lt.gif);background-position:0 0;width:24px;height:20px}.rightArrowIcon{background-image:url(/img/arrow_rt.gif);background-position:0 0;width:24px;height:20px}.upArrowIcon{background-image:url(/img/arrow_up.gif);background-position:0 0;width:24px;height:20px}.unresolvedIcon{background-image:url(/img/icon/unresolved16.png);background-position:0 0;width:16px;height:16px}.escalatedLarge{background-image:url(/img/func_icons/util/escalation16.gif);background-position:0 0;width:16px;height:16px}.escalatedSmall{background-image:url(/img/func_icons/util/escalation12.gif);background-position:0 0;width:12px;height:12px}.infoIcon{background-image:url(/img/sprites/master.png);background-position:0 -162px;width:16px;height:16px}.mailCloseIcon{background-image:url(/img/func_icons/util/mailCloseEnv16.gif);background-position:0 0;width:16px;height:16px}.mailOpenIcon{background-image:url(/img/func_icons/util/mailOpenEnv16.gif);background-position:0 0;width:16px;height:16px}.mailFrontIcon{background-image:url(/img/func_icons/util/mailFrontEnv16.gif);background-position:0 0;width:16px;height:16px}.editLayoutIcon{background-image:url(/img/func_icons/util/editLayout20.png);background-position:0 0;width:20px;height:20px}.alertIcon{background-image:url(/img/func_icons/util/alert16.gif);background-position:0 0;width:16px;height:16px}.checkmarkIcon{background-image:url(/img/func_icons/util/checkmark16.gif);background-position:0 0;width:16px;height:16px}.printerIconOn{background-image:url(/img/func_icons/util/print20.gif);background-position:0 0;width:20px;height:20px;background-position:0 -20px}.printerIconDisabled{background-image:url(/img/func_icons/util/print20.gif);background-position:0 0;width:20px;height:20px;background-position:0 -40px}.removeIcon{background-image:url(/img/func_icons/remove12.gif);background-position:0 0;width:12px;height:12px;background-position:top left}.removeIconOn{background-image:url(/img/func_icons/remove12_on.gif);background-position:0 0;width:12px;height:12px;background-position:top right}.dialogCloseIcon{background-image:url(/img/func_icons/util/dialogClose16.gif);background-position:0 0;width:16px;height:16px;background-position:top left}.dialogCloseIconOn{background-position:top right}.lookupIcon{background-image:url(/img/func_icons/util/lookup20.gif);background-position:0 0;width:20px;height:20px;background-position:top left}.lookupIconOn{background-image:url(/img/func_icons/util/lookup20.gif);background-position:0 0;width:20px;height:20px;background-position:top right}.closeIcon{background-image:url(/img/func_icons/closeSprite16.gif);background-position:0 0;width:16px;height:16px;cursor:pointer;background-position:top left}.closeIconOn{background-image:url(/img/func_icons/closeSprite16.gif);background-position:0 0;width:16px;height:16px;cursor:pointer;background-position:0 -16px}.closeNone{display:none}.searchIcon{background-image:url(/img/func_icons/util/search20.gif);background-position:0 0;width:20px;height:20px;background-position:top left}.searchIconOn{background-image:url(/img/func_icons/util/search20.gif);background-position:0 0;width:20px;height:20px;background-position:top right}.trashIcon{background-image:url(/img/func_icons/util/trash20.gif);background-position:0 0;width:20px;height:20px;background-position:top left}.trashIconOn{background-image:url(/img/func_icons/util/trash20.gif);background-position:0 0;width:20px;height:20px;background-position:top right}.comboboxIcon{background-image:url(/img/func_icons/util/combobox20.gif);background-position:0 0;width:20px;height:20px;background-position:top left}.comboboxIconOn{background-image:url(/img/func_icons/util/combobox20.gif);background-position:0 0;width:20px;height:20px;background-position:top right}.customizePageIcon{background-image:url(/img/func_icons/util/customize20.gif);background-position:0 0;width:20px;height:20px;background-position:top left}.customizePageIconOn{background-image:url(/img/func_icons/util/customize20.gif);background-position:0 0;width:20px;height:20px;background-position:top right}.editLayoutIcon{background-image:url(/img/func_icons/util/editLayout20.png);background-position:0 0;width:20px;height:20px}.linkIcon{background-image:url(/img/func_icons/util/link20.gif);background-position:0 0;width:20px;height:20px;background-position:top left}.linkIconOn{background-image:url(/img/func_icons/util/link20.gif);background-position:0 0;width:20px;height:20px;background-position:top right}.videoPlay{background-image:url(/img/func_icons/videoPlay.png);background-position:0 0;width:24px;height:24px;background-position:top left}.videoPlayOn{background-image:url(/img/func_icons/videoPlay.png);background-position:0 0;width:24px;height:24px;background-position:top right}.menuArrow{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 0}.menuArrowOn{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 -20px}.expanded .menuArrow{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 -40px}.expanded .menuArrowOn{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 -60px}.rtl .menuArrow{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 -40px}.rtl .menuArrowOn{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 -60px}.expanded .rtl .menuArrow{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 0}.expanded .rtl .menuArrowOn{background-image:url(/img/dcm/menuArrow_sprite.gif);background-position:0 0;width:16px;height:20px;background-position:0 -20px}.forceLogo{background-image:url(/img/forceMenuLogo.png);background-position:0 0;width:91px;height:31px;background-position:0 0}.forceLogoOn,a#forceLogoLink:focus .forceLogo{background-image:url(/img/forceMenuLogo.png);background-position:0 0;width:91px;height:31px;background-position:0 -31px}.helpIcon{background:transparent url(/img/alohaSkin/help_orange.png) no-repeat;vertical-align:bottom}.infoIcon{background-image:url(/img/alohaSkin/info_sprite.png);background-position:left top;height:15px}.zen-helpbutton{padding:0;margin:0;display:inline-block}.zen-helpbutton .helpButtonIcon{margin-right:4px;height:16px;width:16px;vertical-align:top;display:inline-block;background:transparent url(/img/alohaSkin/help_blue.png) no-repeat 0 -1px}.zen-helpbutton.hovered .helpButtonIcon{background:transparent url(/img/alohaSkin/help_black.png) no-repeat 0 -1px}.zen-helpbutton a span{color:#015ba7}.zen-helpbutton.hovered a span,.zen-helpbutton a:hover,.zen-helpbutton a:hover span{text-decoration:none !important;color:#333 !important}.zen-helpbutton .zen-select{margin:0;font-size:100%}.zen-helpbutton a.helpLink,.zen-helpbutton .zen-trigger{display:inline-block;padding:6px 10px 4px 6px;background:#fff;border:1px transparent solid;border-radius:5px}.zen-helpbutton.hovered a.helpLink,.zen-helpbutton.hovered .zen-select a.zen-trigger,.zen-helpbutton.hovered .zen-select a.zen-trigger:hover{border:1px #adadad solid;background:#f3f3f3;color:#333;text-decoration:none}.zen-helpbutton .zen-trigger .zen-selectArrow{border-width:4px 3px 0;border-color:#015ba7 transparent transparent;margin-left:6px;display:inline-block;float:none}.zen-helpbutton.hovered .zen-trigger .zen-selectArrow{border-color:#333 transparent transparent}.zen-helpbutton .zen-options{border-color:#cdcdcd;border-radius:5px;margin-top:0;box-shadow:0 6px 12px rgba(0,0,0,.2);-webkit-box-shadow:0 6px 12px rgba(0,0,0,.2)}.zen-helpbutton .zen-options>ul{background-color:#fff}.zen-helpbutton .zen-options li{line-height:24px}.zen-helpbutton .zen-options a:hover,.zen-helpbutton .zen-options a:focus,.zen-helpbutton .zen-options a:active{background-color:#f5f5f5;color:#333;text-decoration:none}.zen-helpbutton .zen-select .zen-options ul li>a{color:#333;padding:2px 8px;text-align:left;font-size:100%}
========================================
Traceback (most recent call last):
  File "/Users/tetsuo/.pyenv/versions/3.11.4/bin/pyhOn", line 8, in <module>
    sys.exit(start())
             ^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/__main__.py", line 111, in start
    asyncio.run(main())
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/asyncio/runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/__main__.py", line 75, in main
    async with Hon(
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/hon.py", line 33, in __aenter__
    return await self.create()
           ^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/hon.py", line 65, in create
    await self.setup()
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/hon.py", line 96, in setup
    appliances = await self.api.load_appliances()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/api.py", line 77, in load_appliances
    async with self._hon.get(f"{const.API_URL}/commands/v1/appliance") as resp:
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/contextlib.py", line 204, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/handler/base.py", line 62, in get
    async with self._intercept(self._session.get, *args, **kwargs) as response:  # type: ignore[arg-type]
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/contextlib.py", line 204, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/handler/hon.py", line 61, in _intercept
    kwargs["headers"] = await self._check_headers(kwargs.get("headers", {}))
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/handler/hon.py", line 51, in _check_headers
    await self.auth.authenticate()
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/auth.py", line 253, in authenticate
    if not await self._get_token(url):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/auth.py", line 225, in _get_token
    await self._error_logger(response)
  File "/Users/tetsuo/.pyenv/versions/3.11.4/lib/python3.11/site-packages/pyhon/connection/auth.py", line 91, in _error_logger
    raise exceptions.HonAuthenticationError("Can't login")
pyhon.exceptions.HonAuthenticationError: Can't login
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x103e14750>
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x103e14810>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x103dda270>, 99901.334353375)]']
connector: <aiohttp.connector.TCPConnector object at 0x103e144d0>

Unexpected output + error when running pyhon while the appliance i running without remote control

I tried to run pyhon --user <myuser> --pass <mypass> while the appliance (washing machine) was running a program launched manually/physically. Same scenario where the original app shows read-only stats.

I got much longer output, containing multiple ========== <APPLIANCE NAME> ========== sections.
The first section is relevant to my only appliance, containing correct data, but the following sections have multiple different appliance names including AC - *, DW - *, with data replaced with placeholders like PK: xxxx#xx-xxxx-0:0x0xx000-xxxx-0xxx-x00x-x000xx0x00x0 like in export --anonymous mode, but actually not using it.

Then the output is truncated and the following error appears:

Traceback (most recent call last):                                                                                                                                                                                 
  File "/home/arkanoid/python/hon_washing_machine/venv/bin/pyhOn", line 8, in <module>                                                                                                                                 
                                                                                                                                                                                                                   
========== DW - CF 3C7L0X ==========                                                                                                                                                                               
    sys.exit(start())                                                                                                                                                                                              
             ^^^^^^^                                                                                                                                                                                               
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/__main__.py", line 110, in start                                                                                             
    asyncio.run(main())                                                                                                                                                                                            
  File "/home/arkanoid/.pyenv/versions/3.11.5/lib/python3.11/asyncio/runners.py", line 190, in run                                                                                                                     
    return runner.run(main)                                                                                                                                                                                        
           ^^^^^^^^^^^^^^^^                                                                                                                                                                                        
  File "/home/arkanoid/.pyenv/versions/3.11.5/lib/python3.11/asyncio/runners.py", line 118, in run                                                                                                                     
    return self._loop.run_until_complete(task)                                                                                                                                                                     
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                                                                                     
  File "/home/arkanoid/.pyenv/versions/3.11.5/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete                                                                                                  
    return future.result()                                                                                                                                                                                         
           ^^^^^^^^^^^^^^^                                                                                                                                                                                         
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/__main__.py", line 105, in main                                                                                              
    print(diagnose.yaml_export(device))                                                                                                                                                                            
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                                                                                             
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/diagnose.py", line 93, in yaml_export                                                                                        
    if commands := printer.create_commands(appliance.commands):                                                                                                                                                    
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/printer.py", line 60, in create_commands
    for parameter, data in command.available_settings.items():
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/commands.py", line 201, in available_settings
    result[name] = self._more_options(result[name], parameter)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/commands.py", line 191, in _more_options
    if len(second.values) > len(first.values):
           ^^^^^^^^^^^^^
  File "/home/arkanoid/python/hon_washing_machine/venv/lib/python3.11/site-packages/pyhon/parameter/range.py", line 72, in values
    return [str(i) for i in range(int(self.min), int(self.max) + 1, int(self.step))]
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

running the same command again after the washmachine program finished results in correct output with just a single section.

Strange values Haier Fridge/Freezer type HSW79F18DIPT.

Hi Andre,

Thank you for the great integration for Haier into HA.
Almost everything is working fine but only the temperatures of the freezer is -38 degree (celsius) and fried -36,4?
I do not hope that is the case :).
Do you have an idea how to fix this?

Scherm­afbeelding 2024-06-20 om 12 16 47

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.