Ejemplo n.º 1
0
    def on_match_all(self, peer, sender, bus, topic, headers, message):
        agent_id = headers.get(headers_mod.FROM)
        if agent_id is None or agent_id == AGENT_ID:
            return

        device_type = "/".join(topic.split("/")[0:2])
        if not self.agents_context_map.has_key(agent_id):
            self.agents_context_map[agent_id] = {}

        cur_agent_context = self.agents_context_map[agent_id]
        # TODO: We can think of adding the type only when the context is newly created
        cur_agent_context["device_type"] = device_type
        cur_agent_context.update({"location": headers.get("Location")})
        # extract specific property (such as voltage, power etc.) from the topic
        cur_agent_context.update({topic.split("/")[-1]: jsonapi.loads(message)})
        self.agents_context_map[agent_id].update(cur_agent_context)
        HouseHTTPServer.set_buffer(self.dashboard_data())

        if self.total_power() != self.previous_power:
            self.previous_power = self.total_power()
            self.publish_total_power_to_cloud()
Ejemplo n.º 2
0
    def __init__(self, config_path, **kwargs):
        super(HouseCoordinator, self).__init__(**kwargs)

        config = utils.load_config(config_path)
        self.power_price_thresholds = {
            "low": float(config.get("low_price_threshold")),
            "high": float(config.get("high_price_threshold")),
        }

        # dict which maintains state of agents connected to Home coordinator
        self.agents_context_map = {}
        # current mode (economy or comfort)
        self.mode = config.get("default_profile")
        # current power price (in cents per kWh)
        self.power_price = DEFAULT_POWER_PRICE
        self.previous_power = 0
        self.disruption = False
        # Initialize Energy profile map, which indicates highest allowed operating
        # states for each of the device, given a mode and price level
        self.init_energy_profile_map()
        HouseHTTPServer.set_instance(self)
        t = threading.Thread(target=start_server)
        t.start()