DIY - Simhub Dash Displays

U

User 19771

Zur .ini: ich will es den Nutzern des Dashes vereinfachen, die Beschriftung der Funktionen einfach zu editieren. Selbstverständlich ginge das auch easy mit einer case-Abfrage, aber dann wurschtelt sich der Nutzer halt durch zig Codezeilen.
Das mache ich bei meinem Dashboard auch für verschiedene Einstellungen. Man kann Dateien über die Funktion readtextfile() auslesen. Hier ein schnell geschustertes Beispiel:
Screenshot 2021-10-20 181718.png

Mit readtextfile() wird die Datei gelesen. Bei left_01 und left_02 habe ich mal eine relative Pfadangabe gemacht. Dabei geht SimHub immer von seinem Installationsverzeichnis aus. Bei left_03 habe ich eine absolute Pfadangabe verwendet. Ich verwende eigentlich ausschließlich die relative Pfadangabe, da diese in meinen Augen am meisten Sinn macht. Bei der absoluten müsste die Datei immer an exakt der selben Stelle auf dem selben Laufwerk liegen. Gerade wenn auch andere das Dashboard nutzen macht das eigentlich keinen Sinn mehr.
Das left(, X, Y) darum gibt an, von welchem Zeichen an, wieviel genommen und in die Variable left_0x geschrieben werden soll. Anhand von left_01 wäre das also ab dem 36. Zeichen die nächsten 3 Zeichen lesen und in die Variable left_01 übernehmen. Hierbei gilt, dass ein Zeilenumbruch i.d.R. 2 Zeichen ausmacht (CR + LF).

Da man bei dieser Lösung aber immer die exakte Position und Anzahl der einzulesenden Zeichen angeben muss, ist man etwas eingeschränkt. Denkbar wäre hierbei z.B. eine Schleife zu machen. Also die Datei als ganzes in eine Variable zu übernehmen und dort dann Zeichen für Zeichen durchgehen und z.B. nach dem ersten ' suchen. Das wäre dann der Startpunkt. Das nächste ' wäre dann der Endpunkt und man könnte jetzt variabel auslesen, was dazwischen steht. Das habe ich selbst aber noch nicht ausprobiert, in wie weit das tatsächlich auch in SimHub funktioniert.
Eine andere Möglichkeit wäre für jede Position eine eigene Datei anzulegen. Also z.B. left_01.ini, left_02.ini, left_03.ini usw. Dann muss auch einfach nur die Datei als ganzes eingelesen werden und man kann sich das left(, X, Y) um das readtextfile() herum sparen. Das ist z.B. der Weg, den ich immer gehe. Das macht es dann einfach etwas einfacher zu handeln, allerdings hat man dann halt u.U. viele INI-Dateien.

Eine weitere Krux bei der Sache, die man zu bedenken hat, ist, was passiert wenn nicht das drin steht, was man erwartet. Bei einem reinen Text, der nur als Beschriftung dienen soll ist das halb so wild. Wenn aber Zahlen oder ähnliches eingelesen werden, die z.B. als Grenzwerte für Berechnungen dienen sollen, wird es da schon schwieriger. Wenn man eine Zahl erwartet, aber "1a89" drin steht kommt wahrscheinlich nicht mehr das raus, was man wollte.
Ich prüfe bei mir daher zusätzlich immer den Inhalt ab und wenn der nicht passt zeigt mein Dashboard für 10 Sek. einen Fehler, was wo nicht passt und nimmt anschließend einen von mir hart codierten Backup-Wert.
 
U

User 26065

Wow, danke für das Minitutorial, Björn!
Und ich Eumel hab' mir letzte Woche noch gedacht, "Wofür sollte man eigentlich readtextfile() brauchen?" :D :D

Was mich ein Wenig "stört" (nicht wirklich, aber mein Programmiererherz stöhnt da ein Wenig) ist die Tatsache, dass es ja AFAIK keine echte "init"-Routine in Simhub gibt, mit der man diese Werte nur 1x auslesen könnte.
Wenn ich das richtig sehe, wird bei deinem Beispiel quasi jedes Mal, wenn ein Control upgedated wird, das Textfile ausgelesen, oder?

Da denk' ich bei mir dann immer, was das an Ressourcen benötigt, wenn das 30-50x/Sekunde passiert, wenn ein Element recht aktuell ist...

lg
m
 
U

User 561

Mit readtextfile() wird die Datei gelesen. [..]
Sehr ausführlich beschrieben, danke!

Ich denke, es könnte recht easy funktionieren, wenn man den ausgelesenen Text als Programmcode in die .js einbetten könnte. Wenn im .ini-File z. B. steht
INI:
[left rotary functions]
l_01 = "ABS",
l_02 = "TCC",
l_03 = "TCR",
...

[right rotary functions]
r_01 = "Sys Vol",
r_02 = "FOV"
r_03 = "VChat Vol",
...
dann entspricht der Inhalt der .ini ja quasi 1:1 eine Variablendefinition im Javascript. Man müsste dann eigentlich alles zwischen [left rotary functions] und [right rotary functions] einlesen und als Code verwenden. Das müsste mit
Javascript:
simpleString.lastIndexOf("[left rotary functions]")
und
Javascript:
simpleString.IndexOf("[right rotary functions]")
als Start und Endpunkt irgendwie realisierbar sein.
 
U

User 19771

Was mich ein Wenig "stört" (nicht wirklich, aber mein Programmiererherz stöhnt da ein Wenig) ist die Tatsache, dass es ja AFAIK keine echte "init"-Routine in Simhub gibt, mit der man diese Werte nur 1x auslesen könnte.
Wenn ich das richtig sehe, wird bei deinem Beispiel quasi jedes Mal, wenn ein Control upgedated wird, das Textfile ausgelesen, oder?
Ja, es wird jedes mal gelesen. Ich behelfe mir da damit, dass ich eine root Variable abfrage, ob sie einen Wert hat. Wenn nicht wurde das Dashboard gestartet und ich lade die Datei(en) und weise der Variable einen Wert zu.
Root Variablen haben den Vorteil, dass sie ihren Wert behalten, auch wenn sie nur einmal beschrieben werden. Die Variable verliert ihren Wert erst, wenn das Dashboard beendet wird.

Sieht dann so aus:
Javascript:
if (isnull(root.xConfigRead,false) != true)
{
  if (root.fSpeedThreshold == null)
  {
    root.fSpeedThreshold = readtextfile('DashTemplates\\RaceDash\\config\\functional\\AcclerationMeasureSpeedThreshold.ini');
  }
 
  root.xConfigRead = true;
}
 
U

User 26065

Aaaaah, das ist ein netter Trick, danke!
Ich kannte zwar die Root-Variablen, aber der Workaround, die zum 1x-read-only zu benutzen, ist schon genial.

Wieder was gelernt, vielen Dank!
 
U

User 24915

Sorry , hab eine frage ... glaub ich steh gerade auf dem schlauch oder bin zu blöd.

BigDisplay für simhub läuft und funktioniert soweit . Nur mit der miBigdisplay.js "Datei" bin ich doch etwas irrititiert. Auf GitHub ist das doch keine Datei die ich DL kann. Ich kann die ganzen Code Zeilen kopieren ... aber was mach ich damit genau (also ich weiss in welchen ordner es muss) muss ich ne neue Editor Datei erstellen und da den code rein ?

Sorry falls ich vor lauter bäumen den wald nicht sehe ^^

 
U

User 27830

Top Job dein Info-Display!
Habe es leicht modifiziert auf meine Bedürfnisse aber der Großteil ist unangetastet.

Vielleicht als Verbesserungsvorschlag:
Werte, die nur in ACC gehen (oder nur in R3E wie zB inner/outer/mid TyreTemp) einfach mit einer Funktion bei „Visible“ versehen, dass sie in anderen Games ausgeblendet sind Statt eine 0 oder nur das Label ohne Wert anzuzeigen.
Code:
[DataCorePlugin.CurrentGame]='AssettoCorsaCompetizione'
[DataCorePlugin.CurrentGame]<>'RRRE'

Gruß Dom
 
U

User 11852

Michi Hirczy:

Da ich selber kein iRacing fahre,.....komm auf die dunkle Seite der Macht.....we have Cookies.
 
U

User 19660

Klasse Arbeit Michi!
Eine frage bzgl. dem Pitwindow...
Es wird neben der Streckenkarte jeweils in blau und oder rot angezeigt, wo man ungefähr rauskommt wenn man jetzt pitten würde..

Ist es möglich, diese Autos auf der Streckenübersicht auch zu markieren?
 
Oben