Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Black » 04.02.2019, 19:13

Nachdem schon einige bei mir angefragt hatten, ob und wann ich ein Release von dem Programm Konsistenz Check in meinem SDV bringe.
ganz soweit ist es noch nicht. aber ich veröffentliche hier schon mal Teile des Codes für die Allgemeinheit, der letztlich die Analyse machen wird.

Ausführung:

Code unter Unter Script ausführen auf der CCU (oder in einem anderen Editor mit Execute Funktionalität) ausführen

Code: Alles auswählen

!- Programm Konsistenz Checks V0.1
!- Pre Release Extract of SDV 3.07.08 by Black
!- Januar 2018
string sPRG;
string sSDest;
string sCond;
string sSCond;
object oPRG;
object oRule;
object oCond;
object oSCond;
object oDest;
object oSDest;
object oOBJ;
string ivtConst="ivtEmpty,ivtNull,ivtBinary,ivtToggle,ivtFloat,ivtRelScaling,ivtScaling,ivtBitMask,ivtByte,ivtWord,ivtDate,ivtTime,ivtDateTime,,,,ivtInteger,ivtDWord,ivtObjectId,ivtSystemId,ivtString,ivtSceneNumber,ivtCurrentValue,ivtCurrentDateTime,ivtCurrentDate,ivtCurrentTime,ivtSunrise,ivtSunset,ivtDelay,ivtCalMonthly,ivtCalYearly,ivtCalOnce,ivtCalDaily,ivtCalWeekly,ivtDeviceId,ivtSpecialValue";
string ivtCond =",bei,,um,,gleich,von..bis kleiner..,,größer als,größer oder gleich ..,kleiner oder gleich..,ungleich";
integer iType;
object oo;
string indirekt;
integer iRule=1;


integer n=1;
boolean testOK= true;

WriteLine ("ProgrammAnalyse Konsistenz Typen");
WriteLine ("by Black in Jan. 2019");
WriteLine ("Extracted from SDV 3.07.08 by Black")
WriteLine ("--------------------------------------------");
foreach (sPRG,dom.GetObject (ID_PROGRAMS).EnumIDs () ){
    oPRG= dom.GetObject (sPRG);
    if (oPRG) {
       WriteLine ("\tAnalyse Program: " # oPRG.Name () # " [ID: "#oPRG.ID()#"]");
       oRule= oPRG.Rule ();
       iRule=1;
       while (oRule){
           foreach (sCond, system.GenerateEnum (0,oRule.RuleConditions().Count()-1)) {
              oCond= oRule.RuleCondition (sCond.ToInteger () );
              foreach (sSCond, system.GenerateEnum (0,oCond.CndSingleCount ()-1)) {
                oSCond= oCond.CndSingleCondition (sSCond);
                !- Single Condition erreicht:
                if ((oSCond.LeftValType () == ivtSystemId) || (oSCond.LeftValType () == ivtObjectId)) {
                   oOBJ= dom.GetObject (oSCond.LeftVal() );
                   if (oOBJ.ValueType()== ivtString) {
                      if ((oSCond.ConditionType()!= 1) && (oSCond.ConditionType ()!= 5)) {
                         WriteLine ("\t\tInkonsistenz [SCND-ID: " # oSCond.ID () # "] Rule-Nr: " # iRule # ", CND-Nr: " # (sCond.ToInteger()+1) # ", SCND-Nr: " # (sSCond.ToInteger()+1) # " -- Value: " # oOBJ.ValueType()# " ["  # (ivtConst.StrValueByIndex (",",oOBJ.ValueType() ))  # "], Condition: " # oSCond.ConditionType() # " [" # (ivtCond.StrValueByIndex (",",oSCond.ConditionType() ) ) # "]" );
                      }
                   }
                   if (oOBJ.ValueType()== ivtBinary) {
                      if ((oSCond.ConditionType()!= 1)) {
                         WriteLine ("\t\tInkonsistenz [SCND-ID: " # oSCond.ID () # "] Rule-Nr: " # iRule # ",CND-Nr: " # (sCond.ToInteger()+1) # ", SCND-Nr: " # (sSCond.ToInteger()+1) # " -- Value: " # oOBJ.ValueType()# " ["  # (ivtConst.StrValueByIndex (",",oOBJ.ValueType() ))  # "], Condition: " # oSCond.ConditionType() # " [" # (ivtCond.StrValueByIndex (",",oSCond.ConditionType() ) ) # "]" );
                      }
                   }
                   if (oOBJ.ValueType()!= oSCond.RightVal1ValType () ) {
                       WriteLine ("\t\tInkonsistenz [SCND-ID: " # oSCond.ID () # "] Rule-Nr: " # iRule # ",CND-Nr: " # (sCond.ToInteger()+1) # ", SCND-Nr: " # (sSCond.ToInteger()+1) # " -- LeftVal: "# oOBJ.ValueType()# " ["  # (ivtConst.StrValueByIndex (",",oOBJ.ValueType() ))  # "], RightVal1: " #oSCond.RightVal1ValType () # " [" # (ivtConst.StrValueByIndex (",",oSCond.RightVal1ValType() ) )  # "]" );
                   }
                   if (oOBJ.ValueType()!= oSCond.RightVal2ValType () ) {
                       WriteLine ("\t\tInkonsistenz [SCND-ID: " # oSCond.ID () # "] Rule-Nr: " # iRule # ",CND-Nr: " # (sCond.ToInteger()+1) # ", SCND-Nr: " # (sSCond.ToInteger()+1) # " -- LeftVal: "# oOBJ.ValueType()# " ["  # (ivtConst.StrValueByIndex (",",oOBJ.ValueType() ))  # "], RightVal2: " #oSCond.RightVal2ValType () # " [" # (ivtConst.StrValueByIndex (",",oSCond.RightVal2ValType() ) )  # "]" );
                   }
                }

              }
           }
           oDest= oRule.RuleDestination ();
           if (oDest) {
              foreach (sSDest, system.GenerateEnum (0,oDest.DestSingleCount() -1)) {
                 oSDest= oDest.DestSingleDestination (sSDest.ToInteger () );
                 if (oSDest) {
                   !- SingleDestination erreicht
                   if ((oSDest.DestinationParam() == ivtSystemId) || (oSDest.DestinationParam () == ivtObjectId)) {
                     indirekt="";
                     oOBJ= dom.GetObject (oSDest.DestinationDP () );
                     iType= oSDest.DestinationValueType ();
                     if ((iType == ivtSystemId) || (iType == ivtObjectId)) {indirekt= " [ID: " # oSDest.DestinationValue () # "] ";oo=dom.GetObject ( oSDest.DestinationValue ()) ; iType= oo.ValueType (); }
                     if ((oOBJ.ValueType()!= iType) && (iType!=ivtSpecialValue) ) {
                         WriteLine ("\t\tInkonsistenz [SDEST-ID: " # oSDest.ID () # "] Rule-Nr: " # iRule # ",SDST-Nr: " # (sSDest.ToInteger()+1) # " -- DestinationDP : "# oOBJ.ValueType()# " ["  # (ivtConst.StrValueByIndex (",",oOBJ.ValueType() ))  # "], DestinationValueType " # indirekt # ": " # iType # " [" # (ivtConst.StrValueByIndex (",",iType ) )  # "]" );
                     }
                   }
                 }
              }
           }
           oRule= oRule.RuleSubRule ();
           iRule=iRule+1;
       }
    }
}

Das ist noch nicht die entgültige Fassung, und ja, die wird auch noch optimiert.

was kommt dabei raus:

Code: Alles auswählen

ProgrammAnalyse Konsistenz Typen
by Black in Jan. 2019
Extracted from SDV 3.07.08 by Black
--------------------------------------------
	Analyse Program: Alarmtest [ID: Alarmtest]
	Analyse Program: ANBAU_00_ShopStatusOffen [ID: ANBAU_00_ShopStatusOffen]
	Analyse Program: ANBAU_03_SetModeAnbau [ID: ANBAU_03_SetModeAnbau]
	Analyse Program: ANBAU_04_TempSet [ID: ANBAU_04_TempSet]
	Analyse Program: InfoEPaper00 [ID: InfoEPaper00]
	Analyse Program: LeavingHome_00 [ID: LeavingHome_00]
	Analyse Program: ROLLO_00_AstroTrigger [ID: ROLLO_00_AstroTrigger]
	Analyse Program: ROLLO_XX_MasterSollwert [ID: ROLLO_XX_MasterSollwert]
	Analyse Program: Stringtest [ID: Stringtest]
		Inkonsistenz [SCND-ID: 8631] Rule-Nr: 1, CND-Nr: 1, SCND-Nr: 1 -- Value: 20 [ivtString], Condition: 6 [von..bis kleiner..]	
	Analyse Program: StringTrigger [ID: StringTrigger]
	Analyse Program: SYS_01_BOOT [ID: SYS_01_BOOT]
	Analyse Program: SYS_01_MITTERNACHT [ID: SYS_01_MITTERNACHT]
	Analyse Program: SYS_01_STAT [ID: SYS_01_STAT]
	Analyse Program: SYS_02_SystemZeit [ID: SYS_02_SystemZeit]
	Analyse Program: SYS_06_StatusRestore [ID: SYS_06_StatusRestore]
	Analyse Program: SYS_99_ServiceMeldungen [ID: SYS_99_ServiceMeldungen]
	Analyse Program: test cuxd timer [ID: test cuxd timer]
	Analyse Program: TEST Rollo 1 [ID: TEST Rollo 1]
	Analyse Program: test2245 [ID: test2245]
	Analyse Program: testAlalrm [ID: testAlalrm]
	Analyse Program: TestDestinations [ID: TestDestinations]
		Inkonsistenz [SDEST-ID: 8594] Rule-Nr: 1,SDST-Nr: 1 -- DestinationDP : 6 [ivtScaling], DestinationValueType  [ID: 4079] : 2 [ivtBinary]
	Analyse Program: TestDestinations [ID: TestDestinations]
		Inkonsistenz [SDEST-ID: 8605] Rule-Nr: 1,SDST-Nr: 1 -- DestinationDP : 6 [ivtScaling], DestinationValueType  [ID: 7035] : 20 [ivtString]
	Analyse Program: TestEvent [ID: TestEvent]
	Analyse Program: TestLocal [ID: TestLocal]
	Analyse Program: TestPRGFalsch [ID: TestPRGFalsch]
	Analyse Program: TriggerType [ID: TriggerType]
	Analyse Program: USV_01_SHUTDOWN [ID: USV_01_SHUTDOWN]
		Inkonsistenz [SCND-ID: 2598] Rule-Nr: 1,CND-Nr: 1, SCND-Nr: 1 -- LeftVal: 4 [ivtFloat], RightVal1: 16 [ivtInteger]
		Inkonsistenz [SCND-ID: 2598] Rule-Nr: 1,CND-Nr: 1, SCND-Nr: 1 -- LeftVal: 4 [ivtFloat], RightVal2: 16 [ivtInteger]
		Inkonsistenz [SDEST-ID: 2600] Rule-Nr: 1,SDST-Nr: 1 -- DestinationDP : 2 [ivtBinary], DestinationValueType : 4 [ivtFloat]
		Inkonsistenz [SDEST-ID: 2604] Rule-Nr: 2,SDST-Nr: 1 -- DestinationDP : 2 [ivtBinary], DestinationValueType : 4 [ivtFloat]
	Analyse Program: USV_02_SHUTDOWN [ID: USV_02_SHUTDOWN]
Interpretation:
Analyse Program: Alarmtest [ID: Alarmtest] ohne weitere Zeilen darunter: alles ist gut

Inkonsistenz [SCND-ID: 8615] Rule-Nr: 1,CND-Nr: 1, SCND-Nr: 1 -- LeftVal: 4 [ivtFloat], RightVal1: 16 [ivtInteger]
Eingerückt dargestellt: da darüberstehende programm hat eine Ungereimtheit:
wo:
Rule: 1 : im ersten Bedingungsteil
Rule: 2 : im zweiten Bedingungsteil (Sonstwenn oder sonst) etc
CND_Nr: 1: im ersten Conditionteil (im ersten block der jeweiligen Rule)
SCND_NR: 2: Die erste Zeile im jeweiligen Block (es ist auch die ID angegeben, im SDV kann die direkt eingegebn werden)
in dieser Singlekondition passt nicht: eine Float wird mit einer Integer verglichen: nicht schön, aber auch nicht sooo tragisch, kann man korrieren. (später mal)

Inkonsistenz [SCND-ID: 8631] Rule-Nr: 1, CND-Nr: 1, SCND-Nr: 1 -- Value: 20 [ivtString], Condition: 6 [von..bis kleiner..]
Den Fall, den wir hier schon mal diskutiert haben, eine Stringvariable als Trigger, dafür mit einer Condition 6. Die Garantie das es nicht funktioniert.
Sollte korrigiert werden

bei Booleans sollte auch cals Condition 5 [bei] stehen, grösser, kleiner was weiss ich kann, muss nicht, aber kann ein Grund für Nicht Funktionieren sein. Sollte auch korrigiert werden.

Destination:
Inkonsistenz [SDEST-ID: 8617] Rule-Nr: 1,SDST-Nr: 1 -- DestinationDP : 2 [ivtBinary], DestinationValueType : 4 [ivtFloat]

Vorgehensweise genau wie oben zum identifizeiren:
hier wird einem Bool ein Float zugewiesen: kann gut gehen, muss nicht. 0= false, also ungleich 0 = true

Inkonsistenz [SDEST-ID: 8605] Rule-Nr: 1,SDST-Nr: 1 -- DestinationDP : 6 [ivtScaling], DestinationValueType [ID: 7035] : 20 [ivtString]
Auch ein Garant dafür, das es nicht funktionieren wird.

Im idealfall tauchen keine Inkonsistenzmeldungen auf.

Ich bin damit aber selber immer noch dran... in ein bisscehn wühlen in den Tiefen.

Black
Zuletzt geändert von Black am 09.02.2019, 19:35, insgesamt 2-mal geändert.
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

Sven_A
Beiträge: 4155
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 348 Mal
Danksagung erhalten: 284 Mal

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Sven_A » 05.02.2019, 08:56

Wow. Danke.
Ich bekomme 3 Meldungen die jeweils:

Code: Alles auswählen

...Value: 2 [ivtBinary], Condition: 3 [um][um]
melden. Was ist damit gemeint?

2 mal betrifft es eine Sysvar die ich verzögert auf "Tag/Nacht" schalte, und noch unzählige Male mehr verwende.
Hier aber "nur prüfen", sonst (vermutlich) aber immer "Auf Änderung". Da kommen komischerweise keine Meldungen.

Einmal betrifft es eine Abfrage wo ich Kanal 1 einer klassischen Schaltsteckdose auf "ist ein" prüfe. Bei so einem Kanal kann ich ja garnichts selber verkonfigurieren.

Hast du einen Erklärungsansatz dafür?

Danke!
Sven

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

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Black » 05.02.2019, 09:49

Es wird ein wenig verwunden:

ein programm sieht immer so aus, bzw so wird es in den verschiedenen objekten in der rega gespeichert:

ProgramRules.jpg
Bei dir wird dann da stehen: programmname, damit hast du das Programm, eine Nummer der Rules, das sind die durchnummerierten ich nenns mal regelblöcke, dann kommt CND, das stht für Condition, ebenfalls mit einer nummer, und dann SCND also die Nummer der Singlecondition. Damit lässt sich die Stelle in der WebUI indentifizieren.

Für die Direkteingabe in externe Hilfsprogramme ist noch die iseID der Singlecondition angegeben.

bei dir heisst das, das die SingleCondition einen ConditionType 3 (um) auf ein Boolschen Wert (ivtBinary) anwendet. "Um" wird eigentlich bei zeitmodulen benutzt. Wenn ein WebUI programm korreekt mit vergleich auf einen Bool anlegst wird der ConditionType 1 (bei) genommen. Wahrscheinlich stand an der Stelle im programm früher mal ein zeitmodul, welches du später mal einen Wert (Systemvariable oder gerät, kann ich nicht sehen) vom typ Boolean getauscht hast.

in anderen programmen kann das völlig korrekt sein und keine Meldung hervorrufen, wenn es da sauber von vorneherein angelegt wurde. Es wird hie rnicht der Datenpunkt an sich betrachtet, sondern die betrachtung dieses Datenpunktes mit vergleichstypen (beispielsweise Booolean mit string vergleich, eine beliebte fehlerquelle). Welche Kombination daraus zu tolerien, welche potentiell bösartig sind , daran bin ich auch noch dran...

Es gibt da nun mal keine wirklich zugängliche Dokumentation drüber. Ich versuche die "normale" Kombination daran festzumachen, wie eine neu angelegte Bedingungung aufgebaut wird. Ist leider Haufen Arbeit.

ich hoffe ich konnts erklären...

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

Sven_A
Beiträge: 4155
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 348 Mal
Danksagung erhalten: 284 Mal

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Sven_A » 05.02.2019, 10:16

Black hat geschrieben:
05.02.2019, 09:49
...ich hoffe ich konnts erklären
Japp, konntest du, vielen Dank!
Ja, möglich das ich die betroffenen Programme mal umgebaut hatte, ich würde nicht die Hand dafür ins Feuer legen.

Die Zuordnung hatte ich schon vorher verstanden, nur was die Ausgabe in diesem Fall bedeutet nicht.
Zusätzlich hatte ich das Problem als solches bisher falsch verstanden, dachte das passiert nur bei Änderungen an Variablen, das ein Komplettumbau der Bedingung das auch verursacht war mir bisher nicht klar.

Dann schau ich mal das ich aufräume.

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

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Black » 05.02.2019, 10:26

japs, Als fehlerquelle komtm dabei zum Tragen:

Ändern im programm, dabei ändern der Bedingungen. Kann gutgehen, muss nicht.

Ändern des Types der Systemvariablen.

als Beispiel eines Programmes, hab ich in einem anderen Beitrag von mir beschrieben gehabt, durch rumänderei ein programm, das richtig ausschaut, dass aber nicht mehr triggert.
Unbenannt-1.jpg
direkt in meinem programm auseinandergerupft die Singledestination sieht so wild aus:
SDERR.jpg
intepretiert ais den Methodenwerten: eine Boolsche Systemvariablen als vergleich von ...bis kleiner .... auf 2 float werte. tist eine "ich trigger nie mehr" funktion. Fieser weise wurde in der WebUI falscherweise als "bei" angezeigt, isses aber bei Blick in die SingleCondition nicht.

es liess sich händisch wiedr in funktion bringen durch gradebiegen der passenden werte.

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

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von alchy » 05.02.2019, 11:51

Black hat geschrieben:
05.02.2019, 10:26
Ändern im programm, dabei ändern der Bedingungen. Kann gutgehen, muss nicht.
Ändern des Types der Systemvariablen.
Sven_A hat geschrieben:
05.02.2019, 10:16
Zusätzlich hatte ich das Problem als solches bisher falsch verstanden, dachte das passiert nur bei Änderungen an Variablen, das ein Komplettumbau der Bedingung das auch verursacht war mir bisher nicht klar.
Wenn du ein Programm anlegst z.B. Trigger Stringvariable,ist alles noch korrekt. Beim Speichern wird (wie bei anderen auch)
der ConditonType auf 6 geändert. Das kommt durch fehlerhafte interne Scripte.
(völlig ohne "nachträgliches Ändern" der triggernden Systemvariable)

Daher mehrfach gepostet mein Tipp, das ein solches Programm nur funktioniert, wenn man die Bedingung doppelt anlegt.
Oder man fixt das Ganze richtig durch eine kleine Änderung.


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Black » 05.02.2019, 12:39

das von mir gebrachte beispiel basierte nicht auf dem String Trigger problem, sondern auf Änderung einer vorher Real Abfrage auf eine Boolean Abfrage. Auch das kann reproduzierbar zu nicht triggernden programmen führen.
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

debianatoe
Beiträge: 474
Registriert: 05.12.2016, 19:04
Hat sich bedankt: 30 Mal
Danksagung erhalten: 4 Mal

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von debianatoe » 08.02.2019, 23:11

Kann man Eure Diskussion für einen Laien so zusammenfassen, daß die Programme unter bestimmten Bedingungen nicht das tun, was sie lt. WebUI-Darstellung tun müßten? Diese "bestimmten" Bedingungen treten insbesondere dann ein, wenn man Abfragen ändert oder einen String als Trigger verwendet? Für mich klingt das nach einem Bug, den eQ3 ausbügeln müßte ...
Auf Eure Diskussion bin ich gestoßen, weil eines meiner Programme für mich unerklärliche Dinge tut. Dieses Programm enthält einige String-Trigger:
Bildschirmfoto vom 2019-02-08 23-03-27.png
Das Programm schaltet (meiner Meinung nach fehlerhafterweise) die Variable IST_Niederschlag=wahr, wenn die Variable WetterBedingungen von "Heiter" auf "Wolkig" wechselt. Dies sollte doch nur passieren, wenn auf "Regen", "Gewitter" oder "Schneefall" gewechselt wird.
Blacks Analyse-Programm hat dazu diese Inkonsistenz gefunden:
Analyse Program: Niederschlagsermittlung [ID: 24179]
Inkonsistenz [SCND-ID: 24188] Rule-Nr: 1, CND-Nr: 1, SCND-Nr: 1 -- Value: 20 [ivtString], Condition: 9 [größer oder gleich ..]
Wie kann ich das Programm so korrigieren, daß es funktioniert?
Viele Grüße,
debianatoe

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von alchy » 09.02.2019, 00:38

debianatoe hat geschrieben:
08.02.2019, 23:11
Für mich klingt das nach einem Bug, den eQ3 ausbügeln müßte ...
Nicht nur für dich.
Das Stringvergleich Problem habe ich sogar schon ein 2. Mal vor ein paar Tagen gemeldet. E197F595CC429
Ich habe sogar Dateinamen mitgesendet, wo sie nachschauen können. Außer die lapidare Eingangsbestätigung ist aber wieder nichts passiert.


debianatoe hat geschrieben:
08.02.2019, 23:11
Auf Eure Diskussion bin ich gestoßen, weil eines meiner Programme für mich unerklärliche Dinge tut.
Nach meiner Erfahrung, wird eben NICHT ausgelöst, obwohl es auslösen müsste wenn ein Stringvergleich als erste Bedingung in einem Programm angelegt wurde. In deinem Fall würde also der String Regen keine Auslösung hervorbringen.
Ich würde an deiner Stelle mein Script >> Auslöser eines Programmes finden und loggen << in das Programm einbauen ins DANN und im SONST um sicherzustellen, das der Trigger für das DANN auch so ist, wie du denkst.


Condition: 9 ist allerdings wieder etwas Neues, wenn ich mich Recht erinnere, kommt es doch zu 6. :shock:
Nun, laut RegaHss ist ja auch wolkig nun mal größer als heiter :mrgreen:
Glaubst du nicht?

Code: Alles auswählen

string a = "heiter";
string b = "wolkig";
if (a < b){WriteLine("wahr");}else{WriteLine("falsch");}
debianatoe hat geschrieben:
08.02.2019, 23:11
Wie kann ich das Programm so korrigieren, daß es funktioniert?
komplett löschen und den ersten Stringvergleich 2 x als Trigger eintragen als ODER sollte schon funktionieren.
Wenn Wetter = Regen
oder Wetter = Regen
oder Wetter = Gewitter
oder Wetter = Schneefall
....

Theoretisch reicht auch komplett löschen und den Zahlenvergleich oder die Logikvariable nach oben ziehen.
Wenn dsNsIntens >= 0.01
oder acNiederschlag = wahr
oder Wetter = Regen
oder Wetter = Gewitter
....


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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

Re: Typ Konsistenz Analyse - Auszug aus dem Pre-Release des SDV

Beitrag von Black » 09.02.2019, 10:34

@debianatoe

hi, du kannst zur korrektur folgendes Probieren

die Rega legt bei einem Stringvergleich im ersten moment den ConditionType 1 (typ 5 habe ich auch shcon mal erfolgreich probiert (s.A hier: viewtopic.php?f=19&t=48882#p489843) an.

du machst folgendens:
1. Backup
2. lasst mein Script nochmal laufen wichtig ist die folgende Angabe: SCND-ID: 24188
3. Diese SCND-ID ist die IseID des Objektes, welches wir nun etwas modifizieren wollen
4. du schreibst folgendes kleines Progrämmchen

Code: Alles auswählen

object o=dom.GetObject (24188);
if (o) {
  if (o.Type() == OT_SINGLECONDITION) {
    o.ConditionType (1);
    WriteLine ("ConditionType geändert");
  } else {WriteLine ("Fehler ID ist keine Singlecondition"); }
} else {WriteLine ("ID ungültig"); }
Danach: Ausprobieren obs geht

Das Programm ist nur etwas für DIESEN Anwendungsfall jetzt hier.
An etwas allgemein gültigem arbeite ich noch, das kommt in einer der nächsten Versionen in dem SDV.

Gruss, Black
Zuletzt geändert von Black am 09.02.2019, 14:11, insgesamt 1-mal geändert.
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 „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“