CCCPaste

HA_bayesian_rule

def update_probability(prior, prob_true, prob_false=0.):
    """Update probability using Bayes' rule."""
    numerator = prob_true * prior
    denominator = numerator + prob_false * (1 - prior)
    probability = numerator / denominator
    return probability

prior = 0.1
list_posteriors = []
threshold = 0.9

#weather_home_cloudy
prob_true_1 = 0.6
prob_false_1 = 0.2

sensor_cloudy = 'cloudy'
try:
    if sensor_cloudy == 'cloudy':
        posterior = update_probability(prior, prob_true_1, prob_false_1)
        prior = posterior
        print('post_1: ', round(posterior,2), round(prior,2))
except:
    prior = prior

#weather_home_snowy
prob_true_2 = 0.6
prob_false_2 = 0.1

sensor_snowy = 'not_snowy'
try:
    if sensor_snowy == 'snowy':
        posterior = update_probability(prior, prob_true_2, prob_false_2)
        prior = posterior
        print('post_2: ', round(posterior,2), round(prior,2))
except:
    prior = prior

#weather_home_rainy
prob_true_3 = 0.9
prob_false_3 = 0.1

sensor_rainy = 'not_rainy'
try:
    if sensor_rainy == 'rainy':
        posterior = update_probability(prior, prob_true_3, prob_false_3)
        prior = posterior
        print('post_3: ', round(posterior,2), round(prior,2))
except:
    prior = prior

#sun.sun_above_horizon
prob_true_4 = 0.5
prob_false_4 = 0.5

sensor_sun_state = 'below'
try:
    if sensor_sun_state == 'above':
        posterior = update_probability(prior, prob_true_4, prob_false_4)
        prior = posterior
        print('post_4: ', round(posterior,2), round(prior,2))
except:
    prior = prior    

#numeric_state_pressure
prob_true_5 = 0.65
prob_false_5 = 0.1

sensor_pressure = 1032
try:
    if sensor_pressure <= 1000:
        posterior = update_probability(prior, prob_true_5)
        prior = posterior
        print('post_5: ', round(posterior,2), round(prior,2))
except:
    prior = prior

#numeric_state_humidity
prob_true_6 = 0.5
prob_false_6 = 0.1

sensor_humid = 75
try:
    if sensor_humid >= 70:
        posterior = update_probability(prior, prob_true_6, prob_false_6)
        prior = posterior
        print('post_6: ', round(posterior,2), round(prior,2))
except:
    prior = prior


print('posterior: ', round(posterior,2), round(prior,2))

if posterior >= threshold:
    binary_sensor = True
    print('Będzie deszcz')
else:
    binary_sensor = False
    print('Nie będzie deszczu')