Script wirft "unexpectet character"

Hallo zusammen,

evlt. könnt ihr mir helfen da ich gleich in mein HC2 beiße!!! :wink:

Ich habe ein Script am laufen welches prüfen soll ob die Waschmaschine läuft und mir sagen wann Sie fertig ist. Ein sehr ähnliches Script habe ich auch für den Trockner geschrieben welches einwandfrei durchläuft. Bei der Waschmaschine kommt aber nach einer Laufzeit von ca. 0,5 Stunden in der while schleife die Meldung

[DEBUG] 13:43:00: line 35: unexpected character @ character: 1 0:1 [] line:

Ich weiß langsam nimmer weiter in line 35 steht nichts ungewöhnliches und auch wenn ich in der linie was verändere kommt die Meldung. Ausserdem läuft in dieser Linie eine Funktion ab die erst am Ende wenn die Wattzahl kleiner 2 ist anlaufen soll. Das Programm kam hier noch nicht an diese Stelle. Das programm läuft korrekt bis in zeile 76 in welcher die Whileschleife auf die Watt kleiner 2 wartet … das tut er ca. eine halbe Stunde und beendet sich dann mit der obengenannten seltsamen Meldung. Mein Trocknerscript ist wie gesagt fast identisch und läuft ohne probleme. Kann mir jemand sagen an welcher Stelle ich einen Fehler mache? Kann es daran liegen das ich mein Script mittels Notepad++ mit LUA higlighting schreibe und dann mit copy paste einfüge? unexpected character klingt irgendwie nach Steuerzeichen oder ähnlichem. Hier mal mein Script ich hoffe die Kommenater sind verständlich.

--[[
%% properties
%% events
%% globals
--]]
---Zeigt an das die Waschmaschine fertig ist wenn nach Start unter 3 Watt für länger als
---1 Minute.
---Die lichter Blinken Türkis und Gelb für 1 Minute danach gehen Sie aus.
---
fibaro:debug("Start Programm")
---Array zu erweiten mit HUE IDS
local xtled      = 175 -- ID LED-Band
---
function BLINKLICHT()
	  fibaro:debug("Blinklicht")
--    for i=1, #leds do
      fibaro:call(xtled, "changeSaturation", 255)
      fibaro:call(xtled, "changeBrightness", 255)
      fibaro:call(xtled, "turnOn")
      fibaro:call(xtled, "changeHue", 37145) -- türkis
--    end
	fibaro:sleep(1000)
--    for i=1, #leds do
      fibaro:call(xtled, "changeSaturation", 255)
      fibaro:call(xtled, "changeBrightness", 255)
      fibaro:call(xtled, "turnOn")
      fibaro:call(xtled, "changeHue", 9020) -- gelb
--    end
    fibaro:sleep(1000)
end
---
function LICHTSTATUS()
-- for i=1, #leds do
   -- fibaro:sleep(200)
      	xanaus 		= fibaro:getValue(xtled, "ui.onOff.value")
  		xfarbe		= fibaro:getValue(xtled, "ui.hue.value")
  		xhelligkeit = fibaro:getValue(xtled, "ui.brightness.value")
  		xsaettigung = fibaro:getValue(xtled, "ui.saturation.value")
--
  fibaro:sleep(1500)
    	--Steuervariablen setzen
      	fibaro:setGlobal("g_wz_farbe", tonumber(xfarbe))
      	fibaro:setGlobal("g_wz_helligkeit", tonumber(xhelligkeit))
      	fibaro:setGlobal("g_wz_saettigung", tonumber(xsaettigung))
      	fibaro:setGlobal("g_wz_licht", tonumber(xanaus))
  fibaro:sleep(1500)
-- end
end
--
function AUSSCHALTEN()
  fibaro:debug("Ausschalten")
      --Licht ist eine Sekunde an und wird dann wieder ausgeschaltet
    	fibaro:sleep(1500)
    	fibaro:call(xtled, "turnOff")
end
--
function UMSCHALTEN()
  fibaro:debug("Umschalten")
      --Licht ist eine Sekunde an und wird dann wieder auf alten Wert zurückgesetzt
    	fibaro:sleep(1500)
		fibaro:call(xtled, "changeSaturation", tonumber(fibaro:getGlobalValue("g_wz_saettigung")))
      	fibaro:call(xtled, "changeBrightness", tonumber(fibaro:getGlobalValue("g_wz_helligkeit")))
   		fibaro:call(xtled, "changeHue", tonumber(fibaro:getGlobalValue("g_wz_farbe")))
  		fibaro:call(xtled, "turnOn")
end
---------------------------
--Wenn Waschmaschine größer 8 Watt und noch nicht am laufen dann geht es weiter
--fibaro:setGlobal("g_kt_wman", "0");
if 	( tonumber(fibaro:getValue(166, "power")) > tonumber("8") ) 
	and
	( tonumber(fibaro:getGlobalValue("g_kt_wman")) == tonumber("0") ) then 
		fibaro:debug("Maschine laeuft");
		fibaro:setGlobal("g_kt_wman", "1");
		fibaro:call(28, "sendDefinedPushNotification", "132");
  		fibaro:call(143, "sendDefinedPushNotification", "132");
		while tonumber(fibaro:getGlobalValue("g_kt_wman")) == tonumber("1") do
			if 	( tonumber(fibaro:getValue(166, "power")) < tonumber("2")) then
				--Wenn kleiner 2 Watt dann 10 Sekunden warten und nochmals prüfen
				--wenn danach immer noch kleiner 2 Watt gehen wir davon aus das 
				--die Maschine fertig ist.
				fibaro:debug("Kleiner 2 Watt, 30 Sekunden warten und nochmal prüfen")
				fibaro:sleep(30000)
					if 	( tonumber(fibaro:getValue(166, "power")) < tonumber("2")) then
						fibaro:debug("Nochmal geprüft Maschine ist fertig")
						fibaro:setGlobal("g_kt_wman", "0");
						fibaro:call(28, "sendDefinedPushNotification", "133");
  						fibaro:call(143, "sendDefinedPushNotification", "133");
        				--Am ende noch das Licht definiert blinken lassen
        				--Entweder bis Counter Wert erreicht oder Watt gleich 0
						LICHTSTATUS()
						fibaro:sleep(300)
        				local xicounter = 1
        				while (tonumber(xicounter)) <= 10 do
							fibaro:debug(xicounter)
							BLINKLICHT()
							xicounter = xicounter + 1
						end
        				--
        				if tonumber(fibaro:getGlobalValue("g_wz_licht")) == 1 then
          					UMSCHALTEN()
          				else
          					AUSSCHALTEN()
          				end
					end
			end	
		end
end
fibaro:debug("Ende Programm")

Hi,

grundsätzlich durchläuft er ja die Funktion bei Scriptstart.
Deswegen ist komisch, dass er den Fehler erst nach 0,5 Stunden bringt und nicht sofort.

Hast Du mal in der Nähe des Funktionsaufrufes geschaut?
Hast Du mal die Funktion und den -Aufruf komplett raus genommen?

VG Hoggle

Servus,

ja habe ich vorhin versucht … ich bekomme den gleichen Fehler. Witzigerweise aber nur wenn das Script eine halbe Stunde läuft. Ich habe die Parameter umgebaut das er den Standbymodus (1,6 Watt) als Trigger hat. Damit läuft das Script einmal komplett durch. Das funktioniert tadellos. Auch die Funktionen werden korrekt abgearbeitet und machen was sie sollen.
Hat das HC2 ein Problem damit das eine Szene länger als eine halbe Stunde in ne Schleife quasi festhängt?

Viele Grüße
Toni

In dem script oben ist gar kein Trigger im Header…

ja ich kombiniere hier die grafischen szenen mit meinem script … grafisch wird getriggert und dann mein lua script aufgerufen … ich finde es so einfacher ähnliche scripts zu verwalten. meinst du das ist das problem?

Nein.
Gibt der Debug etwas aus, wenn du den Start-Button unterhalb des LuUA-Codes drückst?

Ja der Debug lief ganz normal “Waschmaschine an” usw. bis der Fehler kam. Ich habe das Problem nun gelöst denke ich. zumindest lief nun alles 3 mal im Test korrekt durch. Ich habe 2 Dinge verändert …

  1. Variablendekleration ich habe die von mir verwendeten Variablen extra deklariert:

--[[
%% properties
%% events
%% globals
--]]
---Zeigt an das die Waschmaschine fertig ist wenn nach Start unter 3 Watt für länger als
---1 Minute.
---Die lichter Blinken Türkis und Gelb für 1 Minute danach gehen Sie aus.
---
fibaro:debug("Start Programm")
fibaro:debug("Aktuelle Watt " .. fibaro:getValue(177, "power"))
---Array zu erweiten mit HUE IDS
local xanaus	  = 0
local xfarbe	  = 0
local xhelligkeit = 0
local xsaettigung = 0
...
....
......

Und ich habe in meiner Whileschleife bei jedem Durchlauf einen Sleep von einer Sekunde eingebaut:


.
..
....
		fibaro:debug("Maschine laeuft");
		fibaro:setGlobal("g_kt_wman", "1");
		fibaro:call(28, "sendDefinedPushNotification", "132");
  		--fibaro:call(143, "sendDefinedPushNotification", "132");
  		while tonumber(fibaro:getGlobalValue("g_kt_wman")) == tonumber("1") do
			fibaro:sleep(1000) -- Immer eine Sekunde warten sonst scheint sich die Schleife aufzuhängen
				if 	( tonumber(fibaro:getValue(166, "power")) < tonumber("2.5")) then
....
..
.

Jetzt tut es …

Viele Grüße