Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- ___ _ _ ___ _ _
- -- | _ \ __ _ (_) | | / __| | |_ __ _ | |_ _ _ ___
- -- | / / _` | | | | | \__ \ | _| / _` | | _| | +| | (_-<
- -- |_|_\ \__,_| _|_|_ _|_|_ |___/ _\__| \__,_| _\__| \_,_| /__/_
- -- _|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
- -- "`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
- --
- -- RailStatus
- --
- -- Un programme permettant de connaître en temps réel sur une page web
- -- le statut des aiguillages d'un réseau ferroviaire en
- -- utilisant RailCraft, ComputerCraft et RedPower
- --
- -- Utilisation :
- -- 1. Dans un ordinateur, importer ce programme depuis Pastebin :
- -- pastebin get NHPwHjmi railstatus
- -- 2. Lancer le programme :
- -- railstatus [Identifiant de l'ordinateur regroupant les aiguillages] [côté sur lequel arrive le bundled cable] [URL de base d'appel vers l'API qui enregistre les données]
- -- Exemple : railstatus 1 left http://exemple.fr/api
- term.clear()
- term.setCursorPos(1,1)
- print("........... RailStatus is starting ............")
- -- Arguments passés au programme
- args = {...}
- if table.getn(args) < 3 then
- print(" One or more parameters are missing")
- return
- end
- -- --------------------------------------------------------
- -- Constantes
- -- Identifiant de l'ordinateur regroupant les aiguillages
- COMPUTER_ID = args[1]
- print(" Computer ID : "..COMPUTER_ID)
- -- De quel côté de l'ordinateur arrive le bundled cable ?
- CABLE_SIDE = args[2]
- print(" Cable side : "..CABLE_SIDE)
- -- URL de base d'appel vers l'API qui enregistre les données
- API_ENDPOINT = args[3]
- print(" Endpoint : "..API_ENDPOINT)
- print("")
- print("To stop RailStatus, hold CTRL+T for some seconds.")
- -- Tableau de correspondance nom de couleur > identifiant décimal
- COLORS_ARRAY = {}
- COLORS_ARRAY["white"] = colors.white
- COLORS_ARRAY["orange"] = colors.orange
- COLORS_ARRAY["magenta"] = colors.magenta
- COLORS_ARRAY["lightBlue"] = colors.lightBlue
- COLORS_ARRAY["yellow"] = colors.yellow
- COLORS_ARRAY["lime"] = colors.lime
- COLORS_ARRAY["pink"] = colors.pink
- COLORS_ARRAY["gray"] = colors.gray
- COLORS_ARRAY["lightGray"] = colors.lightGray
- COLORS_ARRAY["cyan"] = colors.cyan
- COLORS_ARRAY["purple"] = colors.purple
- COLORS_ARRAY["blue"] = colors.blue
- COLORS_ARRAY["brown"] = colors.brown
- COLORS_ARRAY["green"] = colors.green
- COLORS_ARRAY["red"] = colors.red
- COLORS_ARRAY["black"] = colors.black
- -- --------------------------------------------------------
- -- Fonctions
- -- Teste un bundled cable avec toutes les couleurs possible, et retourne un tableau indexé contenant
- -- en index la couleur et en valeur un booléen (sous forme d'entier) indiquant si le signal redstone est actif ou non
- function getBundledInputAsTable(side)
- local ret = {}
- for key,value in pairs(COLORS_ARRAY) do
- ret[key] = redstone.testBundledInput(side, value) and 1 or 0 -- Convertit le booléen retourné en entier
- end
- return ret
- end
- -- Convertit un table en chaîne de caractères paramètres POST
- function tableToURIString(t)
- local ret = ""
- local i = 1
- for key,value in pairs(t) do
- ret = ret..textutils.urlEncode(key).."="..textutils.urlEncode(value)
- if table.getn(t) ~= i then
- ret = ret.."&"
- end
- i = i + 1
- end
- return ret
- end
- -- --------------------------------------------------------
- -- Démarrage du programme
- while true do
- event = os.pullEvent("redstone") -- Dès qu'un aiguillage est changé
- local bundled_cable = getBundledInputAsTable(CABLE_SIDE) -- On chope le statut de chaque câbles de couleur
- http.request(API_ENDPOINT, "ci="..COMPUTER_ID.."&"..tableToURIString(bundled_cable)) -- Et on les envoient via HTTP POST pour enregistrer
- end
Advertisement
Add Comment
Please, Sign In to add comment