"TypeName" liefert unerwartete Ergebnisse

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
netfox
Beiträge: 16
Registriert: 26.06.2019, 11:28

"TypeName" liefert unerwartete Ergebnisse

Beitrag von netfox » 18.08.2019, 22:14

Hallo zusammen,

gegeben ist folgendes einfaches HM-Skript:

Code: Alles auswählen

string gewerke = "Zentrale,Verschluss,Sicherheit";
string gewerk;
var item;
foreach(gewerk, gewerke.Split(","))
{
   item = dom.GetObject(gewerk);
   WriteLine(item.TypeName());
}
Diese drei Gewerke existieren in meiner CCU in exakt dieser Schreibweise und jedem der Gewerke sind mehrere Komponenten zugeordnet (teilweise überschneidend).

Meine Erwartung wäre eine dreimalige Ausgabe von "ENUM".

Die Ausgabe ist aber:

Code: Alles auswählen

FAVORITE
ENUM
null
Kann ich mir nicht erklären.
  • FAVORITE passt nicht (davon abgesehen, dass das offenbar ein im Handbuch nicht dokumentierter Objekttyp ost) - ich habe einen einzigen Favoriten namens "Alarm" (der liefert auch korrekt den Typnamen "FAVORITE"),
  • null für Gewerk "Sicherheit" passt überhaupt nicht
Für sachdienliche Hinweise dankbar,
netfox

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: "TypeName" liefert unerwartete Ergebnisse

Beitrag von Black » 18.08.2019, 22:35

3 malige Ausgabe von Enum wäre richtig..

mach mal in deinem Programm aus
item = dom.GetObject(gewerk);

ein
item = dom.GetObject (ID_FUNCTIONS).Get (gewerk);

Gruss, Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

netfox
Beiträge: 16
Registriert: 26.06.2019, 11:28

Re: "TypeName" liefert unerwartete Ergebnisse

Beitrag von netfox » 18.08.2019, 23:16

Das soll ein Typcast sein, ja?

Scheint in der offiziellen Sprachbeschreibung nicht erläutert zu sein.
(Ich schwanke noch, ob die Sprache schlechter ist als die Sprachbeschreibung oder umgekehrt.)

Irgendwie passt aber die Syntax noch nicht, erhalte jetzt als Ausgabe nur 1x "null", egal, welche von den Varianten

Code: Alles auswählen

item = dom.GetObject(ID_FUNCTIONS).Get(gewerk);
item = dom.GetObject (ID_FUNCTIONS).Get(gewerk);
item = dom.GetObject (ID_FUNCTIONS).Get (gewerk);
ich verwende (die letzte wäre exakt die von die angegebene).

Wenn ich die Reihenfolge der Liste umstelle, so dass "Verschluss" vorn steht, ist die Ausgabe
ENUM
null



Ohne brauchbare Sprachbeschreibung ist das sowieso nur ein Stochern im Nebel.





Aber nehmen wir mal an, hier wäre ein Typcast notwendig - wieso verhalten sich die Gewerke so unterschiedlich?
Ich habe keinen anderen Objekttyp mit gleichem Namen.

Gruß,
netfox

netfox
Beiträge: 16
Registriert: 26.06.2019, 11:28

Re: "TypeName" liefert unerwartete Ergebnisse

Beitrag von netfox » 18.08.2019, 23:31

Ich denke, ich bin der Lösung auf der Spur.

Code: Alles auswählen

string all_functions = dom.GetObject(ID_FUNCTIONS).EnumUsedNames();
WriteLine(all_functions);
liefert mir

Code: Alles auswählen

funcButton	funcCentral	funcClimateControl	funcEnergy	funcEnvironment	funcHeating	funcLight	funcSecurity	funcWeather	Verschluss
Warum zum Henker ist nur "Verschluss" auf deutsch? Ich habe keine Gewerke gelöscht oder neu angelegt, sondern nur die Komponenten hinzugefügt.

In der GUI werden alle Gewerke auf Deutsch angezeigt.

MIt

Code: Alles auswählen

string gewerke = "funcCentral,Verschluss,funcSecurity";
tut's dann mein Progrämmchen (mit oder ohne Typcast).

Nächster Akt: Ich gehe in der Homematic-GUI in die Gewerkeliste auf Änderung des Namens und trage nochmal "Sicherheit" und "Zentrale" ein und speichere.

-->

Code: Alles auswählen

string all_functions = dom.GetObject(ID_FUNCTIONS).EnumUsedNames();
WriteLine(all_functions);

Code: Alles auswählen

funcButton	funcClimateControl	funcEnergy	funcEnvironment	funcHeating	funcLight	funcWeather	Sicherheit	Verschluss	Zentrale
Damit ist mein konkretes Problem gelöst - ich wüsste aber gern, wie es überhaupt dazu kommen konnte, dass GUI-Anzeige und interne Darstellung differieren.

Wer weiß, an welchen Stellen noch ähnliches schlummert...

Hat jemand einen Erklärungsversuch?
Ansonsten steht wohl eine Supportanfrage an.

vG,
netfox

Benutzeravatar
stan23
Beiträge: 2038
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 580 Mal
Danksagung erhalten: 336 Mal
Kontaktdaten:

Re: "TypeName" liefert unerwartete Ergebnisse

Beitrag von stan23 » 19.08.2019, 06:31

netfox hat geschrieben:
18.08.2019, 23:31
Hat jemand einen Erklärungsversuch?
Das wird im Forum unter Klarnamenbug behandelt und hat seinen Ursprung wohl in einer Art von Lokalisierung.
Du kannst es reparieren wenn du die Gewerke umbenennst, und dabei den gleichen Namen wieder vergibst: dabei wird func... mit dem gewünschten Klarnamen überschrieben.
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: "TypeName" liefert unerwartete Ergebnisse

Beitrag von Black » 19.08.2019, 06:31

Suche mal hier nach klarnamenbug.... Das erklärt deinen Effekt.... wie du schon sagst. Bug.

Lösung... den Namen für die Gewerke (Räume übrigens auch) manuell vergeben

Wenn du mit Scripten viel in den Objekten der ccu wühlst werfe mal einen Blick in meine sig auf den SDV

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“