def blip_activation_nico(sensors, context, network, parameters): """ Teste si on doit activer la BLIP en temporisant jusqu'à la fin du cycle de feux en cours pour le contrôleur de feux indiqué """ result = False # on regarde si un véhicule prioritaire est détecté vehicule_prioritaire_present = sensors[parameters["capteur"]]["nombre_vehicules"] > 0 # Si on a pas déjà une activation en cours, on en déclenche une si un véhicule est détecté if "instant_activation" not in context.keys(): if vehicule_prioritaire_present: cdf = network.GetTrafficLightControllerFromID(parameters["cdf"]) time_fin_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf) context["instant_activation"] = float(time_fin_pdf.hour*3600 + time_fin_pdf.minute*60 + time_fin_pdf.second) else: # Si pas de véhicule mais activation en cours, le véhicule prioritaire est déjà sorti : on annule l'activation if not vehicule_prioritaire_present: context.clear() # Si l'instant d'activation est arrivé, on active la condition if "instant_activation" in context.keys(): simu_start_time = network.GetSimuStartTime() if context["instant_activation"] <= network.InstSimu + float(simu_start_time.hour*3600 + simu_start_time.minute*60 + simu_start_time.second): context.clear() result = True context["result"] = result return result
def change_traffic_light_cycle(conditions, context, network, parameters): """ Change de plan de feux pour le contrôleur spécifié """ cdf = network.GetTrafficLightControllerFromID(parameters["cdf"]) # index de la tranche index_tranche = conditions.values()[0]["tranche"] # construction du plan de feux à partir des paramètres reçus lstPlans = parameters["PLANS_DE_FEUX"][0]["PLAN_DE_FEUX"] for plan in lstPlans: if int(plan["index_tranche"]) == index_tranche: paramsPlan = plan break print u"plan a mettre en place : " + paramsPlan["id"] # instanciation de l'objet plan de feux à mettre en place pdf = symuvia.CreateTrafficLightCycle(str(paramsPlan["id"]), symuvia.STime()) # ajout de chaque séquence seqNum = 0 for sequence in plan["SEQUENCES"][0]["SEQUENCE"]: newSeq = symuvia.CreateSequence(float(sequence["duree_totale"]), seqNum) # définition de la séquence ... for signal in sequence["SIGNAUX_ACTIFS"][0]["SIGNAL_ACTIF"]: tuyau_entree = network.GetLinkFromLabel(signal["troncon_entree"]) tuyau_sortie = network.GetLinkFromLabel(signal["troncon_sortie"]) newSignal = symuvia.CreateActiveSignal( tuyau_entree, tuyau_sortie, float(signal["duree_vert"]), 0.0, float(signal["duree_retard_allumage"])) newSeq.AddActiveSignal(newSignal) pdf.AddSequence(newSeq) seqNum = seqNum + 1 # détermination de la date à laquelle démarrer le nouveau plan de feux time_debut_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf) # mise en place du plan de feux cdf.GetLstTrafficLightCycles().AddVariation(time_debut_pdf, pdf)
def change_sequence_length(conditions, context, network, parameters): """ Change la durée d'une séquence """ if len(context) == 0: context["index_sequence"] = int(parameters["num_sequence"]) - 1 context["nouvelle_duree"] = float(parameters["nouvelle_duree"]) cdf = network.GetTrafficLightControllerFromID(parameters["cdf"]) # récupération du plan de feux actif timeSpan = symuvia.STimeSpan() pdf = cdf.GetTrafficLightCycle(network.InstSimu, timeSpan) # recopie du plan de feux en modifiant la durée de la nouvelle séquence new_pdf = symuvia.CreateTrafficLightCycle("", symuvia.STime()) seqNum = 0 for seq in pdf.GetLstSequences(): if seqNum == context["index_sequence"]: duree_seq = context["nouvelle_duree"] else: duree_seq = seq.GetTotalLength() newSeq = symuvia.CreateSequence(duree_seq, seqNum) # création des signaux for signal in seq.GetLstActiveSignals(): newSignal = symuvia.CreateActiveSignal(signal.GetInputLink(), signal.GetOutputLink(), signal.GreenDuration, signal.OrangeDuration, signal.ActivationDelay) newSeq.AddActiveSignal(newSignal) new_pdf.AddSequence(newSeq) seqNum = seqNum + 1 # détermination de la date à laquelle démarrer le nouveau plan de feux time_debut_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf) # mise en place du plan de feux cdf.GetLstTrafficLightCycles().AddVariation(time_debut_pdf, new_pdf)