injurytoall Posted September 23, 2020 Share Posted September 23, 2020 I created this for my org and I thought I'd share as I found it useful to be able to see the status of your machines from a single screen Element Requirements: x1 Programming Board x1 Screen (Only got it working with a medium screen) Access to your base core (for linking purposes) 1-8 Industry units Linking Order of Elements: [1]Core [2]Screen [3-10] Industry Unit Setup: Copy the following code {"slots":{"0":{"name":"core","type":{"events":[],"methods":[]}},"1":{"name":"screen","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-2":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"screen.setHTML([[\n <svg width=\"100vw\" height=\"60vw\" viewBox=\"0 0 45 45\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"#fff\">\n <g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\" stroke-width=\"2\">\n <circle cx=\"22\" cy=\"22\" r=\"6\" stroke-opacity=\"0\">\n <animate attributeName=\"r\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"6;22\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-opacity\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"1;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-width\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"2;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"22\" cy=\"22\" r=\"6\" stroke-opacity=\"0\">\n <animate attributeName=\"r\"\n begin=\"3s\" dur=\"3s\"\n values=\"6;22\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-opacity\"\n begin=\"3s\" dur=\"3s\"\n values=\"1;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-width\"\n begin=\"3s\" dur=\"3s\"\n values=\"2;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"22\" cy=\"22\" r=\"8\">\n <animate attributeName=\"r\"\n begin=\"0s\" dur=\"1.5s\"\n values=\"6;1;2;3;4;5;6\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n </g>\n</svg>\n ]])","filter":{"args":[],"signature":"start()","slotKey":"1"},"key":"0"},{"code":"screen.clear()","filter":{"args":[],"signature":"stop()","slotKey":"1"},"key":"1"},{"code":"unit.setTimer(\"loading\", 5)","filter":{"args":[],"signature":"start()","slotKey":"-1"},"key":"2"},{"code":"unit.setTimer(\"refresh\", 1)\nunit.stopTimer(\"loading\")","filter":{"args":[{"value":"loading"}],"signature":"tick(timerId)","slotKey":"-1"},"key":"3"},{"code":"function round(number, precision)\n local fmtStr = string.format('%%0.%sf',precision)\n number = string.format(fmtStr,number)\n return number\nend\n\nslots = {}\nif slot3 then \n table.insert(slots,{slot3.getId(),slot3.getStatus(),slot3.getUptime(),slot3.getEfficiency(),slot3.getCycleCountSinceStartup()})\nend\nif slot4 then\n table.insert(slots,{slot4.getId(),slot4.getStatus(),slot4.getUptime(),slot4.getEfficiency(),slot4.getCycleCountSinceStartup()})\nend\nif slot5 then\n table.insert(slots,{slot5.getId(),slot5.getStatus(),slot5.getUptime(),slot5.getEfficiency(),slot5.getCycleCountSinceStartup()})\nend\nif slot6 then\n table.insert(slots,{slot6.getId(),slot6.getStatus(),slot6.getUptime(),slot6.getEfficiency(),slot6.getCycleCountSinceStartup()})\nend\nif slot7 then\n table.insert(slots,{slot7.getId(),slot7.getStatus(),slot7.getUptime(),slot7.getEfficiency(),slot7.getCycleCountSinceStartup()})\nend\nif slot8 then\n table.insert(slots,{slot8.getId(),slot8.getStatus(),slot8.getUptime(),slot8.getEfficiency(),slot8.getCycleCountSinceStartup()})\nend\nif slot9 then\n table.insert(slots,{slot9.getId(),slot9.getStatus(),slot9.getUptime(),slot9.getEfficiency(),slot9.getCycleCountSinceStartup()})\nend\nif slot10 then\n table.insert(slots,{slot10.getId(),slot10.getStatus(),slot10.getUptime(),slot10.getEfficiency(),slot10.getCycleCountSinceStartup()})\nend\nlocal beginHtml = [[\n <style>table{width:100%;font-size:19px;color:#99CC00;border-collapse:collapse;}td{width:20vw;border-bottom: 1px solid;text-align:center}tr{height: 60px}</style>\n <body style=\"width:100%\">\n <table>\n <tr style=\"font-weight:bold;align-text:center;background-color:indigo;\">\n <td>Machine</td>\n <td>Status</td>\n <td>Uptime(sec)</td>\n <td>Efficiency</td>\n <td>Cycle Count</td>\n </tr>\n]]\nlocal endHtml = [[\n\t\n </table>\n\t<tr>v1.0 // created by: injurytoall</tr>\n </body>\n]]\nlocal dispHtml = '<tr>'\nfor i = 0,8 do\n if slots[i] == nil then\n else\n local id = slots[i][1]\n local col1 = database.getElement(core, id).name\n \t\n --status\n local col2 = slots[i][2]\n --uptime\n local col3 = ''\n local col4 = ''\n local col5 = ''\n\n local status = ''\n --if machine is stopped\n if col2 == \"RUNNING\" then\n status = status .. '<td style=\"background-color:DarkGreen\">'\n end\n if col2 == \"JAMMED_MISSING_INGREDIENT\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n if col2 == \"JAMMED_OUTPUT_FULL\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n if col2 == \"JAMMED_NO_OUTPUT_CONTAINER\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n\n col3 = slots[i][3]\n col3 = round(col3, 0)\n col4 = round((slots[i][4] * 100),1)\n col5 = slots[i][5]\n\n if col2 == \"STOPPED\" then\n status = status .. '<td style=\"background-color:orange\">'\n col3 = '-'\n col4 = '-'\n col5 = '-'\n end\n \n if col2 == \"PENDING\" then\n status = status .. '<td style=\"background-color:orange\">'\n col3 = '-'\n col4 = '-'\n col5 = '-'\n end\n --name td\n local name = '<td>' .. col1 .. '</td>'\n --status td\n local status = status .. col2 .. '</td>' \n --uptime td\n local uptime = '<td>' .. col3 .. '</td>'\n --efficiency td\n local eff = '<td>' .. col4 .. '</td>'\n --count td\n local count = '<td>' .. col5 .. '</td>'\n\n\n dispHtml = dispHtml .. name .. status .. uptime .. eff .. count .. '</tr>'\n end \nend\n\nlocal finalHtml = beginHtml .. dispHtml .. endHtml\n\nscreen.setHTML(finalHtml)","filter":{"args":[{"value":"refresh"}],"signature":"tick(timerId)","slotKey":"-1"},"key":"4"},{"code":"screen.activate()","filter":{"args":[],"signature":"start()","slotKey":"-2"},"key":"5"},{"code":"screen.deactivate()","filter":{"args":[],"signature":"stop()","slotKey":"-2"},"key":"6"}],"methods":[],"events":[]} In-game, right click the programming board > Advanced > Paste lua config from clipboard Link from the programming board to your base core Link from the board to your screen Link from your board to an industry unit, up to 8 of them Activate the programming board Updates: 26 Sep - Added some logic to account for Pending status of the machines Link to comment Share on other sites More sharing options...
CreditCain Posted September 24, 2020 Share Posted September 24, 2020 This looks awesome but states "Script Error!" when I try to run it. Have repeated the steps 3 times now and still same issue. Any obvious thing i may have overlooked when following these instructions? I have zero LUA knowledge so have no expectations of a resolution. When I activate the board the screen comes on (decreasing circles display) but bottom right states script error. When you say "Access to your base core (for linking purposes)" do i need to do anything other than link using 6 key? It is my personal core so assume i dont have to grant anything. Suggestions? Link to comment Share on other sites More sharing options...
CreditCain Posted September 24, 2020 Share Posted September 24, 2020 OK so the line that is erroring is in the unit tick(refresh) script line 3 number = string.format(fmtStr,number) Error says "bad argument #2 to 'format'(number expected, got nil) Also the LUA console states the following: Warning: method getElementName is deprecated, use getElementNameByID instead Warning: method getElementHitPoints is deprecated, use getElementHitPointsByID instead Warning: method getElementMaxHitPoints is deprecated, use getElementMaxHitPointsByID instead Warning: method getElementMass is deprecated, use getElementMassByID instead Warning: method getElementType is deprecated, use getElementTypeByID instead Link to comment Share on other sites More sharing options...
Orth_Tanic Posted September 25, 2020 Share Posted September 25, 2020 I am having the same issue. Checked it a few times and still getting errors. Link to comment Share on other sites More sharing options...
injurytoall Posted September 26, 2020 Author Share Posted September 26, 2020 This may work better - I have copied the config from a proven working programming board - CTRL + C all this code, then in game right click the programming board > advanced > Paste lua config from clipboard. Also to note, if you didn't link the items in the correct order, these boards can be finnicky and you may have to create a new board and try it with a fresh one: {"slots":{"0":{"name":"core","type":{"events":[],"methods":[]}},"1":{"name":"screen","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-2":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"screen.setHTML([[\n <svg width=\"100vw\" height=\"60vw\" viewBox=\"0 0 45 45\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"#fff\">\n <g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\" stroke-width=\"2\">\n <circle cx=\"22\" cy=\"22\" r=\"6\" stroke-opacity=\"0\">\n <animate attributeName=\"r\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"6;22\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-opacity\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"1;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-width\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"2;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"22\" cy=\"22\" r=\"6\" stroke-opacity=\"0\">\n <animate attributeName=\"r\"\n begin=\"3s\" dur=\"3s\"\n values=\"6;22\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-opacity\"\n begin=\"3s\" dur=\"3s\"\n values=\"1;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-width\"\n begin=\"3s\" dur=\"3s\"\n values=\"2;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"22\" cy=\"22\" r=\"8\">\n <animate attributeName=\"r\"\n begin=\"0s\" dur=\"1.5s\"\n values=\"6;1;2;3;4;5;6\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n </g>\n</svg>\n ]])","filter":{"args":[],"signature":"start()","slotKey":"1"},"key":"0"},{"code":"screen.clear","filter":{"args":[],"signature":"stop()","slotKey":"1"},"key":"1"},{"code":"unit.setTimer(\"loading\", 5)","filter":{"args":[],"signature":"start()","slotKey":"-1"},"key":"2"},{"code":"unit.setTimer(\"refresh\", 1)\nunit.stopTimer(\"loading\")","filter":{"args":[{"value":"loading"}],"signature":"tick(timerId)","slotKey":"-1"},"key":"3"},{"code":"function round(number, precision)\n local fmtStr = string.format('%%0.%sf',precision)\n number = string.format(fmtStr,number)\n return number\nend\n\nslots = {}\nif slot3 then \n table.insert(slots,{slot3.getId(),slot3.getStatus(),slot3.getUptime(),slot3.getEfficiency(),slot3.getCycleCountSinceStartup()})\nend\nif slot4 then\n table.insert(slots,{slot4.getId(),slot4.getStatus(),slot4.getUptime(),slot4.getEfficiency(),slot4.getCycleCountSinceStartup()})\nend\nif slot5 then\n table.insert(slots,{slot5.getId(),slot5.getStatus(),slot5.getUptime(),slot5.getEfficiency(),slot5.getCycleCountSinceStartup()})\nend\nif slot6 then\n table.insert(slots,{slot6.getId(),slot6.getStatus(),slot6.getUptime(),slot6.getEfficiency(),slot6.getCycleCountSinceStartup()})\nend\nif slot7 then\n table.insert(slots,{slot7.getId(),slot7.getStatus(),slot7.getUptime(),slot7.getEfficiency(),slot7.getCycleCountSinceStartup()})\nend\nif slot8 then\n table.insert(slots,{slot8.getId(),slot8.getStatus(),slot8.getUptime(),slot8.getEfficiency(),slot8.getCycleCountSinceStartup()})\nend\nif slot9 then\n table.insert(slots,{slot9.getId(),slot9.getStatus(),slot9.getUptime(),slot9.getEfficiency(),slot9.getCycleCountSinceStartup()})\nend\nif slot10 then\n table.insert(slots,{slot10.getId(),slot10.getStatus(),slot10.getUptime(),slot10.getEfficiency(),slot10.getCycleCountSinceStartup()})\nend\nlocal beginHtml = [[\n <style>table{width:100%;font-size:19px;color:#99CC00;border-collapse:collapse;}td{width:20vw;border-bottom: 1px solid;text-align:center}tr{height: 60px}</style>\n <body style=\"width:100%\">\n <table>\n <tr style=\"font-weight:bold;align-text:center;background-color:indigo;\">\n <td>Machine</td>\n <td>Status</td>\n <td>Uptime(sec)</td>\n <td>Efficiency</td>\n <td>Cycle Count</td>\n </tr>\n]]\nlocal endHtml = [[\n\t\n </table>\n\t<tr>v1.0 // created by: injurytoall</tr>\n </body>\n]]\nlocal dispHtml = '<tr>'\nfor i = 0,8 do\n if slots[i] == nil then\n else\n local id = slots[i][1]\n local col1 = database.getElement(core, id).name\n \t\n --status\n local col2 = slots[i][2]\n --uptime\n local col3 = ''\n local col4 = ''\n local col5 = ''\n\n local status = ''\n --if machine is stopped\n if col2 == \"RUNNING\" then\n status = status .. '<td style=\"background-color:DarkGreen\">'\n end\n if col2 == \"JAMMED_MISSING_INGREDIENT\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n if col2 == \"JAMMED_OUTPUT_FULL\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n if col2 == \"JAMMED_NO_OUTPUT_CONTAINER\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n\n col3 = slots[i][3]\n col3 = round(col3, 0)\n col4 = round((slots[i][4] * 100),1)\n col5 = slots[i][5]\n\n if col2 == \"STOPPED\" then\n status = status .. '<td style=\"background-color:orange\">'\n col3 = '-'\n col4 = '-'\n col5 = '-'\n end\n --name td\n local name = '<td>' .. col1 .. '</td>'\n --status td\n local status = status .. col2 .. '</td>' \n --uptime td\n local uptime = '<td>' .. col3 .. '</td>'\n --efficiency td\n local eff = '<td>' .. col4 .. '</td>'\n --count td\n local count = '<td>' .. col5 .. '</td>'\n\n\n dispHtml = dispHtml .. name .. status .. uptime .. eff .. count .. '</tr>'\n end \nend\n\nlocal finalHtml = beginHtml .. dispHtml .. endHtml\n\nscreen.setHTML(finalHtml)","filter":{"args":[{"value":"refresh"}],"signature":"tick(timerId)","slotKey":"-1"},"key":"4"},{"code":"screen.activate()","filter":{"args":[],"signature":"start()","slotKey":"-2"},"key":"5"},{"code":"screen.deactivate()","filter":{"args":[],"signature":"stop()","slotKey":"-2"},"key":"6"}],"methods":[],"events":[]} Link to comment Share on other sites More sharing options...
CreditCain Posted September 26, 2020 Share Posted September 26, 2020 1 hour ago, injurytoall said: This may work better - I have copied the config from a proven working programming board - CTRL + C all this code, then in game right click the programming board > advanced > Paste lua config from clipboard. Also to note, if you didn't link the items in the correct order, these boards can be finnicky and you may have to create a new board and try it with a fresh one: {"slots":{"0":{"name":"core","type":{"events":[],"methods":[]}},"1":{"name":"screen","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-2":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"screen.setHTML([[\n <svg width=\"100vw\" height=\"60vw\" viewBox=\"0 0 45 45\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"#fff\">\n <g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\" stroke-width=\"2\">\n <circle cx=\"22\" cy=\"22\" r=\"6\" stroke-opacity=\"0\">\n <animate attributeName=\"r\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"6;22\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-opacity\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"1;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-width\"\n begin=\"1.5s\" dur=\"3s\"\n values=\"2;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"22\" cy=\"22\" r=\"6\" stroke-opacity=\"0\">\n <animate attributeName=\"r\"\n begin=\"3s\" dur=\"3s\"\n values=\"6;22\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-opacity\"\n begin=\"3s\" dur=\"3s\"\n values=\"1;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n <animate attributeName=\"stroke-width\"\n begin=\"3s\" dur=\"3s\"\n values=\"2;0\" calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n <circle cx=\"22\" cy=\"22\" r=\"8\">\n <animate attributeName=\"r\"\n begin=\"0s\" dur=\"1.5s\"\n values=\"6;1;2;3;4;5;6\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\" />\n </circle>\n </g>\n</svg>\n ]])","filter":{"args":[],"signature":"start()","slotKey":"1"},"key":"0"},{"code":"screen.clear","filter":{"args":[],"signature":"stop()","slotKey":"1"},"key":"1"},{"code":"unit.setTimer(\"loading\", 5)","filter":{"args":[],"signature":"start()","slotKey":"-1"},"key":"2"},{"code":"unit.setTimer(\"refresh\", 1)\nunit.stopTimer(\"loading\")","filter":{"args":[{"value":"loading"}],"signature":"tick(timerId)","slotKey":"-1"},"key":"3"},{"code":"function round(number, precision)\n local fmtStr = string.format('%%0.%sf',precision)\n number = string.format(fmtStr,number)\n return number\nend\n\nslots = {}\nif slot3 then \n table.insert(slots,{slot3.getId(),slot3.getStatus(),slot3.getUptime(),slot3.getEfficiency(),slot3.getCycleCountSinceStartup()})\nend\nif slot4 then\n table.insert(slots,{slot4.getId(),slot4.getStatus(),slot4.getUptime(),slot4.getEfficiency(),slot4.getCycleCountSinceStartup()})\nend\nif slot5 then\n table.insert(slots,{slot5.getId(),slot5.getStatus(),slot5.getUptime(),slot5.getEfficiency(),slot5.getCycleCountSinceStartup()})\nend\nif slot6 then\n table.insert(slots,{slot6.getId(),slot6.getStatus(),slot6.getUptime(),slot6.getEfficiency(),slot6.getCycleCountSinceStartup()})\nend\nif slot7 then\n table.insert(slots,{slot7.getId(),slot7.getStatus(),slot7.getUptime(),slot7.getEfficiency(),slot7.getCycleCountSinceStartup()})\nend\nif slot8 then\n table.insert(slots,{slot8.getId(),slot8.getStatus(),slot8.getUptime(),slot8.getEfficiency(),slot8.getCycleCountSinceStartup()})\nend\nif slot9 then\n table.insert(slots,{slot9.getId(),slot9.getStatus(),slot9.getUptime(),slot9.getEfficiency(),slot9.getCycleCountSinceStartup()})\nend\nif slot10 then\n table.insert(slots,{slot10.getId(),slot10.getStatus(),slot10.getUptime(),slot10.getEfficiency(),slot10.getCycleCountSinceStartup()})\nend\nlocal beginHtml = [[\n <style>table{width:100%;font-size:19px;color:#99CC00;border-collapse:collapse;}td{width:20vw;border-bottom: 1px solid;text-align:center}tr{height: 60px}</style>\n <body style=\"width:100%\">\n <table>\n <tr style=\"font-weight:bold;align-text:center;background-color:indigo;\">\n <td>Machine</td>\n <td>Status</td>\n <td>Uptime(sec)</td>\n <td>Efficiency</td>\n <td>Cycle Count</td>\n </tr>\n]]\nlocal endHtml = [[\n\t\n </table>\n\t<tr>v1.0 // created by: injurytoall</tr>\n </body>\n]]\nlocal dispHtml = '<tr>'\nfor i = 0,8 do\n if slots[i] == nil then\n else\n local id = slots[i][1]\n local col1 = database.getElement(core, id).name\n \t\n --status\n local col2 = slots[i][2]\n --uptime\n local col3 = ''\n local col4 = ''\n local col5 = ''\n\n local status = ''\n --if machine is stopped\n if col2 == \"RUNNING\" then\n status = status .. '<td style=\"background-color:DarkGreen\">'\n end\n if col2 == \"JAMMED_MISSING_INGREDIENT\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n if col2 == \"JAMMED_OUTPUT_FULL\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n if col2 == \"JAMMED_NO_OUTPUT_CONTAINER\" then\n status = status .. '<td style=\"background-color:tomato\">'\n end\n\n col3 = slots[i][3]\n col3 = round(col3, 0)\n col4 = round((slots[i][4] * 100),1)\n col5 = slots[i][5]\n\n if col2 == \"STOPPED\" then\n status = status .. '<td style=\"background-color:orange\">'\n col3 = '-'\n col4 = '-'\n col5 = '-'\n end\n --name td\n local name = '<td>' .. col1 .. '</td>'\n --status td\n local status = status .. col2 .. '</td>' \n --uptime td\n local uptime = '<td>' .. col3 .. '</td>'\n --efficiency td\n local eff = '<td>' .. col4 .. '</td>'\n --count td\n local count = '<td>' .. col5 .. '</td>'\n\n\n dispHtml = dispHtml .. name .. status .. uptime .. eff .. count .. '</tr>'\n end \nend\n\nlocal finalHtml = beginHtml .. dispHtml .. endHtml\n\nscreen.setHTML(finalHtml)","filter":{"args":[{"value":"refresh"}],"signature":"tick(timerId)","slotKey":"-1"},"key":"4"},{"code":"screen.activate()","filter":{"args":[],"signature":"start()","slotKey":"-2"},"key":"5"},{"code":"screen.deactivate()","filter":{"args":[],"signature":"stop()","slotKey":"-2"},"key":"6"}],"methods":[],"events":[]} That works a treat THANKS! Is there anyway to reduce the impact of the screen refreshing? Every second it flickers (I assume when it is refreshing?). On my (in game) screen its quite significant (and annoying). Or is that something to put up with. Great work btw and thanks for sharing. Link to comment Share on other sites More sharing options...
CreditCain Posted September 26, 2020 Share Posted September 26, 2020 Also was getting a script error that didnt seem to stop it working. Needed to add () to the end of screen.clear so it reads screen.clear() in the screen stop() filter Link to comment Share on other sites More sharing options...
CreditCain Posted September 26, 2020 Share Posted September 26, 2020 For anyone experiencing the refresh flash I have amended my unit loading tick to the following. Means the screens are only refreshed every 10 seconds but thats not an issue for me and it stops the annoyance of the screen flickering every second. unit.setTimer("refresh", 10) unit.stopTimer("loading") If there is a workaround to decrease the flicker then great, let me know, otherwise THANK YOU SO MUCH AGAIN! Link to comment Share on other sites More sharing options...
injurytoall Posted September 26, 2020 Author Share Posted September 26, 2020 You got it right, the number in unit.setTimer("refresh", 1) is the number of seconds the refresh timer runs, so you can adjust accordingly. Link to comment Share on other sites More sharing options...
injurytoall Posted September 26, 2020 Author Share Posted September 26, 2020 Updated the original post with the better instructions and fixed the screen.clear() problem. Thanks CreditCain Link to comment Share on other sites More sharing options...
CreditCain Posted September 26, 2020 Share Posted September 26, 2020 Hey injurytoall, almost everything is working now. However, I have found an issue where the Status column is omitted on the screen if the situation of the machine is in a status of Pending due to the "Maintain" volume being reached. Is there a "If" statement that can be added for this scenario? Link to comment Share on other sites More sharing options...
injurytoall Posted September 26, 2020 Author Share Posted September 26, 2020 Ah yes. I had fixed that locally on an installation at an org mate's machine and didn't update my code -- Fix has been added to the original post. You can manually add it if you'd like too. Just after the if for stopped if col2 == "PENDING" then status = status .. '<td style="background-color:orange">' col3 = '-' col4 = '-' col5 = '-' end Link to comment Share on other sites More sharing options...
CreditCain Posted September 26, 2020 Share Posted September 26, 2020 Works like a dream. Now all I need is to stop having nightmares about the web of connections when 6 key is pressed Link to comment Share on other sites More sharing options...
CreditCain Posted September 26, 2020 Share Posted September 26, 2020 OK, no biggie if not but do you have a script that will monitor the volume of a certain material (i.e. Coal) in a certain container? The idea being I can display the quantity I have on a screen so I know when to top up. If I have above a certain value then green background, if I am running below a certain value then amber, and red if out. Cheeky to ask here rather than a new thread I know but worth a shot. Link to comment Share on other sites More sharing options...
injurytoall Posted September 26, 2020 Author Share Posted September 26, 2020 You can't query a container for it's contents sadly. You could however say container x contains a specific resource (eg. Coal) and then do all the calculations with the assumption that container only has coal in it. I don't have any scripts for that. I was doing some work on a fuel display next for others to see besides the pilot, but a nice one was posted to this board. I wanted to display the current item being processed and the time left for completion, but you cannot access that information from the API. I may revisit this script in the future as I had some ideas about including some touch features for starting/stopping machines which can be done via the API. Link to comment Share on other sites More sharing options...
Virtualburn Posted September 27, 2020 Share Posted September 27, 2020 Thank you, This worked like a charm - thank you. Is the intermittent screen flash normal? And is there a way to stop the screen contents enlarging from a distance. Thirdly, sorry Do you have a script that you can show content totals of 8 boxes for one screen? With an alert (colour) if they fall beneath a specified amount? Thanks again, first script I got working. Link to comment Share on other sites More sharing options...
CreditCain Posted September 27, 2020 Share Posted September 27, 2020 52 minutes ago, virtualburn said: Thank you, This worked like a charm - thank you. Is the intermittent screen flash normal? And is there a way to stop the screen contents enlarging from a distance. Thirdly, sorry Do you have a script that you can show content totals of 8 boxes for one screen? With an alert (colour) if they fall beneath a specified amount? Thanks again, first script I got working. Pretty sure all of these questions have been asked and answered above... Link to comment Share on other sites More sharing options...
Virtualburn Posted September 27, 2020 Share Posted September 27, 2020 6 minutes ago, CreditCain said: Pretty sure all of these questions have been asked and answered above... They certainly have, must be selective reading. Thanks. Link to comment Share on other sites More sharing options...
Orth_Tanic Posted September 27, 2020 Share Posted September 27, 2020 First off thanks for this script. I have an odd issue with it. I have an odd issue after a period of time the display is almost like its zoomed in? Example I have 6 factorys and can see them all after some time I can only see about 4 of them and all the fonts seam larger? Any suggestions I should try? Link to comment Share on other sites More sharing options...
CreditCain Posted September 27, 2020 Share Posted September 27, 2020 What Scrren size are you displaying it on? I have got 10 Screen M and it seems to work ok. Might it be an issue with a different screen size? Link to comment Share on other sites More sharing options...
injurytoall Posted September 27, 2020 Author Share Posted September 27, 2020 If the screen ever gets wonky, just turn off the programming board and turn it back on. It is not saving any information, it simply updates the view every second. You can get rid of the loading screen too if you want by editing the start() filter in the unit. Change unit.setTimer("loading", 5) -> unit.setTimer("loading", 1) It is only there for fluff really. Link to comment Share on other sites More sharing options...
Orth_Tanic Posted September 27, 2020 Share Posted September 27, 2020 creditcoin I am using Medium screen and it does display on and off correctly sometimes. Check out the screen shot to see what I mean Aiwhisper 1 Link to comment Share on other sites More sharing options...
Mirantha Posted October 20, 2020 Share Posted October 20, 2020 I actually have this same "zooming" issue with almost all of the LUA scripts I use. I've switched to using specific point font sizes and custom SVG and so far (fingers crossed) my other scripts don't have this problem. Sadly, they aren't very complex either, so if anyone comes up with a solution to this bug please fire it over. Restarting the board doesn't do anything thus far, and sometimes even relogging fails to clear it. Thoughts? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now