• Recent
    • Tags
    • Popular
    • Register
    • Login

    Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

    Radix IoT Website Mango 3 Documentation Website Mango 4 Documentation Website Mango 5 Documentation Website

    Changing class based on data point value

    Scripting general Discussion
    3
    13
    2.7k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Jared WiltshireJ
      Jared Wiltshire
      last edited by

      Side note, you shouldn't need two classes. Add a class to the table to make life easier e.g.

      table.my-table td {
        color: green;
      }
      table.my-table td.bad {
        color: red;
      }
      

      Developer at Radix IoT

      richard.mortimerR 1 Reply Last reply Reply Quote 0
      • richard.mortimerR
        richard.mortimer @Jared Wiltshire
        last edited by

        @jared-wiltshire said in Changing class based on data point value:

        Side note, you shouldn't need two classes. Add a class to the table to make life easier e.g.

        table.my-table td {
          color: green;
        }
        table.my-table td.bad {
          color: red;
        }
        

        Cheers for that - I was actually following the example in the "Help -> Custom pages" example, but I ended up using the default table cell, as well as a "warn" class and "bad" class for charge on a battery where the state is less than 50% and less than 25% respectively.

        Is there any way to paramatize the break points? Is that where I use the ng-init command?

        0_1555031874743_Untitled.png

        Cheers

        Richard

        Jared WiltshireJ 1 Reply Last reply Reply Quote 0
        • Jared WiltshireJ
          Jared Wiltshire @richard.mortimer
          last edited by

          @richard-mortimer said in Changing class based on data point value:

          Is there any way to paramatize the break points? Is that where I use the ng-init command?

          I'm sorry, I dont understand what you mean. I'll need some more details about what you are trying to achieve.

          Developer at Radix IoT

          richard.mortimerR 1 Reply Last reply Reply Quote 0
          • richard.mortimerR
            richard.mortimer @Jared Wiltshire
            last edited by

            @jared-wiltshire said in Changing class based on data point value:

            @richard-mortimer said in Changing class based on data point value:

            Is there any way to paramatize the break points? Is that where I use the ng-init command?

            I'm sorry, I dont understand what you mean. I'll need some more details about what you are trying to achieve.

            Oh, I figured it out, but I'll put here what I did, in case there is a better way to do it.

            Because I have multiple replicated graphs on the page, I used the ng-init command in my main div thus:

            <div id="bg" class="ma-designer-root" style="width: 100%; height: 100%; position: relative;" id=" ... " ng-init="warnBattery=50;badBattery=25;fuelTrend=14">
            

            So when it gets to reading the values; the table cell reads ..

            <td class="mid" ng-class="{'warn': battery1.value < warnBattery, 'bad': battery1.value < badBattery}"><ma-point-value 
            

            So these values warnBattery and badBattery can be set page wide - the next challenge is reading some of these 'trigger' values from the MangoES devices for things like fuel tank levels - as some of our devices are geographically dispersed and have differing levels of alerts.

            Please let mer know if there is a better way of doing it.

            Cheers

            Richard

            Jared WiltshireJ 1 Reply Last reply Reply Quote 0
            • richard.mortimerR
              richard.mortimer @CraigWeb
              last edited by

              @craigweb said in Changing class based on data point value:

              use <ma-get-point-value point-xid="DP_684160" point="myPoint"></ma-get-point-value> if you would like a variable in you pages scope that you can do logic with. You can then use myPoint in your logic.

              Is it possible to put an AngularJS array element inside this?

              Where the array includes the datapoint-xid as:

              { ... 'BattCharge': 'DP_684160', ... }
              

              They all seem to work in an ma-point-value, but not inside a ma-get-point-value

              <ma-point-value point-xid="{{Objects.BattCharge}}"></ma-point-value>
              
              • this works
              <ma-get-point-value point-xid="{{Objects.BattCharge}}" point="battery"></ma-get-point-value>
              
              • this doesn't work

              Thanks

              Richard

              1 Reply Last reply Reply Quote 0
              • CraigWebC
                CraigWeb
                last edited by

                Hi Richard

                IMO the way you are going, you would be better off looking into making dynamic watchlists and use the <ma-watch-list-get to bring the watchlist data into your page. You will then have an array of objects called designer.points which contains all the points in the watchlist that you have created.

                you can then use the angularjs filter pipe to narrow down to the point you want to work with. eg:
                <ma-point-value point="designer.points | filter:{name :'Battery'} | first"></ma-point-value>
                The | first pipe will select the first object in the array if multiple points make it through the filter.

                <ma-get-point-value> does work when giving it an object. I tested in the play area as can be seen below. One thing to remember is that whatever does between the {{}} gets evaluated

                <p ng-init="object = {point:'DP_dfcc29bd-e057-4cee-ab0c-f77e0847c17f'}">
                    The point value is <ma-point-value point="myPoint"></ma-point-value>
                </p>
                
                <!-- Get a point (and value) using its XID and assign it to an output variable "myPoint" -->
                <ma-get-point-value point-xid="{{object.point}}" point="myPoint"></ma-get-point-value>
                
                <p>
                    The point name is "{{myPoint.name}}" and its value is {{myPoint.renderedValue}}.
                </p>
                {{object.point}}
                {{myPoint}}
                
                richard.mortimerR 1 Reply Last reply Reply Quote 0
                • Jared WiltshireJ
                  Jared Wiltshire @richard.mortimer
                  last edited by

                  @richard-mortimer said in Changing class based on data point value:

                  So these values warnBattery and badBattery can be set page wide - the next challenge is reading some of these 'trigger' values from the MangoES devices for things like fuel tank levels - as some of our devices are geographically dispersed and have differing levels of alerts.

                  I would suggest looking into the JSON store to store the warning levels / limits. You could store these per site ID and create a simple configuration page to set the limits for each site.

                  Developer at Radix IoT

                  1 Reply Last reply Reply Quote 0
                  • richard.mortimerR
                    richard.mortimer @CraigWeb
                    last edited by

                    @craigweb said in Changing class based on data point value:

                    Hi Richard

                    I tested in the play area as can be seen below. One thing to remember is that whatever does between the {{}} gets evaluated

                    Ok, I figured out what I was doing wrong here, and it seems that when you an Angular directive inside a table row; the translation must occur inside a table element, so this won't work:

                                <tr data-ng-repeat="Objects in DataPoints">
                                    <!-- calculations -->
                                    <ma-point-statistics point-xid="{{ Objects.FuelLevel }}" from="time | maMoment:'subtract':7:'days'" to="time" statistics="fuelData"></ma-point-statistics>
                                    <ma-point-values point-xid="{{ Objects.FuelLevel }}" values="fuelValues" from="time | maMoment:'subtract':fuelTrend:'days'" to="time" rollup="AVERAGE" rollup-interval="1 DAYS"></ma-point-values>
                                    <ma-get-point-value point-xid="{{ Objects.BattCharge }}" point="battery"></ma-get-point-value>-{{ Objects.BattCharge }}-{{ battery }}-
                                    <!-- table elements start -->
                                    <td>{{ Objects.ID }} - <a href="{{ Objects.URL }}">{{ Objects.Location }}</a></td><!-- Location -->
                    
                    

                    But this will work:

                                <tr data-ng-repeat="Objects in DataPoints">
                                    <td>{{ Objects.ID }} - <a href="{{ Objects.URL }}">{{ Objects.Location }}</a>
                                        <!-- calculations -->
                                        <ma-point-statistics point-xid="{{ Objects.FuelLevel }}" from="time | maMoment:'subtract':7:'days'" to="time" statistics="fuelData"></ma-point-statistics>
                                        <ma-point-values point-xid="{{ Objects.FuelLevel }}" values="fuelValues" from="time | maMoment:'subtract':fuelTrend:'days'" to="time" rollup="AVERAGE" rollup-interval="1 DAYS"></ma-point-values>
                                        <ma-get-point-value point-xid="{{ Objects.BattCharge }}" point="battery"></ma-get-point-value>
                                    </td><!-- Location -->
                    (etc ...)
                    
                    

                    Oddly, if it's not inside the ng-repeat statement, the evaluation works outside the table element, which is the 'gotcha' that got me .... hope it helps someone in the future!!

                    Cheers

                    Richard

                    (I haven't missed the other points, still working through them, and appreciating the input!!)

                    1 Reply Last reply Reply Quote 0
                    • Jared WiltshireJ
                      Jared Wiltshire
                      last edited by

                      @richard-mortimer its not valid to put text directly inside a <tr> as in your first example. That's probably why you were seeing strange behavior. Its also possible that the browser doesn't like custom elements (<ma-*>) there either. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr under "Permitted content"

                      Developer at Radix IoT

                      richard.mortimerR 1 Reply Last reply Reply Quote 0
                      • richard.mortimerR
                        richard.mortimer @Jared Wiltshire
                        last edited by

                        @jared-wiltshire - cheers for that ... I'm still within the great leap of faith from PHP to Angular ...

                        Richard

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post