class DetectorDeFrenadaBrusca(DetectorDeEventos): @classmethod def nuevo_con(cls, gps, limite_aceleracion, estrategia_de_reporte_de_eventos): return cls(gps=gps, limite_aceleracion=limite_aceleracion, estrategia_de_reporte_de_eventos=estrategia_de_reporte_de_eventos) def __init__(self, gps, limite_aceleracion, estrategia_de_reporte_de_eventos): self._limite_aceleracion = limite_aceleracion self._aceleracion = None self._velocidad_actual = None self._velocidad_anterior = None self._intervalo_actual = None self._intervalo_anterior = None self._estado_aceleracion = EnAceleracionNormal.para(self) super(DetectorDeFrenadaBrusca, self).__init__(gps=gps, estrategia_de_reporte_de_eventos=estrategia_de_reporte_de_eventos) def ubicacion_obtenida(self, intervalo): self.actualizar_intervalos(intervalo) self.actualizar_velocidades() self.actualizar_aceleracion() self.verificar_aceleracion() def actualizar_intervalos(self, nuevo_intervalo): self._intervalo_anterior = self._intervalo_actual self._intervalo_actual = nuevo_intervalo def actualizar_velocidades(self): if self._intervalo_anterior is not None: nueva_velocidad = CalculadorVelocidad().obtener_velocidad_por_intervalos(self._intervalo_anterior, self._intervalo_actual) self._velocidad_anterior = self._velocidad_actual self._velocidad_actual = nueva_velocidad print ("Velocidad actual ", self._velocidad_actual.a_kilometros_por_hora()) def actualizar_aceleracion(self): if self._velocidad_anterior is not None: self._aceleracion = CalculadorAceleracion().obtener_aceleracion_por_delta_velocidad( self._velocidad_anterior, self._intervalo_anterior.timestamp(), self._velocidad_actual, self._intervalo_actual.timestamp()) print (self._aceleracion.a_gs()) def verificar_aceleracion(self): if self._aceleracion is not None: if self._aceleracion < self._limite_aceleracion: self._estado_aceleracion.en_aceleracion_brusca() else: self._estado_aceleracion.en_aceleracion_normal() def reportar_nuevo_evento_de_frenada_brusca(self): evento = EventoDeFrenadaBrusca.nuevo() self.reportar_evento(evento) def cambiar_a_estado_aceleracion_normal(self): self._estado_aceleracion = EnAceleracionNormal.para(self) def cambiar_a_estado_aceleracion_brusca(self): self._estado_aceleracion = EnAceleracionBrusca.para(self)