Ongebruikte variabelen vinden

Goedemorgen!

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).

Daar is zelfs een app voor, deze heet “flow checker”

2 Likes

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?

ik ga het wel proberen, maar toch…

Je zou de app kunnen installeren, alles opruimen en dan de app weer verwijderen.

Maar ligt het aan de hoeveelheid app’s of zou het ook aan andere dingen kunnen liggen dat je homey traag is.

Hier draaien aardig was apps op de homey 2016 en het gaat allemaal prima.

1 Like

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…

De app laat me nu wel zien dat ik 79 ongebruikte variabelen heb… maar niet welken.

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.

Oh… hebbes!!

Zoals ik al schreef, scroll helemaal naar beneden. Daar staan de variabelen die niet gebruikt worden

jah, maar werkt blijkbaar niet (goed)… 3e variabele gaat het al mis, is vandaag nog geüpdatet… klakkeloos verwijderen kan dus niet…

nu is dus de vraag, wat betekent ongebruikt… een variabele die nooit uitgelezen wordt, of nooit gevuld wordt?

Je bent niet de maker, maar weet je dat dan toevallig ook nog?

Ik ben zeker niet de maker, zou ik ook niet kunnen.
Maar volgens mij betekent ongebruikt dat de variabele niet in een flow gebruikt word.

Hahaha… nou… ik heb al wel wat scripts gedeeld… maar een echte app maken, is toch wel andere koek :smiley:

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? :smiley:
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…

dank je wel voor je ondersteuning!!

@Jan_Willem_Visser jij ook bedankt!

1 Like

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 :wink: )

// 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);

Screenshot from 2023-03-12 13-27-34

.
.

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);

Screenshot from 2023-03-12 13-31-58

1 Like

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:
image

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:


De response/tag is een JSON waar je met een app als JSON Handler doorheen kan lopen/loopen: Geen code nodig :slight_smile:

Je kunt ook zoeken op ID’s, of lijsten met namen/id’s.

2 Likes

Die heb ik al wel, maar dat wist jij al :stuck_out_tongue:
zo leer ik wel steeds meer over deze app… mooi voorbeeld. ga ik ook ff proberen.

1 Like