united-manufacturing-hub / united-manufacturing-hub Goto Github PK
View Code? Open in Web Editor NEWThe Open-Source toolkit to build your own reliable and secure Industrial IoT platform.
Home Page: https://www.umh.app
License: Apache License 2.0
The Open-Source toolkit to build your own reliable and secure Industrial IoT platform.
Home Page: https://www.umh.app
License: Apache License 2.0
Is your feature request related to a problem? Please describe.
I'm always frustrated when i ask factoryinsight for the orderTimeline and i get null back when there are noOrders in the selected timerange.
Describe the solution you'd like
I want to get back noOrder when there is no Order
Is your feature request related to a problem? Please describe.
A new user does not know which MQTT messgaes exist and how he should format them, so that the rest of the system can process it.
Describe the solution you'd like
A documentation of all currently supported (and upcoming) messages with examples
In order to implement the higher-level EPIC, the following data must be able to be changed via MQTT in this work package:
To achieve the overarching epic we need a backend / REST API that sends data to MQTT. It will be consumed by the Grafana datasource and is called factoryinput. It will be packaged together with factoryinsight.
The openapi specification can be found here:
Changeovers can for some assets automatically detected as the time between an order is started and the time that the machine is actually running. The same for the time when the machine was last running and the time when the order is finished.
Additionally, we can seperate both changeovers into "Preparation" and "Postprocessing"
Idea:
Scrap marked the last counts incl. the timestamp as bad production (in time back)
You should not be able to send more scraps than counts
Scrap can also be sent with the same timestamp as the last count
If no counts are available for this asset, but uniqueProducts are available, they can also be marked as scrap.
The error message timestampAfterCurrentOne.Sub(timestampCurrent).Seconds() < 0
appears quite often. It is hard to debug.
Normally there should not be any errors while executing.
The error message appears quite frequently and it is hard to debug and to describe it. At least add additional information.
Is your feature request related to a problem? Please describe.
Describe the solution you'd like
Describe alternatives you've considered
Additional context
Is your feature request related to a problem? Please describe.
As an user of a x86 edge PC i want to be able to use the barcodereader
Describe the solution you'd like
Port barcodereader from ARM to x86
Is your feature request related to a problem? Please describe.
Currently, the system is based on the size count to describe the production of an asset. This is designed as a discrete quantity. As a quantity above there is the "discrete product" here an equivalent for the continuous production is missing. Specifically, I would like to measure the good production on a weaving machine and subsequently be able to mark a part as bad production.
Describe the solution you'd like
Specifically, I would like to measure the good production on a weaving machine and subsequently be able to mark a part as bad production.
NEW (see comment below)
Stops and running times can disappear at the edge of the time range.
ORIGINAL
Stop gets overrriden by running time
The machine has stopped for a longer period than specifided in the configuration. Therefore, an unknown stop should appear.
There is no unknown stop showing.
Is your feature request related to a problem? Please describe.
Currently CalculateAverageStateTime does only calculate for a specific state.
Describe the solution you'd like
If you specify a overarching state category, e.g. 10000 or 20000 I want all sub-states included as well
Describe alternatives you've considered
Additional context
storeIntoTable has a possible SQL injection (currently not in it, but potentially for the future)
// WARNING SQL INJECTION POSSIBLE
sqlStatement := `
INSERT INTO ` + tableName + `(timestamp, asset_id, ` + columnName + `)
VALUES (to_timestamp($1 / 1000.0),$2,$3)
ON CONFLICT DO NOTHING;`
With the help of this apis I would like to be able to represent the share of the good production in the total production.
The apis differ in that getQuality calculates this KPI on a daily basis for a long-term view and getQualityRate on a minute basis in order to be able to react to rapid changes in production.
Is your feature request related to a problem? Please describe.
I am frustrated when the system transmits potentially erroneous data or data is created by incorrect use. This data is then no longer easy to adjust for me as the end user.
Describe the solution you'd like
I would like to have a dashboard where I can adjust historical data in the database (e.g. machine states, produced quantity, shifts or quality data etc.). I would like to do this via an easy to use user interface and without much technical know how. At the same time I don't want the data to be ruined by a single person.
The readme for our release needs to be visually compelling and easy-to-understand, as it is the first thing a potential new developer will see.
Currently we are using multiple docker registries. We need to combine them into one, so we can later switch easily to official docker hub.
I would like to be able to mark historically produced unique products as scrap. This can be particularly relevant if the quality check is done manually and with a significant time lag.
Idea:
send this json to via mqtt to /scrapUniqueProduct
{
UID : 1234
}
I would like to have the possibility to inform the system with the help of a single message that a product has been produced but is to be classified as a bad product.
However, it should still be possible to send a message to count without the scrap-key whenever a product is to be classified as a good product or no final statement about its quality can be made yet.
Idea:
{
timestamp : 1234,
count : 2,
scrap : 2
}
No shifts are classified as unknown stops although no shift is running
Unknown Stops shoul be classified as noshift while no shift is running
Not obligatory, but suggest a fix/reason for the bug,
Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant. Issues in factoryinsight or mqtt-to-postgresql are usually really good reproducable with the exact request, so please include it here as well.
The bug only occurs on one machine, on other machines unknown stops at no shift are correctly classified as no shift.
How has this issue affected you? What are you trying to accomplish?
Providing context helps us come up with a solution that is most useful in the real world
Provide a general summary of the issue in the Title above
Provide a detailed description of the change or addition you are proposing
Not obligatory, but suggest an idea for implementing addition or change
This should include:
specifyUnknownStopsWithFollowingStopReason does not work when states get split up by processStatesOptimized
States should stay the same independent of the selected time range.
States effected by specifyUnknownStopsWithFollowingStopReason will change depending on the selected time range.
This is likely caused when processStatesOptimized splits up states for easier processing. Then specifyUnknownStopsWithFollowingStopReason can not fulfil its function properly.
To implement the parent EPIC, we need a user-interface in Grafana to add and modify data.
Use standard grafana design elements for the UI: https://developers.grafana.com/ui/latest/index.html?path=/story/docs-overview-intro--page
Topic: ia/<customerID>/<location>/<AssetID>/removeState
With the help of this topic a state can be deleted from a machine with a certain timestamp.
scrapState
in the JSON is a string.
{
"timestamp_ms": 1588879689394
}
Topic: ia/<customerID>/<location>/<AssetID>/state
A message is sent here each time the asset changes status. Subsequent changes are not possible. Different statuses can also be process steps, such as "setup", "post-processing", etc. You can find a list of all supported states here
state
in the JSON is a integer according to this datamodel
{
"timestamp_ms": 1588879689394,
"state": 10000
}
Topic: ia/<customerID>/<location>/<AssetID>/removeShift
With the help of this topic a Shift can be deleted from a machine with a certain timestamps.
scrapShift
in the JSON is a string.
{
"timestamp_ms": 1588879689394,
"timestamp_ms_end": 1588879689395
}
Topic: ia/<customerID>/<location>/<AssetID>/removeShift
With the help of this topic a Shift can be deleted from a machine with a certain timestamps.
scrapShift
in the JSON is a string.
{
"timestamp_ms": 1588879689394,
"timestamp_ms_end": 1588879689395
}
Topic: ia/<customerID>/<location>/<AssetID>/addShift
A message is sent here each time a new shift is started.
timestamp_ms_end
in the JSON is a integer representing a UNIX timestamp in milliseconds.
{
"timestamp_ms": 1588879689394,
"timestamp_ms_end": 1588879689395
}
Topic: ia/<customerID>/<location>/<AssetID>/scrapCount
Here a message is sent every time products should be marked as scrap. It works as follows:
A message with scrap
and timestamp_ms
is sent. It starts with the count that is directly before timestamp_ms
. It is now iterated step by step back in time and step by step the existing counts are set to scrap until a total of scrap
products have been scraped.
Important notes:
scrap
, e.g. the count is 5 but only 2 more need to be scrapped, it will scrap exactly 2. Currently it would ignore these 2. see also #125scrap
in the JSON is an integer.
{
"timestamp_ms": 1588879689394,
"scrap": 1
}
Is your feature request related to a problem? Please describe.
If a machine operator is standing at the machine, he should be able to communicate error reasons and other machine information to the system that otherwise cannot be recorded via the machine. For example: break, manually detected quality defects, etc.
Describe the solution you'd like
I would like to have the possibility to create a dashboard in Grafana, which can be used to add data to the system with the help of button lists and possibly free input fields.
Describe alternatives you've considered
Using an external dashboard Nodered which connected to the local MQTT broker. Disadvantage: The tablet must be in the same network as the factorycube, which can lead to problems with a firewall or wifi.
Additional context
Challenge: The machine state is determined on the activity of the machine and annomalities but the machine operator only wants to communicate the finite state. How do I prevent him from entering incorrect data, such as pause while the machines are running. Or selecting too many badly produced pieces.
Add hardware architecture describing the various Docker container that are existing.
Is your feature request related to a problem? Please describe.
It does not impact user experience, but it results in an inconsistent programming style
Describe the solution you'd like
Consistent programming style according to the target architecture specified in main.go
Is your feature request related to a problem? Please describe.
People starting to work with our system are overwelmed by the choices they can do and how everything works together.
Describe the solution you'd like
We should write a training doc on how to start working with the system. Example components:
Is your feature request related to a problem? Please describe.
We did multiple projects where we established a direct link from PowerBI to our API.
Describe the solution you'd like
Let's give that to the community by providing an example.
api/openapi is not finished yet. Update it based on the golang/factoryinsight/cmd/http.go
Actual units are wrong if orders are wrongly scanned multiple times / or scanned overlapping.
When orders are scanned multiple times it, it should only be stored once.
Multiple orders are successfully filtered out. However, the current node-red flow still causes the count to go up everytime something is added (even if the order itself is filtered out).
Change node-red script?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.