diff --git a/raspberry_pi/LICENSE b/LICENSE similarity index 100% rename from raspberry_pi/LICENSE rename to LICENSE diff --git a/raspberry_pi/README.md b/README.md similarity index 100% rename from raspberry_pi/README.md rename to README.md diff --git a/raspberry_pi/etc/rc.local b/raspberry_pi/etc/rc.local new file mode 100644 index 0000000..f63a347 --- /dev/null +++ b/raspberry_pi/etc/rc.local @@ -0,0 +1,23 @@ +#!/bin/sh -e +# +# rc.local +# +# This script is executed at the end of each multiuser runlevel. +# Make sure that the script will "exit 0" on success or any other +# value on error. +# +# In order to enable or disable this script just change the execution +# bits. +# +# By default this script does nothing. + +# Print the IP address +_IP=$(hostname -I) || true +if [ "$_IP" ]; then + printf "My IP address is %s\n" "$_IP" +fi + +sleep 20 +sudo python3 /home/pi/Schreibtisch/button.py & + +exit 0 diff --git a/raspberry_pi/main.py b/raspberry_pi/main.py index 9c87d73..cccde65 100644 --- a/raspberry_pi/main.py +++ b/raspberry_pi/main.py @@ -1,4 +1,10 @@ -# status bot +import RPi.GPIO as GPIO +import time + +GPIO.setwarnings(False) +GPIO.setmode(GPIO.BOARD) +GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + import json import os @@ -7,17 +13,6 @@ 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): @@ -28,113 +23,102 @@ def textselect(min, max): else: return random.randint(min, max) -def log(out): - f = open(dir_path + os.sep + "log.csv", "a") - f.write(out) - f.close() + +path = os.path.abspath(__file__) +dir_path = os.path.dirname(path) +print("dir path is", dir_path) + +# 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) + + +state = 1 +state_b4 = 1 + 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: + if GPIO.input(12) == GPIO.HIGH: + #print("button was pushed:") + + state = 1 + + + if GPIO.input(12) == GPIO.LOW: + #print("button was not pushed:") + state = 0 + + + time_now = time.time() + + file_status_path = dir_path + os.sep + "status.json" + #print(file_status_path) + + + if state == 1 and state_b4 == 0: + + if os.path.exists(file_status_path) == True: + with open(file_status_path, 'r') as f: data_status = json.load(f) + + number = len(data_status["opening_text"]) + number = textselect(0, number - 1) - 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') + "]" + text = data_status["opening_text"][number]["text"] + " [OPEN:" + datetime.datetime.fromtimestamp( + int( time_now )).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) + + #print("opened") + #text = "#Krautspace was opened. testmode (if you think I am wrong, report to me this bug/observation!) " + datetime.datetime.fromtimestamp( + # int( time_now )).strftime('%Y-%m-%d %H:%M:%S') + "" - print("Text:", text) - try: - api.update_status(text) - except: - print(time_now, "did not tweet opening status") + #print("Text:", text) + try: + api.update_status(text) + # same text as before cannot be posted! + except: + print(time_now, "did not tweet closing status") + + if state == 0 and state_b4 == 1: + #print("closed") + + if os.path.exists(file_status_path) == True: + with open(file_status_path, 'r') as f: + data_status = json.load(f) + + number = len(data_status["closing_text"]) + number = textselect(0, number - 1) - 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"]) + text = data_status["closing_text"][number]["text"] + " [CLOSED:" + datetime.datetime.fromtimestamp( + int( time_now )).strftime('%Y-%m-%d %H:%M:%S') + "]" + + print("Text:", text) + + + #text = "#Krautspace was closed. testmode (if you think I am wrong, report to me this bug/observation!) " + datetime.datetime.fromtimestamp( + # int( time_now )).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") + + state_b4 = state + + time.sleep(10) \ No newline at end of file