[GELÖST] Scriptprobleme mit 2.27.8.20170620

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Xel66
Beiträge: 14169
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 586 Mal
Danksagung erhalten: 1501 Mal

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von Xel66 » 06.07.2017, 11:28

Code: Alles auswählen

""gelaufenJ": "0.0000000.000000",
Es ist immer noch das gleiche Problem. Eine Stringvariable ist ein Wort wie z.B. "Dienstag". Und wenn Du dieses mit "Montag" zusammenführst wird eben "DienstagMontag" draus und nicht "Mittwoch" (oder "Freitag", je nach eingestelltem Wochenbeginn). Mit Worten kann man nicht rechnen. Und bei Dir ist "0.000000" keine Zahl sondern "NullKommaNullNullNullNullNullNull". Du musst eine Gleitkommazahl "Value().ToFloat()" draus machen. Das habe ich Dir aber vor drei Tagen schon mal geschrieben und "jmaus" hat es einen Tag später noch mal präzisiert. Sogar mit Deinem Wunsch nach Begrenzung der Nachkommastellen. Und solange Du alles wie "Cash" bemerkt alles in "var" deklarierst, kann das nichts werden. Wie Du schon selbst bemerkt hast, es ist ein "einfaches Problem".

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Günni
Beiträge: 231
Registriert: 03.10.2013, 00:20
Wohnort: Nordstemmen
Danksagung erhalten: 1 Mal

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von Günni » 06.07.2017, 12:17

Hallo, ok danke euch für die Antworten.
Leider kann ich das nicht allein ändern.
Noch mal eine Frage? Warum lief das ganze mit der Vorgänger Version.
Danke
Gruß Günni

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

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von alchy » 06.07.2017, 12:26

mc.olli hat geschrieben: Das hat bis dato immer funktioniert, allerdings ist seit dem update das so nicht mehr möglich.

Code: Alles auswählen

var StromFinder100 = dom.GetObject("SV_Strom_Finder_Summe").Value().ToString(3);
var StromFinder102 = 0.01 + StromFinder101;
Das hat noch nie funktioniert.

Egal, ob es sich bei der Systemvariable SV_Strom_Finder_Summe im Beispiel um eine Zahlenvariable handelt oder eine Zeichenkettenvariable :?: :?: .
Durch die Wandlung .ToString(3) in der ersten Zeile wird das ganze zu einer Zeichenkette, mit der man wie schon mehrfach geschrieben wurde, eben nicht rechnen.

Wenn man dann genau hinschaut, soll das Ergebnis in StromFinder102 die Summe aus 0.01 und StromFinder101 sein und nicht mit der StromFinder100
Woher kommt denn diese 101? Da haben wir also ein weiteres Problem - wahrscheinlich nur ein "Übertragungsfehler"

Alchy

PS: .Round() sollte auf einen String auch nicht angewendet werden können und zu einem Fehler führen. Da der TE aber nicht schreibt, um was es sich eigentlich handelt - ist das Ganze nur Glaskugelraten.
Somit ist die Wandung mittels .ToFloat() vielleicht die einzige Möglichkeit - aber vielleicht auch genauso falsch bzw. überflüssig, da es sich vielleicht ja bei der Variablen SV_Strom_Finder_Summe schon um eine Zahl handelt.
Und
Die Deklaration mittels var ist nicht das Problem - jedenfalls kein ursächliches. Man kann auch keinen String zu einer Zahl machen, indem man ihn nur einfach als Zahl deklariert.

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.

robsdobs
Beiträge: 510
Registriert: 08.08.2015, 22:52
Danksagung erhalten: 1 Mal

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von robsdobs » 06.07.2017, 22:10

Günni hat geschrieben:Hallo, ok danke euch für die Antworten.
Leider kann ich das nicht allein ändern.
Noch mal eine Frage? Warum lief das ganze mit der Vorgänger Version.
Danke
Die neue Version der Rega ist sehr viel kritischer mit Script Fehlern.

Bei deine Systemvariablen weiß ich leider nicht von welchem Datentyp diese definiert sind, daher ist es schwierig hier zu helfen.

Hier ist die Version mit den WriteLines, welche du im "script testen" benutzen kannst:

Code: Alles auswählen

boolean DEBUG = true;

! Skript zur Berechnung
var AusZeit= dom.GetObject("Brenner letzte Ausschaltzeit");
var EinZeit= dom.GetObject("Brenner letzte Einschaltzeit");
var TankGes= dom.GetObject("Brenner Tankinhalt bei letzter Fuellung").Value();
var KumTankAkt= dom.GetObject("Brenner Tankinhalt aktuell");
var KumZeitF= dom.GetObject("Brenner Betriebsstunden seit letzter Fuellung");
var KumVerbrauchF= dom.GetObject("Brenner Verbrauch seit letzter Fuellung");
var KumZeitJ= dom.GetObject("Brenner Betriebsstunden laufendes Kalenderjahr");
var KumVerbrauchJ= dom.GetObject("Brenner Verbrauch laufendes Kalenderjahr");
var KumZeitM= dom.GetObject("Brenner Betriebsstunden laufender Monat");
var KumVerbrauchM= dom.GetObject("Brenner Verbrauch laufender Monat");
var KumZeitW= dom.GetObject("Brenner Betriebsstunden laufende Woche");
var KumVerbrauchW= dom.GetObject("Brenner Verbrauch laufende Woche");
var KumZeitT= dom.GetObject("Brenner Betriebsstunden heute");
var KumVerbrauchT= dom.GetObject("Brenner Verbrauch heute");

! Speichern der Ausschaltzeit
AusZeit.State(system.Date("%F %T"));

! Den Einschaltzeit String aus der Systemvariablen in ein Zeitobjekt umwandeln
time t = EinZeit.Variable().ToTime();

! Die aktuelle (Ausschalt)Zeit String erzeugen und in ein Zeitobjekt umwandeln
time t1 = system.Date("%F %T").ToTime();

! Das Zeitobjekt Einschaltzeit in Sekunden seit 1.1.1970 umwandeln
real x = t.ToFloat();
if (DEBUG) { WriteLine("x="#x.ToString()); }

! Das Zeitobjekt aktuelle Zeit in Sekunden seit 1.1.1970 umwandeln
real x1 = t1.ToFloat();
if (DEBUG) { WriteLine("x1="#x1.ToString()); }

!Die Differenz ist die Einschaltdauer in Stunden umgerechnet
real x0 = 0.01*(x1-x)/36;
if (DEBUG) { WriteLine("x0="#x0.ToString()); }

! Die Einschaltdauer seit der letzten Füllung kumulieren = Betriebsstunden seit der letzten Füllung
real gelaufenF = x0 + KumZeitF.Variable();
if (DEBUG) { WriteLine("gelaufenF="#gelaufenF.ToString()); }

! Die Betriebsstunden seit der letzten Füllung in die Systemvariable einstellen
KumZeitF.State (gelaufenF);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h seit der letzten Füllung
real verbrauchtF = gelaufenF * 1.87 * 1.197;
if (DEBUG) { WriteLine("verbrauchtF="#verbrauchtF.ToString()); }

! Verbrauch seit der letzten Füllung in die Systemvariable einstellen
KumVerbrauchF.State (verbrauchtF);

! Berechnung Tankinhalts in Litern
real tankinhalt = TankGes - verbrauchtF;
if (DEBUG) { WriteLine("tankinhalt="#tankinhalt.ToString()); }

! Tankinhalt in die Systemvariable einstellen
KumTankAkt.State (tankinhalt);

! Die Einschaltdauer im laufenden Kalenderjahr kumulieren = Betriebsstunden
real gelaufenJ = x0 + KumZeitJ.Variable();
if (DEBUG) { WriteLine("gelaufenJ="#gelaufenJ.ToString()); }

! Die Betriebsstunden im laufenden Kalenderjahr in die Systemvariable einstellen
KumZeitJ.State (gelaufenJ);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h im laufenden Kalenderjahr
real verbrauchtJ = gelaufenJ * 1.87 * 1.197;
if (DEBUG) { WriteLine("verbrauchtJ="#verbrauchtJ.ToString()); }

! Verbrauch im laufenden Kalenderjahr in die Systemvariable einstellen
KumVerbrauchJ.State (verbrauchtJ);

! Die Einschaltdauer im laufenden Kalendermonat kumulieren = Betriebsstunden
real gelaufenM = x0 + KumZeitM.Variable();
if (DEBUG) { WriteLine("gelaufenM="#gelaufenM.ToString()); }

! Die Betriebsstunden im laufenden Kalendermonat in die Systemvariable einstellen
KumZeitM.State (gelaufenM);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h im laufenden Kalendermonat
real verbrauchtM = gelaufenM * 1.87 * 1.197;
if (DEBUG) { WriteLine("verbrauchtM="#verbrauchtM.ToString()); }

! Verbrauch im laufenden Kalendermonat in die Systemvariable einstellen
KumVerbrauchM.State (verbrauchtM);

! Die Einschaltdauer in der laufenden Kalenderwoche kumulieren = Betriebsstunden
real gelaufenW = x0 + KumZeitW.Variable();
if (DEBUG) { WriteLine("gelaufenW="#gelaufenW.ToString()); }

! Die Betriebsstunden in der laufenden Kalenderwoche in die Systemvariable einstellen
KumZeitW.State (gelaufenW);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h in der laufenden Kalenderwoche
real verbrauchtW = gelaufenW * 1.87 * 1.197;
if (DEBUG) { WriteLine("verbrauchtW="#verbrauchtW.ToString()); }

! Verbrauch in der laufenden Kalenderwoche in die Systemvariable einstellen
KumVerbrauchW.State (verbrauchtW);

! Die Einschaltdauer heute kumulieren = Betriebsstunden
real gelaufenT = x0 + KumZeitT.Variable();
if (DEBUG) { WriteLine("gelaufenT="#gelaufenT.ToString()); }

! Die Betriebsstunden heute in die Systemvariable einstellen
KumZeitT.State (gelaufenT);

! Berechnung von Verbrauch in Liter mit 1,87 kg/h heute
real verbrauchtT = gelaufenT * 1.87 * 1.197;
if (DEBUG) { WriteLine("verbrauchtT="#verbrauchtT.ToString()); }

! Verbrauch in der laufenden Kalenderwoche in die Systemvariable einstellen
KumVerbrauchT.State (verbrauchtT);
sehr selten im Forum

Gerti
Beiträge: 3035
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 274 Mal

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von Gerti » 13.07.2017, 16:22

Hi!

Wie finde ich denn das Script, dass einen Scripterror produziert?
Ich habe (ein paar Minuten nach dem Start der Zentrale), diesen Scriptfehler im Logfile:

Code: Alles auswählen

Jul 13 15:51:38 homematic-raspi local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: ^M {^M   if( system.IsVar("rid") )^M   {^M     object oTmp = dom.GetObject( system.GetVar("rid") );^M     if( oTmp )^M     {^M       if( oTmp.ElseIfFlag() )^M       {^M         object oRuleTmp = oTmp.RuleSubRule();^M         if( !oRuleTmp )^M         {^M           oRuleTmp = oTmp.RuleCreateSubRule();^M           oRuleTmp.ElseIfFlag( true );^M         }^M       }^M       else^M       {^M         oTmp.ElseIfFlag(true);^M       }      ^M       Write( oRuleTmp.RuleDestination() );^M     }^M   }^M }^M ^M function ::DeleteSubRule()^M {^M   if( system.IsVar("rid") )^M   {^M     object oTmp = dom.GetObject( system.GetVar("rid") );^M     if( oTmp )^M     {^M       Write( oTmp.RuleDelSubRule() );^M     }^M   }^M }^M ^M function ::SetOperatorType()^M {^M   if( system.IsVar("id") && system.IsVar("value") )^M   {^M     object oTmp = dom.GetObject( system.GetVar("id") );^M     if( oTmp )^M     {^M       Write( oTmp.CndOperatorType( system.GetVar("value") ) );^M       if( oTmp.CndSingleCount() == 1 )^M  
Ich habe aber kein solches Skript bei meinen Programmen gefunden und wüsste daher gerne, woher dieses Skript kommt?!

Gruß,
Gerti

Benutzeravatar
jmaus
Beiträge: 9865
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 464 Mal
Danksagung erhalten: 1883 Mal
Kontaktdaten:

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von jmaus » 13.07.2017, 16:34

Das ist ein Auszug eines internen ReGaHss Skriptes das man unter "/www/rega/esp/programs.fn" findet. Warum das jetzt bei dir einen ScriptRuntimeError erzeugt ist natürlich eine gute Frage. Das müsste man Debuggen. Ist das denn in irgendeiner weiter von dir reproduzierbar? D.h. tritt es reproduzierbar bei einer bestimmten Aktion auf?
Zuletzt geändert von alchy am 13.07.2017, 20:54, insgesamt 1-mal geändert.
Grund: sinnloses Fullquote entfernt
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Gerti
Beiträge: 3035
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 274 Mal

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von Gerti » 13.07.2017, 16:38

Hi!

Kann ich noch nicht sagen. Habe gerade eben erst das Update auf die aktuelle Version von Raspberrymatic gemacht und dann direkt ins Log geschaut, ob eines meiner Scripte ein Problem zeigt. Ich werde es weiter beobachten.

Gesendet von meinem SM-G920F mit Tapatalk

Gerti
Beiträge: 3035
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 274 Mal

Re: Scriptprobleme mit 2.27.8.20170620

Beitrag von Gerti » 19.07.2017, 15:04

Hi!

EDIT: Fehler gefunden, lag an HomeKey.
Dort steht als Name für die Systemvariable "Anwesenheit" und ich hatte es nicht geändert, weil ich die Systemvariable nicht durch HomeKey setzen lasse. Wusste nicht, dass die trotzdem abgefragt wird.
Der Skriptfehler, der nach dem Neustart aufgetreten ist, ist nich erneut aufgetreten, dafür hatte ich gestern Abend wohl wieder einen Scriptfehler in einem internen Programm:

Code: Alles auswählen

Error: IseESP::ScriptRuntimeError: object oTmp;var ustate0;oTmp=dom.GetObject("BidCos-RF.MEQ0404995:1.STATE_UNCERTAIN");if(oTmp!=null){ustate0=oTmp.Value();}var cstate0;oTmp=dom.GetObject("BidCos-RF.MEQ0404995:1.STATE");if(oTmp!=null){cstate0=oTmp.Value();}var anwesend;oTmp=dom.GetObject("Anwesenheit");if(oTmp!=null){anwesend=oTmp.State();}string sTmp;string alarm="false";foreach(sTmp,dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()){oTmp = dom.GetObject(sTmp);if(oTmp.IsTypeOf(OT_ALARMDP)&&(oTmp.AlState()==asOncoming)){alarm=oTmp.Name();return;}}sTmp="";oTmp=""; [iseESPexec.cpp:12344]
Der Fehler wird durch diesen Abschnitt ausgelöst:

Code: Alles auswählen

oTmp=dom.GetObject("Anwesenheit");
if(oTmp!=null){anwesend=oTmp.State();}
Bei mir heißt die Variable zur Anwesenheit inzwischen S_Anwesenheit (da alle Systemvariablen bei mir mir S_ anfangen).
Ändere ich das im Skript auf "S_Anwesenheit" ab, tritt der Fehler nicht mehr auf.
Gruß,
Gerti

Antworten

Zurück zu „RaspberryMatic“