From e5a3bdddff5901d3d0d92e59b303f2e10ecece5c Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Mon, 15 Jun 2026 13:32:40 -0400 Subject: [PATCH 1/5] Doc: Warning regarding difference between SP/H and DS Session Configs --- docs/modules/ROOT/pages/config/current/config.adoc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/modules/ROOT/pages/config/current/config.adoc b/docs/modules/ROOT/pages/config/current/config.adoc index b447fcf2..cb92252b 100644 --- a/docs/modules/ROOT/pages/config/current/config.adoc +++ b/docs/modules/ROOT/pages/config/current/config.adoc @@ -12,6 +12,15 @@ These files are not used by the mod anymore, but are left for reference for anyo If you are having issues connecting to the Web Server or Serial Device, please update your configuration to the new system. Refer to the old/legacy configuration files located in the `FactoryGame/Configs/FicsitRemoteMonitoring` folder for Ficsit Remote Monitoring. +[WARNING] +==== +Please note that there is a difference between the Single Player/Host Session configuration and the Dedicated Server configuration. The Single Player/Host Session configuration is used for single player games and when hosting a multiplayer session, while the Dedicated Server configuration is used for dedicated servers. + +Make sure to update the correct configuration based on your use case as using the Single Player/Host Session configuration for a dedicated server or vice versa may lead to unexpected behavior or issues with the mod. + +A fix is in the works to resolve the confusion between the two configurations, but in the meantime, please make sure to update the correct configuration based on your use case. +==== + Single Player/Host Session Config Location image:https://raw.githubusercontent.com/porisius/FicsitRemoteMonitoring/refs/heads/main/docs/modules/ROOT/pages/config/images/main_menu.png[Single Player/Host Session Config Location] From 313e8ceb811632f987993f7c7bf7fc5560a93ce0 Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Tue, 16 Jun 2026 16:29:58 -0400 Subject: [PATCH 2/5] docs: better docs --- .../ROOT/pages/config/current/config.adoc | 117 ++++++++++++++---- 1 file changed, 91 insertions(+), 26 deletions(-) diff --git a/docs/modules/ROOT/pages/config/current/config.adoc b/docs/modules/ROOT/pages/config/current/config.adoc index cb92252b..a4e95284 100644 --- a/docs/modules/ROOT/pages/config/current/config.adoc +++ b/docs/modules/ROOT/pages/config/current/config.adoc @@ -27,109 +27,174 @@ image:https://raw.githubusercontent.com/porisius/FicsitRemoteMonitoring/refs/hea Dedicated Server Config Location image:https://raw.githubusercontent.com/porisius/FicsitRemoteMonitoring/refs/heads/main/docs/modules/ROOT/pages/config/images/server_manager.png[Dedicated Server Location] -General Configurations: +== NOTE: -[cols="2,4"] +The configuration values are stored in the GameUserSettings.ini file, which can be found in the following locations: + +- Single Player/Host Session: + +`%localappdata%/FactoryGame/Saved/Config/Windows/GameUserSettings.ini` + +- Windows Dedicated Server: + +`/FactoryGame/Saved/Config/WindowsServer/GameUserSettings.ini` + +- Linux Dedicated Server: + +`/FactoryGame/Saved/Config/LinuxServer/GameUserSettings.ini` + +The base configuration formats for Ficsit Remote Monitoring are the same for both Single Player/Host Session and Dedicated Server, but the configuration key prefixes are different. + +Single Player/Host Session configuration keys are prefixed with `FicsitRemoteMonitoring` while Dedicated Server configuration keys are prefixed with `FicsitRemoteMonitoring.Server`. + +Example: JSON Debug Mode + +Single Player/Host Session: + +`FicsitRemoteMonitoring.Debug.JSONDebug` + +Dedicated Server: + +`FicsitRemoteMonitoring.Server.Debug.JSONDebug` + +The configurations listed below will display their unique configuration key. Ensure you use the correct configuration key prefix for both Single Player/Host Session and Dedicated Server to avoid confusion. If your configuration is not valid, when the game saves the configuration, it will remove them. Always double check your configuration keys and values to ensure they are correct. + +[cols="1,1,2,4"] |=== -|Configuration |Description +4+| === General Configurations: === + +|Key |Type |Configuration |Description + +|.General.SplineSampleDistance +|mFloatValue |Spline Sample Distance |Distance along spline to measure for each spline point for getTrainRails, getBelts, getPipes, etc Lower numbers will create more data points for Spline JSON Objects, but potentially hurts performance. Recommendations are about 50-100 for Game-world accuracy or fine minimap, and 200-1000 for Low-res preview or performance focused use cases. -|=== +4+| +4+| === Debug Configurations: === -Debug Configurations: - -[cols="2,4"] -|=== -|Configuration |Description +|Key |Type |Configuration |Description +|.Debug.JSONDebug +|mIntValue |JSON Debug Mode |If False, removes the unnecessary white spaces and line breaks, shortens and reduces amount needed to transmit. If True, JSON becomes more human readable. -|=== +4+| +4+| === HTTP and Websocket Configurations: === -[cols="2,2,1,4"] -|=== -|Configuration |Description +|Key |Type |Configuration |Description +|.uWS.Autostart +|mIntValue |Autostart Web Server |True = Autostarts Web Server at Game Start/Load +|.uWS.Port +|mStringValue |Web Server Port |TCP Port for Web Server, Default: 8080 +|.uWS.Root +|mStringValue |File Root Location |File location of web root, Default: Leave blank or "" for default location. +|.uWS.AuthenticationToken +|mStringValue |API Authentication Token |Auto-generated token that can also be found in the logs at startup. This is used to authenticate certain API requests to prevent unauthorized access. If left blank, it will auto-generate a token at startup. +|.uWS.PushCycle +|mStringValue |Websocket Push Cycle |Push cycle for WebSocket updates, Default: 5.0 + +4+| +4+| === Serial/RS232 Configurations: === -|=== - -Serial/RS232 Configurations: - -[cols="2,4"] -|=== -|Configuration |Description +|Key |Type |Configuration |Description +|.Serial.Port +|mStringValue |Serial Port |Serial/RS232 Port (Requires ArduinoKit). Changes from UE4Duino, you must specify the device name (i.e. COM3) Linux/Mac operations have not been explored at this time to document, but are supported. +|.Serial.BaudRate +|mStringValue |Baud Rate |Serial/RS232 Baud Rate (Requires ArduinoKit) +|Serial.Autostart +|mIntValue |Autostart Serial Device |True = Starts serial communication at startup (Requires ArduinoKit) +|.Serial.TickDelay +|mStringValue |Serial Tick Delay |Delay between updates (in seconds) to serial device. This is only used for cases with Auto_Serial. (Requires ArduinoKit) +|.Serial.StackSize +|mStringValue |Serial Stack Size |Maximum buffer size (Requires ArduinoKit) -|=== +4+| +4+| === Webhook Notifications: === -Webhook Notifications: +|Key |Type |Configuration |Description -[cols="2,4"] -|=== -|Configuration |Description +|.DiscIT.URL +|mStringValue +|Webhook URL Path +|URL Path to send Webhook Notifications +|.DiscIT.DerailJSON +|mStringValue |Train Derailment JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.OutageJSON +|mStringValue |Power Outage JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.PwrUPSJSON +|mStringValue |Battery Notification JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.Battery +|mStringValue |Battery Notification Levels -|Array of float values to trigger Battery Notification webhook at certain Battery Levels (in %) +|Array of float values to trigger Battery Notification webhook at certain Battery Levels (in %), expects comma separated values, i.e. "20,40,60,80" +|.DiscIT.PlayerOnline +|mStringValue |Player Online JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.PlayerOffline +|mStringValue |Player Offline JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.ResearchJSON +|mStringValue |MileStone/MAM JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.HardDriveJSON +|mStringValue |Hard Drive JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.FlavorTextJSON +|mStringValue |Flavor Text JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.Doggo +|mStringValue |Doggo JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. +|.DiscIT.TrainErrorJSON +|mStringValue |Train Error JSON File |Absolute path of Webhook JSON File. If Blank/"", then uses the default. From 330f340c31f6c1b9d446dfe68054ade03010bb8b Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Tue, 16 Jun 2026 19:24:09 -0400 Subject: [PATCH 3/5] getTruckStation's User Defined Name --- .../Private/RemoteMonitoringLibrary.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp b/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp index ff8ed8b0..9f6d5bce 100644 --- a/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp +++ b/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp @@ -17,6 +17,7 @@ #include "FGTrainStationIdentifier.h" #include "FicsitRemoteMonitoring.h" #include "FicsitRemoteMonitoringModule.h" +#include "Buildables/FGBuildableDockingStation.h" #include "Endpoints/World/Research.h" #include "Settings/SMLOptionsLibrary.h" #include "Logging/StructuredLog.h" @@ -27,6 +28,7 @@ #include "Policies/CondensedJsonPrintPolicy.h" #include "Serialization/JsonSerializer.h" #include "Serialization/JsonWriter.h" +#include "WheeledVehicles/FGDockingStationIdentifier.h" TSharedPtr URemoteMonitoringLibrary::getActorJSON(AActor* Actor) { @@ -527,6 +529,12 @@ TSharedPtr URemoteMonitoringLibrary::CreateBuildableBaseJsonObject( { JObject->Values.Add("Name", MakeShared(StationIdentifier->GetStationName().ToString())); } + } else if (AFGBuildableDockingStation* TruckStation = Cast(Buildable)) + { + if (AFGDockingStationIdentifier* StationIdentifier = TruckStation->GetStationIdentifier()) + { + JObject->Values.Add("Name", MakeShared(StationIdentifier->GetStationName().ToString())); + } } else if (AFGBuildableCircuitSwitch* PowerSwitch = Cast(Buildable)) { JObject->Values.Add("Name", MakeShared(PowerSwitch->GetBuildingTag_Implementation())); From 5ee35bb6b03f57dd5b17cd4093f77362deca3264 Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Tue, 16 Jun 2026 19:24:30 -0400 Subject: [PATCH 4/5] getVehicles' User Defined Name --- .../Private/Endpoints/Travel/Vehicles.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Vehicles.cpp b/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Vehicles.cpp index 42a8ab75..b5816c0d 100644 --- a/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Vehicles.cpp +++ b/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Vehicles.cpp @@ -7,6 +7,7 @@ #include "RemoteMonitoringLibrary.h" #include "Components/SplineComponent.h" #include "Kismet/KismetSystemLibrary.h" +#include "WheeledVehicles/FGDockingStationIdentifier.h" #include "WheeledVehicles/FGVehiclePathPreset.h" #include "WheeledVehicles/FGVehicleSubsystem.h" #include "WheeledVehicles/FGWheeledVehicleIdentifier.h" @@ -184,7 +185,7 @@ TArray> UVehicles::getVehicles_Helper(UObject* WorldConte //AFGDrivingTargetList* TargetList = VehicleInfo->mTargetList; const FString VehiclePathName = "PathName"; //GetPathNameForTargetList(TargetList); - JVehicle->Values.Add("Name", MakeShared(WheeledVehicle->mDisplayName.ToString())); + JVehicle->Values.Add("Name", MakeShared(VehicleInfo->GetVehicleName().ToString())); JVehicle->Values.Add("ClassName", MakeShared(UKismetSystemLibrary::GetClassDisplayName(WheeledVehicle->GetClass()))); JVehicle->Values.Add("location", MakeShared(getActorJSON(WheeledVehicle))); JVehicle->Values.Add("PathName", MakeShared(VehiclePathName)); From 341c5c236a4730f4639fe91e50bcfc7ee783c0b5 Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Wed, 17 Jun 2026 23:41:51 -0400 Subject: [PATCH 5/5] bump version (and doc formatting fixes) --- FicsitRemoteMonitoring.uplugin | 4 ++-- docs/modules/ROOT/pages/commands.adoc | 6 +++--- docs/modules/ROOT/pages/config/current/config.adoc | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/FicsitRemoteMonitoring.uplugin b/FicsitRemoteMonitoring.uplugin index cf9daafc..fbd2cbba 100644 --- a/FicsitRemoteMonitoring.uplugin +++ b/FicsitRemoteMonitoring.uplugin @@ -1,8 +1,8 @@ { "FileVersion": 3, "Version": 1, - "VersionName": "1.5.0", - "SemVersion": "1.5.0", + "VersionName": "1.5.1", + "SemVersion": "1.5.1", "AcceptsAnyRemoteVersion": true, "FriendlyName": "Ficsit Remote Monitoring", "Description": "Statistical and GeoLocation Monitoring for Satisfactory", diff --git a/docs/modules/ROOT/pages/commands.adoc b/docs/modules/ROOT/pages/commands.adoc index 984dc4c2..24de757f 100644 --- a/docs/modules/ROOT/pages/commands.adoc +++ b/docs/modules/ROOT/pages/commands.adoc @@ -28,15 +28,15 @@ Usage: `/frm debug ` Intended for getting outputs of API Endpoints to save for future information or debugging/troubleshooting. -=== info +== info Info will display back to the in-game chat, this is useful for quickly checking if JSON populates. -=== file +== file Info will be saved as file to the *host's* Debug folder located in the Remote Monitoring's Mod Folder. -=== test +== test Usage: `/frm test endpoints` Dumps all API endpoints to the *host's* Debug Folder for testing and debugging purposes. diff --git a/docs/modules/ROOT/pages/config/current/config.adoc b/docs/modules/ROOT/pages/config/current/config.adoc index a4e95284..6f3e1349 100644 --- a/docs/modules/ROOT/pages/config/current/config.adoc +++ b/docs/modules/ROOT/pages/config/current/config.adoc @@ -27,7 +27,7 @@ image:https://raw.githubusercontent.com/porisius/FicsitRemoteMonitoring/refs/hea Dedicated Server Config Location image:https://raw.githubusercontent.com/porisius/FicsitRemoteMonitoring/refs/heads/main/docs/modules/ROOT/pages/config/images/server_manager.png[Dedicated Server Location] -== NOTE: +NOTE: The configuration values are stored in the GameUserSettings.ini file, which can be found in the following locations: + - Single Player/Host Session: +