mskrause hat geschrieben: ↑06.05.2020, 10:07
Wenn es kein Geheimnis ist, verrate doch der Community die Lösung, kann ja immer wieder einmal vorkommen...
mbhomie007 hatte mich über PN angeschrieben, ob ich ihm helfen könne.
Nachdem hier keine richtige Hilfe zustande kam, habe ich mich dazu entschlossen, entgegen meiner Überzeugung, doch mal in fremden Scripten den Fehler zu suchen.
mskrause hat geschrieben: ↑06.05.2020, 12:41
wie es aussieht, wurde nur die Variablendeklaration in beiden SV geändert:
Das stimmt zwar nicht ganz soweit ich mich erinnere, aber zumindest sorgte genau das dafür Script nicht funktionierte.
Was mich am meisten wundert, das sollte bei JEDEM User so sein, der das Script so in Benutzung hat und die Variablen vom Script anlegen lassen hat.
Und das ist aber nicht so lt. den Aussagen hier und das ist verwunderlich.
Dieser Fehler ist richtig fies, weil noch nicht mal ein Fehler im Fehlerprotokoll erzeugt wird und nicht gleich beim Durchsehen erkannt wird.
Nimmt man mal eine Essenz des Scriptteils;
Code: Alles auswählen
!Testessenz zum Fehler im Script
string svWindRichtungInt = "OpenWeatherMap Testvariable"; !OpenWeatherMap Testvariable
integer owGradzahl = 88;
object svObject;object svObjectlist;
if((svWindRichtungInt)&&(owGradzahl>=0))
{
svObject = dom.GetObject(svWindRichtungInt);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindRichtungInt);
svObject.ValueType(ivtInteger); ! Falsch
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Windrichtung Integer");
svObject.ValueUnit("°");
svObject.ValueMin(0);
svObject.ValueMax(360);
svObject.State(owGradzahl);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
WriteLine("Variable angelegt und Wert "#owGradzahl #" in Variable "#svObject #" gespeichert");
} else {
svObject.State(owGradzahl);
WriteLine("Variable war schon angelegt aber Wert "#owGradzahl #" in Variable "#svObject #" gespeichert");
}
}else{WriteLine("Bedingungen nicht erfüllt");}
WriteLine("Script ganz durch");
so wird beim ersten Ausführen des Scriptes die Variable angelegt und der Wert eingetragen.
Code: Alles auswählen
Variable angelegt und Wert 88 in Variable OpenWeatherMap Testvariable gespeichert
Script ganz durch
Anlegen der Variable? - ja und sie sieht auch erstmal oberflächlich so aus wie eine normale Zahlenvariable.
Eintragen des Wertes? Nein - Unter Staus und Bedienung wird nur der Zeitstempel der Variable geändert.
Beim nochmaligen Ausführen des Scriptes wird richtig erkannt
Code: Alles auswählen
Variable war schon angelegt aber Wert 88 in Variable OpenWeatherMap Testvariable gespeichert
Script ganz durch
Das Ergebnis ist gleich. Zeitstempel ja, Wertänderung nein.
Fehler im Protokoll? Nö.
Wieso gehts also nicht? der Code ist doch "korrekt" die Writelines sollten doch die Wahrheit sagen ?
Umgehung:
- nun hätte ich im sagen können:
- geh zu Einstellungen Systemvariable - such die Variable - ruf sie auf und drück auf o.k.
- Damit wird die falsch angelegte Variable korrekt überschrieben und der nächste Lauf des Scriptes trägt den Wert korrekt ein.
- Problem gelöst, oder wie hier üblich - erfolgreich umgangen.
Lösung:
- Löschen der Variable
- Anpassen des Scriptes
Code: Alles auswählen
!Testessenz zum Fehler im Script
string svWindRichtungInt = "OpenWeatherMap Testvariable"; !OpenWeatherMap Testvariable
integer owGradzahl = 88;
object svObject;object svObjectlist;
if((svWindRichtungInt)&&(owGradzahl>=0))
{
svObject = dom.GetObject(svWindRichtungInt);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindRichtungInt);
svObject.ValueType(ivtFloat); !korrekt
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Windrichtung Integer");
svObject.ValueUnit("°");
svObject.ValueMin(0);
svObject.ValueMax(360);
svObject.State(owGradzahl);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
WriteLine("Variable angelegt und Wert "#owGradzahl #" in Variable "#svObject #" gespeichert");
} else {
svObject.State(owGradzahl);
WriteLine("Variable war schon angelegt aber Wert "#owGradzahl #" in Variable "#svObject #" gespeichert");
}
}else{WriteLine("Bedingungen nicht erfüllt");}
WriteLine("Script ganz durch");
Der erste Durchlauf erzeugt die Variable halbwegs korrekt.
Ein kleiner Fehler, wahrscheinlich durch Copy&Paste von irgendwo Code genommen und eingesetzt. Fehler inklusive.
Alchy