From 9e86a3cfdee2c01869b9e5beb0598286f667c3c4 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Thu, 19 Dec 2019 22:59:35 +0100 Subject: [PATCH 01/10] adds mastodon requirement and config initial mastodon commit --- raspberry_pi/config.json | 4 ++++ raspberry_pi/requirements.txt | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/raspberry_pi/config.json b/raspberry_pi/config.json index 4aafddb..e368e3c 100644 --- a/raspberry_pi/config.json +++ b/raspberry_pi/config.json @@ -11,5 +11,9 @@ "consumer_secret": "fill in your data!", "token": "fill in your data!", "token_secret": "fill in your data!" + }, + "mastodon_api": { + "caccess_token": "fill in your data!", + "api_base_url": "fill in your data!" } } \ No newline at end of file diff --git a/raspberry_pi/requirements.txt b/raspberry_pi/requirements.txt index 69ae13e..350fcce 100644 --- a/raspberry_pi/requirements.txt +++ b/raspberry_pi/requirements.txt @@ -1 +1,2 @@ -tweepy \ No newline at end of file +tweepy +mastodon.py \ No newline at end of file From fea6ee937fcc02a65ec1857cee615cc5ec10a759 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Fri, 20 Dec 2019 00:44:07 +0100 Subject: [PATCH 02/10] adds mastodon support. --- raspberry_pi/config.json | 2 +- raspberry_pi/main.py | 131 +++++++++++++++++------- raspberry_pi/status.json | 210 ++++++++++++++++++++++----------------- 3 files changed, 214 insertions(+), 129 deletions(-) diff --git a/raspberry_pi/config.json b/raspberry_pi/config.json index e368e3c..4cc58b1 100644 --- a/raspberry_pi/config.json +++ b/raspberry_pi/config.json @@ -13,7 +13,7 @@ "token_secret": "fill in your data!" }, "mastodon_api": { - "caccess_token": "fill in your data!", + "access_token": "fill in your data!", "api_base_url": "fill in your data!" } } \ No newline at end of file diff --git a/raspberry_pi/main.py b/raspberry_pi/main.py index cccde65..165ab7b 100644 --- a/raspberry_pi/main.py +++ b/raspberry_pi/main.py @@ -1,6 +1,4 @@ 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) @@ -12,7 +10,9 @@ import time import urllib.request, json import datetime import tweepy +from mastodon import Mastodon import random +import time def textselect(min, max): @@ -35,15 +35,21 @@ with open(file_configure_path, 'r') as 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) +TWITTER_CONSUMER_KEY = data_config["twitter_api"]["consumer_key"] +TWITTER_CONSUMER_SECRET = data_config["twitter_api"]["consumer_secret"] +TWITTER_ACCESS_KEY = data_config["twitter_api"]["token"] +TWITTER_ACCESS_SECRET = data_config["twitter_api"]["token_secret"] + +twitter_auth = tweepy.OAuthHandler(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET) +twitter_auth.set_access_token(TWITTER_ACCESS_KEY, TWITTER_ACCESS_SECRET) +twitter_api = tweepy.API(twitter_auth) + + +MASTODON_ACCESS_TOKEN = data_config["mastodon_api"]["access_token"] +MASTODON_API_BASE_URL = data_config["mastodon_api"]["api_base_url"] + + state = 1 @@ -51,6 +57,7 @@ state_b4 = 1 while True: + if GPIO.input(12) == GPIO.HIGH: #print("button was pushed:") @@ -60,12 +67,10 @@ while True: 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: @@ -77,22 +82,49 @@ while True: 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 )).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) + + time_opening = datetime.datetime.fromtimestamp(int(time_now)).strftime('%Y-%m-%d %H:%M:%S') + texts = data_status["opening_text"][number]["text"] + + if texts.get("twitter") != None: + text = texts["twitter"] + " [OPEN:" + time_opening + "]" + + else: + text = texts["universal"] + " [OPEN:" + time_opening + "]" + + + print("twitter text:", text) + try: - api.update_status(text) + twitter_api.update_status(text) # same text as before cannot be posted! except: - print(time_now, "did not tweet closing status") - + print(time_now, "did not tweet opening status") + + + + if MASTODON_ACCESS_TOKEN != "fill in your data!": + + if texts.get("mastodon") != None: + text = texts["mastodon"] + " [OPEN:" + time_opening + "]" + + else: + text = texts["universal"] + " [OPEN:" + time_opening + "]" + + + print("mastodon text:", text) + + try: + mastodon = Mastodon( + access_token=MASTODON_ACCESS_TOKEN, + api_base_url=MASTODON_API_BASE_URL + ) + mastodon.toot(text) + except: + print(time_now, "did not toot closing status", time_closing) + + + if state == 0 and state_b4 == 1: #print("closed") @@ -103,22 +135,47 @@ while True: 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 )).strftime('%Y-%m-%d %H:%M:%S') + "]" + + time_closing = datetime.datetime.fromtimestamp(int( time_now )).strftime('%Y-%m-%d %H:%M:%S') + texts = data_status["closing_text"][number]["text"] + + if texts.get("twitter") != None: + text = texts["twitter"] + " [CLOSED:" + time_closing + "]" + + else: + text = texts["universal"] + " [CLOSED:" + time_closing + "]" + - 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) + print("Twitter Text:", text) + try: - api.update_status(text) + twitter_api.update_status(text) # same text as before cannot be posted! except: print(time_now, "did not tweet closing status") - + + + + if MASTODON_ACCESS_TOKEN != "fill in your data!": + if texts.get("mastodon") != None: + text = texts["mastodon"] + " [CLOSED:" + time_closing + "]" + + else: + text = texts["universal"] + " [CLOSED:" + time_closing + "]" + + + print("mastodon text:", text) + + try: + mastodon = Mastodon( + access_token=MASTODON_ACCESS_TOKEN, + api_base_url=MASTODON_API_BASE_URL + ) + mastodon.toot(text) + except: + print(time_now, "did not toot closing status", time_closing) + + state_b4 = state time.sleep(10) \ No newline at end of file diff --git a/raspberry_pi/status.json b/raspberry_pi/status.json index 563454a..9a52faf 100644 --- a/raspberry_pi/status.json +++ b/raspberry_pi/status.json @@ -1,282 +1,310 @@ { "name": "Krautspace space status", + "text_mode" : {"universal" : 0, "twitter" : 1, "mastodon" : 2}, "closing_text": [ { - "text": "Krautspace ist geschlossen." + "text": {"universal" : "Krautspace ist geschlossen."} }, { - "text": "#krautspace is closed." + "text": {"universal" : "#krautspace is closed."} }, { - "text": "Last person left #krautspace" + "text": {"universal" : "Last person left #krautspace"} }, { - "text": "Closing #krautspace. We're sorry you need to wait outside, but there is always @freifunkjena to distract you." + "text": {"universal" : "Closing #krautspace. We're sorry you need to wait outside, but there is always @freifunkjena to distract you."} }, { - "text": "Currently, there is no light in #krautspace, so why not walk the beautiful @jenalichtstadt?" + "text": {"universal" : "Currently, there is no light in #krautspace, so why not walk the beautiful @jenalichtstadt?"} }, { - "text": "#krautspace is zu, aber @offenesjena ist immer offen." + "text": {"universal" : "#krautspace is zu, aber @offenesjena ist immer offen."} }, { - "text": "The space is closed, but our chat https://kraut.space/chat/ is always there for you!" + "text": {"universal" : "The space is closed, but our chat https://kraut.space/chat/ is always there for you!"} }, { - "text": "#Krautspace ist zu, aber andere St\u00e4dte haben auch sch\u00f6ne #hackerspaces." + "text": {"universal" : "#Krautspace ist zu, aber andere St\u00e4dte haben auch sch\u00f6ne #hackerspaces."} }, { - "text": "Dave Bowman: \"Open the Krautspace doors, HAL.\" | HAL9000: \" I'm sorry, Dave. I'm afraid I can't do that.\"" + "text": {"universal" : "Dave Bowman: \"Open the Krautspace doors, HAL.\" | HAL9000: \" I'm sorry, Dave. I'm afraid I can't do that.\""} }, { - "text": "Der Krautspace hat zu. Aber ihr k\u00f6nnt ja unsere Nachbarn, den @maschinenrauM18, in #Weimar besuchen, w\u00e4hrend ihr wartet." + "text": { + "universal" : "Der Krautspace hat zu. Aber ihr k\u00f6nnt ja unsere Nachbarn, den @maschinenrauM18, in #Weimar besuchen, w\u00e4hrend ihr wartet.", + "mastodon" : "Der Krautspace hat zu. Aber ihr k\u00f6nnt ja unsere Nachbarn, den @maschinenraum@social.bau-ha.us, in #Weimar besuchen, w\u00e4hrend ihr wartet." + } }, { - "text": "Der Krautspace wurde geschlossen. Mitglieder sind wohl nach Hause oder auf den Weg zum @bytespeicher_ef in #Erfurt." + "text": { + "universal" : "Der Krautspace wurde geschlossen. Mitglieder sind wohl nach Hause oder auf den Weg zum @bytespeicher_ef in #Erfurt.", + "mastodon" : "Der Krautspace wurde geschlossen. Mitglieder sind wohl nach Hause oder auf den Weg zum @bytespeicher@social.bau-ha.us in #Erfurt." + } }, { - "text": "Wir sind jetzt leider zu. Sollen wir euch die Horden an Hackern zum @ebkhalle nach #Halle r\u00fcberschicken?" + "text": {"universal" : "Wir sind jetzt leider zu. Sollen wir euch die Horden an Hackern zum @ebkhalle nach #Halle r\u00fcberschicken?"} }, { - "text": "Wir sind nun zu. Wie sieht es bei euch aus im C3D2 @pentafnord? #Dresden" + "text": { + "universal" : "Wir sind nun zu. Wie sieht es bei euch aus im C3D2 @pentafnord? #Dresden.", + "mastodon" : "Wir sind nun zu. Wie sieht es bei euch aus im C3D2 @c3d2@bots.tinysubversions.com? #Dresden." + } }, { - "text": "...aaaaand it's gone! Krautspace is closed https://www.youtube.com/watch?v=DNLob2E_Q5s" + "text": {"universal" : "...aaaaand it's gone! Krautspace is closed https://www.youtube.com/watch?v=DNLob2E_Q5s"} }, { - "text": "Lichter im Krautspace sind nun aus. F\u00fcr mehr Lichter kann man auch gut in die @LichtwerkstattJ gehen." + "text": {"universal" : "Lichter im Krautspace sind nun aus. F\u00fcr mehr Lichter kann man auch gut in die @LichtwerkstattJ gehen."} }, { - "text": "Heut is nicht alle Tage, Krautspace kommt wieder keine Frage!! https://www.youtube.com/watch?v=JRL5Z1k60tg" + "text": {"universal" : "Heut is nicht alle Tage, Krautspace kommt wieder keine Frage!! https://www.youtube.com/watch?v=JRL5Z1k60tg"} }, { - "text": "Du musst was reparieren? Krautspace ist nun leider zu, aber schau doch mal beim @RepairCafe_Jena vorbei." + "text": {"universal" : "Du musst was reparieren? Krautspace ist nun leider zu, aber schau doch mal beim @RepairCafe_Jena vorbei."} }, { - "text": "Der Space ist jetzt zu und du kannst weiterhin neue \"Wir sind zu\" Spr\u00fcche zu unserem Twitter Bot auf @Github hinzuf\u00fcgen https://github.com/HackspaceJena/space_status " + "text": {"universal" : "Der Space ist jetzt zu und du kannst weiterhin neue \"Wir sind zu\" Spr\u00fcche zu unserem Twitter Bot auf @Github hinzuf\u00fcgen https://github.com/HackspaceJena/space_status "} }, { - "text": "Brautkleid bleibt Brautkleid, und Krautspace bleibt Krautspace, auch wenn er zu ist, wie jetzt..." + "text": {"universal" : "Brautkleid bleibt Brautkleid, und Krautspace bleibt Krautspace, auch wenn er zu ist, wie jetzt..."} }, { - "text": "Der Krautspace ist zu und du weisst nicht, was du tun kannst? Lies doch mal ein Buch im @EAB_Jena?" + "text": {"universal" : "Der Krautspace ist zu und du weisst nicht, was du tun kannst? Lies doch mal ein Buch im @EAB_Jena?"} }, { - "text": "BEE DOO BEE DOO BEE DOO - space is closed. https://www.youtube.com/watch?v=ZvvF_N2XD8w " + "text": {"universal" : "BEE DOO BEE DOO BEE DOO - space is closed. https://www.youtube.com/watch?v=ZvvF_N2XD8w "} }, { - "text": "Krautspace is closed and before you intend to defy the weather outside while reaching us, check our @SenseBox_De https://opensensemap.org/explore/59d7de4c66f66a0010797868 " + "text": {"universal" : "Krautspace is closed and before you intend to defy the weather outside while reaching us, check our @SenseBox_De https://opensensemap.org/explore/59d7de4c66f66a0010797868 "} }, { - "text": "Why not leaving Krautspace with an earworm?! Bye Bye bye....! https://www.youtube.com/watch?v=Eo-KmOd3i7s " + "text": {"universal" : "Why not leaving Krautspace with an earworm?! Bye Bye bye....! https://www.youtube.com/watch?v=Eo-KmOd3i7s "} }, { - "text": "Matelos, durch die Nacht.... *singend beim Zuschlie\u00dfen des Krautspaces." + "text": {"universal" : "Matelos, durch die Nacht.... *singend beim Zuschlie\u00dfen des Krautspaces."} }, { - "text": "Krautspace 503 - Service Unavailable." + "text": {"universal" : "Krautspace 503 - Service Unavailable."} }, { - "text": "member: \"shutdown\". krautspace: \"no\". member: \"sudo shutdown\". krautspace: \"ok, shutting down, bye!\"" + "text": {"universal" : "member: \"shutdown\". krautspace: \"no\". member: \"sudo shutdown\". krautspace: \"ok, shutting down, bye!\""} }, { - "text": "Wir sind nun zu, aber wenn du eine Projektidee f\u00fcr zu hause brauchst, warum nicht einen weiteren @airrohr Feinstaubsensor f\u00fcr #Jena aufstellen? @luftdaten #Feinstaubalarm #PM10 http://deutschland.maps.luftdaten.info/#13/50.9294/11.5825" + "text": { + "universal" : "Wir sind nun zu, aber wenn du eine Projektidee f\u00fcr zu hause brauchst, warum nicht einen weiteren @airrohr Feinstaubsensor f\u00fcr #Jena aufstellen? @luftdaten #Feinstaubalarm #PM10 http://deutschland.maps.luftdaten.info/#13/50.9294/11.5825", + "mastodon" : "Wir sind nun zu, aber wenn du eine Projektidee f\u00fcr zu hause brauchst, warum nicht einen weiteren @airrohr Feinstaubsensor f\u00fcr #Jena aufstellen? @luftdaten@mastodon.social #Feinstaubalarm #PM10 http://deutschland.maps.luftdaten.info/#13/50.9294/11.5825" + } }, { - "text": "Krautspace ist nun zu. Nein? Doch! Oh!" + "text": {"universal" : "Krautspace ist nun zu. Nein? Doch! Oh!"} }, { - "text": "-.- .-. .- ..- - ... .--. .- -.-. . / .. ... / -.-. .-.. --- ... . -.. .-.-.-" + "text": {"universal" : "-.- .-. .- ..- - ... .--. .- -.-. . / .. ... / -.-. .-.. --- ... . -.. .-.-.-"} }, { - "text": "Krautspace ist zu und du hast noch (k)eine Idee f\u00fcr ein Projekt? Frag auf unserer Emailliste nach. Die ist immer auf und Leute helfen dir dort gerne. https://lstsrv.org/mailman/listinfo/hackspace-jena" + "text": {"universal" : "Krautspace ist zu und du hast noch (k)eine Idee f\u00fcr ein Projekt? Frag auf unserer Emailliste nach. Die ist immer auf und Leute helfen dir dort gerne. https://lstsrv.org/mailman/listinfo/hackspace-jena"} }, { - "text": "Sie verlassen jetzt den Krautspace, n\u00e4chster Ort auf Ihrer Reise ist Bad Gateway - Internetkurort." + "text": {"universal" : "Sie verlassen jetzt den Krautspace, n\u00e4chster Ort auf Ihrer Reise ist Bad Gateway - Internetkurort."} }, { - "text": "Ich bin jetzt zu. Solange keiner da ist schaue ich den Reisenden in der Gegend zu und versuche sie sirenenhaft hierhin zu locken... Kraft meiner Gedanken... und Funk! https://aprs.fi/#!addr=jena @APRSFI" + "text": {"universal" : "Ich bin jetzt zu. Solange keiner da ist schaue ich den Reisenden in der Gegend zu und versuche sie sirenenhaft hierhin zu locken... Kraft meiner Gedanken... und Funk! https://aprs.fi/#!addr=jena @APRSFI"} }, { - "text": "Wir sind dann mal weg!" + "text": {"universal" : "Wir sind dann mal weg!"} }, { - "text": "Waren Sie schon mal in #Jena? Dort ist es schön. Wir sind nun auch dort zu finden." + "text": {"universal" : "Waren Sie schon mal in #Jena? Dort ist es schön. Wir sind nun auch dort zu finden."} }, { - "text": "Keine Neuigkeiten aus dem Krautspace? Was gibt's denn sonst so in Jena? Schaut doch mal auf @Jenaertweets vorbei!" + "text": { + "universal" : "Keine Neuigkeiten aus dem Krautspace? Was gibt's denn sonst so in Jena? Schaut doch mal auf @Jenaertweets vorbei!", + "mastodon" : "Keine Neuigkeiten aus dem Krautspace? Was gibt's denn sonst so in Jena? Schaut doch mal auf @Jenaertoots@mastodon.social vorbei!" + } }, { - "text": "Der Maschinenkraut ist GESCHLOSSEN... No. 1337" + "text": {"universal" : "Der Maschinenkraut ist GESCHLOSSEN... No. 1337"} }, { - "text": "Nach der Hackarbeit ist vor der @AfterWorkPartyJ" + "text": {"universal" : "Nach der Hackarbeit ist vor der @AfterWorkPartyJ"} }, { - "text": "Es ist zwar jetzt zu, aber vielleicht sind wir nur kurz zum Einkaufen in der @goethegalerie. Schaut bitte nochmal auf den Status in 30 Minuten." + "text": {"universal" : "Es ist zwar jetzt zu, aber vielleicht sind wir nur kurz zum Einkaufen in der @goethegalerie. Schaut bitte nochmal auf den Status in 30 Minuten."} }, { - "text": "We are outside smelling the roses... and using @Flora_Incognita on our smartphones to identify wild flowers!" + "text": {"universal" : "We are outside smelling the roses... and using @Flora_Incognita on our smartphones to identify wild flowers!"} }, { - "text": "E-DOOR says: Space is CLOSED!" + "text": {"universal" : "E-DOOR says: Space is CLOSED!"} }, { - "text": "Der @HackspaceJena beendet die #Spacetime!" + "text": { + "universal" : "Der @HackspaceJena beendet die #Spacetime!", + "mastodon" : "Der @krautspace@chaos.social beendet die #Spacetime!" + } }, { - "text": "You can't Hack this (oh-oh oh oh-oh-oh) \n Break it down (Oh-oh-oh-oh-oh-oh-oh-oh-oh oh-oh) \n (Oh-oh-oh-oh-oh-oh-oh-oh-oh oh-oh) Stop Hacker time. https://www.youtube.com/watch?v=otCpCn0l4Wo" + "text": {"universal" : "You can't Hack this (oh-oh oh oh-oh-oh) \n Break it down (Oh-oh-oh-oh-oh-oh-oh-oh-oh oh-oh) \n (Oh-oh-oh-oh-oh-oh-oh-oh-oh oh-oh) Stop Hacker time. https://www.youtube.com/watch?v=otCpCn0l4Wo"} }, { - "text": "Spaaaaaaaaaaaaaaaaaaaaaaaaace is closed :(" + "text": {"universal" : "Spaaaaaaaaaaaaaaaaaaaaaaaaace is closed :("} }, { - "text": "Alle Mitglieder sind ausgeflogen. Wahrscheinlich fliegen auch einige Mitglieder ihre @Mastodrone #Drohnen draußen bei schoenem Wetter." + "text": {"universal" : "Alle Mitglieder sind ausgeflogen. Wahrscheinlich fliegen auch einige Mitglieder ihre @Mastodrone #Drohnen draußen bei schoenem Wetter."} }, { - "text": "Ihr wisst schon... abschalten! https://www.youtube.com/watch?v=1RpuTQS4hWw " + "text": {"universal" : "Ihr wisst schon... abschalten! https://www.youtube.com/watch?v=1RpuTQS4hWw "} }, { - "text": "Hackerspace #Krautspace is closed. But there is more open-source in #Jena. Hack #space for the #NASA #SpaceApps challenge with @SpaceAppsJena!" + "text": {"universal" : "Hackerspace #Krautspace is closed. But there is more open-source in #Jena. Hack #space for the #NASA #SpaceApps challenge with @SpaceAppsJena!"} }, { - "text": "Rien ne va plus!" + "text": {"universal" : "Rien ne va plus!"} }, { - "text": "Alle Leute sind draussen, denn draussen in #Jena ist es spektakul\u00e4r! Auch dank dem @spektartulum!" + "text": {"universal" : "Alle Leute sind draussen, denn draussen in #Jena ist es spektakul\u00e4r! Auch dank dem @spektartulum!"} }, { - "text": "We ended our expriments of today. We have done cool experiments in #Krautspace, but not as cool as the @jena_experiment!" + "text": {"universal" : "We ended our exepriments of today. We have done cool experiments in #Krautspace, but not as cool as the @jena_experiment!"} }, { - "text": "De hackerspace @HackspaceJena is gesloten." + "text": { + "universal" : "De hackerspace @HackspaceJena is gesloten.", + "mastodon" : "De hackerspace @krautspace@chaos.social is gesloten." + } }, { - "text": "Space is closed. You can see what will happen next on @HackspaceJena @Twitter or on https://chaos.social/@krautspace #Mastodon." + "text": {"universal" : "Space is closed. You can see what will happen next on @HackspaceJena @Twitter or on https://chaos.social/@krautspace #Mastodon."} }, { - "text": "This closing tweet has been presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy" + "text": {"universal" : "This closing tweet has been presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy"} } ], "opening_text": [ { - "text": "Krautspace ist besetzt." + "text": {"universal" : "Krautspace ist besetzt."} }, { - "text": "#krautspace is open." + "text": {"universal" : "#krautspace is open."} }, { - "text": "At least one person is in #krautspace and invites you to come and join hacking!" + "text": {"universal" : "At least one person is in #krautspace and invites you to come and join hacking!"} }, { - "text": "One Ping Only! .... Ping, #krautspace is open." + "text": {"universal" : "One Ping Only! .... Ping, #krautspace is open."} }, { - "text": "Booting up #krautspace.... space is open!" + "text": {"universal" : "Booting up #krautspace.... space is open!"} }, { - "text": "The space is open, let's hack together." + "text": {"universal" : "The space is open, let's hack together."} }, { - "text": "Did you miss me? Don't cry, I am open again!" + "text": {"universal" : "Did you miss me? Don't cry, I am open again!"} }, { - "text": "Today is a good day to DIY! Krautspace is open." + "text": {"universal" : "Today is a good day to DIY! Krautspace is open."} }, { - "text": "Want to learn how to hack hardware? Come to Krautspace now and start by taking things apart." + "text": {"universal" : "Want to learn how to hack hardware? Come to Krautspace now and start by taking things apart."} }, { - "text": "Come to Krautspace, we're open." + "text": {"universal" : "Come to Krautspace, we're open."} }, { - "text": "Der Space ist jetzt offen und du kannst weitere \"Wir sind offen\" Spr\u00fcche zu unserem Twitter Bot auf @Github hinzuf\u00fcgen auf https://github.com/HackspaceJena/space_status " + "text": {"universal" : "Der Space ist jetzt offen und du kannst weitere \"Wir sind offen\" Spr\u00fcche zu unserem Twitter Bot auf @Github hinzuf\u00fcgen auf https://github.com/HackspaceJena/space_status "} }, { - "text": "Hackers gonna hack, now in open Krautspace again." + "text": {"universal" : "Hackers gonna hack, now in open Krautspace again."} }, { - "text": "Come on over and have some fun! The space is open." + "text": {"universal" : "Come on over and have some fun! The space is open."} }, { - "text": "The more you know! Krautspace is open. http://i3.kym-cdn.com/photos/images/newsfeed/000/620/434/f9e.gif" + "text": {"universal" : "The more you know! Krautspace is open. http://i3.kym-cdn.com/photos/images/newsfeed/000/620/434/f9e.gif"} }, { - "text": "Come to the Krautspace now, we have Mate!" + "text": {"universal" : "Come to the Krautspace now, we have Mate!"} }, { - "text": "A Wild Hacker Appears! Opening Krautspace now..." + "text": {"universal" : "A Wild Hacker Appears! Opening Krautspace now..."} }, { - "text": "You can turn your soldering irons up to eleven again, Krautspace is open." + "text": {"universal" : "You can turn your soldering irons up to eleven again, Krautspace is open."} }, { - "text": "Blinken um dich rum genug bunte Lichter? Nein? Der Krautspace ist jetzt offen, komm vorbei, mach mehr blink!" + "text": {"universal" : "Blinken um dich rum genug bunte Lichter? Nein? Der Krautspace ist jetzt offen, komm vorbei, mach mehr blink!"} }, { - "text": "The krautspace is open, come on over for a cold #ClubMate. https://matemonkey.com/map/dealer/krautspace?@=17,50.928943,11.586419 @matemonkeycom" + "text": {"universal" : "The krautspace is open, come on over for a cold #ClubMate. https://matemonkey.com/map/dealer/krautspace?@=17,50.928943,11.586419 @matemonkeycom"} }, { - "text": "Beep beep, I'm open for hacking visitors!" + "text": {"universal" : "Beep beep, I'm open for hacking visitors!"} }, { - "text": "Welcome to Krautspace, your #Jena hackerspace!" + "text": {"universal" : "Welcome to Krautspace, your #Jena hackerspace!"} }, { - "text": "Hello member, I missed you." + "text": {"universal" : "Hello member, I missed you."} }, { - "text": "Heute im #Krautspace >> https://kraut.space" + "text": {"universal" : "Heute im #Krautspace >> https://kraut.space"} }, { - "text": "-.- .-. .- ..- - ... .--. .- -.-. . / .. ... / --- .--. . -. .-.-.-" + "text": {"universal" : "-.- .-. .- ..- - ... .--. .- -.-. . / .. ... / --- .--. . -. .-.-.-"} }, { - "text": "Der Maschinenkraut ist OFFEN... No. 4223" + "text": {"universal" : "Der Maschinenkraut ist OFFEN... No. 4223"} }, { - "text": "E-DOOR says: Space is OPEN!" + "text": {"universal" : "E-DOOR says: Space is OPEN!"} }, { - "text": "#Spacetime im @HackspaceJena!" + "text": { + "universal" : "#Spacetime im @HackspaceJena!", + "mastodon" : "#Spacetime im @Krautspace@chaos.social!" + } }, { - "text": "#Krautspace is offen. Wir machen hier vieles, auch Workshops. Vielleicht auch irgendwann das HACKERMAN'S HACKING TUTORIALS - How To Hack Time https://www.youtube.com/watch?v=KEkrWRHCDQU" + "text": {"universal" : "#Krautspace is offen. Wir machen hier vieles, auch Workshops. Vielleicht auch irgendwann das HACKERMAN'S HACKING TUTORIALS - How To Hack Time https://www.youtube.com/watch?v=KEkrWRHCDQU"} }, { - "text": "Spaaaaaaaaaaaaaaaaaaaaaaaaace is open :)" + "text": {"universal" : "Spaaaaaaaaaaaaaaaaaaaaaaaaace is open :)"} }, { - "text": "NOTENOUGHBLINKENLIGHTS: Please visit the (now open) krautspace to make more blinkenlights." + "text": {"universal" : "NOTENOUGHBLINKENLIGHTS: Please visit the (now open) krautspace to make more blinkenlights."} }, { - "text": "Der Krautspace ist auf. Vielleicht wird nun an unseren Projekten wie @Mastodrone, @Jenaertweets, @RasPowermeter, @repaircafe_jena, @OSM_to & an mir gewerkelt. Findet es heraus. Kommt vorbei!" + "text": { + "universal" : "Der Krautspace ist auf. Vielleicht wird nun an unseren Projekten wie @Mastodrone, @Jenaertweets, @RasPowermeter, @repaircafe_jena, @OSM_to & an mir gewerkelt. Findet es heraus. Kommt vorbei!", + "mastodon" : "Der Krautspace ist auf. Vielleicht wird nun an unseren Projekten wie @Mastodrone, @Jenaertoots@mastodon.social, @RasPowermeter, @repaircafe_jena@mastodon.social, @OSM_to & an mir gewerkelt. Findet es heraus. Kommt vorbei!" + } }, { - "text": "This hacking time notice has been presented by an @Raspberry_Pi and an @Arduino!" + "text": {"universal" : "This hacking time notice has been presented by an @Raspberry_Pi and an @Arduino!"} }, { - "text": "Our heroes are leaving the hackerspace catacombs. Ah, Venice! https://youtu.be/eTTgusoFHhI" + "text": {"universal" : "Our heroes are leaving the hackerspace catacombs. Ah, Venice! https://youtu.be/eTTgusoFHhI"} }, { - "text": "Open Sesame!" + "text": {"universal" : "Open Sesame!"} }, { - "text": "Sesam \u00f6ffne dich!" + "text": {"universal" : "Sesam \u00f6ffne dich!"} }, { - "text": "Mr. Gorbachev, open this gate! --US-President Ronald Reagan in Berlin in 1987-06-12" + "text": {"universal" : "Mr. Gorbachev, open this gate! --US-President Ronald Reagan in Berlin in 1987-06-12"} }, { - "text": "Space is open. Now go to @HackspaceJena @Twitter or on https://chaos.social/@krautspace #Mastodon and see the project-magic gonna happen! If it happened, we will tweet and toot about it." + "text": {"universal" : "Space is open. Now go to @HackspaceJena @Twitter or on https://chaos.social/@krautspace #Mastodon and see the project-magic gonna happen! If it happened, we will tweet and toot about it."} }, { - "text": "This opening tweet is presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy" + "text": {"universal" : "This opening tweet is presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy"} } ], "uncertain_text": [ { - "text": "people in #krautspace want their privacy." + "text": {"universal" : "people in #krautspace want their privacy."} } ] } From 066a1295523acb557b9453b1d23a48dc113af8bd Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Thu, 26 Dec 2019 22:08:46 +0100 Subject: [PATCH 03/10] new slogans --- raspberry_pi/status.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/raspberry_pi/status.json b/raspberry_pi/status.json index 9a52faf..40b9419 100644 --- a/raspberry_pi/status.json +++ b/raspberry_pi/status.json @@ -178,6 +178,12 @@ }, { "text": {"universal" : "This closing tweet has been presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy"} + }, + { + "text": {"universal" : "Der #Krautspace ist zu!"} + }, + { + "text": {"universal" : "#Krautspace est fermée. "} } ], "opening_text": [ From 9a30d8cf6dfbd971784b2a159674f2ca742a6061 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Thu, 26 Dec 2019 22:13:42 +0100 Subject: [PATCH 04/10] new slogan --- raspberry_pi/status.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/raspberry_pi/status.json b/raspberry_pi/status.json index 40b9419..32c9563 100644 --- a/raspberry_pi/status.json +++ b/raspberry_pi/status.json @@ -305,7 +305,10 @@ "text": {"universal" : "Space is open. Now go to @HackspaceJena @Twitter or on https://chaos.social/@krautspace #Mastodon and see the project-magic gonna happen! If it happened, we will tweet and toot about it."} }, { - "text": {"universal" : "This opening tweet is presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy"} + "text": { + "universal" : "This opening tweet is presented by #tweepy + #mastodon.py! Thank you communities (https://discord.gg/bJvqnhg), get the code @github https://github.com/tweepy/tweepy and https://github.com/halcy/Mastodon.py", + "mastodon" : "This opening tweet is presented by mastodon.py! Thank you community, get the code @github https://github.com/halcy/Mastodon.py" + } } ], "uncertain_text": [ From b4c557e19abd3f2d8a8d835a437849596a41c8e4 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Thu, 26 Dec 2019 22:25:53 +0100 Subject: [PATCH 05/10] adds typo --- raspberry_pi/status.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raspberry_pi/status.json b/raspberry_pi/status.json index 32c9563..5fd1cce 100644 --- a/raspberry_pi/status.json +++ b/raspberry_pi/status.json @@ -165,7 +165,7 @@ "text": {"universal" : "Alle Leute sind draussen, denn draussen in #Jena ist es spektakul\u00e4r! Auch dank dem @spektartulum!"} }, { - "text": {"universal" : "We ended our exepriments of today. We have done cool experiments in #Krautspace, but not as cool as the @jena_experiment!"} + "text": {"universal" : "We ended our experiments of today. We have done cool experiments in #Krautspace, but not as cool as the @jena_experiment!"} }, { "text": { From 9bcff4f4d7e7d5d714ae514ff17682e9cb998406 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Sun, 5 Jan 2020 12:59:26 +0100 Subject: [PATCH 06/10] adds check for twitter and mastodon access token --- raspberry_pi/main.py | 115 +++++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 49 deletions(-) diff --git a/raspberry_pi/main.py b/raspberry_pi/main.py index 165ab7b..563a04a 100644 --- a/raspberry_pi/main.py +++ b/raspberry_pi/main.py @@ -1,9 +1,3 @@ -import RPi.GPIO as GPIO -GPIO.setwarnings(False) -GPIO.setmode(GPIO.BOARD) -GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) - - import json import os import time @@ -13,6 +7,16 @@ import tweepy from mastodon import Mastodon import random import time +testmode = True +if testmode != True: + import RPi.GPIO as GPIO + GPIO.setwarnings(False) + GPIO.setmode(GPIO.BOARD) + GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + + print("Mode: operational") +else: + print("Mode: test") def textselect(min, max): @@ -58,20 +62,27 @@ state_b4 = 1 while True: - if GPIO.input(12) == GPIO.HIGH: - #print("button was pushed:") + if testmode != True: + if GPIO.input(12) == GPIO.HIGH: + #print("button was pushed:") - state = 1 + state = 1 - if GPIO.input(12) == GPIO.LOW: - #print("button was not pushed:") - state = 0 + if GPIO.input(12) == GPIO.LOW: + #print("button was not pushed:") + state = 0 + else: + # just toggles the states for test mode! + if state == 0: + state = 1 + else: + state = 0 + time_now = time.time() file_status_path = dir_path + os.sep + "status.json" - if state == 1 and state_b4 == 0: @@ -86,20 +97,22 @@ while True: time_opening = datetime.datetime.fromtimestamp(int(time_now)).strftime('%Y-%m-%d %H:%M:%S') texts = data_status["opening_text"][number]["text"] - if texts.get("twitter") != None: - text = texts["twitter"] + " [OPEN:" + time_opening + "]" + if TWITTER_ACCESS_KEY != "fill in your data!": + if texts.get("twitter") != None: + text = texts["twitter"] + " [OPEN:" + time_opening + "]" - else: - text = texts["universal"] + " [OPEN:" + time_opening + "]" + else: + text = texts["universal"] + " [OPEN:" + time_opening + "]" - print("twitter text:", text) + print("twitter text:", text) - try: - twitter_api.update_status(text) - # same text as before cannot be posted! - except: - print(time_now, "did not tweet opening status") + if testmode != True: + try: + twitter_api.update_status(text) + # same text as before cannot be posted! + except: + print(time_now, "did not tweet opening status") @@ -114,14 +127,15 @@ while True: print("mastodon text:", text) - try: - mastodon = Mastodon( - access_token=MASTODON_ACCESS_TOKEN, - api_base_url=MASTODON_API_BASE_URL - ) - mastodon.toot(text) - except: - print(time_now, "did not toot closing status", time_closing) + if testmode != True: + try: + mastodon = Mastodon( + access_token=MASTODON_ACCESS_TOKEN, + api_base_url=MASTODON_API_BASE_URL + ) + mastodon.toot(text) + except: + print(time_now, "did not toot closing status", time_closing) @@ -139,20 +153,22 @@ while True: time_closing = datetime.datetime.fromtimestamp(int( time_now )).strftime('%Y-%m-%d %H:%M:%S') texts = data_status["closing_text"][number]["text"] - if texts.get("twitter") != None: - text = texts["twitter"] + " [CLOSED:" + time_closing + "]" + if MASTODON_ACCESS_TOKEN != "fill in your data!": + if texts.get("twitter") != None: + text = texts["twitter"] + " [CLOSED:" + time_closing + "]" - else: - text = texts["universal"] + " [CLOSED:" + time_closing + "]" + else: + text = texts["universal"] + " [CLOSED:" + time_closing + "]" - print("Twitter Text:", text) + print("twitter text:", text) - try: - twitter_api.update_status(text) - # same text as before cannot be posted! - except: - print(time_now, "did not tweet closing status") + if testmode != True: + try: + twitter_api.update_status(text) + # same text as before cannot be posted! + except: + print(time_now, "did not tweet closing status") @@ -166,14 +182,15 @@ while True: print("mastodon text:", text) - try: - mastodon = Mastodon( - access_token=MASTODON_ACCESS_TOKEN, - api_base_url=MASTODON_API_BASE_URL - ) - mastodon.toot(text) - except: - print(time_now, "did not toot closing status", time_closing) + if testmode != True: + try: + mastodon = Mastodon( + access_token=MASTODON_ACCESS_TOKEN, + api_base_url=MASTODON_API_BASE_URL + ) + mastodon.toot(text) + except: + print(time_now, "did not toot closing status", time_closing) state_b4 = state From 69c629820ca45794395fc07a56440c910217b741 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Sun, 5 Jan 2020 13:12:27 +0100 Subject: [PATCH 07/10] adds send_tweet and send_toot functions --- raspberry_pi/main.py | 51 +++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/raspberry_pi/main.py b/raspberry_pi/main.py index 563a04a..4f5b131 100644 --- a/raspberry_pi/main.py +++ b/raspberry_pi/main.py @@ -7,7 +7,7 @@ import tweepy from mastodon import Mastodon import random import time -testmode = True +testmode = False if testmode != True: import RPi.GPIO as GPIO GPIO.setwarnings(False) @@ -28,6 +28,25 @@ def textselect(min, max): return random.randint(min, max) +def send_tweet(twitter_api, text, time_now, status): + try: + twitter_api.update_status(text) + # same text as before cannot be posted! + except: + print(time_now, "did not tweet", status, "status") + + +def send_toot(MASTODON_ACCESS_TOKEN, MASTODON_API_BASE_URL, text, time_now, status): + try: + mastodon = Mastodon( + access_token=MASTODON_ACCESS_TOKEN, + api_base_url=MASTODON_API_BASE_URL + ) + mastodon.toot(text) + except: + print(time_now, "did not toot", status," status") + + path = os.path.abspath(__file__) dir_path = os.path.dirname(path) print("dir path is", dir_path) @@ -108,11 +127,7 @@ while True: print("twitter text:", text) if testmode != True: - try: - twitter_api.update_status(text) - # same text as before cannot be posted! - except: - print(time_now, "did not tweet opening status") + send_tweet(twitter_api, text, time_now, "opening") @@ -128,14 +143,7 @@ while True: print("mastodon text:", text) if testmode != True: - try: - mastodon = Mastodon( - access_token=MASTODON_ACCESS_TOKEN, - api_base_url=MASTODON_API_BASE_URL - ) - mastodon.toot(text) - except: - print(time_now, "did not toot closing status", time_closing) + send_toot(MASTODON_ACCESS_TOKEN, MASTODON_API_BASE_URL, text, time_now, "opening") @@ -164,11 +172,7 @@ while True: print("twitter text:", text) if testmode != True: - try: - twitter_api.update_status(text) - # same text as before cannot be posted! - except: - print(time_now, "did not tweet closing status") + send_tweet(twitter_api, text, time_now, "closing") @@ -183,14 +187,7 @@ while True: print("mastodon text:", text) if testmode != True: - try: - mastodon = Mastodon( - access_token=MASTODON_ACCESS_TOKEN, - api_base_url=MASTODON_API_BASE_URL - ) - mastodon.toot(text) - except: - print(time_now, "did not toot closing status", time_closing) + send_toot(MASTODON_ACCESS_TOKEN, MASTODON_API_BASE_URL, text, time_now, "closing") state_b4 = state From 87e007147c918ce407ccbb4436c32df6e9195e3a Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Sun, 5 Jan 2020 13:19:10 +0100 Subject: [PATCH 08/10] typo fix and new slogans --- raspberry_pi/status.json | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/raspberry_pi/status.json b/raspberry_pi/status.json index 5fd1cce..9a3359b 100644 --- a/raspberry_pi/status.json +++ b/raspberry_pi/status.json @@ -177,13 +177,24 @@ "text": {"universal" : "Space is closed. You can see what will happen next on @HackspaceJena @Twitter or on https://chaos.social/@krautspace #Mastodon."} }, { - "text": {"universal" : "This closing tweet has been presented by #tweepy! Thank you community https://discord.gg/bJvqnhg, get the code @github https://github.com/tweepy/tweepy"} + "text": { + "universal" : "This closing tweet has been presented by #tweepy + #mastodon.py! Thank you communities (https://discord.gg/bJvqnhg), get the code @github https://github.com/tweepy/tweepy and https://github.com/halcy/Mastodon.py", + "mastodon" : "This clsoing toott has been presented by mastodon.py! Thank you community, get the code @github https://github.com/halcy/Mastodon.py" + + } }, { "text": {"universal" : "Der #Krautspace ist zu!"} }, { "text": {"universal" : "#Krautspace est fermée. "} + }, + { + "text": { + "universal" : "Krautspace is closed. You can also find our status service on #mastodon under https://chaos.social/@kraut_status and on on #twitter under https://twitter.com/ksraumstatus", + "twitter" : "Krautspace is closed. You can also find our status service on #mastodon under https://chaos.social/@kraut_status", + "mastodon" : "Krautspace is closed. You can also find our status service on #twitter under https://twitter.com/ksraumstatus" + } } ], "opening_text": [ @@ -287,7 +298,7 @@ } }, { - "text": {"universal" : "This hacking time notice has been presented by an @Raspberry_Pi and an @Arduino!"} + "text": {"universal" : "This hacking time notice has been presented by a @Raspberry_Pi and an @Arduino!"} }, { "text": {"universal" : "Our heroes are leaving the hackerspace catacombs. Ah, Venice! https://youtu.be/eTTgusoFHhI"} @@ -309,6 +320,13 @@ "universal" : "This opening tweet is presented by #tweepy + #mastodon.py! Thank you communities (https://discord.gg/bJvqnhg), get the code @github https://github.com/tweepy/tweepy and https://github.com/halcy/Mastodon.py", "mastodon" : "This opening tweet is presented by mastodon.py! Thank you community, get the code @github https://github.com/halcy/Mastodon.py" } + }, + { + "text": { + "universal" : "Krautspace is open. You can also find our status service on #mastodon under https://chaos.social/@kraut_status and on on #twitter under https://twitter.com/ksraumstatus", + "twitter" : "Krautspace is open. You can also find our status service on #mastodon under https://chaos.social/@kraut_status", + "mastodon" : "Krautspace is open. You can also find our status service on #twitter under https://twitter.com/ksraumstatus" + } } ], "uncertain_text": [ From a84886a6e679a2bb54ae0902dcb05434b99fecf7 Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Sun, 5 Jan 2020 13:23:21 +0100 Subject: [PATCH 09/10] fixes logic bug --- raspberry_pi/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raspberry_pi/main.py b/raspberry_pi/main.py index 4f5b131..268b9cd 100644 --- a/raspberry_pi/main.py +++ b/raspberry_pi/main.py @@ -161,7 +161,7 @@ while True: time_closing = datetime.datetime.fromtimestamp(int( time_now )).strftime('%Y-%m-%d %H:%M:%S') texts = data_status["closing_text"][number]["text"] - if MASTODON_ACCESS_TOKEN != "fill in your data!": + if TWITTER_ACCESS_KEY != "fill in your data!": if texts.get("twitter") != None: text = texts["twitter"] + " [CLOSED:" + time_closing + "]" From 06a151457de4b57d8918e3a1b000b927eb9a149b Mon Sep 17 00:00:00 2001 From: bernd2k <36308246+bernd2k@users.noreply.github.com> Date: Sun, 5 Jan 2020 13:28:43 +0100 Subject: [PATCH 10/10] fixed mastodon handle --- raspberry_pi/status.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raspberry_pi/status.json b/raspberry_pi/status.json index 9a3359b..ffd8de3 100644 --- a/raspberry_pi/status.json +++ b/raspberry_pi/status.json @@ -294,7 +294,7 @@ { "text": { "universal" : "Der Krautspace ist auf. Vielleicht wird nun an unseren Projekten wie @Mastodrone, @Jenaertweets, @RasPowermeter, @repaircafe_jena, @OSM_to & an mir gewerkelt. Findet es heraus. Kommt vorbei!", - "mastodon" : "Der Krautspace ist auf. Vielleicht wird nun an unseren Projekten wie @Mastodrone, @Jenaertoots@mastodon.social, @RasPowermeter, @repaircafe_jena@mastodon.social, @OSM_to & an mir gewerkelt. Findet es heraus. Kommt vorbei!" + "mastodon" : "Der Krautspace ist auf. Vielleicht wird nun an unseren Projekten wie @Mastodrone, @Jenaertoots@mastodon.social, @RasPowermeter, @repaircafe_jena, @OSM_to@mastodon.social & an mir gewerkelt. Findet es heraus. Kommt vorbei!" } }, {