Join the conversations to shape a safer, more efficient, and sustainable industrial future!
Recently active
We are currently migrating to OIDC where we need to give access through access groups linked to Azure AD.On our Statnett cluster it seems that a user needs to explicitly be member of a group “transformations” in order to to delete (or edit) a transformation.The admin group has the capabilities (on “test”) {'transformationsAcl': {'actions': ['READ', 'WRITE'], 'scope': {'all': {}}}}]But we need to login to the legacy login without OIDC and have a service account linked explicitly to the group “transformations” in order to delete a transformation. The group “transformations” has no capabilities set.I have tried both Fusion and the API/python-SDK (read is possible):CogniteAPIError: Transformation not found. This may also be due to insufficient access rights. | code: 403 | X-Request-ID: b7c0beb6-d3e0-9ec4-ba50-895533ac1996
At release, will Schema Services support being federated into a GraphQL schema, like with Hot Chocolate or Apollo? This is how we are planning to utilize combining what is available in CDF with what we are providing in our GraphQL schemas and I was assuming this is feasible. But, a dev mentioned that the downstream services have to support being federated for it to be made available at the federation gateway. If you are using Lighthouse for your implementation, then I see it has preview support for being federated, but I need to confirm you will configure it this way or whatever you may be using will support being federated. Thanks!
Hei!In the current schema setup, I might make a query such as this:The terms ‘edges’ and ‘node’ is a bit confusing to me. I’m not sure what they really mean in this context (I understand it from a graph db point of view, but its a bit confusing from other points. I might expect something like this instead{ listAsset() { items { externalId } pageinfo { cursor, ... } }} Curious to hear your thoughts on this :)
Hi, I am trying to use templates to model domain specific connections between assets and time series in CDF, and I have come across an issue that I would like some feedback on.If I have the following schema type:type StringOrNumber @template { Asset: Asset NumericTS: TimeSeries}and do the following query:query StringOrNumber { stringOrNumberQuery { items { NumericTS { __typename isString datapoints(limit: 1) { __typename timestamp value } } } }}then the datapoint output __typename has the value “DatapointString” even though the timeseries is not a string timeseries:{ "data": { "stringOrNumberQuery": { "items": [ { "NumericTS": { "__typename": "TimeSeries", "isString": false, "datapoints": [ { "__typename": "DatapointString", "timestamp": 1634534671570, "value": 14.3
What is best practice for global error-handling in the JS-SDK?
For the Retrieve data points API and a few other API’s that allow date range input, we are able to specify a string where, “The format is N[timeunit]-ago where timeunit is w,d,h,m,s.” This is able to specify a time in the past. I am now trying to specify end as “-365d-ago” to set a date 365 days in the future, but this is giving an error.Is there another syntax available for specifying future dates?N[timeunit]-afterNow?365d-afterNow?
Hey,At Statnett we’re thinking about our progress towards a world of more flexible data models. Although your introductions have been great, we’re still confused about the particulars surrounding the transition between types of models.In particular, we consider the lineage of and managability of transformations of data. In the language of your data-modelling: we want the arrows between Source, Domain and Solution models to be versioned and configured as code. Is this a planned feature? If so, do you have any sketches of how this will look?Transformations might be what we call “Interfaces” in the Domain and Solution models. I.e. the physical transformer from (e.g.) Siemens is implemented by a functional 300kv to 132kv transformer at the Substation “Foo”. Currently, we model this as two assets (phys. trafo and func.trafo) with a Relationship with label “Implements”. These relationships are more or less hand-crafted. But, we would like to have these mappings, and links, as code. Preferra
Are Synthetic Time Series able to reference other Synthetic Time Series in their formulas specified? This is the problem I am trying to solve:Synthetic Time Series is limited to referencing 100 time series Sometimes a unit/facility/system/functional location/site may have more than 100 direct child assets I need to calculate a “Synthetic Time Series” that is the daily average of a time series found on all child assets My thought is that, for 300 assets, I would have:STS A: Sum for assets 1-100 STS B: Sum for assets 101-200 STS C: Sum for assets 201-300 STS D: Sum of STS A, B, and C divided by 300Is there a better way to accomplish something like this in CDF?
Hello, Thank you for all the great docs and tutorials you’ve put together on CDF. I would like to get an expert opinion on the best way to accomplish a specific use case I have.We have a daily time series that we calculate for predicted availability of an asset, for a time range that is usually between 5 and 40 years (usually between 1,826 and 14,610 data points per time series). We have a view were an engineer will want to see this time series graphed, but also will want to see a single KPI value that represents the average of the time series from today to end of the range. For all of our assets, this KPI could be ready several times a day as people view this KPI. When we were storing this data in Azure SQL, to speed it up, we pre-calculated and stored this KPI average and stored a new time series (throwing away some of the time series points and linear interpolating). That way, reading a single data point representing the average of from today to the end of the range and display
Hi! If one or more of the source-timeseries are missing data-points they will also be missing in the synthetic timeseries output..We would like an option to default to zero for missing values so that the API will use the available values to calculate a partial result. Example:TS1: [1,2,3]TS2: [3, undefined, 4] Output now if calculating a sum of TS1 + TS2:[4, undefined, 7] What we would like:[4, 2, 7]
can you enable scrolling just for the section of the page where one creates the logic? (see attached picture) it would be nice if I could specify the degree of an exp. for instance y = ax^b+c would be a second order exp, For my specific usecase a = timeseries, b = constant and c = constant.
We would like to change a name of our dataset in Fusion (specifically data set id=7661001648160088 on statnett, test), but get the error message [ { "status": 400, "message": "Either set must be populated or setNull must be true." }]` The dataset has related timeseries and asssets. What does it mean that the dataset must be populated? And what are we missing?
A college has lost the Cognite hub account in the authenticator app.He cannot register as new account since his account exists.He needs to re-register Cognite hub but does not have the account details to manually enter them.Could you please provide details of the code and URL.Note that currently Cognite hub only provides the option to authenticate via the authenticator app. Could you also provide the option to authenticate via a text message.
Hi!Im a designer, working on improving the front page of Charts.I would love to talk to 4 of you, to get feedback on our thought so far. I will show you what we are thinking, and you can help us move forward in the right direction.Comment here, or send me a mail to emmy.reehorst@cognite.com We want to do this for more features and improvement in the future. So even though we only need to talk to four of you this time, there will be several more opportunities in the future!
Hi there,I am trying to authenticate the CogniteClient in bluefield using our Azure B2C: response = requests.request("POST", "https://oceandataplatform.b2clogin.com/oceandataplatform.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token", headers={ 'Content-Type': 'application/x-www-form-urlencoded'}, data={ "grant_type": 'password', "client_id": client_id, "scope": 'openid https://westeurope-1.cognitedata.com/user_impersonation', "username": username, "password": password,})creds = response.json()client = CogniteClient( token=creds["access_token"], project="oceandata", base_url='https://westeurope-1.cognitedata.com', client_name="cognite-python-dev", debug=True,)This works perfectly :) Edit: I initially asked how to get this working before spotting a typo in the code. Everything works fine now. Leaving the post here so that others may use it for reference.
Since last week, I have not been able to trigger any transformations via the Playground API.({{baseUrl}}/api/playground/projects/{{project}}/transformations/:id/run)I am getting :404 Not foundwith response body: {"code":4(Yes; a incomplete json)I noticed also that the API has now been included in API v1. Is maybe this error related to this change?Related (?):I can see that when I run a “GET” using the new endpoint, I get the same error ({"code":4). Have you been a bit quick in the implementation and running a GET on the v1 API from the playground API? I can also mention that it does actually work using the new v1 endpoint, so this will solve the problem. My problem is, off course, that I am currently using the Playground API which is currently failing and I have to replace the logic and test/release it (Taking extra time).Working Example:POST {{baseUrl}}/api/v1/projects/{{project}}/transformations/runThe example from Postman is with externalId, so you will have to replace it with “id”
What are the alternatives for scoping read/write rights to different users?Dataset is the most intuitive way of limiting access rights to subsets of data, but if i would like to share data that is scattered across different datasets, but easily identifiable by sharing a common label, are there any options?
In the CDF docs I see there is a PI and OPCUA connector. Many industry 4.0 community members see MQTT rather than OPCUA as the future of Industrial IoT cloud based communication, as it is lightweight, report by exception, client driven, etc…If I want to onboard a facility that has an IoT MQTT gateway, how does Cognite recommend we integrate? I have used Azure IoTHub and Azure Functions to connect and transform the data in the past. Do you have a reference architecture for this? Can we connect to the gateway directly with a CDF connector, or do you recommend using Azure IoTHub and Functions (or similar GCP/AWS)?Also Azure has some neat tools like IoT Device Provisioning Services, be nice to know a POV on if/how to utilize those. Thanks!
Hi there,I am looking for resources on CDF templates API.So far I the best introduction I have found is the Python SDK documentation, as well as the information at docs.cognite.com which focuses on using templates in fusion.Can you provide more information about how to use the templates API?
I am trying to stream data from CDF to Azure Event Hub with the Python SDK and cannot find anything related to streaming datasets. Only option so far (as I know) is dps = c.datapoints.retrieve_latest(id=184691546499795)which would need a trigger of some sort to keep running. Data from CDF are so called timeseries from different types of sensors. Is there any documentation on Streaming Data for CDF that I could look at or is Streaming really supported?
If a user includes https:// or http:// in the Override Azure Tenant field the url to Azure AD will not include a correct tenant and login is prevented. This has caused login issues for at least a few users. The request is simply that the form is modified to strip the protocol scheme, ie removing http:// or https:// automatically, if present.
Hey, In our current workflow we’re expanding the use of Functions as a tool. We’re somewhat hampered by how “clumsy” it is to bundle and version control proprietary dependencies. Is there something in the pipe to address this issue? Kind regards,Robert
Hey! I’ve a problem with filling a gap from a source to a timeseries in CDF. Problem descriptionWe’re filling a hole in a time-series from time A to B. There are some datapoints on the edges of the interval in CDF.Data is extracted from the source, and in python prepped for the datapoints API as a list-of-tuples payload. For an arbitrary period I extract 2976 datapoints which I upload to CDF. Subsequently, I query the time-series for the same period of time and recieve 2928 datapoints. There are no NAN values in the input for either the date-time or value. The data is also hourly, and so I’m wary of it just being an edge effect of poor timestamp specifications for the retrieval. What other PEBCAK things have I missed? Simplified example included below:payload>> [{'externalId': 'ts_externalid', 'datapoints': [...]}]payload[0]["datapoints"][10]>> (1617271200000, 0.0)client.datapoints.insert_multiple(payload)meter_data = client.datapoints.retrieve( start=dates[0], end=dat
We are looking into cloud-optimized storage formats such as GeoTIFF, Parquet, etc. One of the things we are trying to determine is whether we could fully utilize such cloud optimized formats with CDF Files.Will the download-link returned by CDF Files allow us to do seek-operations and only download parts of the file?
Hi. I’m currently working on an application where we need to check if a node (PLC/PC) have updated any timeseries within x amounts of hours. The way we do it now is to get all timeseries recorded values in a time range, and check if any timeseries have any values. If there is an value on one timeserie, then we consider the node alive. This can be time consuming, since each node can several hundreds/thousands of timeseries. So my question is if there is a way to get the latest recorded value in a collection of timeseries within a timerange? Or just a recorded value in a timerange for a collection of timeseries. In Cognite, we have an asset hierarchy, which preferably would look like this:RigNode 1 TimeSerie1 TimeSerie2 ... Node 2 TimeSerie1 TimeSerie2 ... Node ... TimeSerie1 TimeSerie2 … But the hierarchy could also be completely flat, where all the timeseries are connected to the Rig. Our externalIds for the timeseries are:rigNumber.NodeNumber.SignalNumber So all timeseries wit