Variablendarstellung: Browser + App unterschiedlich

Guten Morgen,
in einem meiner Module ( [Einzelraumtemperaturregelung) habe ich aktuell für die Anzeige einer Variablen unterschiedliche Darstellungen bzw. Fehler.

Wenn ich das ganze im Webfront öffne sieht das ganze korrekt aus:

In der App zeigt es mir folgenden Fehler an:

Da ist mir aktuell nichts bewusst, aber meist hängen solche Fehler damit zusammen, dass die Apps es bei Variablentypen genauer nehmen. Ich schaue mir das gerne an. Kannst du mir eine Minimalvisu mit der betroffenen Variable freigeben und per PM schicken? Dann gehe ich das an.

1 „Gefällt mir“

Danke dir Dr. Niels, ich mach dir eine Visu fertig und melde mich dann per PN bei dir.

Okay, ich habs. Die Darstellung ist tatsächlich nicht korrekt konfiguriert. Bei dem Intervall fehlen die Werte für Prefix, Suffix und Nachkommastellen. Und jetzt kommt es wieder zu dem lockeren Handling des Browsers: Der nimmt nicht vorhandene als false und alles funktioniert. Die App ist da strikter und lässt den Fehler fliegen.

Zum Beheben kannst du einfach mal die Darstellung in der Konsole bearbeiten. Irgend einen Parameter kurz hin und her wechseln und dann bestätigen, danach sollte das alles wieder klappen.

Hast du die Darstellung per Skript gesetzt? Eigentlich sollte so eine Konfiguration durch die Konsole nämlich nicht möglich sein… Prinzipiell wollen wir fürs Skripting das ganze auch nochmal erleichtern, sodass bei Intervallen nicht alle Parameter angegeben werden müssen und ggfs. auf Standardwerte zurückgefallen wird. Das sind wir bisher aber noch nicht angegangen.

Danke dir.

Genau, die Variable + Darstellung wird im Modulcode erzeugt.

Ich würde die mal den Code, mit dem ich das Profil erzeuge zukommen lassen, dann könntest du einmal prüfen wo der Fehler liegt.

Das können wir gerne machen :+1:

1 „Gefällt mir“

Guten Abend Niels,
das ist der Code-Ausschnitt, in dem die Darstellung erzeugt wird:

 if ($this->ReadPropertyBoolean("Actual_Heating_Phase")) {
            $varID = @$this->GetIDForIdent("actual_heating_phase");
            if ($varID === false) {
                $id = $this->RegisterVariableInteger(
                    "actual_heating_phase",
                    $this->Translate("Heating phase"),
                    [
                        'PRESENTATION'       => VARIABLE_PRESENTATION_VALUE_PRESENTATION,
                        'USAGE_TYPE'         => 0,
                        'MIN'                => 0,
                        'MAX'                => 3,
                        'PERCENTAGE'         => false,      // wichtig, sonst sind Intervalle gesperrt
                        'INTERVALS_ACTIVE'   => true,
                        'ICON'               => 'calendar-range',
                        'COLOR'              => -1,
                        'INTERVALS'          => json_encode([
                            [
                                'IntervalMinValue' => 0,
                                'IntervalMaxValue' => 0,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Heizen',
                                'ConversionFactor' => 1,
                                'ColorActive'      => true,
                                'ColorValue'       => 0xFF0000
                            ],
                            [
                                'IntervalMinValue' => 1,
                                'IntervalMaxValue' => 1,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Absenken',
                                'ConversionFactor' => 1,
                                'ColorActive'      => true,
                                'ColorValue'       => 0xFF7F00
                            ],
                            [
                                'IntervalMinValue' => 2,
                                'IntervalMaxValue' => 2,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Frostschutz',
                                'ConversionFactor' => 1,
                                'ColorActive'      => true,
                                'ColorValue'       => 0x0000FF
                            ],
                            [
                                'IntervalMinValue' => 3,
                                'IntervalMaxValue' => 3,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Aus',
                                'ConversionFactor' => 1,
                                'ColorActive'      => false,
                                'ColorValue'       => -1
                            ],
                        ])
                    ],
                    5
                );
                IPS_SetIcon($id, "calendar-range");
                IPS_LogMessage("Raumregelung", "Variable actual_heating_phase angelegt.");
            }

Grüße
Daniel

Guten Morgen Niels,
falls benötigt, das gesamt Modul ist auch auf Github zu finden:

Grüße
Daniel

Bei deinen Intervallen fehlen ganz viele Parameter, diese sind auch nicht optional sondern immer anzugeben.
Siehe auch hier:

Genau so wie von @Nall-chan beschrieben ist es. Hier findest du sonst die Auflistung aller Parameter: Schieberegler — IP-Symcon :: Automatisierungssoftware

Wir wollen da nochmal ran und ähnlich zu Top Level Parametern bei verschachtelten Strukturen auch auf Standardwerte zurückfallen, aber das ist bisher nicht passiert.

1 „Gefällt mir“

Danke euch da werfe ich einen Blick drauf.

Frage zu den Paramtern:
Müssen alle Parameter vorhanden sein oder gibt es auch welche die Optional sind und gar nicht hinterlegt sein müssen?

Die Antwort von @Dr.Niels, welche ich oben verlinkt habe, beantwortet deine Frage.

Danke Nall-chan, fragen beantwortet.

In meinem Fall handelt es sich um eine Wertanzeige:

Hierzu hätte ich eine Verständnisfrage:
Ich muss ICON, COLOR, PREFIX und SUFFIX angeben.
Alles unter „Float und Integer“ muss ich nur angeben, wenn es sich bei meiner Variable um diesen Datentyp handelt, richtig?

Wenn ich eine Integer-Variable habe dann muss ich alle Parameter aus diesem Bereich auflisten. In diesem Fall muss ich das unter „Boolean und String“ nicht angeben.

Beispiel:
Ich habe eine IntegerVariable, dort muss ich angeben:

  • ICON, COLOR, PREFIX und SUFFIX
  • Alles unter „Float und Integer“
  • Alles unter „Intervalle“
  • Alles unter „Optionen“?

Entschuldigt bitte die Fragen, aber ich tue mir echt schwer rauszulsesen anhand der Doku, was ich alles benötigt.

Aktuell sieht es so aus:

                    [   
                        'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_PRESENTATION,
                        'ICON'               => 'calendar-range',
                        'COLOR'              => -1,
                        'PREFIX'             => '',
                        'SUFFIX'             => '',
                        'USAGE_TYPE'         => 0,
                        'PERCENTAGE'         => false,
                        'MIN'                => 0,
                        'MAX'                => 3,
                        'THOUSANDS_SEPARATOR' => '',
                        'DIGITS'             => 0,
                        'DECIMAL_SEPARATOR'  => '',
                        'INTERVALS_ACTIVE'   => true,
                        'INTERVALS'          => json_encode([
                            [
                                'IntervalMinValue' => 0,
                                'IntervalMaxValue' => 0,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Heizen',
                                'ConversionFactor' => 1,
                                'PrefixActive'     => false,
                                'PrefixValue'      => '',
                                'SuffixActive'     => false,
                                'SuffixValue'      => '',
                                'DigitsActive'     => false,
                                'DigitsValue'      => 0,
                                'IconActive'       => false,
                                'IconValue'        => '',
                                'ColorActive'      => true,
                                'Color'            => 0xFF0000
                            ],
                            [
                                'IntervalMinValue' => 1,
                                'IntervalMaxValue' => 1,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Absenken',
                                'ConversionFactor' => 1,
                                'PrefixActive'     => false,
                                'PrefixValue'      => '',
                                'SuffixActive'     => false,
                                'SuffixValue'      => '',
                                'DigitsActive'     => false,
                                'DigitsValue'      => 0,
                                'IconActive'       => false,
                                'IconValue'        => '',
                                'ColorActive'      => true,
                                'Color'            => 0xFF7F00
                            ],
                            [
                                'IntervalMinValue' => 2,
                                'IntervalMaxValue' => 2,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Frostschutz',
                                'ConversionFactor' => 1,
                                'PrefixActive'     => false,
                                'PrefixValue'      => '',
                                'SuffixActive'     => false,
                                'SuffixValue'      => '',
                                'DigitsActive'     => false,
                                'DigitsValue'      => 0,
                                'IconActive'       => false,
                                'IconValue'        => '',
                                'ColorActive'      => true,
                                'Color'            => 0x0000FF
                            ],
                            [
                                'IntervalMinValue' => 3,
                                'IntervalMaxValue' => 3,
                                'ConstantActive'   => true,
                                'ConstantValue'    => 'Aus',
                                'ConversionFactor' => 1,
                                'PrefixActive'     => false,
                                'PrefixValue'      => '',
                                'SuffixActive'     => false,
                                'SuffixValue'      => '',
                                'DigitsActive'     => false,
                                'DigitsValue'      => 0,
                                'IconActive'       => false,
                                'IconValue'        => '',
                                'ColorActive'      => false,
                                'Color'            => -1
                            ],
                        ])
                    ],

Nein, weil:

Ja:

Die Antwort ändert sich nicht, egal wie du fragst :wink:

Die Parameter der Hauptebene unterscheiden sich halt je nach Datentyp, darum ist das entsprechend in der Doku aufgeteilt.
Aber du musst die nicht zwingend angeben, die sind tatsächlich optional.

Da bin ich bei dir mit „Die Antwort ändert sich nicht, egal wie du fragst“. :slight_smile:
Ich habe es schon 5 mal gelesen und einfach nicht verstanden bzw. verstehe es nicht.

Aber mal schauen ob ich es jetzt verstanden habe:
Für meine Integer-Wertanzeige, muss ich zwingend folgendes Angeben:

  • Ich bräuchte nicht alle: ICON, COLOR, PREFIX und SUFFIX, weil Fallback vorhanden
  • Ich bräuchte nicht alles unter „Float und Integer“, weil Fallback vorhand
  • Alles unter „Intervalle“
  • Alles unter „Optionen“
  • Ich brauche gar nichts unter „Boolean und String“, weil ich eine Integer-Variable habe

Fast korrekt.

Brauchst du nicht, weil du den Parametern OPTIONS bei einer integer gar nicht brauchst.
Michael

Tatsächlich hättet ich das nicht so aus der Doku gelesen das Intervalle für Float + Integer gelten und Optionen für Boolean und String.

Jetzt habe ich alle Parameter richtig hinterlegen können und der Fehler in der App ist auch weg.

Danke für eure Hilfe.

@Dr.Niels:
In der Onlinedoku ist glaub ich der Intervalle-Wert: Color falsch, dieser muss doch ColorValue heißen oder?

@Parzival
Wolltest du das nicht in der Doku korrigieren?

Michael

Das ColorValue hat es wohl nur in die Doku der Wertanzeige geschafft. Ich ziehe das nach.