Is er een manier om variabelen te vinden die niet meer gebruikt worden? Ik wou dit gaan gebruiken om een hoop te gaan opschonen.
Dus variabelen die al lange tijd niet meer geupdatet worden. En variabelen die eigenlijk nergens meer terugkomen. Dus ze bestaan wel maar komen niet in actieve flows voor (standaard en advanced).
Nog een app erbij was nou niet echt de bedoeling. Mijn Homey is zo instabiel als de nete omdat die het niet meer aankan allemaal. Ik was nou juist bezig om zo veel mogelijk op te schonen. Is er nog een andere mogelijkheid?
Nou ja, de nieuwe homey app laat wel per app heel mooi zien hoeveel cpu en geheugen de app gebruikt.
Op die manier vind ik niets.
Ik heb al velen topics gestart maar ik kan niets vinden.
Instellingen > Algemeen
Doet de homey laten crashen bij het berekenen van de totale geheugen e.d.
Athom weet ook dat er iets mis is met mijn Homey maar willen niets zeggen. Ik moet het maar zelf uitzoeken of via de community. Maar ja, met de vele pogingen nog steeds niet gelukt. Al behoorlijk wat knappe koppen hier hebben mij geprobeerd te helpen, maar nog niet met succes.
Ik zit daarom ook met mega smart te wachten op de nieuwe maar Athom heeft mij overgeslagen. Orders na mij hebben hem al en ik heb nog niet eens mail. Dus ik moet het nog langer met deze brick doen… (early 2016) en mensen met de 2019 versie hebben al wel een nieuwe. Zucht…
Ik ben zelfs de topic starter van het draadje dat nu nog steeds gebruikt wordt… hoe snel ik was met bestellen… en dan nog… sja… wat moet ik er over zeggen he…
Als je in de app op App instellingen drukt kom je in een menu. Druk daar op de knop Flows. Daar verschijnen je kapotte flows met helemaal onderaan de ongebruikte variabelen.
Hahaha… nou… ik heb al wel wat scripts gedeeld… maar een echte app maken, is toch wel andere koek
Ik denk dat de app niet helemaal zuiver is… Ik weet ondertussen dat ik de variabele vul met een homeyscript… maar dan zal ie wel niet uitgelezen worden en daarom als nutteloos gezien worden. Maar ja… waar set ik hem dan?
ik heb wel een script gevonden waar ie voorkomt, maar dat script is stuk…
nou ja, ik snap hem ondertussen. Ik ga ff flink spitten en puzzelen…
Ik heb hier het script, het laat dus de variabelen zien die niet in een flow voorkomen.
(en n.a.v. dit en andere scripts is de app Flow Checker ontstaan )
// FindOrphanedLogicsVars.js
//
// Script to find Homey Logics orphaned Variables (by RonnyW)
// Adjusted somewhat, when called from a flow, it returns the output in a Variable (PD)
const flows = await Homey.flow.getFlows();
const logicVars = await Homey.logic.getVariables();
let flowMatches;
let varUsed;
let position = [];
let results2Var; // To be able to build a string to output the results to
// a variable [OrphanedLogicsVars], for usage in flows
results2Var = ("*** Orphaned Logics Variables found ***\n\n script: FindOrphanedLogicsVars.js\n\n");
for (var iLogicVar in logicVars){
results2Var = results2Var + "*VARIABLE*: ["+logicVars[iLogicVar].name + "]\n";
let logicVar = logicVars[iLogicVar].name;
let logicVarId = logicVars[iLogicVar].id;
varUsed = false;
for (var iFlow in flows){
flowMatches = false;
position = [];
// Search for variable name in Triggers
if (flows[iFlow].trigger.uri == "homey:manager:logic"){
for (var iArgs in flows[iFlow].trigger.args){
if ( flows[iFlow].trigger.args[iArgs].name == logicVar
|| flows[iFlow].trigger.args[iArgs].id == logicVarId){
position.push("Trigger card (IF)");
flowMatches = true;
}
}
}
// Search for variable name in Condition cards
for(var iCond in flows[iFlow].conditions){
if ( flows[iFlow].conditions[iCond] &&
flows[iFlow].conditions[iCond].uri == "homey:manager:logic"){
//log(flows[iFlow].conditions[iCond].args);
for (var iArgs in flows[iFlow].conditions[iCond].args){
if ( flows[iFlow].conditions[iCond].args[iArgs].name == logicVar
|| flows[iFlow].conditions[iCond].args[iArgs].id == logicVarId ){
position.push("Condition (AND) - direct reference");
flowMatches = true;
}
}
}
for (var iArgs in flows[iFlow].conditions[iCond].args){
if ( flows[iFlow].conditions[iCond].args[iArgs] &&
JSON.stringify( flows[iFlow].conditions[iCond].args[iArgs] ).indexOf( logicVarId ) > 0 &&
JSON.stringify( flows[iFlow].conditions[iCond].args[iArgs] ).indexOf( "homey:manager:logic" ) > 0 ){
position.push("Condition (AND) - indirect reference (Tag)");
flowMatches = true;
}
}
}
// Search for variable name in Action cards
for(var iAct in flows[iFlow].actions){
if ( flows[iFlow].actions[iAct] &&
flows[iFlow].actions[iAct].uri == "homey:manager:logic"){
for (var iArgs in flows[iFlow].actions[iAct].args){
if ( flows[iFlow].actions[iAct].args[iArgs].name == logicVar
|| flows[iFlow].actions[iAct].args[iArgs].id == logicVarId ){
position.push("Action (THEN) - direct reference");
flowMatches = true;
}
}
}
for (var iArgs in flows[iFlow].actions[iAct].args){
if ( flows[iFlow].actions[iAct].args[iArgs] &&
JSON.stringify( flows[iFlow].actions[iAct].args[iArgs] ).indexOf( logicVarId ) > 0 &&
JSON.stringify( flows[iFlow].actions[iAct].args[iArgs] ).indexOf( "homey:manager:logic" ) > 0 ){
position.push("Action (THEN) - indirect reference (Tag)");
flowMatches = true;
}
}
}
// Results of Flows found:
if (flowMatches == true){
varUsed = true;
}
}
if (!varUsed){
results2Var = results2Var +"** NOT FOUND IN FLOWS ** \n\n";
}
}
// Output to a StringVariable [OrphanedLogicsVars]
await tag( "OrphanedLogicsVars", results2Var );
//
// Output (just test to view the result data in 'results2Var')
log(results2Var);
return(true);
.
.
Dit script laat zien in welke flows je variabelen zitten, en het geeft variabelen zonder flow terug:
// FindLogicsVarsInFlows.js
//
// Script to find Homey Logics Variables in Flows, and orphaned Variables (by RonnyW)
// Adjusted somewhat, when called from a flow, it returns the output in a Variable (PD)
const flows = await Homey.flow.getFlows();
const logicVars = await Homey.logic.getVariables();
let flowMatches;
let varUsed;
let position = [];
let results2Var; // To be able to build a string to output the results to
// a variable [FoundLogicsVarsInFlows], for usage in flows
results2Var = ("*** Logics Variables found in Flows ***\n\n script: FindLogicsVarsInFlows.js\n\n");
for (var iLogicVar in logicVars){
results2Var = results2Var + "\n**VARIABLE:** ["+logicVars[iLogicVar].name + "]\n";
let logicVar = logicVars[iLogicVar].name;
let logicVarId = logicVars[iLogicVar].id;
varUsed = false;
for (var iFlow in flows){
flowMatches = false;
position = [];
// Search for variable name in Triggers
if (flows[iFlow].trigger.uri == "homey:manager:logic"){
for (var iArgs in flows[iFlow].trigger.args){
if ( flows[iFlow].trigger.args[iArgs].name == logicVar
|| flows[iFlow].trigger.args[iArgs].id == logicVarId){
position.push("Trigger card (IF)");
flowMatches = true;
}
}
}
// Search for variable name in Condition cards
for(var iCond in flows[iFlow].conditions){
if ( flows[iFlow].conditions[iCond] &&
flows[iFlow].conditions[iCond].uri == "homey:manager:logic"){
//log(flows[iFlow].conditions[iCond].args);
for (var iArgs in flows[iFlow].conditions[iCond].args){
if ( flows[iFlow].conditions[iCond].args[iArgs].name == logicVar
|| flows[iFlow].conditions[iCond].args[iArgs].id == logicVarId ){
position.push("Condition (AND) - direct reference");
flowMatches = true;
}
}
}
for (var iArgs in flows[iFlow].conditions[iCond].args){
if ( flows[iFlow].conditions[iCond].args[iArgs] &&
JSON.stringify( flows[iFlow].conditions[iCond].args[iArgs] ).indexOf( logicVarId ) > 0 &&
JSON.stringify( flows[iFlow].conditions[iCond].args[iArgs] ).indexOf( "homey:manager:logic" ) > 0 ){
position.push("Condition (AND) - indirect reference (Tag)");
flowMatches = true;
}
}
}
// Search for variable name in Action cards
for(var iAct in flows[iFlow].actions){
if ( flows[iFlow].actions[iAct] &&
flows[iFlow].actions[iAct].uri == "homey:manager:logic"){
for (var iArgs in flows[iFlow].actions[iAct].args){
if ( flows[iFlow].actions[iAct].args[iArgs].name == logicVar
|| flows[iFlow].actions[iAct].args[iArgs].id == logicVarId ){
position.push("Action (THEN) - direct reference");
flowMatches = true;
}
}
}
for (var iArgs in flows[iFlow].actions[iAct].args){
if ( flows[iFlow].actions[iAct].args[iArgs] &&
JSON.stringify( flows[iFlow].actions[iAct].args[iArgs] ).indexOf( logicVarId ) > 0 &&
JSON.stringify( flows[iFlow].actions[iAct].args[iArgs] ).indexOf( "homey:manager:logic" ) > 0 ){
position.push("Action (THEN) - indirect reference (Tag)");
flowMatches = true;
}
}
}
// Results of Flows found:
if (flowMatches == true){
varUsed = true;
results2Var = results2Var + " - ";
results2Var = results2Var + "**Flowname:** (" + flows[iFlow].name + ") \n";
results2Var = results2Var +" -Position: \n";
for (iPos in position){
results2Var = results2Var + " -" +position[iPos] + " / \n";
}
}
}
if (!varUsed){
results2Var = results2Var +"*** NOT FOUND IN FLOWS *** \n\n";
}
}
// Output to a StringVariable [FoundLogicsVarsInFlows]
await tag( "FoundLogicsVarsInFlows", results2Var );
//
// Output (just test to view the result data in 'results2Var')
console.log(results2Var)
return(true);
En als je verder nog zaken zelf wilt zoeken en vinden in flows, ook tags en dergelijke, kun je de flowkaart van de Device Capabilitities app gebruiken:
Zoek bijv op type Apparaat en naam advanced* om alle Flows te vinden waarin device-kaarten of device-tags gebruikt worden van apparaten die beginnen met de naam Advanced: