This repository has been archived on 2024-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
space_status/raspberry_pi/main.py
bernd2k 7da2236af4 added arduino code and moved raspbi code
added arduino code is the read out of the sensor via an arduino.
the raspicode is moved to its own section.
2019-11-30 17:42:36 +01:00

140 lines
4.9 KiB
Python

# status bot
import json
import os
import time
import urllib.request, json
import datetime
import tweepy
import random
path = os.path.abspath(__file__)
dir_path = os.path.dirname(path)
print("dir path is", dir_path)
def internet_on(url):
try:
urllib.request.urlopen(url)
return True
except urllib.error.URLError as e:
print(e.reason)
return False
def textselect(min, max):
number = random.randint(0, 1)
if number == 0:
return 0
else:
return random.randint(min, max)
def log(out):
f = open(dir_path + os.sep + "log.csv", "a")
f.write(out)
f.close()
while True:
# starting by configuring the bot
file_configure_path = dir_path + os.sep + "config.json"
with open(file_configure_path, 'r') as f:
data_config = json.load(f)
path = data_config["path"]
CONSUMER_KEY = data_config["twitter_api"]["consumer_key"]
CONSUMER_SECRET = data_config["twitter_api"]["consumer_secret"]
ACCESS_KEY = data_config["twitter_api"]["token"]
ACCESS_SECRET = data_config["twitter_api"]["token_secret"]
print(CONSUMER_KEY)
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
if internet_on("http://twitter.com") == True:
# finding out the status of the space...
api_url = data_config["status_api"]["url"]
with urllib.request.urlopen(api_url) as url:
data_space = json.loads(url.read().decode())
#print(data_space["state"]["open"])
file_path = path + "space.json"
if os.path.exists(file_path) == True:
# Reading data back
with open(file_path, 'r') as f:
data_space_b4 = json.load(f)
#print(data_space_b4["state"]["open"])
if data_space["state"]["open"] != data_space_b4["state"]["open"]:
print("status changed.")
# starting by configuring the bot
file_status_path = path + "status.json"
with open(file_status_path, 'r') as f:
data_status = json.load(f)
time_now = time.time()
# finding out wich state it change and sending out the text
if data_space["state"]["open"] == False:
print("closing at", time.time(), ",last change happend at", datetime.datetime.fromtimestamp(
int(data_space["state"]["lastchange"]) ).strftime('%Y-%m-%d %H:%M:%S'))
number = len(data_status["closing_text"])
number = textselect(0, number - 1)
text = data_status["closing_text"][number]["text"] + " [closed:" + datetime.datetime.fromtimestamp(
int( time_now + 3600 )).strftime('%Y-%m-%d %H:%M:%S') + "]"
print("Text:", text)
try:
api.update_status(text)
# same text as before cannot be posted!
except:
print(time_now, "did not tweet closing status")
log(str(time_now) + ";" + str(data_space["state"]["lastchange"]) + ";" + str(data_space["state"]["open"])
+ ";" + str(number) + "\n")
else:
print("opening at", time.time(), ",last change happend at", datetime.datetime.fromtimestamp(
int(data_space["state"]["lastchange"]) ).strftime('%Y-%m-%d %H:%M:%S'))
number = len(data_status["opening_text"])
number = textselect(0, number - 1)
text = data_status["opening_text"][number]["text"] + " [open:" + datetime.datetime.fromtimestamp(
int( time_now + 3600 )).strftime('%Y-%m-%d %H:%M:%S') + "]"
print("Text:", text)
try:
api.update_status(text)
except:
print(time_now, "did not tweet opening status")
log(str(time_now) + ";" + str(data_space["state"]["lastchange"]) + ";" + str(data_space["state"]["open"])
+ ";" + str(number) + "\n")
else:
print("status is still the same at", time.time(), datetime.datetime.fromtimestamp(
int(data_space["state"]["lastchange"]) ).strftime('%Y-%m-%d %H:%M:%S'))
else:
print("We're back, baby! #Krautspace space status is active again. @HackspaceJena")
# saving the current space status just too compare them in the next round
with open(file_path, 'w') as outfile:
json.dump(data_space, outfile, indent=4)
else:
print(time.time(), "internet is off")
# how often shall we check for status?
time.sleep(data_config["status_api"]["checking_period"])