Open AcMetelka opened 4 months ago
OK něco jsem pošolichal, odstranil negativní důsledek, ale nehledal až tak příčinu, na to nemám znalost a čas zjišťovat. S pomocí AI 😄 jsem vygeneroval proměnnou myLastVarMapping , na základě které se eviduje poslední na PLCComS odesílaná hodnota a v případě opakování té samé se odeslání vynechá. Tak nějak to funguje. 😄
private Collection<PlccomsVar> onList(Collection<PlccomsVar> listedVars) {
int blacklistedCount = 0;
Map<String, Integer> blacklistedCountByPattern = new HashMap<>();
List<String> unmappedVars = new ArrayList<>();
AtomicReference<String> myLastVarMapping = new AtomicReference<>("");
.....
try {
mqttClient.subscribe(varMappingsByTopic.keySet(), (topic, message) -> {
VarMapping varMapping = varMappingsByTopic.get(topic);
String inputValue = new String(message.getPayload());
if (!varMapping.destination.equals(myLastVarMapping.get())) {
String convertedValue = varMapping.config.cmdFunction.apply(inputValue);
LOGGER.log(varMapping.config.logLevel, "MQTT->PLC: {},{} -> {},{}",
topic, inputValue, varMapping.destination, convertedValue);
plccomsClient.setVar(varMapping.destination, convertedValue);
}
myLastVarMapping.set(varMapping.destination);
});
} catch (MqttException e) {
LOGGER.error("Failed to subscribe to topic(s)", e);
}
Ahoj,
To je divne. Jsi si jisty, ze neni pricina uz MQTT zdroj? Pripojil bych testovaciho MQTT clienta a zkontroloval to.
Pri startu, kdy se mapovani generuje, by to melo logovat napr:
Mapping from command topics: plc-fve/bms-b/totalcurrent/set->FVECURRENT, plc-fve/bms-b/totalpower/set->FVEVOLTAGE
ale netestoval jsem to.
Jinak, ja prevod z MQTT na PLC se pouzival a zadny problem jsem neregistroval. Zapsani stejne hodnoty nekolikrat je ale mozne prehlednout, protoze realny vysledek je vetsinou stejny.
Ahoj, nevím, co dělám špatně, nebo jestli se mi nějak zle zkompilovala aplikace v dockeru, ale: Při přidání var-mappingů do yaml.conf se každá hodnota z MQTT posílá na PLCComS server tolikrát, kolik je namapovaných proměnných. Nemyslím, že mi to dělalo před časem, když jsem už aplikaci používal, ale to jsem vyčítal data z PLC a neposílal téměř žádná směrem MQTT > PLC, tak jsem to možná jen nezjistil.
Příklad konfigurace:
Log z dockeru, je vidět, že každou hodnotu obdrženou z MQTT pošle dvakrát na PLCComS. Kdybych měl proměnných 10, tak pošle každou 10x.
Toto je log z PLCComS, kde je vidět, že pošle každou proměnnou vícekrát:
Ještě další příklad, kde se posílalo všech 12 definovaných proměnných a bylo jedno, jestli byly definovány s maskováním části za poslední tečkou, která se liší, nebo jsem je po jedné rozepsal do conf.yaml.