from cgitb import text from unittest import result from otree.api import * import requests from sqlalchemy import Integer import sched, time import datetime class C(BaseConstants): NAME_IN_URL = 'heartRate' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): name = models.StringField( label='What is your name?' ) age = models.IntegerField( label='How old are you?' ) result = models.IntegerField() actHeartRate = models.IntegerField(initial=0) class HeartRate(ExtraModel): player = models.Link(Player) heartRate = models.IntegerField() time = models.LongStringField() # FUNCTIONS def getHeartRate(playerID, channelID, apiKey): url = "https://api.thingspeak.com/channels/" + str(channelID) + "/fields/" + str(playerID) + "/last.json?api_key=" + str(apiKey) res = requests.get(url) js = res.json() if not js==-1: heartRate = js["field1"] timeStamp = js["created_at"] return dict(heartRate=heartRate, timeStamp=timeStamp) else: return dict(heartRate=-1, timeStamp=-1) def getTimeStamp(): url = "https://api.thingspeak.com/channels/1815870/fields/1/last.json?api_key=TWVU33EJPKIZH9DV" res = requests.get(url) js = res.json() thingTime = js["created_at"] matlabTime = float(js["field1"]) oTreeTime = time.time() return dict(thingTime=thingTime, matlabTime=matlabTime, oTreeTime=oTreeTime) class Demographics(Page): form_model = 'player' form_fields = ['name', 'age'] """ @staticmethod def before_next_page(player: Player, timeout_happened): body = { 'api_key':'ZIDAHO1BD7WBVQ55' } res = requests.delete("https://api.thingspeak.com/channels/1754706/feeds.json", data=body) """ class Guess(Page): form_model = 'player' form_fields = ['result'] class Result(Page): form_model = 'player' form_fields = [] @staticmethod def js_vars(player: Player): return dict( result = player.result ) @staticmethod def live_method(player: Player, data): resp = getTimeStamp() thingTime = resp["thingTime"] matlabTime = resp["matlabTime"] oTreeTime = resp["oTreeTime"] HeartRate.create(player=player, heartRate=5, time="Zeit") result = { "thingTime" : thingTime, "matlabTime" : matlabTime, "oTreeTime" : oTreeTime } return {0: result} """ resp = getHeartRate(player.id_in_group, 1754706, "5RCZMFN4PA7N5XZM") if resp != 0: heartRate = resp["heartRate"] thingSpeakTime = resp["timeStamp"] oTreeTime = time.asctime() HeartRate.create(player=player, heartRate=heartRate, time=thingSpeakTime) player.actHeartRate = int(heartRate) result = { "heartRate" : heartRate, "thingSpeakTime": thingSpeakTime, "oTreeTime" : oTreeTime } return {0:result} else: return 0; """ page_sequence = [Demographics, Guess, Result] def custom_export(players): yield ['player_id', 'heartRate', 'time'] for p in players: id = p.id_in_group for h in HeartRate.filter(player=p): yield [id, p.name, p.age, h.heartRate, h.time]