示例#1
0
def update_trips():
    global trips, chargings, cached_layout
    logger.info("update_data")
    try:
        trips_by_vin = Trips.get_trips(myp.vehicles_list)
        trips = next(iter(trips_by_vin.values()))  # todo handle multiple car
        chargings = MyPSACC.get_chargings()
    except StopIteration:
        logger.debug("No trips yet")
        return
    except AssertionError:
        logger.error("update_trips: %s", traceback.format_exc())
    # update for slider
    global min_date, max_date, min_millis, max_millis, step, marks
    try:
        min_date = trips[0].start_at
        max_date = trips[-1].start_at
        min_millis = figures.unix_time_millis(min_date)
        max_millis = figures.unix_time_millis(max_date)
        step = (max_millis - min_millis) / 100
        marks = figures.get_marks_from_start_end(min_date, max_date)
        cached_layout = None  # force regenerate layout
    except (ValueError, IndexError):
        logger.error("update_trips (slider): %s", traceback.format_exc())
    return
示例#2
0
 def wakeup(self, vin):
     logger.info("ask wakeup to " + vin)
     msg = self.mqtt_request(vin, {"action": "state"})
     logger.info(msg)
     self.mqtt_client.publish(
         MQTT_REQ_TOPIC + self.customer_id + "/VehCharge/state", msg)
     return True
示例#3
0
 def wakeup(self, vin):
     msg = self.mqtt_request(vin, {"action": "state"})
     logger.info(msg)
     self.mqtt_client.publish(
         "psa/RemoteServices/from/cid/" + self.customer_id +
         "/VehCharge/state", msg)
     return True
示例#4
0
 def get_state(self, vin):
     logger.info("ask state to " + vin)
     msg = self.mqtt_request(vin, {"action": "state"})
     logger.info(msg)
     self.mqtt_client.publish(
         MQTT_REQ_TOPIC + self.customer_id + "/VehicleState", msg)
     return True
示例#5
0
 def __init__(self, workerNum):
     self.worker_num = workerNum
     logger.info('Creating {} workers'.format(self.worker_num))
     self.workers = []
     for i in range(self.worker_num):
         worker = Worker(i)
         self.workers.append(worker)
def generate_player_position(generated_map):
    """
    Generates random position for player

    :param list generated_map: list with generated empty cells, traps and treasures
    :return: generated map with placed player
    :rtype: list
    """

    logger.debug('Entered generate_player_position(generated_map) function')

    generated_map_with_player = generated_map
    player_position = 0

    logger.info('Generating player position')
    while True:

        player_position = randrange(len(generated_map_with_player))

        if generated_map_with_player[player_position] == EMPTY_CELL:

            generated_map_with_player[player_position] = PLAYER
            break

    logger.debug('Returning generated_map_with_player')
    return generated_map_with_player
示例#7
0
    def eval(self, check_result=False):
        # set model to evaluation(testing) mode
        self.model.eval()

        test_predictions, test_truth = None, None

        for batch_idx, batch in enumerate(self.test_loader):
            # prepare data
            avi_feats, ground_truths, lengths = batch
            if self.__CUDA__:
                avi_feats, ground_truths = avi_feats.cuda(), ground_truths.cuda()

            avi_feats, ground_truths = Variable(avi_feats), Variable(ground_truths)


            # start inferencing process
            seq_logProb, seq_predictions = self.model(avi_feats, mode='inference')
            ground_truths = ground_truths[:, 1:]

            test_predictions = seq_predictions[:3]
            test_truth = ground_truths[:3]

            break

        # TODO: testing only pls remove after testing
        if check_result:
            result = [' '.join(self.helper.index2sentence(s)) for s in test_predictions]
            logger.info('Testing Result: \n{} \n{}\n{}\n'.format(result[0], result[1], result[2]))
            truth = [' '.join(self.helper.index2sentence(s)) for s in test_truth]
            logger.info('Ground Truth: \n{} \n{}\n{}\n'.format(truth[0], truth[1], truth[2]))
示例#8
0
 def on_mqtt_message(self, client, userdata, msg):
     try:
         logger.info("mqtt msg %s %s", msg.topic, msg.payload)
         data = json.loads(msg.payload)
         charge_info = None
         if msg.topic.startswith(MQTT_RESP_TOPIC):
             if "return_code" not in data:
                 logger.debug("mqtt msg hasn't return code")
             elif data["return_code"] == "400":
                 self.refresh_remote_token(force=True)
                 logger.error("retry last request, token was expired")
             elif data["return_code"] == "300":
                 logger.error('%d', data["return_code"])
             elif data["return_code"] != "0":
                 logger.error('%s : %s', data["return_code"],
                              data["reason"])
                 if msg.topic.endswith("/VehicleState"):
                     charge_info = data["resp_data"]["charging_state"]
                     self.precond_programs[data["vin"]] = data["resp_data"][
                         "precond_state"]["programs"]
         elif msg.topic.startswith(MQTT_EVENT_TOPIC):
             charge_info = data["charging_state"]
         if charge_info is not None and charge_info[
                 'remaining_time'] != 0 and charge_info['rate'] == 0:
             # fix a psa server bug where charge beginning without status api being properly updated
             logger.warning("charge begin but API isn't updated")
             sleep(60)
             self.wakeup(data["vin"])
     except KeyError:
         logger.error(traceback.format_exc())
示例#9
0
 def on_mqtt_message(self, client, userdata, msg):
     charge_not_detected = False
     try:
         logger.info(f"mqtt msg {msg.topic} {str(msg.payload)}")
         data = json.loads(msg.payload)
         if msg.topic.startswith(MQTT_RESP_TOPIC):
             if "return_code" in data:
                 if data["return_code"] == "0":
                     pass
                 elif data["return_code"] == "400":
                     self.refresh_remote_token(force=True)
                     logger.error("retry last request, token was expired")
                 else:
                     logger.error(
                         f'{data["return_code"]} : {data["reason"]}')
             else:
                 logger.debug("mqtt msg hasn't return code")
         if msg.topic.startswith(MQTT_EVENT_TOPIC):
             if data["charging_state"]['remaining_time'] != 0 and data[
                     "charging_state"]['rate'] == 0:
                 charge_not_detected = True
         elif msg.topic.endswith("/VehicleState"):
             if data["resp_data"]["charging_state"]['remaining_time'] != 0 \
                     and data["resp_data"]["charging_state"]['rate'] == 0:
                 charge_not_detected = True
         if charge_not_detected:
             # fix a psa server bug where charge beginning without status api being properly updated
             logger.info("charge begin")
             sleep(60)
             self.wakeup(data["vin"])
     except:
         logger.error(traceback.format_exc())
示例#10
0
 def on_mqtt_message(self, client, userdata, msg):
     try:
         logger.info(f"mqtt msg {msg.topic} {str(msg.payload)}")
         data = json.loads(msg.payload)
         if msg.topic.startswith(MQTT_RESP_TOPIC):
             if "return_code" in data:
                 if data["return_code"] == "0":
                     return
                 elif data["return_code"] == "400":
                     self.refresh_remote_token(force=True)
                     logger.error("retry last request, token was expired")
                 else:
                     logger.error(
                         f'{data["return_code"]} : {data["reason"]}')
             else:
                 logger.debug("mqtt msg hasn't return code")
         elif msg.topic.startswith(MQTT_EVENT_TOPIC):
             # fix charge beginning without status api being updated
             if data["charging_state"]['remaining_time'] != 0 and data[
                     "charging_state"]['rate'] == 0:
                 logger.info("charge begin")
                 sleep(60)
                 self.wakeup(data["vin"])
     except:
         logger.error(traceback.format_exc())
示例#11
0
 def lights(self, vin, duration: int):
     msg = self.mqtt_request(vin, {
         "action": "activate",
         "duration": duration
     })
     logger.info(msg)
     self.mqtt_client.publish(MQTT_REQ_TOPIC + self.customer_id + "/Lights",
                              msg)
示例#12
0
 def lights(self, vin, duration: int):
     msg = self.mqtt_request(vin, {
         "action": "activate",
         "duration": duration
     })
     logger.info(msg)
     self.mqtt_client.publish(
         "psa/RemoteServices/from/cid/" + self.customer_id + "/Lights", msg)
示例#13
0
def update_trips():
    global trips, chargings
    logger.info("update_data")
    try:
        trips = MyPSACC.get_trips()
        chargings = MyPSACC.get_chargings()
    except:
        logger.error("update_trips: " + traceback.format_exc())
示例#14
0
 def on_mqtt_connect(self, client, userdata, rc, a):
     logger.info("Connected with result code %s", rc)
     topics = [MQTT_RESP_TOPIC + self.customer_id + "/#"]
     for car in self.vehicles_list:
         topics.append(MQTT_EVENT_TOPIC + car.vin)
     for topic in topics:
         client.subscribe(topic)
         logger.info("subscribe to %s", topic)
示例#15
0
 def refresh_vehicle_info(self):
     if self.info_refresh_rate is not None:
         while True:
             sleep(self.info_refresh_rate)
             logger.info("refresh_vehicle_info")
             for car in self.vehicles_list:
                 self.get_vehicle_info(car.vin)
             for callback in self.info_callback:
                 callback()
示例#16
0
 def _is_token_expired(response: Response) -> bool:
     if response.status_code == HTTPStatus.UNAUTHORIZED.value:
         logger.info("token expired, renew")
         try:
             json_data = response.json()
             return json_data.get('moreInformation') == 'Token is invalid'
         except ValueError:
             return False
     else:
         return False
示例#17
0
    def start(self):
        periodicity = ChargeControl.periodicity
        now = datetime.now()
        try:
            if self._next_stop_hour is not None and self._next_stop_hour < now:
                stop_charge = True
                self._next_stop_hour += timedelta(days=1)
                logger.info("it's time to stop the charge")
            else:
                stop_charge = False

            if self.percentage_threshold != 100 or stop_charge:
                res = None
                try:
                    res = self.psacc.get_vehicle_info(self.vin)
                except ApiException:
                    logger.error(traceback.format_exc())
                if res is not None:
                    status = res.energy[0]['charging']['status']
                    level = res.energy[0]["level"]
                    logger.info(
                        f"charging status of {self.vin} is {status}, battery level: {level}"
                    )
                    if status == "InProgress":
                        # force update if the car doesn't send info during 10 minutes
                        last_update = datetime.strptime(
                            res.energy[0]['updatedAt'], "%Y-%m-%dT%H:%M:%SZ")
                        if (datetime.utcnow() -
                                last_update).total_seconds() > 60 * 10:
                            self.psacc.wakeup(self.vin)
                        if (level >= self.percentage_threshold
                                and self.retry_count < 2) or stop_charge:
                            self.psacc.charge_now(self.vin, False)
                            self.retry_count += 1
                            sleep(ChargeControl.MQTT_TIMEOUT)
                            res = self.psacc.get_vehicle_info(self.vin)
                            status = res.energy[0]['charging']['status']
                            if status == "InProgress":
                                logger.warn(
                                    f"retry to stop the charge of {self.vin}")
                                self.psacc.charge_now(self.vin, False)
                                self.retry_count += 1
                        if self._next_stop_hour is not None:
                            next_in_second = (self._next_stop_hour -
                                              now).total_seconds()
                            if next_in_second < periodicity:
                                periodicity = next_in_second
                    else:
                        self.retry_count = 0
                else:
                    logger.error(f"error when get vehicle info of {self.vin}")
        except:
            logger.error(traceback.format_exc())
        self.thread = threading.Timer(periodicity, self.start)
        self.thread.start()
示例#18
0
    def lock_door(self, vin, lock: bool):
        if lock:
            value = "lock"
        else:
            value = "unlock"

        msg = self.mqtt_request(vin, {"action": value})
        logger.info(msg)
        self.mqtt_client.publish(MQTT_REQ_TOPIC + self.customer_id + "/Doors",
                                 msg)
        return True
示例#19
0
 def save_config(self, name="config.json", force=False):
     config_str = json.dumps(self,
                             cls=MyPeugeotEncoder,
                             sort_keys=True,
                             indent=4).encode("utf8")
     new_hash = md5(config_str).hexdigest()
     if force or self._confighash != new_hash:
         with open(name, "wb") as f:
             f.write(config_str)
         self._confighash = new_hash
         logger.info("save config change")
示例#20
0
    def lock_door(self, vin, lock: bool):
        if lock:
            value = "lock"
        else:
            value = "unlock"

        msg = self.mqtt_request(vin, {"action": value})
        logger.info(msg)
        self.mqtt_client.publish(
            "psa/RemoteServices/from/cid/" + self.customer_id + "/Doors", msg)
        return True
示例#21
0
 def on_mqtt_connect(self, client, userdata, rc, a):
     try:
         logger.info("Connected with result code " + str(rc))
         topics = [MQTT_RESP_TOPIC + self.customer_id + "/#"]
         for vin in self.getVIN():
             topics.append(MQTT_EVENT_TOPIC + vin)
         for topic in topics:
             client.subscribe(topic)
             logger.info("subscribe to " + topic)
     except:
         logger.error(traceback.format_exc())
示例#22
0
def charge_control():
    logger.info(request)
    vin = request.args['vin']
    charge_control = chc.get(vin)
    if charge_control is None:
        return jsonify("error: VIN not in list")
    if 'hour' in request.args and 'minute' in request.args:
        charge_control.set_stop_hour([int(request.args["hour"]), int(request.args["minute"])])
    if 'percentage' in request.args:
        charge_control.percentage_threshold = int(request.args['percentage'])
    chc.save_config()
    return jsonify(charge_control.get_dict())
示例#23
0
 def on_mqtt_connect(self, client, userdata, rc, a):
     try:
         logger.info("Connected with result code " + str(rc))
         topics = ["psa/RemoteServices/to/cid/" + self.customer_id + "/#"]
         for vin in self.getVIN():
             topics.append("psa/RemoteServices/events/MPHRTServices/" +
                           vin + "/#")
         for topic in topics:
             client.subscribe(topic)
             logger.info("subscribe to " + topic)
     except:
         logger.error(traceback.format_exc())
示例#24
0
 def run(self):
     self.worker_mgr = WorkerManager(self.config.getWorkerNum())
     self.worker_mgr.execute()
     self.createTasks()
     while self.getTotalTask() != Stat.finished_tasks.value:
         logger.info(
             'Task still running {}/{}. Waiting for another 3 seconds'.
             format(Stat.finished_tasks.value, self.getTotalTask()))
         time.sleep(3)
     logger.info('Now sleep 3 seconds and stop all workers')
     time.sleep(3)
     StopSignal.stop_workers.get_and_set(1)
示例#25
0
 def veh_charge_request(self, vin, hour, miinute, charge_type):
     # todo consider actual state before change the hour
     msg = self.mqtt_request(vin, {
         "program": {
             "hour": hour,
             "minute": miinute
         },
         "type": charge_type
     })
     logger.info(msg)
     self.mqtt_client.publish(
         MQTT_REQ_TOPIC + self.customer_id + "/VehCharge", msg)
示例#26
0
 def save_config(self, force=False):
     chd = {}
     charge_control: ChargeControl
     for charge_control in self.values():
         chd[charge_control.vin] = {"percentage_threshold": charge_control.percentage_threshold,
                                    "stop_hour": charge_control.get_stop_hour()}
     config_str = json.dumps(chd, sort_keys=True, indent=4).encode('utf-8')
     new_hash = md5(config_str).hexdigest()
     if force or self._config_hash != new_hash:
         with open(self.file_name, "wb") as f:
             f.write(config_str)
         self._config_hash = new_hash
         logger.info("save config change")
示例#27
0
 def run(self):
     while True:
         stop = StopSignal.stop_workers.value
         if stop:
             break
         try:
             task = Stat.task_queue.get(block=True, timeout=3)
         except queue.Empty:
             continue
         logger.info('Worker {} is executing task {}'.format(
             self.id, task.id))
         task.execute()
     logger.info("Worker stopped: {}".format(self.id))
示例#28
0
 def createTasks(self):
     choice = self.weight_choice()
     task_id = 0
     for nth_sec in range(self.config.getRuntime()):
         logger.info('Creating tasks at {} sec'.format(nth_sec))
         for ith_task in range(self.config.getQPS()):
             task_type = random.choice(choice)
             task_id = task_id + 1
             logger.info('Creating tasks {}:{}'.format(task_id, task_type))
             task = self.createTask(task_id, task_type)
             Stat.gen_tasks += 1
             Stat.task_queue.put(task)
         time.sleep(1)
示例#29
0
 def save_config(self, name="charge_config.json", force=False):
     chd = {}
     for key, el in self.list.items():
         chd[el.vin] = {
             "percentage_threshold": el.percentage_threshold,
             "stop_hour": el._stop_hour
         }
     config_str = json.dumps(chd, sort_keys=True, indent=4).encode('utf-8')
     new_hash = md5(config_str).hexdigest()
     if force or self._confighash != new_hash:
         with open(name, "wb") as f:
             f.write(config_str)
         self._confighash = new_hash
         logger.info("save config change")
示例#30
0
 def on_mqtt_message(self, client, userdata, msg):
     logger.info(f"mqtt msg {msg.topic} {str(msg.payload)}")
     try:
         data = json.loads(msg.payload)
         if data["return_code"] == "0":
             return
         elif data["return_code"] == "400":
             self.manager._refresh_token()
             self.refresh_remote_token()
             logger.info("retry last request")
         else:
             logger.error(f'{data["return_code"]} : {data["reason"]}')
     except:
         logger.debug("mqtt msg hasn't return code")