Was zum Henker - if auf Contains, Find... funktioniert nicht

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

Moderator: Co-Administratoren

ACX_Com
Beiträge: 12
Registriert: 09.07.2022, 09:52
System: CCU

Re: Was zum Henker - if auf Contains, Find... funktioniert nicht

Beitrag von ACX_Com » 01.05.2024, 13:34

So - irgendwie zurück zum Anfang.

Mit Channel statt Device habe ich geändert - warum auch immer das funktioniert hatte, aber im Log hatte ich tatsächlich einen Hinweis darauf.

Nun sieht mein Log bzw. Script so aus:

Code: Alles auswählen

May  1 13:29:01 homematic-raspi local0.err ReGaHss: ERROR: ScriptRuntimeError: 
object o_src = dom.GetObject("47723");
string o_geraet = "";
boolean valSuche;
string o_geraet_Name = "NoName"; 
if(o_src)
{
  o_geraet = dom.GetObject(o_src.Channel()).Name();
}
else
{
  o_geraet = "(Test, Programm manuell gestartet)";
}
if(o_geraet.Contains("1") == true)
{
   valSuche = o_geraet.Contains("1");
   o_geraet_Name = "WR1";
}
if(o_geraet.Contains("2") == true)
{
   valSuche = o_geraet.Contains("2");
   o_geraet_Name = "WR2";
}
if(o_geraet.Contains("3") == true)
{
   valSuche = o_geraet.Contains("3");
   o_geraet_Name = "Notebook";
}
if(o_geraet.Contains("4") == true)
{
   valSuche = o_geraet.Contains("4");
   o_geraet_Name = "Handy";
}
  [ExecError():iseESPexec.cpp:12934]
Ich hab k.A. was ich jetzt ohne in die Systemtiefen zu steigen damit anfangen soll und was ist denn an dem rudimentären Script noch falsch!?!?
...und wo kommt die "47723" her, diese sagt mir bei keinem Gerät was.
So langsam glaube ich habe ich eine Fehlerfilterbrille auf.


ACX_Com
Beiträge: 12
Registriert: 09.07.2022, 09:52
System: CCU

Re: Was zum Henker - if auf Contains, Find... funktioniert nicht

Beitrag von ACX_Com » 01.05.2024, 13:58

Wow - jetzt funzt es.

Ich hatte (blöder Weise) dein Script nicht genau genug angesehen und nur partiell übernommen.
Worauf wohl der Unterschied liegt, dass es vor allem auf das "doppelte" dom.GetObject(dom.GetObject ankommt.

Momentan bilde ich mir noch keinen Reim drauf, da ich dazu recherchieren müsste.

Wie meinst du das, dass man direkt auf Channel gehen könnte?
Du meinst direkt den Namen ausgeben?
Wenn ja - ich möchte ungern die virtuellen Kanäle 1:1 wie die Geräte (IP-Adressen) benennen und dies im Script bestimmen.

ABER HERZLICHEN DANK für deine Unterstützung!!!

Benutzeravatar
Baxxy
Beiträge: 10952
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 620 Mal
Danksagung erhalten: 2257 Mal

Re: Was zum Henker - if auf Contains, Find... funktioniert nicht

Beitrag von Baxxy » 01.05.2024, 14:15

Schön das es funktioniert.
Diese verschachtelten Aufrufe mag ich persönlich auch nicht, aber man kann das ja auch "Step-by-Step" erledigen:

Code: Alles auswählen

object o_src = dom.GetObject("$src$");
object oChn;
string sChn_Name;
string sGeraet_Name = "NoName";
if(o_src) {
    oChn = o_src.Channel();
    sChn_Name = dom.GetObject(oChn).Name();
    }
 else { sChn_Name = "(Test, Programm manuell gestartet)"; }

if (sChn_Name.Contains(":1")){ sGeraet_Name = "WR1";}
 elseif (sChn_Name.Contains(":2")) { sGeraet_Name = "WR2";}
  elseif (sChn_Name.Contains(":3")) { sGeraet_Name = "WR3";}

WriteLine(sGeraet_Name);
ACX_Com hat geschrieben:
01.05.2024, 13:58
Du meinst direkt den Namen ausgeben?
Ja, macht aber nur Sinn wenn der Kanalname passend und aussagekräftig ist.

Bspw. könntest du den Kanal "Notebook-Ping" nennen.

ACX_Com
Beiträge: 12
Registriert: 09.07.2022, 09:52
System: CCU

Re: Was zum Henker - if auf Contains, Find... funktioniert nicht

Beitrag von ACX_Com » 01.05.2024, 14:29

Du hast absolut Recht, aber irgendwas hatte ich mir vor ein paar Monaten, als ich das Konstrukt zum 1. Mal aufgebaut hatte (und zeitlich nicht beenden konnte), dabei gedacht - was mir aktuell nicht auf dem Schirm liegt. :roll:

Unglaublich dass ich nun wegen sowas banalen so lange herumgeeiert habe - und du mir das einfach so hinknallst! :mrgreen:
...liegt wohl daran, dass ich gerade Mal alle 3-5 Monate Mal was scripte und ständig wieder raus komm.

Also, nochmals vielen herzlichen Dank - ich hoffe du hast am Feiertag noch was anderes vor, als mir unter die Arme zu greifen! 8)

Tyfys
Beiträge: 576
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 133 Mal

Re: Was zum Henker - if auf Contains, Find... funktioniert nicht

Beitrag von Tyfys » 01.05.2024, 15:29

ACX_Com hat geschrieben:
01.05.2024, 13:02
um Kanäle "Ping:1", "Ping:2", "Ping:3"... usw.
Also wenn es um so etwas geht, wo fortlaufende Nummern mit im Spiel sind,
bin ich ja nicht nicht so der Freund von if - elseif elseif usw.

da ist das dann mein bevorzugtes Procedere:

Code: Alles auswählen

string o_geraet_Name ="";
string DevArr =  "NoName;WR1;WR2;Notebook;Handy"; ! etc

string Kanal ="Ping:1";

integer pos = Kanal. StrValueByIndex(":",1). ToInteger() ;
if ( pos >  web.webGetValueListCount(DevArr)-1 ) { pos=0;}
o_geraet_Name = DevArr. StrValueByIndex(";",pos);
WriteLine(o_geraet_Name);
Ich finde, es ist einfacher zu pflegen.

Aber jeder Jeck ist anders, wie es im Rheinland heisst. :mrgreen:
Gruß
Harry

Antworten

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