Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 183 additions & 29 deletions FASTory.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,122 @@
import requests
import socket
import json

#{IP}/_services/{command}
_services = "/rest/services/"
_events = "/rest/events/"
_ip = socket.gethostbyname(socket.gethostname())
TEST = True


class Workstation:
def __init__(self,ip):
self.serviceurl = f'{ip}{_services}'
self.eventsurl = f'{ip}{_events}'
def __init__(self, ws_id, ip_rob, ip_cnv, answerurl, zspot_number):
self.id = ws_id
self.robot_ip = f"http://{ip_rob}"
self.conveyor_ip = f"http://{ip_cnv}"
self.answerurl = f"http://{answerurl}:8080"
self.pen_color = None
self.zspots = [-1]*zspot_number # -1 means the spot is empty
self.busy = False
self.order_ready = False
self.responses = {
1 : "Success",
2 : "Wrong status response",
3 : "Conveyor is busy or spot is occupied",
4 : "Connection problem: "
}

def move12(self):

return 0
if self.busy == False and self.zspots[0] != -1 and self.zspots[1] == -1:
body = '{"destUrl" : ""}'
try:
response = requests.post(url=f"{self.conveyor_ip}/rest/services/TransZone12", data=body, timeout=1)
if response.status_code == 202:
self.busy = True
self.__move_pallet(1,2)
return (True, self.responses[1])
return (False, self.responses[2])
except requests.exceptions.RequestException as e:
return (False, self.responses[4])
else:
return (False, self.responses[3])

def move23(self):

return 0

if self.busy == False and self.zspots[1] != -1 and self.zspots[2] == -1:
body = '{"destUrl" : ""}'
try:
response = requests.post(url=f"{self.conveyor_ip}/rest/services/TransZone23", data=body, timeout=1)
if response.status_code == 202:
self.busy = True
self.__move_pallet(2,3)
return (True, self.responses[1])
return (False, self.responses[2])
except requests.exceptions.RequestException as e:
return (False, self.responses[4])
else:
return (False, self.responses[3])

def move35(self):

return 0
if self.busy == False and self.zspots[2] != -1 and self.zspots[4] == -1:
body = '{"destUrl" : ""}'
try:
response = requests.post(url=f"{self.conveyor_ip}/rest/services/TransZone35", data=body, timeout=1)
if response.status_code == 202:
self.busy = True
self.__move_pallet(3,5)
return (True, self.responses[1])
return (False, self.responses[2])
except requests.exceptions.RequestException as e:
return (False, self.responses[4])
else:
return (False,self.responses[3])

def move14(self):

return 0
if self.busy == False and self.zspots[0] != -1 and self.zspots[3] == -1:
body = '{"destUrl" : ""}'
try:
response = requests.post(url=f"{self.conveyor_ip}/rest/services/TransZone14", data=body, timeout=1)
if response.status_code == 202:
self.busy = True
self.__move_pallet(1,4)
return (True, self.responses[1])
return (False, self.responses[2])
except requests.exceptions.RequestException as e:
return (False, self.responses[4])
else:
return (False,self.responses[3])

def move45(self):

return 0
if self.busy == False and self.zspots[3] != -1 and self.zspots[4] == -1:
body = '{"destUrl" : ""}'
try:
response = requests.post(url=f"{self.conveyor_ip}/rest/services/TransZone45", data=body, timeout=1)
if response.status_code == 202:
self.busy = True
self.__move_pallet(4,5)
return (True, self.responses[1])
return (False, self.responses[2])
except requests.exceptions.RequestException as e:
return (False, self.responses[4])
else:
return (False,self.responses[3])

def get_status(self):

return 0
def load_pallets(self, spot, value):
self.zspots[spot-1] = value


def get_status(self, spot):
try:
response = requests.post(url=f"{self.conveyor_ip}/rest/services/Z{spot}", data='{}' )
res = json.loads(response.text)
return res["PalletID"]
except requests.exceptions.RequestException as e:
return (False, self.responses[4])

def draw(self, receipe):

self.order_ready = True
self.busy = True
return 0

#r="RED", g="GREEN", b="BLUE"
# r="RED", g="GREEN", b="BLUE"
def select_pen(self, c):
if c == "r" or c == "RED":
s = "ChangePenRED"
Expand All @@ -50,9 +127,32 @@ def select_pen(self, c):
else:
print("Undefined color")

command = f'{self.serviceurl}{s}'
requests.post(url=command)
return 0
command = f'{self.robot_ip}/rest/services/{s}'
response = requests.post(url=command)
if response.status_code == 202:
self.pen_color = "RED"

def get_pen_color(self):
try:
response = requests.get(url=f"{self.robot_ip}/rest/services/GetPenColor")
return response.json()
except requests.exceptions.RequestException as e:
return (False, self.responses[4])

def initialize(self):
for spot in range(len(self.zspots)):
self.zspots[spot] = self.get_status(spot+1)

def ready(self):
self.busy = False

def __move_pallet(self,spot1, target):
self.zspots[target-1] = self.zspots[spot1-1]
self.zspots[spot1-1] = -1

def get_spots(self):
return self.zspots


def check_IP():
try:
Expand All @@ -61,11 +161,65 @@ def check_IP():
return ip
except:
print('Something happened with IP. Dunno lol:D')

def viasualize(ws):
visu = f" /--[{ws.zspots[3]:3}]----------\\ \n-[{ws.zspots[4]:3}]----[{ws.zspots[2]:3}]-[{ws.zspots[1]:3}]---[{ws.zspots[0]:3}]"
print(visu)
print()


def main():
ip = check_IP()
print("Currently connected to ", ip)
Workstation(ip).select_pen("r")
return 0
print("Test script")

print("Create WS")
ws = Workstation("10", "192.168.10.1", "192.168.10.2", "127.0.0.1",5)

print("Initialize WS")
# ws.initialize()
print("WS spot pallet ids:")
viasualize(ws)

main()
if -1 in ws.zspots:
print("Cnv empty, load pallets")
ws.load_pallets(1,"1")
ws.load_pallets(2,"2")
print()
viasualize(ws)

print("move 12")
suc, msg = ws.move12()
print(msg)
viasualize(ws)

print("move 23")
suc, msg = ws.move23()
print(msg)
viasualize(ws)

print("move 14")
suc, msg = ws.move14()
print(msg)
viasualize(ws)

print("toggle ws")
ws.ready()

print("move 14")
suc, msg = ws.move14()
print(msg)
viasualize(ws)

print("move 12")
suc, msg = ws.move35()
print(msg)
viasualize(ws)

print("move 45")
suc, msg = ws.move45()
print(msg)
viasualize(ws)


if __name__ == '__main__':
main()

83 changes: 83 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
from flask import Flask, request
from FASTory import Workstation
import json
import time

app = Flask(__name__)

history = []
running = True
orders = {}
order_id = 0
workstations = {}
input_file = "fileWithFASTortyinfo"

@app.post("/makeOrder/")
def make_order():
if request:
jsonmessage = request.form
message = json.loads(jsonmessage)
print(message)
phone_model = message['phone']
phone_color = message['color']
create_order(phone_model,phone_color)

@app.post("/kill/")
def stop():
global running
if running:
running = False
return True

def create_order(model, color):
global orders
global order_id
order = [model, color]
orders[order_id] = order
order_id += 1

def clear_order(order_id):
global orders
del orders[order_id]

def move_workstation(ws):
ws.ready()
spots = ws.get_spots()
if spots[2] != -1 and ws.order_ready == False:
ws.draw(orders[order_id])
elif spots[4] == -1 and spots[2] != -1:
suc, msg = ws.move35()
if not suc:
print(suc, msg)
elif spots[2] == -1 and spots[1] != -1:
suc, msg = ws.move23()
if not suc:
print(suc, msg)
elif spots[1] == -1 and spots[0] != -1:
suc, msg = ws.move12()
if not suc:
print(suc, msg)
elif spots[3] == -1 and spots[0] != -1:
suc, msg = ws.move14()
if not suc:
print(suc, msg)
elif spots[4] == -1 and spots[3] != -1:
suc, msg = ws.move45()
if not suc:
print(suc, msg)
else:
ws.load_pallet(1,order_id)

def cycle_workstations():
global workstations
for ws in workstations:
move_workstation(ws)

def add_workstaion(ws_id, ip_rob, ip_cnv, answerurl, zspot_number):
global workstations
ws = Workstation(ws_id, ip_rob, ip_cnv, answerurl, zspot_number)
workstations.append(ws)


if __name__ == '__main__':
app.run(debug=True, port=8080)