Aller au contenu

Messages recommandés

Posté(e)

Hello tout le monde !

 

J'ai une scène qui me met de temps en temps cette erreur : 

 

Citation

[DEBUG] 13:01:31: �[1;31m2018-03-03 13:01:31.981047 [ fatal] Unknown exception: 
/usr/share/lua/5.2/json/decode/util.lua:35: unexpected character @ character: 1 0:1 [�] line:
[DEBUG] 13:01:31: �

Je n'arrive absolument pas à savoir pourquoi. d'autant que cette scène fonctionne très bien !

 

Vous avez une idée ?

Posté(e)

il semble avoir vers la ligne 35 une erreur de code LUA.

c'est probablement une ligne qu'il n'exécute pas souvent, suite à un IF

Posté(e)

Plus simple voilà la scène : son rôle est en commentaire au début.

La ligne 35 correspond donc à l"accolade de fin de ma variable tableau ???????????

 

--[[
%% properties
378 value
322 value
505 value
298 value
391 value
428 value
443 value
%% events
%% globals
--]]

--[[
13/01/2018 : Version 1 d'origine

Allume les eclairage en fonction de la détection de présence

- Je ne fais pas d'association directe entre les modules
- La marche forcée se gère grâce au VD Mode Eclairage 383
- Ne tient pas compte du capteur Philio PSP05 car trop différent
  (donc scène a part = 210, 230)
- Doit faire la différence entre les type d'actionneur (FGS ou  IPX)
--]]

local Device = {
  --ID_PIR = {ID_actionneur, VG_Mode éclairage}
  [378] = {ID = 374, VG = "ModeEclDebarras"},
  [322] = {ID = 318, VG = "ModeEclWc"},
  [505] = {ID = 311, VG = "ModeEclSdB"},
  [298] = {ID = 296, VG = "ModeEclEscalier"},
  [391] = {ID = 405, VG = "ModeEclChaufferie"},
  [428] = {ID = 454, VG = "ModeEclDebCave"},
  [443] = {ID = 441, VG = "ModeEclBuanderie"},
}

local Trigger = fibaro:getSourceTrigger()

--si mode manu (VD 383) on sort.
if tonumber(fibaro:getGlobalValue(Device[Trigger.deviceID].VG)) == 0 then fibaro:abort() end

--si PIR = ON
if tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 then

  print("PIR", Trigger.deviceID, " = ON")
  
  --actionneur = FGS
  if fibaro:getType(Device[Trigger.deviceID].ID) == "com.fibaro.binarySwitch" 
    or fibaro:getType(Device[Trigger.deviceID].ID) == "com.fibaro.FGD212" then
		    
      fibaro:call(Device[Trigger.deviceID].ID, "turnOn")
      --tempo
      while tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 do end 
      fibaro:call(Device[Trigger.deviceID].ID, "turnOff")
      print("PIR", Trigger.deviceID, " = OFF")
  
  --actionneur = IPX
  elseif fibaro:getType(Device[Trigger.deviceID].ID) == "virtual_device" then  	  
      
      fibaro:call(Device[Trigger.deviceID].ID, "pressButton", 1)
      --tempo
  	  while tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 do end
  	  fibaro:call(Device[Trigger.deviceID].ID, "pressButton", 2)
      print("PIR", Trigger.deviceID, " = OFF")
  
  --si pas le bon actionneur
  else
    print("Type Device = "..fibaro:getType(Device[Trigger.deviceID].ID))
  end    
end

 

Posté(e)

pour expliquer pourquoi ça fonctionne parfois, et parfois pas, j'aurais espéré que ce soit un bout de code lié à un IF.

Mais comme ici c'est dans un tableau qu'il parcourt à chaque fois, je n'ai pas d'autres idées.

Posté(e) (modifié)

Ce n'est pas du tout dans ta ligne 35 de ton code LUA car tous ceux qui on cette erreur c'est le même message : /usr/share/lua/5.2/json/decode/util.lua:35: unexpected character @

 

J'avais demandé de l'aide dans un post  : Chasse à l'erreur

 

Et @Steven m'avais expliqué  : 

Citation

Ce genre d'erreur est assez fréquent lorsque l'on reçoit un flux json qui n'a pas été correctement fini (latence réseau, micro-coupure, ...)

 

Pour éviter de planter le tout, j'utilise personnellement le pcall : http://www.lua.org/pil/8.4.html

Tu dois être dans un cas similaire

Modifié par henri-allauch
  • Like 1
Posté(e)

Ok donc ce serait une erreur interne au process... et qui date visiblement...

 

c'est bête ça, dans ma scène si ça arrive, la lumières allumées par le PIR déclencheur ne s'éteins plus du coup... :( 

Posté(e)

c'est peut-être cette ligne qui ne lui plait pas : (moi non plus d'ailleur, mais j'ai rien trouvé de mieux...)

while tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 do end 

je vais lui ajouter un petit sleep dans la boucle, histoire de calmer le process, et on verra la suite...

while tonumber(fibaro:getValue(Trigger.deviceID, "value")) == 1 do fibaro:sleep(500) end 

 

×
×
  • Créer...