SCADA Data Viewer in Mobile IoT App

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
SCADA Data Viewer in Mobile IoT App
Complex
~1-2 weeks
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Implementing SCADA Data Viewing in Mobile IoT Applications

A SCADA system — Supervisory Control and Data Acquisition — lives on stationary operator workstations. WinCC, Ignition, InduSoft, Aveva — each has its own data format, API, and compatibility history. A mobile application for viewing SCADA data is not a replacement for the desktop client, but rather a "second pair of eyes" for a shift supervisor walking the factory floor. The task: current tag values, trends, and alerts — read-only, no control permissions.

OPC UA: The Universal Path to SCADA Data

Most modern SCADA systems support OPC UA servers. This is the standard way to access data without proprietary APIs. Mobile applications connect to OPC UA servers via TCP or WebSocket (OPC UA over WebSocket, UA Binary transport).

For Android/Kotlin, use Eclipse Milo through JVM layer or Eclipse4J. For Flutter, there is no official OPC UA library; use Platform Channels to native clients or a REST gateway:

// Android, Eclipse Milo OPC UA Client
val client = OpcUaClient.create(
    "opc.tcp://scada-server.factory.local:4840",
    endpointFilter = { endpoints ->
        endpoints.filter { it.securityMode == MessageSecurityMode.SignAndEncrypt }
                 .minByOrNull { it.securityPolicyUri }
    },
    configConsumer = { configBuilder ->
        configBuilder.setIdentityProvider(
            UsernameProvider("operator", "password")
        )
        configBuilder.setRequestTimeout(UInteger.valueOf(5000))
    }
)

client.connect().get()

// Read tags by NodeId
val nodeId = NodeId(2, "Furnace1.Temperature")
val dataValue = client.readValue(0.0, TimestampsToReturn.Both, nodeId).get()
val temperature = (dataValue.value.value as Float).toDouble()
val serverTimestamp = dataValue.serverTime

To monitor hundreds of tags simultaneously, use OPC UA Subscription instead of polling:

val subscription = client.subscriptionManager
    .createSubscription(1000.0)  // publishing interval 1000ms
    .get()

val monitoredItems = nodeIds.map { nodeId ->
    MonitoredItemCreateRequest(
        ReadValueId(nodeId, AttributeId.Value.uid(), null, null),
        MonitoringMode.Reporting,
        MonitoringParameters(
            UInteger.valueOf(clientHandleCounter++),
            500.0,  // sampling interval
            null,
            UInteger.valueOf(10),  // queue size
            true
        )
    )
}

subscription.createMonitoredItems(
    TimestampsToReturn.Both,
    monitoredItems,
    { item, value -> handleTagUpdate(item.readValueId.nodeId, value) }
).get()

Ignition SCADA: REST API and WebDev Module

Ignition (Inductive Automation) is popular in new production facilities. It includes a WebDev module that allows REST endpoints to be created directly from Ignition Python scripts. A more modern approach is Ignition Perspective with WebSocket API for mobile clients.

For direct REST access to tags via Ignition Gateway REST API:

GET https://ignition.factory.com/system/webdev/api/tags?tagPaths=
    Furnaces/Furnace1/Temperature,
    Furnaces/Furnace1/Pressure
Authorization: Bearer {token}

Ignition returns tag values with quality (Good, Bad, Uncertain) and timestamp. Quality is an important parameter: if a sensor loses connection, the value may be stale with quality = Bad, and the UI should display this.

WinCC REST API via OpenPCS

WinCC (Siemens) is accessed via REST API OpenPCS or WinCC OA WebClient. Siemens TIA Portal V18+ supports WinCC Unified, which has its own WebSocket API through nginx proxy.

For older WinCC Classic — only OPC DA (DCOM) or OPC UA with a gateway (Matrikon/Kepware) installed on the SCADA server.

Trends: Requesting Historical Data

SCADA systems store tag history in built-in databases (Ignition uses MySQL/MSSQL, WinCC uses SIMATIC historian). Request through OPC UA Historical Data Access (HDA):

val historyReadRequest = HistoryReadValueId(
    nodeId = NodeId(2, "Furnace1.Temperature"),
    indexRange = null,
    dataEncoding = null
)

val readDetails = ReadRawModifiedDetails(
    isReadModified = false,
    startTime = startDateTime.toOpcDateTime(),
    endTime = endDateTime.toOpcDateTime(),
    numValuesPerNode = UInteger.valueOf(500),
    isReturnBounds = true
)

val historyData = client.historyRead(
    readDetails,
    TimestampsToReturn.Source,
    false,
    listOf(historyReadRequest)
).get()

For trend display in Flutter — fl_chart with LineChart. With 500+ data points, use showingTooltipIndicators only for the selected range, otherwise the chart lags during scrolling.

Security and Access Control

SCADA data is sensitive information. Several mandatory measures:

  • Mobile applications must never have direct access to OPC UA servers from the internet. Access only through VPN or reverse proxy with mTLS.
  • Authorization through corporate IdP (Active Directory / LDAP).
  • Read-only access: "mobile viewer" role without write permissions to tags.
  • Session logs: who read which tags and when.

Developing a mobile SCADA viewer with OPC UA and historical trends: 4-6 weeks for one platform. Supporting multiple SCADA systems simultaneously and complex dashboards with real-time charts: 2-3 months. Cost is calculated individually.