Soms doet een flow niet wat je verwacht of helemaal niets. Daar krijg je niet altijd een melding van helaas.
Flows kunnen door Homey uitgeschakeld worden, als Homey vindt dat ze te vaak worden gestart. Hiervan komt 1 melding op de tijdlijn voorbij.
Maar je kunt ook met een flow een andere flow uitschakelen. Als er ergens iets misgaat/misgegaan is, kan die flow uitgeschakeld blijven, zonder enige melding, en dan kun je soms erg lang moeten zoeken…
Verder kan een flow breken / stukgaan, als er een apparaat / app niet meer op je Homey aanwezig is, welke in die flow gebruikt werd als trigger, voorwaarde of actie. Dit wordt standaard niet gemeld, maar het is wel te zien aan het flow icoontje op de web app, en in de telefoon app doordat de knop en flownaam beiden ‘grijs’ (grayed out) zijn.
Maar je zit niet de hele dag door je flows te scrollen of alles nog klopt toch?
Maar hier is natuurlijk een oplossing voor, middels een flow welke elke X uur een check doet. Je zou het ook handmatig kunnen runnen als je iets vaags tegenkomt.
(en nu hopen dat deze flow het wél blijft doen natuurlijk.
Ik heb dus een flow gemaakt (zie hieronder) en 2 bijbehorende scripts met hulp van 2 script guru’s op het forum en aanvullingen van FB Homeygroep leden.
-
Benodigdheden: de HomeyScript app
(Niet schrikken, het is copy/paste werk, geen kennis benodigd) -
Belangrijk: Om de beide variabelen automagisch aan te laten maken, dienen beide scripts 1x in de HomeyScript console te worden gedraaid middels de test knop.
Daarna doet de flow de rest!
Enjoy! Opmerkingen/Aanvullingen/tips/boe-geluiden altijd welkom.
- Flow: Vindt Uitgeschakelde en Gebroken Flows
- Script FindBrokenFlows.js
// Get broken flows and write result to a variable/tag [BrokenFlows], else OK msg
const flows = Object.values(await Homey.flow.getFlows({filter: { broken: true }})).map(f => f.name)
// Create string [FlowString] from array [flows], so it can be written into variable "BrokenFlows"
const flowsString = JSON.stringify(flows)
// Check if flowsString is empty (besides [ and ] >> flowsString.length > 2)
if (flowsString.length > 2) {
// Remove the starting & trailing brackets
var flowsStringTrimmed = flowsString.slice(1, -1);
// (create&)write variable/tag [BrokenFlows] with contents of [flowsStringTrimmed]
await tag("BrokenFlows", flowsStringTrimmed );
// Timeline notification
await Homey.flow.runFlowCardAction({
uri: 'homey:manager:notifications',
id: 'create_notification',
args: {
text: 'Broken Flows today: ' + flowsStringTrimmed + ' [script: FindBrokenFlows.js]'
},
});
// OR / AND
// per flow while using an action card of your choice.
// Create a flow which sends the value of variable [BrokenFlows] to timeline f.i.
// Now we're going to trigger that flow from here, you'll need the flow-ID
// The flow-ID can be found in the last part of my.homey.app URL when you edit that flow
// await Homey.flow.triggerFlow({id:'a2b655d1-78be-4de0-8f3d-2de2d463fe1d'});
} else {
var flowsStringTrimmed = "No broken flows found";
await tag("BrokenFlows", flowsStringTrimmed );
// OPTIONAL, if you'd like to be informed all's fine
// Timeline notification
await Homey.flow.runFlowCardAction({
uri: 'homey:manager:notifications',
id: 'create_notification',
args: {
text: 'Broken Flows today: ' + flowsStringTrimmed + ' [script: FindBrokenFlows.js]'
},
});
//
// OR / AND IF you also want to be notified when all's fine per flow:
// Create a flow which sends the value of variable [BrokenFlows] to timeline f.i.
// Now we're going to trigger that flow from here, you'll need the flow-ID
// The flow-ID can be found in the last part of my.homey.app URL when you edit that flow
// await Homey.flow.triggerFlow({id:'a2b655d1-78be-4de0-8f3d-2de2d463fe1d'});
}
return (true);
- Script FindDisabledFlows.js
// Get disabled flows and write result to a variable/tag [DisabledFlows], else send OK msg
//
const flows = Object.values(await Homey.flow.getFlows({filter: { enabled: false }})).map(f => f.name)
// Create string [FlowString] from array [flows], so it can be written into variable "DisabledFlows"
const flowsString = JSON.stringify(flows)
// Check if flowsString is empty (besides [ and ] >> flowsString.length > 2)
if (flowsString.length > 2) {
// Remove the starting & trailing brackets
var flowsStringTrimmed = flowsString.slice(1, -1);
// (create&)write variable/tag [DisabledFlows] with contents of [flowsStringTrimmed]
await tag("DisabledFlows", flowsStringTrimmed );
//
// Timeline notification
await Homey.flow.runFlowCardAction({
uri: 'homey:manager:notifications',
id: 'create_notification',
args: {
text: 'Disabled Flows today: ' + flowsStringTrimmed + ' [script: FindDisabledFlows.js]'
},
});
// OR
// per flow while using a timeline action card.
// Create a flow which sends the value of variable [DisabledFlows] to timeline f.i.
// Now we're going to trigger that flow from here, you'll need the flow-ID
// The flow-ID can be found in the last part of my.homey.app URL when you edit that flow
// await Homey.flow.triggerFlow({id:'cae167dc-8fb0-4681-bbe4-6f0b392a32a2'});
} else {
var flowsStringTrimmed = "No disabled flows found";
await tag("DisabledFlows", flowsStringTrimmed );
//
// OPTIONAL, if you'd like to be informed all's fine, per Timeline
await Homey.flow.runFlowCardAction({
uri: 'homey:manager:notifications',
id: 'create_notification',
args: {
text: 'Disabled Flows today: ' + flowsStringTrimmed + ' [script: FindDisabledFlows.js]'
},
});
//
// OR IF you want to be notified when all's fine, per flow:
//
// Create a flow which sends the value of variable [DisabledFlows] to timeline f.i.
// Now we're going to trigger that flow from here, you'll need the flow-ID
// The flow-ID can be found in the last part of my.homey.app URL when you edit that flow
// await Homey.flow.triggerFlow({id:'cae167dc-8fb0-4681-bbe4-6f0b392a32a2'});
}
return (true);
- Het selecteren van de benodigde tag/variabele in de eventuele te gebruiken flow kaartjes