Aller au contenu

Recommended Posts

il y a 32 minutes, Yannick a dit :

D'ailleurs concernant la syntaxe, le debug ne montre pas un "And" mais un "Or"

regarde !!

Comme le disait @Lazer, @Steven est une programmeur hors catégorie !

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 51 minutes, Yannick a dit :

D'ailleurs concernant la syntaxe, le debug ne montre pas un "And" mais un "Or"

regarde !!

image.png.3e4cd3808d014728c1000e7c71dc2931.png

Ah mais là c'est clair, il est explicitement mentionné le "Or", donc du coup il fait bien un "Ou" logique entre les 3 conditions Time, c'est normal.

 

Du coup je me dis que je n'avais pas dû bien faire attention à la syntaxe de ta règle originale.

Tout s'explique...

 

Je récapitule :

  • Si on précise {"Or", .....} => on a bien un Ou logique entre les différentes plages horaires, donc ça fonctionne
  • Si on ne précise pas "Or", alors GEA fait un "ET" logique entre toutes les conditions, et forcément, vu que l'heure courante ne peut pas être dans 2 plages horaires distinctes, ça ne peut pas fonctionner.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

je précise que je ne stipule nulle part dans ma règle de faire "ou" !!!

 

GEA.add({{"Time""14:35""16h25"}, {"Time""21:35""23:25"}, {"Time""02:35""06:25"}}, 0"Démarrage Sèche-Serviettes", {"turnOn"379})

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai une question (encore)....

comme je l'ai déjà dis j'ai un intercom fibaro

je veux faire une règle GEA qui dit que quand on appui sur le bouton de présence, ça active une sonnette AEOTEC. 

si je fais une règle blocs, ça marche.

image.png.25f823583eef6f20fa6a7a8edaf3a30f.png

 

si je la traduis en LUA ça me donne ça dans les déclarations

 

{
  conditions = { {
      id = 726,
      isTrigger = true,
      operator = "==",
      property = "videoGateIncomingCallEvent",
      type = "device"
    } },
  operator = "all"
}

ce qui logiquement doit se traduire par cette règle sous GEA
 

GEA.add({"Property", 726,"videoGateIncomingCallEvent", true}, -1, "Quelqu'un Sonne", {"turnOn", 840})

et ben ça marche pas. GEA se fige et ne me sort aucun message d'erreur et plus rien ne se passe. Une idée du pourquoi

[18.07.2022] [17:31:58] [TRACE] [QA_GEA_728]: ----------------------------------------------------------------------------------------------------
[18.07.2022] [17:31:58] [TRACE] [QA_GEA_728]: Démarrage automatique de GEA 7.37 : mode autostart
[18.07.2022] [17:31:58] [TRACE] [QA_GEA_728]: ----------------------------------------------------------------------------------------------------
[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: Utilisation de la librairie tools v2.20[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: Vérification automatique toutes les 30 secondes
[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: Variable QuickApp GEA : GEA_History
[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: ----------------------------------------------------------------------------------------------------
[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: Chargement du code utilisateur setEvents() :
[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: Ajout auto #1 : [true] => 
[18.07.2022] [17:31:58] [DEBUG] [QA_GEA_728]: Ajout auto #2 : Démarrage GEA
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #3 : Démarrage box
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #4 : Détection nouvelle version stable
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #5 : Détection nouvelle version beta
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #8 : ["Time",["Sunset>22:00","22:05"]] => ["Close",[[783,808,796,802,805,799,772]]]
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #9 : ["Time",["07:30","07:32"]] => ["Open",[[783,808,796,802,805,799,772]]]
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #10 : ["Value+",[656,23]] => ["Open",[[783,808,796,802,805,799,772],20]]
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #17 : ["Or",[["Time","14:35","16h25"],["Time","21:35","23:25"],["Time","02:35","06:25"]]] => ["TurnOn",[379]]
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Ajout auto #18 : ["Or",[["Time","16:26","21h34"],["Time","23:26","02:34"],["Time","06:26","14:34"]]] => ["TurnOff",[379]]
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: ----------------------------------------------------------------------------------------------------
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Déclencheurs instantanés : 8
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #777 Spa (Terrasse Jacuzzi) power
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #653 Boîte à Lettres (Couloir) value
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #748 Porte d'Entrée (Couloir) value
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #835 Keyfob Carine (HC2) centralSceneEvent 6 Pressed
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #838 Keyfob Yannick (HC2) centralSceneEvent 6 Pressed
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #726 Intercom Entrée (Couloir) firstRelayIsOpen
[18.07.2022] [17:31:59] [DEBUG] [QA_GEA_728]: Trigger : device #499 Nodon Couloir (Couloir) centralSceneEvent 1 Pressed

 

 

Modifié par Yannick

Partager ce message


Lien à poster
Partager sur d’autres sites

Regarde le JSON de ton module 726 via l'API, et en particulier la valeur de la propriété videoGateIncomingCallEvent

ça ne doit pas être true, tout simplement.

 

GEA va réagir aux changement de valeur des propriétés des modules, et comparer leur valeur.

Si tu mets true au hasard et que ça ne correspond pas à une valeur qu'est susceptible de prendre cette propriété, alors ça ne déclenchera jamais.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
{
  "id": 726,
  "name": "Intercom Entrée",
  "roomID": 220,
  "view": [
    {
      "assetsPath": "dynamic-plugins/com.fibaro.videoGate",
      "name": "com.fibaro.videoGate",
      "translatesPath": "/assets/i18n/com.fibaro.videoGate",
      "type": "ts"
    },
    {
      "type": "json"
    }
  ],
  "type": "com.fibaro.fibaroIntercom",
  "baseType": "com.fibaro.videoGate",
  "enabled": true,
  "visible": true,
  "isPlugin": true,
  "parentId": 0,
  "viewXml": true,
  "hasUIView": false,
  "configXml": true,
  "interfaces": [
    "tamper"
  ],
  "properties": {
    "SerialNumber": "00004503",
    "SwVersion": "4.1.5_88_29888e6_REL",
    "buttonOneIsPressed": false,
    "buttonThreeIsPressed": false,
    "buttonTwoIsPressed": false,
    "cameraType": 0,
    "categories": [
      "security"
    ],
    "currentMode": "DOOR_STATION",
    "dBAudioLevelChanged": 0,
    "dead": false,
    "deadReason": "",
    "deviceControlType": 1,
    "deviceIcon": 91,
    "deviceRole": "Other",
    "displayOnMainPage": 1,
    "email": "ya*****er@***.fr",
    "firstRelayIsOpen": false,
    "httpsEnabled": false,
    "icon": {
      "path": "plugins/com.fibaro.fibaroIntercom/img/icon.png",
      "source": "HC"
    },
    "incorrectPinLastTyped": 0,
    "input1": false,
    "input2": false,
    "ip": "192.168.0.148",
    "isRecording": false,
    "jpgPath": ":8080/live/image.jpg?token=f07b74ea6194d9cfea9143129baed8d27a0d7d04cb4764c5d81eec6f5f69e2ed",
    "lastRelayStateChangedMethod": "PIN-ENTERED",
    "localPassword": "***********",
    "log": "",
    "logTemp": "",
    "manufacturer": "",
    "mjpgPath": ":8080/live/stream.jpg?token=f07b74ea6194d9cfea9143129baed8d27a0d7d04cb4764c5d81eec6f5f69e2ed",
    "model": "",
    "moveDownPath": "",
    "moveLeftPath": "",
    "moveRightPath": "",
    "moveStopPath": "",
    "moveUpPath": "",
    "openTime": 3,
    "password": "",
    "pinStatusChanged": "",
    "port": 8081,
    "proxymityStateChanged": false,
    "recentlyCame": "ya****er@***.fr",
    "refreshTime": 3000,
    "saveLogs": true,
    "secondRelayIsOpen": false,
    "sendStopAfterMove": false,
    "supportedDeviceRoles": [
      "Other"
    ],
    "tamper": false,
    "ui.config.SerialNumber.caption": "Serial number",
    "ui.config.SerialNumber.enabled": false,
    "ui.config.SwVersion.caption": "Software version",
    "ui.config.SwVersion.enabled": false,
    "ui.config.email.caption": "Email",
    "ui.config.email.enabled": true,
    "ui.config.ip.caption": "IP address",
    "ui.config.ip.enabled": true,
    "ui.config.localPassword.caption": "Password",
    "ui.config.localPassword.enabled": true,
    "ui.config.sectionDeviceInfo.caption": "Device information",
    "ui.config.sectionDeviceInfo.enabled": true,
    "ui.config.sectionLocalAccessConfiguration.caption": "Local access configuration",
    "ui.config.sectionLocalAccessConfiguration.enabled": true,
    "ui.config.sectionNetworkConfiguration.caption": "Network configuration",
    "ui.config.sectionNetworkConfiguration.enabled": true,
    "userDescription": "",
    "username": "",
    "users": "[\"ya*****er@*.fr\"]"
  },
  "actions": {
    "moveDown": 0,
    "moveLeft": 0,
    "moveRight": 0,
    "moveStop": 0,
    "moveUp": 0,
    "openDoor1": 0,
    "openDoor2": 0,
    "openGate": 0,
    "sendCameraImageToAdminEmail": 0,
    "sendPhotoToUser": 1,
    "startRecording": 0,
    "stopRecording": 0
  },
  "created": 1655827558,
  "modified": 1655969346,
  "sortOrder": 19
}

Ais-je bien regarder dans la bonne section du swagger ???

Voilà ce que je récupère comme info, mais nulle part il apparaît la property recherchée.

Modifié par Yannick

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement.... du coup logique que GEA ne réagisse pas.

 

Mais lors d'un échange précédent, tu n'avais pas identifié un autre champ ? Je t'avais même conseillé une règle à écrire, est-ce qu'elle fonctionne ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Si mais ce n'était pas sur cette action, c'était sur la property "firstRelayIsOpen". Sur celle-ci cela fonctionne bien.

 

Ce que je ne comprends pas c'est que dans une scène classique cela fonctionne. et que le la property est bien utilisée comme déclencheur dans le code LUA....

Partager ce message


Lien à poster
Partager sur d’autres sites

Là je ne sais pas.... si quelqu'un a déjà fait quelque chose de similaire avec son Intercom.... :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon en même temps c'est pas un drame hein... ça fonctionne en mode bloc. ça me va !!

mais si on pouvait avoir une explication de texte ce serait sympa.

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 8 heures, Yannick a dit :

"buttonOneIsPressed": false,

"buttonThreeIsPressed": false,

"buttonTwoIsPressed": false,

as-tu essayé avec une de ces propriétés ? (on ne sais jamais)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai tenté sur le premier.. mais pas les 2 autres..

Tu as raison, je vais quand même tester.

 

Mais c'est étrange tout de même que la propriété qui apparaît bien dans les propriétés du device ne se retrouve pas dans son JSON non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

ça doit être un événement de type CentralSceneEvent ou quelque chose comme ça, c'est à dire similaire à ce qui se passe avec les télécommandes.

A mon avis tu as la réponse dans la doc de ton Intercom.

Partager ce message


Lien à poster
Partager sur d’autres sites

cc c'est encore moi.

Je cherche à appuyer sur un bouton d'un QA à heure régulière mais ça ne fonctionne pas.

Mon QA me permet de redémarrer mon intercom sans devoir aller dans les paramètres du bouzin. il y a donc un seul bouton surlequel on appuie et ça redémarre.

l'action en LUA se traduit ainsi :

hub.callUI(789, 'onReleased', 'btnRestart')

j'ai donc écrit cette règle en GEA

 GEA.add({{"Time", "12:15"},{"Time","16:15"}}, 0,"Redémarrage Intercom",{"QuickApp", 789, "onReleased", "btnRestart"})

aucun problème de déclenchement d’événement ça fonctionne bien mais rien ne se passe, comme si l'appui ne se faisait pas... une idée sur l'action ???

Modifié par Yannick

Partager ce message


Lien à poster
Partager sur d’autres sites

Comme je l'ai déjà dit 50 fois sur le forum, appuyer sur le bouton du QA est débile, il faut désapprendre ce qu'on faisait sur HC2, et penser HC3 nativement.

Donc appeler directement la fonction qui est derrière le bouton, par son nom.

De ce que je comprends, ça doit être "btnRestart", tu peux virer le "onReleased" qui n'est pas une fonction

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis vieux mais j'ai changé mes habitudes avec les boutons

 

D'ailleurs je ne me sers plus beaucoup de cette fonctionnalité en général c'est utile pour créer les childs

 

Il faut voir le QA comme si on avait supprimé toutes les fenêtres de code d'un VD main loop inclus en une seule fenêtre

 

Le gros avantage c'est qu'on peut passer des paramètres sans bidouiller et bien plus

 

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 14 heures, Lazer a dit :

Comme je l'ai déjà dit 50 fois sur le forum, appuyer sur le bouton du QA est débile, il faut désapprendre ce qu'on faisait sur HC2, et penser HC3 nativement.

Donc appeler directement la fonction qui est derrière le bouton, par son nom.

De ce que je comprends, ça doit être "btnRestart", tu peux virer le "onReleased" qui n'est pas une fonction

D'accord, d'accord.. pardon maître.

Donc si je résume bien :

GEA.add({{"Time", "12:15"},{"Time","16:15"}}, 0,"Redémarrage Intercom",{"QuickApp", 789, "btnRestart"})

qui, je l'ai essayé,  ne fonctionne pas non plus

ou comme ça

GEA.add({{"Time", "12:15"},{"Time","16:15"}}, 0,"Redémarrage Intercom",{"btnRestart",789})

???

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne sais pas, je me suis basé sur les indications que tu as donné, sans certitude.

Il faut que tu regardes quelle est la fonction qui est appelée par le bouton de ton QuickApp. Partage une capture d'écran si tu n'es pas sûr.

Partager ce message


Lien à poster
Partager sur d’autres sites
function QuickApp:onInit()
    self.sock = net.WebSocketClientTls()
    self.url = "wss://" .. self:getVariable("ipAddress") .. ":8081/wsock"   
    self.fibaroID = self:getVariable("fibaroID")
    self.localPass = self:getVariable("localPass")
    
    self.sock:addEventListener("connected", function() self:handleConnected() end)
    self.sock:addEventListener("disconnected", function() self:handleDisconnected() end)
    self.sock:addEventListener("error", function(error) self:handleError(error) end)
    self.sock:addEventListener("dataReceived", function(data) self:handleDataReceived(data) end)
end

function QuickApp:restartWS()
    self:connectWS()
end

function QuickApp:connectWS()
      self.sock:connect(self.url);  
end

function QuickApp:Login()
   self.loginMsg =	{					  
				jsonrpc = "2.0",
				method = "com.fibaro.intercom.account.login",
				params = {
					user = self.fibaroID,
					pass = self.localPass
					},
				id = 1
			}
    if self.sock and self.sock:isOpen() then
        self.sock:send(json.encode(self.loginMsg))
    end 

end


function QuickApp:SendAction()
   self.loginMsg =	{					  
				jsonrpc = "2.0",
				method = "com.fibaro.intercom.power.restart",
				params = {
					token = self.IntercomToken
					},
				id = 2
			}

    if self.sock and self.sock:isOpen() then
        self.sock:send(json.encode(self.loginMsg))
        self:debug("restart");
    end 
end

function QuickApp:DisconnectWS()
    if self.sock and self.sock:isOpen() then
        self.sock:close()    
    end 
end

function QuickApp:handleConnected()
    self:debug("Connected : " , self.url)
    self:Login()
end

function QuickApp:handleDisconnected()
    self:debug("Disconected : " , self.url )
end

function QuickApp:handleError(error)
    self:debug("Error : ", error)
end

function QuickApp:handleDataReceived(data)
    self:debug("Data received : ", data)
    local responseMsg = json.decode(data);

    if responseMsg.id == 1 then
        self.IntercomToken = responseMsg.result.token
        self:SendAction()
        self:DisconnectWS()
    end

    if  responseMsg.id == 2 then 
        self:DisconnectWS()
    end
end

Voilà le code du QA

Partager ce message


Lien à poster
Partager sur d’autres sites

OK.... merci, mais je m'attendais plutôt à voir une capture d'écran de l'interface Web, et notamment du bouton en question. Tu as un champ qui indique quelle fonction est appelée lors du clic sur le bouton.

Parce que le code seul ne me permet pas de la deviner facilement.

Partager ce message


Lien à poster
Partager sur d’autres sites

D'accord, maintenant tu vas dans l'éditeur, et tu regardes quelle est la fonction appelée derrière le bouton

Partager ce message


Lien à poster
Partager sur d’autres sites

[22.07.2022] [10:23:26] [DEBUG] [QUICKAPP789]: onAction: {"deviceId":789,"args":[],"actionName":"btnRestart"}
[22.07.2022] [10:23:26] [WARNING] [QUICKAPP789]: Class does not have btnRestart function defined - action ignored
[22.07.2022] [11:46:43] [TRACE] [QUICKAPP789]: UIEvent: {"values":[],"deviceId":789,"elementName":"btnRestart","eventType":"onReleased"}
[22.07.2022] [11:46:43] [DEBUG] [QUICKAPP789]: Connected : wss://192.168.0.148:8081/wsock
[22.07.2022] [11:46:43] [DEBUG] [QUICKAPP789]: Data received : { "jsonrpc": "2.0", "result": { "token": "d69ec832d2fb9cb815a40fa97babf4d92f44e72f0964ff44568d228e4c4042cc", "exp_time": "899999" }, "id": 1 }
[22.07.2022] [11:46:43] [DEBUG] [QUICKAPP789]: restart
[22.07.2022] [11:46:43] [DEBUG] [QUICKAPP789]: Disconected : wss://192.168.0.148:8081/wsock
[22.07.2022] [11:47:05] [TRACE] [QUICKAPP789]: UIEvent: {"elementName":"btnRestart","eventType":"onReleased","deviceId":789,"values":[null]}
[22.07.2022] [11:47:05] [DEBUG] [QUICKAPP789]: Error : Connection failed

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Non pas le log

Tu retournes dans le QuickApp comme quand tu l'as créé, et tu vas dans le bouton...

Partager ce message


Lien à poster
Partager sur d’autres sites

×