-
Compteur de contenus
14 857 -
Inscription
-
Dernière visite
-
Jours gagnés
199
Tout ce qui a été posté par jojo
-
ça c'est cool
-
je n'avais pas encore lu ta réponse. => NOOO stress
-
peut-être que quand il arrivera au maximum de ses possibilités de numéros, il recommence au début, avec le premier ID disponible (en tout cas, c'est ainsi que ça fonctionnait sur ma Lifedomus)
-
merci, j'allais préparer un tel tuto, j'avais fai hiers les captures d'écran .... maintenant que tu l'as fait je gagne du temps ... je me permets d'insister sur un détail (car je me suis fait avoir) : même si entrer ceci dans l'adresse du browser fonctionne hc3.domaine.fr Il faut rentrer https://hc3.domaine.fr dans Yubii.
-
pour en être sûr, il faut tester. Donc ç ta fonction autooffz1, tu rajoutes temporairement l'envoie d'un mail, et ainsi tu seras fixé
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
en effet, je trouvais également que le PID était particulièrement adapté pour les longues périodes à la même consigne mais ,maintenant, si on joue sur le kp pour faire de l'hystérésis c'est impeccable. Aurais-tu une formule pour calculer le delta entre la consigne et le démarrage du chauffage (si ki & kd =0). Comme ça si on le documente, c'est tout bon pour tout le monde. Comme ki=0 n'est pas encore possible, quelle est sa valeur minimale (0,00001) ? Je me posais la question depuis longtemps : expl d'une pièce rarement occupée : quand personne, consigne à 12°C (température qui ne sera jamais atteinte ou TRES TRES lentement); quand quelqu'un présent, consigne à 20°C (qui est une température atteignable). Quel sera l'impact si la consigne précédent a mis énormément de temp pour être atteinte) ou alors le programme détruit son historique à chaque changement de consigne ? Pour ma cave à vins, j'ai mis la commande domotique en // avec le régulateur que l'installateur à mis (quand il vient faire l'entretient, je mes ma consigne à 30 °C (donc jamais d'enclenchement de l'airco) et son régulateur à 13°C. Et inversement quand je travail avec ma box (qui lui fait peur ..). Je ne suis donc pas méga connaisseur de cette machine, mais je sais que son régulateur commande l'airco avec un contact sec. Donc j'ai juste fait mettre un FGS-224. Ce que j'ai observé pour le On/Off : le Off est immédiat. Le On, non = peut aller jusqu'à 1 min après la commande... quand tu veux, je la mettrai sur le radiateur de mon bureau. Cela me permettra. de faire des tests avec mes Google Calendar. J'ai vu dans la doc qu'il y avait moyen de commander la consigne par GEA/ Mais pourquoi le dernier paramètre à passer est GEA. En fait mon script Google appelle un QA lua qui dit au bon thermostat à quelle consigne il doit être. Ici je lui dirais passe le thermostat du bureau sur confort ou sur Eco (c'est déjà prévu dans le programme pour GEA; mais pourquoi ce param!tre "GEA" ?)
-
Merci BEAUCOUP pour cette analyse détaillée (je serais incapable d'en faire autant !) J'ai remis l'ancienne version ce matin à 9h00 et le graphe ne montre aucune différence : Ton code ne semble donc pas en cause Cette nuit j'ai pensé à un truc (qui serait peut-être applicable ici). Il y a des cas où le PID n'est peut-être pas la solution appropriée (expl : ma salle de bain : avant de prendre ma douche, je faits aller le chauffage "plein" pôt, histoire que le sèche serviette soit chaud, peut importe la température de la pièce) Comme je trouve l'UI de ce QA super, je me disais qu'il pourrait remplir les 2 fonctions : régulation PID ou régulation par hystérésis. On ajouterait 2 paramètre à la config : HMCF.PID = true -- false for hyterisis regulation, true for PID regulation (= default value) HMCF.Hydtereis = 0,5 -- delta to setpoint for ON/OFF Comme j'imagine que le système actuel appelle une fonction ON ou OFF en fonction de ses calculs, on aurait une nouvelle "méthode" de calcul qui appelerait les mêmes fonctions ON & OFF. Et dans l'UI, dans la 3° ligne qui a été libérée on préciserait la méthode de calcul. Qu'en penses-tu ?
-
cette dernière version (cadre blru) et quand même moins bien que celle que nous avions testée ensemble sur l'autre post Je te joint également un log bien plus complet (car je laisse ma fenêtre de debug ouvert h23) log_Regul.txt
-
cool, bonne nouvelle, car si tout f'un coup, sans explication ça ne fonctionne plus, ce sera difficile à trouvé. En tout cas, avec la version précédente c'était ok : Je mets en place ta version corrigée et te dis quoi
-
en effet, oui je suis revenu à une version précédente, pour voir ce que ça dit après une nuit. Cool que tu ais trouvé qqch. A ta dispo pour tester
-
très pauvres en logs ;-(, mais si tu as le courage
-
@Felig je ne comprends plus rien ... Le graphe ci-dessous montre une brusque variation de la régul, et promis juré, je n'ai modifié aucun paramètres. Ah oui, peut-être, j'ai mis le dernier code. Je remets la version précédente et te dis qyoi une idée ?
-
avec GEA, c'est super simple. as-tu installé GEA sur ta HC2 ?
-
J'avais commencé à l'écrire, et 1) il est partit trop vite => impossible de ne pas le publier. 2) en éditant son contenu, et donc en y mettant tous les détails nécessaires, j'ai trouvé la raison. Donc en fait il n'aurait jamais du partir, mais à cause de 1) ...
-
sinon @mprinfo peut le faire pour toi, il est expert maintenant
-
THANK YOU, and (of course) it works ! Thank you for explanation why, I could keep searching for a very very long time before finding the solution
-
Bonjour, Je suis honteux, je me sent en mode profiteur ... Cela fait des heures que je tourne mon code dans tous les sens, et que je n'arrive pas à trouver ce qui ne va pas. Je souhaite remplacer le . decimal par un autre charactère. En LUA, c'est la fonction s = string.gsub("Lua is good", "good", "great") print(s)--> Lua is great voici mon code local DeviceProperty = hub.getValue(v.id, ReportProperty) if debugD then self:trace ("Device property = "..tostring(DeviceProperty)) self:trace ("Type of Device property = "..type(DeviceProperty)) end -- test si propiété est numérique - number if type(DeviceProperty) == "number" then DecimalPosition = string.find (tostring(DeviceProperty), ".") DeviceProperty = string.gsub (tostring(DeviceProperty), ".", ReportDecimal) if debugD then self:trace ("Type of Device property = "..type(DeviceProperty)) self:trace ("Decimal position = "..DecimalPosition) end end if debugD then self:trace("Device property = "..tostring(DeviceProperty)) end result = result..Date..ReportSeparator..RoomName.." ("..RoomID..")"..ReportSeparator..DeviceName.." ("..DeviceID..")"..ReportSeparator..tostring(DeviceProperty).."<br>" et une partie du debug associé [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Type of Device property = boolean [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Device property = false [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Salon (221);Est_Noel (839);false [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Device property = 2.0 [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Type of Device property = number [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Type of Device property = string [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Decimal position = 1 [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Device property = ,,, On y voit clairement qu'il a bien déterminé le type de valeur et (et c'est là le problème), que mon string.gsub à remplacé tous les caractère par des , car il a identifié le "." dès la position 1, alors que ça devrait être la position 2. Qu'ai-je mal fait ? Merci
-
Bonjour, Il falait que je commence à écrire ce post, de la façon la plus détaillé possible pour que je trouve l'erreur ...
-
il n'y a presque okus personne sous HC2 ...
-
Effectivement, encore mieux ! Du coup j'ai su^^rime la 3° ligne, ce qui remonte les boutons
-
Génial ! Sur la troisième lignr qui est maintenant libérée, on pourrait afficher la température extérieure (celle qyu apparaît dans les logs).
-
ok, je compris pour économiser une ligne(la 3°, celle avec le #2), voici ce que je proposeRAIS. En Ligne#1 : Thermostat : <consigne>°C (<icône du mode> <nom du mode> - <icône de mode réel (confort, eco, vacances, off)>) dans le cas présent, cela donnerait : Thermostat : 13°C (<icône agenda> Auto - <icône soleil>) ok ?
-
optimisation UI pour moi 1 et2 sont deux fois la même information tu m'avais parlé que en 1, il y avait des thermostats imbriqués ? : je ne vois pas du tout de quoi tu parles = à quoi ça sert ?, comment le mettre en oeuvre ?. Bref un exemple concret m'aiderait beaucoup. Sinon, on gagnerait une ligne.
-
ceci est un test de publication des logs avec 5.17 [22.01.2023] [18:49:56] [DEBUG] [QUICKAPP846]: onInit - Heating & Cooling Manager (846) - Cave Vins [22.01.2023] [18:49:56] [DEBUG] [QUICKAPP846]: ------------------------------------------------------------------------------ [22.01.2023] [18:49:56] [DEBUG] [QUICKAPP846]: HEATING & COOLING MANAGER v. 5.17 [22.01.2023] [18:49:56] [DEBUG] [QUICKAPP846]: Chargement de la configuration ... [22.01.2023] [18:49:56] [DEBUG] [QUICKAPP846]: [-PID-] Loading PID data from variable 'HM_Data' [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: (Cave_AirCo) Using room Cave Vins default sensor as temperature sensor [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [INFO ] Cave Vins : Consigne = 13°C (Source: Confort) [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [REGUL] Cave_AirCo : Démarrage cycle PID (boot) [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [INFO ] Cave_AirCo : Consigne 13°C | Temp. 13.1°C | Extérieur 0.1°C [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [-PID-] Cave_AirCo : Kp = 100 | Ki = 6 | Kd = 0 | EC = 9.0 [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [-PID-] Cave_AirCo : P = 10.0% | I = 54.0% | D = -0.0% | 64.0% [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [-PID-] Storing: {"cumError":9.0,"Ki":6,"lastError":0.1} [22.01.2023] [18:50:06] [DEBUG] [QUICKAPP846]: [REGUL] Cave Vins|Cave_AirCo : C 13°C | T 13.1°C | Début clim. 1m 53s
-
je json du device est la bible http://<user>:<pwd>@<IPBox>/api/devices/<idDevice> // 20230122163112 // http://192.168.xxx.xxx/api/devices/193 { "id": 193, "name": "Chauf_Bureau_Vanne", "roomID": 231, "view": [ { "assetsPath": "dynamic-plugins/com.fibaro.hvacSystem", "name": "com.fibaro.hvacSystem", "translatesPath": "/assets/i18n/com.fibaro.hvacSystem", "type": "ts" } ], "type": "com.fibaro.hvacSystem", "baseType": "com.fibaro.device", "enabled": true, "visible": true, "isPlugin": false, "parentId": 192, "viewXml": false, "hasUIView": false, "configXml": false, "interfaces": [ "battery", "climatePanelExtension", "fibaroFirmwareUpdate", "heatingThermostatSetpoint", "thermostatMode", "zwave", "zwaveAlarm", "zwaveProtection" ], "properties": { "parameters": [ { "id": 1, "lastReportedValue": 0, "lastSetValue": 0, "size": 1, "value": 0 }, { "id": 2, "lastReportedValue": 0, "lastSetValue": 0, "size": 1, "value": 0 }, { "id": 3, "lastReportedValue": 1, "lastSetValue": 1, "size": 1, "value": 1 }, { "id": 4, "lastReportedValue": 1, "lastSetValue": 1, "size": 1, "value": 1 }, { "id": 5, "lastReportedValue": 0, "lastSetValue": 0, "size": 1, "value": 0 }, { "id": 6, "lastReportedValue": 0, "lastSetValue": 0, "size": 1, "value": 0 }, { "id": 7, "lastReportedValue": 0, "lastSetValue": 0, "size": 1, "value": 0 }, { "id": 8, "lastReportedValue": 0, "lastSetValue": 0, "size": 1, "value": 0 } ], "pollingTimeSec": 0, "zwaveCompany": "Eurotronics", "zwaveInfo": "3,4,61", "zwaveVersion": "0.16", "RFProtectionState": 0, "RFProtectionSupport": 0, "alarmLevel": 0, "alarmType": 0, "batteryLevel": 50, "batteryLowNotification": true, "categories": [ "climate" ], "climatePanelSchedules": { "isOverrideActive": false, "schedulesCount": 0 }, "climatePanelTimestamp": 0, "configured": true, "dead": false, "deadReason": "", "defInterval": 0, "deviceControlType": 1, "deviceIcon": 70, "deviceRole": "Other", "endPointId": 0, "firmwareUpdate": { "info": "", "progress": 0, "status": "UpToDate", "updateVersion": "0.16" }, "heatingThermostatSetpoint": 20.0, "heatingThermostatSetpointCapabilitiesMax": 28.0, "heatingThermostatSetpointCapabilitiesMin": 8.0, "heatingThermostatSetpointFuture": 20.0, "heatingThermostatSetpointStep": { "C": 0.5, "F": 1.0 }, "icon": { }, "localProtectionState": 0, "localProtectionSupport": 7, "log": "", "logTemp": "", "manufacturer": "", "markAsDead": true, "maxInterval": 0, "minInterval": 0, "model": "", "nodeId": 15, "parametersTemplate": "895", "productInfo": "1,72,0,3,0,1,0,16", "protectionExclusiveControl": 0, "protectionExclusiveControlSupport": false, "protectionState": 0, "protectionTimeout": 0, "protectionTimeoutSupport": false, "saveLogs": true, "serialNumber": "", "setpointExpiryDate": 0, "stepInterval": 0, "supportedDeviceRoles": [ "Other" ], "supportedThermostatModes": [ "Off", "Heat", "EnergyHeat", "FullPower" ], "thermostatMode": "Heat", "thermostatModeFuture": "Heat", "thermostatModeManufacturerData": [ ], "unit": "C", "updateVersion": "", "useTemplate": true, "userDescription": "" }, "actions": { "abortUpdate": 1, "reconfigure": 0, "removeClimatePanelOverrideSchedule": 0, "retryUpdate": 1, "setAllClimatePanelSchedules": 1, "setClimatePanelOverrideSchedule": 1, "setClimatePanelScheduleState": 1, "setHeatingThermostatSetpoint": 1, "setInterval": 1, "setThermostatMode": 1, "startUpdate": 1, "updateFirmware": 1 }, "created": 1654708803, "modified": 1674353065, "sortOrder": 644 } exemples : Fibaro.call - hub.call Note que hub.call() c'est le nouveau nom officiel à utiliser depuis le dernier firmware stable, même si Fibaro a annoncé qu'ils allaient conserver la rétro-compatibilité avec toutes les fonctions fibaro.* https://manuals.fibaro.com/home-center-3-quick-apps/ hub.call(id[Thermostat], "setThermostatMode", "Off" | "Heat") hub.call(id[Thermostat], "setHeatingThermostatSetpoint", consigne) hub.call(2, "sendEmail", "Subject", "Body") hub.call(id, "updateProperty", "value", 123) -- update de la propriété "value" avec 123 Et on peut modifier ainsi les autres propriétés que "value", par exemple "power", "energy", "batteryLevel", etc... Et Via l'API : /api/callAction?deviceID=123&name=updateProperty&arg1=value&arg2=123 hub.call(ID_GEA_Alarm, "setTime", 2, "22:22") -- mettre l'alarme #2 à 22:22 Que ça soit en LUA, via GEA, ou encore l'API HTTP, les arguments des fonctions doivent toujours être donnés dans le même ordre si on veut que ça fonctionne. hub.call(id["GOGLEHOME"], "GoogleHome", "Ceci est un test") -- appelle la méthode "GoogleHome" du QA dont l'ID est id["GOGLEHOME"] avec les paramètres