Open Signals

Open Signals

23k Downloads

Block UUID changes

zweann opened this issue · 22 comments

commented

When I use a signal controller block with OpenComputers, the block UUID suddenly changes after a while. Even when the computer is running permanently.
Can you help?

commented

Leider konnten wir das Problem immer noch nicht reproduzieren. Kannst du uns wenn möglich mal deine Welt auf der das passiert und dein Modpack so wie es bei dir konfiguriert ist zukommen lassen? (Wenn nötig auch privat über Discord oder so)

commented

@zweann Besteht die Möglichkeit, dass wir mal direkt miteinander kommunizieren können über Discord o.ä. Wo du uns das Problem mal zeigen kannst? Ich hatte jetzt beim Testen keine Änderungen der UUIDs.

Liebe Grüße
Jeronimo

commented

@Jeronimo97 Können wir gern machen! zweann heiße ich dort.

commented

@zweann Nur der Name bringt mir glaube nicht viel. 😅 Aber du kannst gerne auf unseren offiziellen Discord Server kommen https://discord.com/invite/NTVpMVjAAR.

commented

Hello @zweann we have not had this issue before, we will further investigate, although this might hint at a issue with OC.

Cheers
~MrTroble

commented

Hi,
is there a particular pattern to when this issue occurs? Did you do anything in particular before the issue occurred?
Mod update, game restart, re-link, block re-placed, redstone mode used, ...
I can't reproduce the problem, any hint is desirable.
The addresses are generated by OpenComputers, we don't really have any influence on that.
'This is not the case for block components, they will always get a new address after being broken and placed again.' (https://ocdoc.cil.li/component:component_access)

Greets
Jeronimo

commented

Hi,
ich versuch es mal auf deutsch zu beschreiben, das wird besser klappen:
Der Fehler ist leider nicht reproduzierbar und passiert völlig zufällig. Es betrifft tatsächlich auch nicht alle Signal-Blöcke. Die Blöcke, die es betrifft, werden von mir aber während der gesamten Zeit nicht berührt oder neu mit einem Signal verlinkt. Mein Lua-Script selbst steuert nur eventbasiert die Signalblöcke anhand ihrer jeweiligen UUID an (klappt fehlerfrei bei richtiger UUID).

Viele Grüße
zweann

commented

Könntest du mal dein Lua-Script teilen? Ich will mal investiegieren und schauen, ob ich den Fehler reproduzieren kann. Welche Version der Signalmod und von OpenComputers verwendest du? Welche Mods hast du noch installiert?

commented

Hier ist ein Auszug aus meinen Script, das die Signale ansteuert (habt Nachsicht =) )

local io = require("io")
local event = require ("event")
local component = require("component")

function Split(s, delimiter)
    result = {};
    for match in (s..delimiter):gmatch("(.-)"..delimiter) do
        table.insert(result, match);
    end
    return result;
end

function signalStellen(signal, bild)
  local f = io.open("definition/signale.txt", "r")
  local content = f:read("*a")
  f:close()
  for key, value in next, Split(content, "\n") do
    sigName = Split(value, ";")[1]
    adr = Split(value, ";")[2]
    if sigName == signal then
      sigUnter = Split(sigName, "#")[2]
      w = component.proxy(adr)
      sigTypes = w.getSupportedSignalTypes()
      sigType = sigTypes[sigUnter]
      w.changeSignal(sigType,tonumber(bild))
    end
  end
end

eventRed = event.listen("redstone_changed", readRs)

while running do
  os.sleep()
  --readFromQueue()
end

Die Signale sind in einer Text-Datei defniert:

L1#sh_light_bottom;5c48c2a4-03c9-4a9d-be99-aa3188aa7ec9;1
L2#sh_light_bottom;8eb962a8-2055-4d4e-9271-d9ac7189078e;1
L3#sh_light_bottom;4f0a457d-c041-40f4-a95e-a84df0944a66;1
A#kombisignal_main;1a644eec-aee4-4ac9-9d80-717115b92f42;1
A#zs2;1a644eec-aee4-4ac9-9d80-717115b92f42;0
A#zs3;1a644eec-aee4-4ac9-9d80-717115b92f42;0

Ich benutze GIRSignals-1.0.899 und OpenComputers-MC1.12.2-1.7.5.218.

Weitere Mods:

  • AutomatedRedstone-1.12.2-6.1.6
  • RTM2.4.22-40_forge-1.12.2-14.23.2.2611
  • NGTLib2.4.19-35_forge-1.12.2-14.23.2.2611
  • OpenComputers-MC1.12.2-1.7.5.218
  • ProjectRed-1.12.2-4.9.4.120-Base
commented

Frage: Wie oft wird signalStellen ausgeführt? Wie merkst du das sich die UUIDs aendern? Was genau passiert dann?

Anmerkung zu w = component.proxy(adr) und sigTypes = w.getSupportedSignalTypes():
proxies sind eigentlich dafür gedacht zwischen gespeichert zu werden, genau so wie die liste der supporteten signal typen denn diese ändern sich nicht und es besteht die Möglichkeit das es Performance technisch nicht so gut ist. @Jeronimo97 Wir sollten das besser noch mal deutlicher erklären in der Wiki. Es besteht die moeglichkeit, dass es da einen Zusammenhang gibt. (@Jeronimo97 Further testing)

Eine statistische Frage aus Feedback gründen: Warum nutzt du nicht unseren redstone mode vom controller aus wenn du es so wie so mit RS ansteuerst? Is der unzureichend oder schlecht zu bedienen?

Cheers
~MrTroble

commented

Vielen Dank für die Erklärungen!
signalStellen wird nur dann aufgerufen, wenn eine Fahrstraße eingestellt wird, also nicht sehr oft. Die UUID ändert sich aber wahllos. Mal kann ich die Signale dutzende Male hintereinander stellen ohne Probleme, mal ändert sich die UUID nach nur ein Mal.
Ich werde dann mal versuchen, die Signaltypen in eine statische Datei zu hinterlegen, vielleicht hilft das.

Ich habe mich in meiner Infrastruktur dazu entschieden, jedem "Baustein" (Weichenantrieb, Rückmelder, Signale) einen eigenen Controller zu verpassen, da ich dann diese einzeln per UUID ansteuern zu können, ohne überall noch definieren zu müssen, welche Seite des Blocks und welche Kabelfarbe. Zudem kann ich so meine komplette Infrastruktur mit einem Kabeltyp verbinden.

commented

die Signaltypen in eine statische Datei zu hinterlegen soweit musst du glaub ich nicht gehen xD

Es reicht die proxy und die signaltypen in nem table global ab zu speichern, wenn das programm eh die ganze zeit lauft bleibt das dann in der memory vom rechner gespeichert und muss nich noch mal gequerried werden, ich kann auch noch nicht sagen ob das wirklich etwas damit zu tun hat.

commented

Alles klar! Habt ihr eine Doku für alle Signaltypen? Dann hinterlege ich in meiner Signalliste einfach direkt den richtigen Table-Eintrag.

commented

Naja haben wir nich, das ist abhaengig von version und signal system, sowie konfigurierten signalen, Das beste was du machen kannst ist einmal zu programm start:

tableOfAllProxys = {};
tableOfAllTableTypes = {};

for UUID in adresses do
    w = tableOfAllProxys[UUID] = component.proxy(UUID)
    tableOfAllTableTypes[UUID] = w.getSupportedSignalTypes()
end

und dann wenn du ein event rein bekommst die proxy und den table mit den supported signal typen aus den caches zu holen e.g.

for uuid, proxy in pairs(tableOfAllProxys) do
    types = tableOfAllTableTypes[uuid]
    proxy.changeSignal(types[mytype], number)
end
commented

Ich werd das alles mal ausprobieren. Vielen Dank @MrTroble und @Jeronimo97 für eure schnelle Hilfe!

commented

Kein Thema wir werden auch weiter testen und sehen ob wir das irgendwie reproduzieren können.

commented

Ich konnte den Fehler reproduzieren:
Wenn ich den OC-PC neu starte, ändern sich einige UUIDs. Allerdings nicht alle, immer nur eine verschiedene Anzahl von Signal Controller Blöcken, die mit der geringsten Entfernung an den PC angeschlossen sind. Bestimmte andere Blöcke behalten ihre UUID permanent.

commented
commented

@zweann Wir haben möglicherweise den Fehler behoben. Ich hab zwar schon durchgetestet, aber wenn du auch noch einmal testen willst, kannst du hier die Version nehmen. https://ci.appveyor.com/api/buildjobs/4i4u9lq26gtd86fv/artifacts/build%2Flibs%2FGIRSignals-1.0.968.jar

Liebe Grüße
Jeronimo

commented

Ich werde hier jetzt noch ein paar Dinge los die evtl. helfen könnten ich mir aber nicht sicher bin:

  • Den Controller weiter weg vom Signal stellen
  • Den Controller nicht unmittelbar neben andere component von OC stellen
commented

Not supported anymore