Einführung von Joe Herwig
Die in dieser Kurzeinführung aufgenommenen Beispiele beziehen sich auf die am 2022-02-13 aktuelle Experimental Version des FlyByWire A32nx. Sie dürften aber in weiten Teilen auch in der aktuellen DEV-Version funktionieren.
Somit sind z. B. Offsets, Variablen, Events etc. auf dieses Flugzeug bezogen. Die grundsätzliche Funktionalität und Herangehensweise ist jedoch auf die im Januar 2022 aktuellen Versionen von MSFS, FSUIPC, LINDA, A32nx-LINDA-aircraft-module usw. bezogen.
Da es weder sinnvoll ist, Dokumentation zu duplizieren, bitte ich euch, erst mal in die Dokumentation der genutzten Anwendungen zu schauen. Alle Anwendungen haben gute Dokumentation oder sind recht intuitiv, so dass eine Abschreiben der Anleitungen hier einfach keinen Sinn ergibt.
Bitte nehmt es mir nicht übel, dass ich durchaus auch englischsprachige Dokumentation verlinkt habe. Dabei handelt es sich zumeist um die original Dokumentation und damit um "die Wahrheit" ;-)
Nicht immer ist diese in gutem Deutsch erhältlich. Wer tiefer in die Materie einsteigen möchte, kommt ohnehin um ein Mindestmaß an englisch Kentnissen nicht umhin, da in der Programmierung englisch einfach der Standard ist.
Bitte habt auch auf dem Schirm, dass sich die verlinkten Websites, Tools etc. permanent und super schnell weiter entwickeln.
Sollte also mal was nicht 1:1 zu dem passen, wie es sich euch darstellt, versucht bitte erst die Systematik dahinter zu verstehen, bevor ihr auf mich zukommt, weil ein "Button" auf einmal rechts statt links, oder grün statt orange ist. Danke!
Welche Addon Tools könnten sinnvoll sein?
Download von http://www.fsuipc.com/
Registrierte Version empfohlen aber sicher nicht für jeden Notwendig.
Links zu Shops auf der o. g. Seite.
bei FSUIPC mitgeliefert - ist ein geniales Tool, um unkompliziert eigene Projekte umzusetzen.
Beispielsweise Gauges, die auf jedem aktuellen Webbrowser ohne Performance-Einbußen laufen wie z. B. Portable Sim Panels
Oder auch ein Arduino-Projekt das sich per Wifi mit dem Netzwerk verbindet, und z. B. Korry-Switches im Overhead oder bis zu 128 Annunciators versorgt.
Download von https://www.avsim.com/forums/forum/427-linda-downloads/
Sehr hilfreich bei VRinsight MCP Panels.
Erleichtert das Zuordnen von Tasten und encodern allerdings ohne Analogachsen!
Da LINDA donationware ist, empfiehlt sich für zufriedene Nutzer die Spende über den in der Software enthaltenen "PayPal donate" Button. Das ermöglicht die Weiterentwicklung.
Wird im LINDA-Eigenen Editor auf einen Funktionsnamen mit der rechten Maustaste geklickt, wird die Funktion direkt ausgeführt, ohne dass sie irgendwo zugewiesen werden muss. Das kann gerade beim Schreiben von LINDA Modules und dem Testen der Funktionen sehr hilfreich sein.
[EventFiles] 0=A32nx 1= A32X-FBW1 2=A32X-FBW2
der die entsprechenden Mobiflight Event Files im FSUIPC root folder - also da wo auch die FSUIPC7.ini liegt - für LINDA verfügbar macht. Erfolgt das nicht, funktionieren in LINDA die ganzen Features nicht, die auf HVars zugreifen müssen.
Mitgeliefert werden die verschiedenen Event-Files von FSUIPC im \EventFiles
Unterordner.
[WAPI] EnableWAPI=Yes
ist notwendig, damit FSUIPC7 sich mit dem WASM im MSFS verbinden und die LVars / HVars abrufen und aktualisieren kann.
Seit FSUIPC v7.2.15 gibt es gem. Release-Notes einen Parameter der in der FSUIPC.ini eingefügt werden kann, und dann
[General]
verwendet werden kann: UseAirLocForProfiles=Yes
Dies ermöglicht die Profilanpassung anhand des aircraft.cfg-Ordners, was die Profilanpassung bei der Verwendung verschiedener liveries verbessern kann
WASM wurde auf 0.5.6 aktualisiert: Änderungen sind:- neuer Ini-Parameter UseAirLocForHvars hinzugefügt, um den Abgleich von Hvar-Dateien anhand des Namens des Air-File-Ordners zu ermöglichen
Diesen im
[GENERAL]als
UseAirLocForProfiles=Yeshinzufügen. Das sorgt in aktuelleren FSUIPC Versionen dafür, dass anstelle des Aircraft Substrings aus dem Title der aircraft.cfg die Referenz auf das Airfile genommen wird.Natürlich geht es auch ohne, allerdings kann es dann verstärkt dazu führen, dass man sich mit der "0 Hvars found" Problematik auseinander setzen muss.
unter....\Community\fsuipc-lvar-module\FSUIPC_WASM.ini
bekam
hinzugefügt.
Die Erhöhung von 5 auf 60 Sekunden kann dabei helfen, wenn ein Teil der Variablen funktioniert, ein anderer Teil jedoch nicht. Dann ist ggf. einfach nur zum Zeitpunkt der Variablensynchronisation noch nicht alles initialisiert gewesen.
Siehe auch FSUIPC.ini
Variablen Prefix | System Name | Beschreibung | Einheiten |
---|---|---|---|
A | Simulation Variable | Ruft eine angegebene SimVar aus einem Simulationsobjekt ab. | Ja |
B | Input Events | Ruft den Wert des angegebenen Eingabeereignisses ab (weitere Informationen findet ihr unterDefinitionen von Eingabeereignissen ). | Nein |
C | Callback Variables | Dieses Variablenpräfix wird nur bei GPS-Variablen verwendet. | Ja |
E | Environment Variable | Dies ist eine Umgebungsvariable. Siehe den Abschnitt über Environment Variables. | Ja |
F | Function Library | Dies bezeichnet eine eingebaute Funktion aus der Funktionsbibliothek. Siehe den Function Library Absatz für weitere Details. | Nein |
G | Gauge Variables | Ruft eine Variable ab, die zur Übertragung von Daten ohne Einheiten zwischen Gauges (Anzeigeinstrumenten) verwendet werden kann. | Nein |
H | HTML Event | Ein HTML-Ereignis, das an das JavaScript gesendet wird. Diese werden in den Model Behaviorsdes Cockpit-Panels definiert und gehen nur in eine Richtung: vom Panel zum JavaScript/HTML-Code. H: -Events müssen nicht im Voraus definiert werden (ähnlich wie L: -Vars) und können mit einer beliebigen zusammenhängenden Folge von alphanumerischen Zeichen benannt werden. Jedes Cockpit-Panel im Microsoft Flight Simulator sendet eine Reihe von cockpitspezifischen H: -Events, für die es kein analoges Tastenereignis gibt, wie z. B. das Drücken einzelner Tasten auf einem FMS-Computer. Diese individuellen panel-spezifischen Ereignisse können von JavaScript-Instrumenten empfangen werden. |
Nein |
I | Instrument Variable | Wird für Variablen innerhalb von Komponenten verwendet, wobei der Geltungsbereich der Variablen und seine untergeordneten Kindelemente sind. | Nein |
K | Key Event ID | Dies ist eine spezifische Variable für eine Event ID für Benutzereingaben.
(>K:TOGGLE_ICS) Beachten Sie, dass bei einigen Schlüsselereignissen ein oder mehrere Werte gesendet werden müssen. Weitere Informationen hierzu findet Ihr im Abschnitt SimVars And Keys. |
Nein |
L | Local Variable |
Ruft eine benutzerdefinierte lokale Variable ab und/oder erstellt sie. Wenn die lokale Variable nicht in einer der zugehörigen Dateien definiert wurde, wird sie erstellt und beim ersten Verweis auf 0 gesetzt (und bleibt zwischen den Durchläufen nicht bestehen). Sie können jedoch mit Hilfe der folgenden Dateien einen Standardwert für lokale Variablen definieren:
Diese variable kann gelesenund im Bereich des Benutzerflugzeugs beschrieben (gesetzt) sowie von AI Aircraft gelesen werden. Wichtig! " |
Nein |
M | Mouse Variable | Ermittelt den Zustand der Maus zur Verwendung in Mausklick-Handlern. Bitte beachten Sie den Mouse Variables Abschnitt | Nein |
O | Component Variable | Wird für Variablen innerhalb von Komponenten verwendet, wobei der Scope die Komponente selbst ist. | Nein |
P | Program Variable | Identisch zur Environment Variable (Umgebungsvariable) E: |
Ja |
R | Resource Variable | Dies wird verwendet, um einen Wert aus einer externen Ressource abzurufen, die entweder eine legacy -Hilfe-ID oder eine Tooltip-ID oder etwas aus einer benutzerdefinierten Lokalisierungsdatei sein kann. Siehe Resource Variables für weitere Details. | |
X | Calculator Variable / CalculatorCode | TDiese Variable wird ausschließlich bei der Erstellung von Mission Definitions verwendet und dient zur Referenzierung von Parametern, die im <CalculatorParameterList> -Element innerhalb einer RPN-Berechnung (innerhalb einer <CalculatorFormula> ) erstellt wurden. |
Nein |
W | Wwise (Audio) Event | Dies ist eine Wwise-Ereignis-ID und ermöglicht es Ihnen, ein Wwise-Ereignis auf der Grundlage einer von der XML-Datei gesteuerten Logik auszulösen. Dies macht sie flexibler als die in sound.cfg definierten Sounds und die AnimSoundEvents, obwohl sie komplexer zu verwenden sind. |
Nein |
Z | Custom SimVar | Dies sind benutzerdefinierte Variablen, die in der Simulation eines Objekts gespeichert werden. Der Variablenname ist nicht im Code der Microsoft Flight Simulator -Engine vordefiniert, so dass jeder eine Variable mit dem gewünschten Namen erstellen kann, solange sie nicht mit einer bestehenden SimVar kollidiert. | Nein |
Ein FSUIPC Preset ist ein Name, der einem - auch parametrisierbaren - Calculator Code zugewiesen wird. Calculator Code-Presets werden dem FSUIPC7 durch zwei Dateien bekannt gemacht, die sich im Stammverzeichnis des FSUIPC7 befinden müssen. Das Format dieser Dateien ist identisch und sie müssen die Namen events.txt
oder myevents.txt
haben.
Es müssen nicht beide Dateien verwendet werden, aber beide werden geladen, wenn sie vorhanden sind. Sind sie nicht vorhanden, ist es für die weiterne Funktionen von FSUIPC unerheblich.
Da mit jedem Flieger und jedem Release neue Presets hinzugefügt werden, kann nahezu täglich eine neue Version der events.txt von Mobiflight HubHop heruntergeladen[1] werden.
A320_Neo_CDU_2_BTN_X#(>H:A320_Neo_CDU_2_BTN_X) A320_Neo_CDU_2_BTN_Y#(>H:A320_Neo_CDU_2_BTN_Y) A320_Neo_CDU_2_BTN_Z#(>H:A320_Neo_CDU_2_BTN_Z) A32NX_ADIRS_KNOB_1_ATT#2 (>L:A32NX_OVHD_ADIRS_IR_1_MODE_SELECTOR_KNOB) A32NX_ADIRS_KNOB_1_NAV#1 (>L:A32NX_OVHD_ADIRS_IR_1_MODE_SELECTOR_KNOB) A32NX_ADIRS_KNOB_1_OFF#0 (>L:A32NX_OVHD_ADIRS_IR_1_MODE_SELECTOR_KNOB) TCAS_SWITCH_POSITION_STBY#0 (>L:A32NX_SWITCH_TCAS_Position) TCAS_SWITCH_POSITION_TA#1 (>L:A32NX_SWITCH_TCAS_Position) TCAS_SWITCH_POSITION_TA_RA#2 (>L:A32NX_SWITCH_TCAS_Position) //Fly By Wire/A320/Passengers/Crew A32NX_CALLS_EMER_ON_OFF#0 (>L:A32NX_CALLS_EMER_ON) A32NX_CALLS_EMER_ON_ON#1 (>L:A32NX_CALLS_EMER_ON) A32NX_EVAC_CAPT_TOGGLE_CAPT#0 (>L:A32NX_EVAC_CAPT_TOGGLE) A32NX_EVAC_COMMAND_TOGGLE_OFF#0 (>L:A32NX_EVAC_COMMAND_TOGGLE) A32NX_EVAC_COMMAND_TOGGLE_ON#1 (>L:A32NX_EVAC_COMMAND_TOGGLE) NO_SMOKING_AUTO#(L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 == is{1 if{(>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) } } els} (L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 ==if{ 1 if{ 1 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) } } NO_SMOKING_OFF#(L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 0 == is{1 if{(>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) } } els} (L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 ==if{ 1 if{ 2 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 2 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) } } } NO_SMOKING_ON#(L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 2 == is{1 if{(>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) } } els} (L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 1 ==if{ 1 if{ 0 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) 0 (>L:XMLVAR_SWITCH_OVHD_INTLT_NOSMOKING_Position) } } } PUSH_OVHD_CALLS_AFT_OFF#0 (>L:PUSH_OVHD_CALLS_AFT) PUSH_OVHD_CALLS_AFT_ON#1 (>L:PUSH_OVHD_CALLS_AFT) PUSH_OVHD_CALLS_ALL_OFF#0 (>L:PUSH_OVHD_CALLS_ALL)
In FSUIPC werden die Presets leider über einfache Drop-Down Felder. John Dowson von FSUIPC empfiehlt[*] aufgrund der suboptimalen Auswahlmöglichkeit nur die Presets der wirklich geflogenen Flieger aus der heruntergeladenen events.txt in die myevents.txt zu übernehmen.
Natürlich können dort auch selbst ermittelte Einträge von euch eingefügt werden. Allerdings sollte dann die events.txt im FSUIPC Installationspfad so umbenannt werden, dass sie einen anderen Namen erhält.
So z. B. nach events.orig.
Zu den FSUIPC Offsets gibt es mit FSUIPC eine sehr umfangreiche Dokumentation. Diese hier wiederzugeben ergibt keinen Sinn. Bitte schaut einfach in eurem Dokumentationsordner von FSUIPC nach.
DevTools
die für uns zumeist interessanten Variablen werden in der
z. B.
John Dowson - Entwickler von FSUIPC - empfiehlt die events.txt als events.orig abzuspeichern und nur für die wirklich geflogenen Flugzeuge die Abschnitte in die myevents.txt raus zu kopieren.
Controls List for MSFS Build 999.txt
in der mitgelieferten FSUIPC Doku
Nachdem der Server mit dem MSFS verbunden ist, kann auf der Seite MSFS Variables über die Buttons "Log LVars" und "Log HVars" die Liste der aktuell verfügbaren - damit auch der zum derzeit geladenen Flugzeug passenden - Variablen im "WASM Module Log" Fenster darunter aufgelistet werden.
Dort lassen Sie sich durch
[Click]
auf den ersten, und [Shift]+[LeftClick]
auf den letzten Eintrag alle Markieren und per [STRG]+[C]
heraus kopieren. Nun können Sie z. B. im Texteditor in eine neue Datei eingefügt und darin einfach gesucht werden.Weitere Dokumentation und Beispiele sich mit diesem zu verbinden, findet ihr unter http://fsuipcwebsockets.paulhenty.com/#jsconnection
Ist eine SDK-Demo-Anwendung die u. a. dafür genutzt werden kann, die aktuell verfügbaren LVars raus zu ziehen.
Download bei der Microsoft SDK Doku.
klassische Achsen für Aileron, Pitch, Rudder, Thrust etc. Siehe FSUIPC Doku.
Jetzt kann in der linken Anzeige bei "Out" der Wert geprüft werden. Idle sollte 0
ausgeben, während Full Thrust16383
und Full Reverse -16384
ausgibt.
Ggf. - wie im FBW A32nx - müssen noch im Addon die Positionen des Schubhebels "eingelernt" werden. Oftmals erfolgt dies über eine Einstellungsseite im FlyPad.
Ggf. kann es notwendig sein, für Thrust und Reverser zwei "Kanäle" auf eine Joystick-Achse zu legen. Im Folgenden wird beschrieben, wie sich dies gut mit FSUIPC lösen lässt.
Jetzt kann in der linken Anzeige bei "Out" der Wert geprüft werden. Idle und alles im Reverser-Bereich sollte 0
ausgeben, während Full Thrust 16383
ausgibt.
Sicherstellen, dass der angezeigte Wert in der roten Box etwas niedriger ist, als der Idle Wert aus vorigem Schritt (3)
Jetzt kann in der linken Anzeige bei "Out" der Wert geprüft werden. Idle und alles im forward thrust Bereich sollte 0
ausgeben, während Full Reverse -4096
ausgibt.
Ggf. kann es notwendig sein auf einer Achse Analogfunktion und eine Tastfunktion zu nutzen.
Beispielsweise für
Auch das ist wie folgt möglich
Ich nutze es z. B. für ADIRS, Engine Mode Selector, Scheibenwischer-Schalter oder in GA-Aircraft für den Magnetschalter (Mags).
Auch das ist möglich. Hier gezeigt am Beispiel des ADIR 1
Achse bewegen um sie auszuwählen und Prüfen, ob die Achse korrekt erkannt wurde
und ggf. mit den weiteren Bereichen und Presets / Funktionen so fortfahren.
Aufgrund meiner Anfrage an die Dowsons die Caluclator-Codes zuzuweisen und dies zunächst per LUA-Script und Offsets recht komplex aber funktionierend bereitzustellen, hatte John die Möglichkeit implementiert, direkt Achsen auch als parametrierbare Werte auf Calculator-Codes zu mappen.
A32NX_LIGHT_POTI_CPT_PFD#@ 10.23 / $Param 16384 + 327.86 / max 100 min 88 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_CPT_ND#@ 10.23 / $Param 16384 + 327.86 / max 100 min 89 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_CPT_WX_TERR#@ 10.23 / $Param 16384 + 327.86 / max 100 min 94 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_CPT_CONSOLE#@ 10.23 / $Param 16384 + 327.86 / max 100 min 8 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_FO_PFD#@ 10.23 / $Param 16384 + 327.86 / max 100 min 90 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_FO_ND#@ 10.23 / $Param 16384 + 327.86 / max 100 min 91 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_FO_WX_TERR#@ 10.23 / $Param 16384 + 327.86 / max 100 min 95 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_CPT_CONSOLE#@ 10.23 / $Param 16384 + 327.86 / max 100 min 9 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_FCU#@ 10.23 / $Param 16384 + 327.86 / max 100 min 87 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_ECAM_UPPER#@ 10.23 / $Param 16384 + 327.86 / max 100 min 92 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_ECAM_LOWER#@ 10.23 / $Param 16384 + 327.86 / max 100 min 93 (>K:2:LIGHT_POTENTIOMETER_SET) A32NX_LIGHT_POTI_Displays#@ 10.23 / $Param 16384 + 327.86 / max 100 min 88 (>K:2:LIGHT_POTENTIOMETER_SET) @ 10.23 / $Param 16384 + 327.86 / max 100 min 89 (>K:2:LIGHT_POTENTIOMETER_SET) @ 10.23 / $Param 16384 + 327.86 / max 100 min 93 (>K:2:LIGHT_POTENTIOMETER_SET) @ 10.23 / $Param 16384 + 327.86 / max 100 min 92 (>K:2:LIGHT_POTENTIOMETER_SET) @ 10.23 / $Param 16384 + 327.86 / max 100 min 87 (>K:2:LIGHT_POTENTIOMETER_SET)
Der Text $Param
wird dabei von FSUIPC mit dem Wert der von der Achse ermittelt wurde ersetzt. Da bei mir die Werte zwischen -16384
und 16383
liegen, habe ich noch etwas Mathematik zu den Calculator-Codes von Mobiflight gepackt.
Zugewiesen werden diese "eigenen" Presets aus der zuvor im FSUIPC Hauptverzeichnis abgelegte myevents.txt dann wie folgt:
Können über FSUIPC direkt, über LINDA oder auch über "Axis And Ohs" (AAOs) gemacht werden.
werden ähnlich wie die in der obigen Abbildung gezeigten Schritte zugewiesen, jedoch im Teil "Buttons & Switches" des Zuweisungsmenüs in FSUIPC.
Lua Scripte sind die Basis für die LINDA Modules welche eine sehr einfache Zuordnung von Funktinoen auf Buttons, Drehgeber und Schalter über die Donationware "LINDA" ermöglichen.
Soll mit LINDA gearbeitet werden, müssen die gewünschten Funktionen in der actions.Lua des entsprechenden Flugzeug-Moduls in Funktionen definiert werden.
Ein sehr guter Einstieg in die Erstellung von LINDA Modules ist, sich bereits verfügbare Modules anzusehen, und daraus Anregungen zu übernehmen.
gut bekannt von FSX und P3D. LVars benötigen kein Mobiflight. Die Zuordnung über FSUIPC sehr weit fortgeschritten und gut bekannt.
L:
H:
Events die unabhängig von FSUIPC Updates dauerhaft verfügbar sein sollen, kommen in eine Datei unterhalb
K: / SimVar
Die "calculatorCodes" sind Implementierungen die mal einfache Aktionen, mal komplexere code Ausführungen mit Abhängigkeiten sind.
aus Mobiflight HubHop / Developer Tools .
entspricht etwas besser lesbar
if ((L:ParkingBrake_Position) > 0) { (>L:ParkingBrake_Position) = 0 } else { (>L:ParkingBrake_Position) = 100 }
werden mal in Hex-Schreibweise mal in Dezimalschreibweise angegeben.
Umrechnung z. B. über https://www.rapidtables.com/convert/number/hex-to-decimal.html
z. B. für FSUIPC offsets https://www.rapidtables.com/convert/number/hex-to-decimal.html
Ein großer Vorteil an FSUIPC und LINDA ist, dass sie Ihre Konfigurationen in Textdateien (ini, Lua, txt, evt) in einem einfachen Ordner ablegen.
Um unkompliziert bei Änderungen jederzeit auf einen vorherigen Stand zurück zu kommen, oder auch einfach nur vergleichen zu können, was sich gegenüber der vorherigen Version verändert hat, nutze ich gern git.
Git ist ein Werkzeug zur Code-Versionierung und die Basis für die Zusammenarbeit mit mehreren Beitragenden z. B. bei der Entwicklung von LINDA Modulen wie z. B. dem für das FBW A32nx auf Github.
Git ist leicht zu erlernen und hat einen winzigen Fußabdruck mit blitzschneller Leistung.
https://code.visualstudio.com/ ist als Texteditor für die Bearbeitung von Lua files, ini-Dateien aber auch log-files, HTML, SVG, JS aber auch für Arduino-Projekte im kostenfreien Bereich nahezu unschlagbar.
Als Open Source mit tausenden oft genialen extensions, syntax highlighting, autocompletion usw. erleichtert es die Arbeit mit textbasierten Dateien enorm und bietet sogar die Möglichkeit der Integration von Git SCM.
Einer der besonderen Vorteile ist, dass Dateien nicht blockierend geladen werden und daher z. B. auch beim Debuggen von FSUIPC und LINDA geöffnet bleiben können, während noch in die Datei geschrieben wird. Dadurch kann viel unkomplizierter nach Fehlern gesucht werden.
Auch Multi-Cursor, Suchen und Ersetzen von Dateiinhalten in ganzen Ordnerstrukturen etc. ist damit problemlos möglich.
Download von https://www.mobiflight.com
benötigt wenn mit HVar Dateien (Flugzeugspezifischen Events) gearbeitet werden soll wie dies z. B. beim A32nx LINDA aircraft module der Fall ist.
HVar werden u. a. in https://github.com/joeherwig/A32nx-LINDA-aircraft-module verwendet und müssen daher über das mobiflight connector WASM verfügbar gemacht sein.
Siehe FSUIPC 7 Doku in "FSUIPC7 for Advanced Users.pdf" und die sehr guten Tutorial Videos.
Download von https://axisandohs.weebly.com/
bringt zusätzlich zu den oben genannten Tools die Möglichkeit auch MIDI Controller - und nicht nur USB Game Controller und VRInsight Combo Panels als Controller zu nutzen.
Auch gibt es direkt WebInstruments und Saitek Support.
Insbesondere aufgrund der online verfügbaren Profile für das Behringer X-Touch Mini ist eine sehr günstige Erweiterung auf Hardware-Inputs damit möglich.
So wird's gelöst
Siehe Vorbereitende Konfiguration | FSUIPC7.ini | WAPI
Sollte die WAPI aktiv sein, kommt es ab und an auch mal vor, dass sich einfach was "verheddert" hat. Im Simflight-Forum wird empfohlen einfach noch mal neu zustarten. Zumindest alles was zum Simulator gehört. Gern auch einfach den Rechner noch mal neu starten.
Bei mir reicht in der Regel alles was zum Sim gehört neu zu starten, zumindest jedoch MSFS, FSUIPC, LINDA.
Wenn keine hvar gefunden werden, liegt es ggf. daran, dass das die aktuelle Livery dem Flieger nicht zugeordnet werden kann.
Ein möglicher Grund ist, dass in der Aircraft.cfg der title der Livery nicht sauber angegeben wurde.
Wenn FSUIPC im Standard installiert wurde, und dann z. B. ein Profile für A32angelegt wurde, wird erwartet, dass das der Flieger über den Aircraft title identifiziert wird. Damit wird erwartet, dass für ein [A32] profil im Title auch irgendwo 'A32' vorkommt. Viele der Livery-Designer haben sowas jedoch nicht auf dem Schirm.
Ein Beispiel hierfür ist die Regierungsflieger-Livery für den A320 / A32nx.
[VERSION]
major = 1
minor = 0
[VARIATION]
base_container = "..\FlyByWire_A320_NEO"
;===================== FLTSIM =====================
[FLTSIM.0]
title = "Regierungsflieger"; Variation name
[VERSION]
major = 1
minor = 0
[VARIATION]
base_container = "..\FlyByWire_A320_NEO"
;===================== FLTSIM =====================
[FLTSIM.0]
title = "Airbus A320 Regierungsflieger" ; Variation name
Ein paar Livery-Beispiele - alle für Denselben Flieger:
title = "Airbus A320neo FlyByWire" title = "Airbus A320 Neo Lufthansa-D-AIJA" title = "Regierungsflieger" title = "FWB Eurowings D-AIZO"
So wird's gelöst - wenn's schnell gehen muss
z. B. weil man gleich online fliegen will.
einfach mit einer Livery fliegen, mit der es schon mal funktioniert hat.
Funktioniert, ist aber Schrott!
Bei der Livery den Titlestring zu korrigieren. Macht das bitte nicht, denn ansonsten geht mit dem nächsten Livery-Update der Spaß von vorne los.
So wird's richtig gelöst
Seit FSUIPC v7.2.15 ist es möglich in FSUIPC7.ini und WASM.ini dank zweier Konfigurationsparmeter das cleverer zu gestalten.
UseAirLocForHvars=Yes
in der FSUIPC_WASM.ini in deinem /Community/fsuipc-lvar-module/WASM Ordner das Verhalten zu ändern.
UseAirLocForProfiles=Yes
Wenn ihr diese Parameter auf Yes setzt, erfolgt der hvar- und Profil-Abgleich nicht mehr über den Flugzeugnamen (title), sondern über den base_container wie er in der aircraft.cfg der Livery definiert ist. Damit ordnet FSUIPC das Basis-Flugzeugs welches Model und Variablen definiert und referenziert nicht mehr auf die jeweilige Livery.
Wird der FSUIPC Websocket-Server nicht als Admin gestartet, grätscht Windows dazwischen, wenn der Port nicht auf localhost oder 127.0.0.1 oder gebunden werden soll.
Da insbesondere bei der Nutzung von anderen Netzwerkgeräten wie Arduino, raspberry pie oder Smartphone / Tablet etc. dann aber keine Nutzung möglich ist, bleiben nur zwei Varianten.
Warum?
netsh http add urlacl
verwenden, um die Anforderung zu erhalten.
Funktioniert, ist aber Schrott!
Starten von FSUIPC und FSUIPC als lokaler Admin.
Löst zwar vermeintlich das Problem, hebelt aber die MS UAC aus und schafft ggf. weitere Probleme. Daher bitte nicht nur deswegen als lokaler Admin starten!
So wird's richtig gelöst
Über einen Befehl der einmalig in der Windows-Console [Strg]+[r]
ausgeführt werden muss, wird dem Websocket-Server erlaubt, sich auch ohne Admin-Berechtigung auf den TCP port zu verbinden und seine Daten dort anzubieten.
netsh http add urlacl url=http://computername:port/ user=username
Bitte ersetzt natürlich
2048
.netsh http add urlacl url=http://DellP:2048/ user=joe
Beispiel um calculator Codes (und damit auch Events und LVars) zu schreiben.
<html> <head> <script> ws = new WebSocket('ws://DellP:2048/fsuipc/', "fsuipc"); ws.onopen = function () { console.log("connectionStatus = Connection Open"); }; ws.onclose = function () { console.log("connectionStatus = Connection Closed"); ws = null; }; ws.onmessage = function(event) { console.log("[message] Data received from server: " + event.data); }; ws.onerror = function () { console.log("connectionStatus = WebSocket Error"); } function setBrake(value) { ws.send("{ \"command\": \"vars.calc\", \"name\": \"calc\", \"code\": \""+value+" (>K:PARKING_BRAKE_SET)\"}"); console.log("sent\n\n"+ "{ \"command\": \"vars.calc\", \"name\": \"calc\", \"code\": \""+value+" (>K:PARKING_BRAKE_SET)\"}"); } </script> </head> <body> <input type="button" onClick="setBrake(1);" value="set parking-brake ON"/> <input type="button" onClick="setBrake(0);" value="set parking-brake OFF"/> </body> </html>