Facility Control

 View Only
Expand all | Collapse all

Dashboard and Ultrix

  • 1.  Dashboard and Ultrix

    Posted 05-11-2020 17:13

    Hey! 

    So I've been trying to create a Custom Panel where you can optimize the process of choosing a crosspoint when you're using the Ultrix layout on DashBoard. I've been wanting to create a button that is very simple, I basically want to put everything in just one button, so instead of choosing the source, the destination and then press take, I want to let the crosspoint pre-selected on a Custom Panel that I built and when I hit the crosspoint button that I want, it starts working. I'm not sure if can just drag the TAKE button from the Panel that the Ultrix layout gives me or if I need an exclusive coding for that. 

    Thank you :)



  • 2.  RE: Dashboard and Ultrix

    Posted 05-11-2020 20:12

    Hi Bruna

    If you want a button that does the equivalent of selecting a source, destination, and level and pressing "Take" I would recommend skipping the drag/drop UI and instead:

    1. Create a Custom Panel
    2. Put your button where you would like it
    3. In the button editor, select "Add task"
    4. On the left side of the Visual Logic editor, select the green "+" and choose "Add device from Basic Tree"
    5. Select your Ultrix
    6. Expand/show the "API" node that is created
    7. Select "Set Crosspoint"
    8. Fill-in your values

     

    Once you have the set crosspoint button in place, you'll want to hit "F5" to refresh your panel/activate the Ultrix context inside of it.  When you go to add additional buttons, you can skip steps 4 and 5.

    Let me know if this is closer to what you are looking for.

    Cheers

    James


    #DashBoard


  • 3.  RE: Dashboard and Ultrix

    Posted 05-11-2020 20:18

    Hello Bruna,

    Create new custom panel - enter panel builder edit mode, create an button from edit palette, click "add" , then on left corner clin on green plus and choose "add device from basic tree" :

    Then, choose ultrix and add it:

    You should now see ultrix parameters tree on the left bar. Expand it, go to API folder and drag the "take" node:

    Set your crosspoint and click ok. Now your button is ready to work :)

    Alex.

     


    #DashBoard


  • 4.  RE: Dashboard and Ultrix

    Posted 05-13-2020 13:47

    Hello, thank you guys it worked perfectly!

    I have another question, what if I want to let the source, destination and level pre-selected but I still want to have the TAKE button, what task should I add to this TAKE button?

     


    #DashBoard


  • 5.  RE: Dashboard and Ultrix

    Posted 05-15-2020 07:44

    If you want stay in visual logic mode, you need to create 3 parameters, and represent it visually as text entry or number widget. And connect each of them to green dots on "take crosspoint" box. Then just choose your values and hit the button to take it.


    #DashBoard


  • 6.  RE: Dashboard and Ultrix

    Posted 05-15-2020 12:58

    Could you help me create those parameters? I'm not sure how to do that, or maybe if you could just give me some examples.

    Thank you for your time :)


    #DashBoard


  • 7.  RE: Dashboard and Ultrix

    Posted 05-15-2020 16:54

    Hi
    Can you publish here the code of your custompanel? I will add it to you and publish it back
    Alex.


    #DashBoard


  • 8.  RE: Dashboard and Ultrix

    Posted 05-18-2020 13:25

    Hello, here's the code, thank you 

     

    <abs contexttype="opengear" id="_top" keepalive="false">
    <meta>
    <params>
    <param access="1" maxlength="0" name="ALLIANCE" oid="ALLIANCE" type="STRING" value="A" widget="label"/>
    </params>
    </meta>
    <table height="138" left="242" style="bg-align:center;bg#FBFBFB;bdr#modaloverlay;bdr:round;grid#3C2FCE;" top="281" width="797">
    <meta>
    <context contexttype="opengear" id="Ultrix.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 0&lt;br&gt;Ultrix" objecttype="Ultrix"/>
    </meta>
    <meta>
    <context contexttype="opengear" id="Ultriscape.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 1&lt;br&gt;Ultriscape" objecttype="Ultriscape"/>
    </meta>
    <tr>
    <button buttontype="push" colspan="1" fill="both" id="01" name="SCR1_DST2" rowspan="1" style="bg-align:center;bg#teal;bdr:round;fg#modaloverlay;" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">/*! block id=1000 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (2 - 1) + '.inputstatus',levels[i] - 1,1 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1000" type="Ultrix.1_ultix_takecrosspoint" x="83" y="100" w="243" SRC="1" DEST="2" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;717427874602132e51909a444cc5208e&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" id="02" name="SCR2_DST1" rowspan="1" style="bdr:round;bg#teal;bg-align:center;fg#modaloverlay;" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">/*! block id=1001 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (1 - 1) + '.inputstatus',levels[i] - 1,2 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1001" type="Ultrix.1_ultix_takecrosspoint" x="40" y="66" w="243" SRC="2" DEST="1" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;8fbfecf56174e7a440162a0ba0201d9b&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" id="03" name="SCR3_DST1" rowspan="1" style="bdr:round;bg#teal;bg-align:center;fg#modaloverlay;" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">/*! block id=1011 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (1 - 1) + '.inputstatus',levels[i] - 1,3 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1011" type="Ultrix.1_ultix_takecrosspoint" x="40" y="60" w="243" SRC="3" DEST="1" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;1f6def1ebe91522913adca289c8981d0&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" id="04" name="SCR3_DST3" rowspan="1" style="bg#teal;bdr:round;bg-align:center;fg#modaloverlay;" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">/*! block id=1012 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (3 - 1) + '.inputstatus',levels[i] - 1,3 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1012" type="Ultrix.1_ultix_takecrosspoint" x="57" y="54" w="243" SRC="3" DEST="3" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;928ff71d4117c9b33894c960181ae1e6&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" id="05" name="SRC2_DST4" rowspan="1" style="bg-align:center;bg#teal;bdr:round;fg#modaloverlay;" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">/*! block id=1013 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (4 - 1) + '.inputstatus',levels[i] - 1,2 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1013" type="Ultrix.1_ultix_takecrosspoint" x="115" y="81" w="243" SRC="2" DEST="4" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;021d161af9f30c1ca0edd440c8685921&lt;/checksum&gt;!!*/</task>
    </button>
    </tr>
    </table>
    <table height="149" left="246" style="bg#panelfg;" top="448" width="793">
    <tr>
    <button buttontype="push" colspan="1" fill="both" height="149" id="06" name="SCR3_DST8" rowspan="1" style="size:Big;bg#blue;font:bold;" weightx="1.0" weighty="1.0" width="158">
    <task tasktype="ogscript">/*! block id=1014 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (8 - 1) + '.inputstatus',levels[i] - 1,3 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1014" type="Ultrix.1_ultix_takecrosspoint" x="215" y="83" w="243" SRC="3" DEST="8" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;589387cb435c62181f0727b7445a6b20&lt;/checksum&gt;!!*/</task>
    <task tasktype="ogscript"/>
    </button>
    <button buttontype="push" colspan="1" fill="both" height="149" id="07" name="SRC2_DST10" rowspan="1" style="font:bold;size:Big;" weightx="1.0" weighty="1.0" width="158">
    <task tasktype="ogscript">/*! block id=1015 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (10 - 1) + '.inputstatus',levels[i] - 1,2 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1015" type="Ultrix.1_ultix_takecrosspoint" x="352" y="169" w="243" SRC="2" DEST="10" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;4e6f6e603e84f2c3ef8207880688fa9d&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" height="149" id="08" name="SRC1_DST8" rowspan="1" style="font:bold;size:Big;bg#red;" weightx="1.0" weighty="1.0" width="158">
    <task tasktype="ogscript">/*! block id=1016 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (8 - 1) + '.inputstatus',levels[i] - 1,1 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1016" type="Ultrix.1_ultix_takecrosspoint" x="259" y="168" w="243" SRC="1" DEST="8" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;f5e1645c1cc0839f5b8776563f029b8c&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" height="149" id="09" name="SRC1_DST10" rowspan="1" style="font:bold;size:Big;" weightx="1.0" weighty="1.0" width="158">
    <task tasktype="ogscript">/*! block id=1017 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (10 - 1) + '.inputstatus',levels[i] - 1,1 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1017" type="Ultrix.1_ultix_takecrosspoint" x="316" y="154" w="243" SRC="1" DEST="10" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;780b8fdc3efc0d2ec29da2a2a689a81f&lt;/checksum&gt;!!*/</task>
    </button>
    <button buttontype="push" colspan="1" fill="both" height="149" id="10" name="SRC2_DST8" rowspan="1" style="font:bold;size:Big;bg#green;" weightx="1.0" weighty="1.0" width="158">
    <task tasktype="ogscript">/*! block id=1019 !*/
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (8 - 1) + '.inputstatus',levels[i] - 1,2 - 1);
    }
    multi1.execute();
    /*!!
    &lt;block id="1019" type="Ultrix.1_ultix_takecrosspoint" x="323" y="202" w="243" SRC="2" DEST="8" LEVEL="1,2,3" /&gt;
    !!*/
    /*!!&lt;checksum&gt;704de2e2bee3640c40a8c6689a53eb66&lt;/checksum&gt;!!*/</task>
    <task tasktype="ogscript"/>
    </button>
    </tr>
    </table>
    <abs left="158" top="105"/>
    <abs height="174" left="849" style="bg-u:file:/C:/Users/joaoa/Downloads/Alliance%20Logo%20Vertical.png;" top="41" width="274">
    <abs left="150" top="20"/>
    </abs>
    <abs height="103" left="194" style="bg-u:file:/C:/Users/joaoa/Downloads/Ross-Logo_Red-512x166.png;" top="79" width="213"/>
    </abs>


    #DashBoard


  • 9.  RE: Dashboard and Ultrix

    Posted 05-20-2020 05:14

    Hello Bruna

    Here is an example panel i attached to you, hopes it help.

    In the following panel, i created 1 take button and 2 parameters for source and destination. Since its an range parameter type - you should set as max value to the the last source and destination number (if your Ultrix is 72*72 in/out, then set 72 to the max value of parameter).

    Alex.

    <abs contexttype="opengear" gridsize="20" id="_top" keepalive="false">
    <meta>
    <params>
    <param access="1" constraint="1.0;100.0;1.0;100.0;1" constrainttype="INT_STEP_RANGE" name="source" oid="source" precision="0" type="INT32" value="0" widget="spinner"/>
    <param access="1" constraint="1.0;100.0;1.0;100.0;1" constrainttype="INT_STEP_RANGE" name="destination" oid="destination" precision="0" type="INT32" value="0" widget="spinner"/>
    </params>
    </meta>
    <table height="100" left="420" style="bg-align:center;bg#FBFBFB;bdr#modaloverlay;bdr:round;grid#3C2FCE;" top="180" width="120">
    <meta>
    <context contexttype="opengear" id="Ultrix.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 0&lt;br&gt;Ultrix" objecttype="Ultrix"/>
    </meta>
    <meta>
    <context contexttype="opengear" id="Ultriscape.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 1&lt;br&gt;Ultriscape" objecttype="Ultriscape"/>
    </meta>
    <tr>
    <button buttontype="push" colspan="1" fill="both" id="01" name="TAKE" rowspan="1" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">var source = params.getValue('source', 0); // get source value
    var destination= params.getValue('destination', 0); //// get destination value

    //this is script from visualLogic editor - we just insert there our variables for source and dest
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + (destination - 1) + '.inputstatus',levels[i] - 1,source - 1); //here we put variable instead of fixed values
    }
    multi1.execute();</task>
    </button>
    </tr>
    </table>





    <param expand="true" height="40" left="320" oid="source" top="180" width="80"/>
    <param expand="true" height="40" left="320" oid="destination" top="240" width="80"/>
    <label height="40" left="240" name="Source:" style="txt-align:west" top="180" width="80"/>
    <label height="40" left="240" name="Destination:" style="txt-align:west;" top="240" width="80"/>
    </abs>

    #DashBoard


  • 10.  RE: Dashboard and Ultrix

    Posted 05-20-2020 14:25

    Hello, it worked, but is there a way I can let the Source and Destination as buttons? So it would look like this plus a TAKE button. 

     

     

    Currently it looks like this: 

    Thank you so much for helping :)


    #DashBoard


  • 11.  RE: Dashboard and Ultrix

    Posted 05-20-2020 21:07

    Yes, this is also possible. You will need create source and destination parameter and represent them as toggle buttons. Also you have to attach an little script to destination parameter, that will ask ultrix which source is routed to selected destination ('get crosspoint source' in ultrix API) , and set that value to source parameter. That will trigger selection change of source toggle buttons, while you switch between the destinations, and will give dynamic indication of what is routed to each destination, depend on  selected destination.  Just pay attention that ultrix count starts from zero, which means source 4 is source3 in ultrix protocol. 


    #DashBoard


  • 12.  RE: Dashboard and Ultrix

    Posted 05-28-2020 14:24

    Hey, so can you explain about this little script that I have to create? 

    I'm not quite sure how to do that. 

    Thank you :)


    #DashBoard


  • 13.  RE: Dashboard and Ultrix

    Posted 05-28-2020 14:56

    Hi

    I believe it should be something like this, and it should be installed as task on destination parameter:

    var selectedDst = this.getValue();
    var routedSrc = (params.getParam("Ultrix.1", 'params.statusByDestination.' + selectedDst + '.inputstatus', 0).getValue());
    params.setValue('source', 0, routedSrc);



    I also created example panel that should give you basic idea of how it should be built, just pay attention that the panel WILL route to your ultrix destination 1, 2 ,3 if you click "take".Since i dont have an ultrix here, i didn't checked it, but it should work. 

     

    <abs contexttype="opengear" id="_top" keepalive="false">
    <meta>
    <params>
    <param access="1" constrainttype="INT_CHOICE" name="source" oid="source" precision="0" type="INT16" value="2" widget="radio-toggle">
    <constraint key="0">source-1</constraint>
    <constraint key="1">source-2</constraint>
    <constraint key="2">source-3</constraint>
    </param>
    <param access="1" constrainttype="INT_CHOICE" name="destination" oid="destination" precision="0" type="INT16" value="2" widget="radio-toggle">
    <constraint key="0">dst-1</constraint>
    <constraint key="1">dst-2</constraint>
    <constraint key="2">dst-3</constraint>
    </param>
    </params>
    </meta>
    <table height="100" left="371" style="bg-align:center;bg#FBFBFB;bdr#modaloverlay;bdr:round;grid#3C2FCE;" top="320" width="120">
    <meta>
    <context contexttype="opengear" id="Ultrix.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 0&lt;br&gt;Ultrix" objecttype="Ultrix"/>
    </meta>
    <meta>
    <context contexttype="opengear" id="Ultriscape.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 1&lt;br&gt;Ultriscape" objecttype="Ultriscape"/>
    </meta>
    <tr>
    <button buttontype="push" colspan="1" fill="both" id="01" name="TAKE" rowspan="1" weightx="1.0" weighty="1.0">
    <task tasktype="ogscript">var source = params.getValue('source', 0); // get source value
    var destination= params.getValue('destination', 0); //// get destination value

    //this is script from visualLogic editor - we just insert there our variables for source and dest
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + destination + '.inputstatus',levels[i] - 1,source ); //here we put variable instead of fixed values
    }
    multi1.execute();</task>
    </button>
    </tr>
    </table>







    <param expand="true" height="100" left="240" oid="source" top="80" width="380"/>
    <param expand="true" height="100" left="240" oid="destination" top="200" width="380">
    <task tasktype="ogscript">var selectedDst = this.getValue();
    var routedSrc = (params.getParam("Ultrix.1", 'params.statusByDestination.' + selectedDst + '.inputstatus', 0).getValue());
    params.setValue('source', 0, routedSrc);</task>
    </param>


    </abs>

     

    Alex.


    #DashBoard


  • 14.  RE: Dashboard and Ultrix

    Posted 05-29-2020 12:58

    Hello that example you sent the source and destination are in different buttons, is there a way I can put the source and destination in the same button but still have the button take?
    I’ve made a panel where I can do that but it cuts automatically without the button take, I was hoping to find a way where it wouldn’t cut right away.
    So I wanna have the source and destination on the same button but it won’t cut until I hit the button TAKE

    I'm gonna leave some images of what I've been trying to do:

    PANEL

     

    BUTTON 1

     

    BUTTON TAKE

     

    Thank you for your time.


    #DashBoard


  • 15.  RE: Dashboard and Ultrix

    Posted 05-30-2020 19:36

    Hi Bruna.

    Just to be clear: i am user of dashhboard just like you (not ross official support), maybe its possible to achieve this in more elegant way, so the following is just my idea.

    You want to create toggle buttons with 3 different keys: name on each button, source number and destination number. 

    Struct parameter may be an native way to do that, but it's overkill. It can be done with an little scripting. 

    I just created an string key/value constraint parameter and represent it as toggle buttons. Its name values may be whatever you want to be printed on each button, and its value must be set as the following: dest:03,src:01.  

    Take button will get that value and parse it to 2 variables of src and dest using that code:

    var comboValues= params.getValue('combo', 0).split(",");
    var source = Number(comboValues[1].slice(-2));
    var destination =Number(comboValues[0].slice(-2));

    Just pay attention to write "dest:03,src:01" instead "dest:3,src:1", the script cuts 2 last characters (and don't forget comma).

    Here is an example of the panel that should do what you want, just enter your values in the "combo" parameter. 

    <abs contexttype="opengear" gridsize="20" id="_top" keepalive="false">
    <meta>
    <params>
    <param access="1" constraintstrict="false" constrainttype="STRING_STRING_CHOICE" maxlength="0" name="combo" oid="combo" type="STRING" value="dest:15,src:05" widget="radio-toggle">
    <constraint key="dest:03,src:01">dest3_src1</constraint>
    <constraint key="dest:03,src:02">dest3_src2</constraint>
    <constraint key="dest:15,src:05">dest15_src05</constraint>
    </param>
    </params>
    </meta>
    <meta>
    <context contexttype="opengear" id="Ultrix.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 0&lt;br&gt;Ultrix" objecttype="Ultrix"/>
    </meta>
    <meta>
    <context contexttype="opengear" id="Ultriscape.1" objectid="Ultrix-30128130002&lt;br&gt;Slot 1&lt;br&gt;Ultriscape" objecttype="Ultriscape"/>
    </meta>
    <button buttontype="push" colspan="1" fill="both" height="100" id="01" left="380" name="TAKE" rowspan="1" top="320" weightx="1.0" weighty="1.0" width="140">
    <task tasktype="ogscript">var comboValues= params.getValue('combo', 0).split(","); //get the combo values and split them by "," char
    var source = Number(comboValues[1].slice(-2)); // cuts 2 last chars in the source part of string, and convert this string to number.
    var destination = Number(comboValues[0].slice(-2)); // same with destination
    ogscript.debug("Source is: " + source + ", Dest is: " + destination);

    //this is script from visualLogic editor - we just insert there our variables for source and dest
    var panelid = ogscript.getString("Ultrix.1" + "_panelID");
    if (panelid == null) {
    panelid = 1999;
    }
    var levString = "1,2,3" + "";
    var levels = levString.split(",");
    var multi1 = params.createMultiSet("Ultrix.1");
    multi1.setValue('params.statusByDestination.0.lockowner',0,panelid);
    for (i = 0; i &lt; levels.length; i++) {
    multi1.setValue('params.statusByDestination.' + destination-1 + '.inputstatus',levels[i] - 1,source-1 ); // -1 is the ultrix shift that counts from zero
    }
    multi1.execute();</task>
    </button>
    <param expand="true" height="100" left="200" oid="combo" top="200" width="500">
    <task tasktype="ogscript"/>
    </param>
    </abs>


    Alex.

    UDP: I just realized that it wont be working with numbers above 99. So, if you need that just change slice(-2) to slice(-3) in the script lines and write "dest:003,src:001".

    UDP2: Your other option may be direct recall for Ultrix salvos from the dashboard. 


    #DashBoard


  • 16.  RE: Dashboard and Ultrix

    Posted 06-04-2020 14:28

    Hi Alex, 

    Thanks for your attention on my case. 

    I reproduced the codes and follow your instructions in my dashboard, but, unfortunately, the panel didn't work. When I selected ''PGM_src1'' button and pressed TAKE, nothing happens. It seems to me, TAKE button doesn't execute instructions of (combo) parameter. Could you help me, please? 

    Follow photos: 

    Thanks, 


    #DashBoard


  • 17.  RE: Dashboard and Ultrix

    Posted 06-04-2020 14:54

    Hi Bruna,
    You wrote in parameter
    "PGM:01,SRC:01" and "PRW1:01,SRC:01"
    In both cases it will take src01 to dest01.

    If you open debug window and hit "take", you will if there any errors or it will prompt you which source and destination numbers are chosen.

    In the parameter, i noticed you write it wrong. You should go to "destination" and "source" tabs of ultrix, and see which destination number is your PGM and PRW.
    Lets say, your PGM is on destination 5, and PRW is on dest 6. Then you should write in combo parameter:
    dest:05,src:01 = take src 1 to dest 5 (pgm)
    dest:06,src:01 = take src 1 to dest 6 (prw)

    Let me know if thats helps.


    #DashBoard


  • 18.  RE: Dashboard and Ultrix

    Posted 06-04-2020 16:27

    Hey Alex, unfortunately it didn't work. I made the changes you sent me but I couldn't spot what went wrong. I'll leave some pics here and maybe you could tell me what isn't working. 

     

    Thank you


    #DashBoard


  • 19.  RE: Dashboard and Ultrix

    Posted 06-04-2020 18:21

    Ok, im not sure maybe your ultrix context is wrong? Try to add some button first in same panel, that routes something, from ultrix api. If success, then try to run our "take" button again. If still will not work, i will check it tommorow with my ultrix at work.
    Alex.

     

     


    #DashBoard


  • 20.  RE: Dashboard and Ultrix

    Posted 06-09-2020 18:19

    Hey Alex
    I tried to create the button with different API options but it didn’t work, I’m not sure if the problem is the TAKE button or the other button. I don’t know what else to do.
    Not sure if I should create different parameters or more buttons.
    If you could send another example of “Multidestinations + TAKE button” panel I think it would help me a lot.

    Thank you so much for your time :)


    #DashBoard


  • 21.  RE: Dashboard and Ultrix

    Posted 06-09-2020 18:28

    Hello Bruna,
    If your ultrix API doesnt work the problem seems to be with the context, or that is an connection issues.

    Can you try to delete the context and add it again? repeat those steps:

    1. In the button editor, select "Add task"
    2. On the left side of the Visual Logic editor, select the green "+" and choose "Add device from Basic Tree"
    3. Select your Ultrix

    If you want we can schedulere remote session tommorow and i will help you there.
    alex@reshet.tv

    Alex.


    #DashBoard


  • 22.  RE: Dashboard and Ultrix

    Posted 06-09-2020 18:43

    Thank you so much Alex, I sent you an e-mail


    #DashBoard