Ah… goed punt. Dan zou ik het ook automatiseren. ![]()
Beste PetervH,
Als we dit werkend krijgen is dat natuurlijk beter dan handmatig.
Ik heb hier mijn gedachten een over laten gaan en ben toch benieuwd hoe je dit instelt.
Op het moment dat de wasmachine ingesteld moet worden moet er dus stroom zijn en de slimme stekker dus aan. Vervolgens stel je de machine in en op het moment dat de machine meer dan een ingestelde hoeveelheid stroom afneemt gaat de slimme stekker uit. Stel een uur later zijn de ingestelde parameters bereikt zodat dat de machine mag starten; hoe voorkom je dan dat de slimme stekker zicht weer uitschakelt omdat er weer stroom afgenomen wordt?
Ik ben zeer benieuwd hoe je flow er dan uitziet. Zou je dit willen delen?
Alvast bedankt.
Ik zou het niet te moeilijk maken:
Aangezien je toch naast machine staat, zet je de slimme schakelaar met de hand uit….
Klopt, maar bij de vaatwasser valt dat niet mee omdat zoals door Peter aangegeven de aansluiting achter in het keukenkastje zit…
Maak een variabele aan:”detect switch on”
ALS. De stroom veranderd en de variabele JA is schakel schakel je de slimme schakelaar uit. En zet je de waarde naar Nee
Nu zal de schakelaar niet meer uitgaan waneer hij weer wordt ingeschakeld
Als de machine klaar is zet je de variabele weer op Ja
Hieronder de flow zoals ik deze gebruik. Het idee hiervoor komt uit vergelijkbare discussies in het Engelstalige deel. Daar gaan ze zelfs prioriteiten zetten tussen verschillende verbruikers. En als gebruikers thuis zijn worden meldingen afgespeeld dat het apparaat klaar is.
Dat doe ik allemaal niet.
Ik gebruik een aantal verschillende zaken in de flow.
Ik gebruik een tekstvariabele Vaatwasser om bij te houden of de vaatwasser Uit staat, Draait of Klaargezet is en een virtuele schakelaar waarmee ik zelf kan bepalen wanneer de vaatwasser aan gaat.
Als de vaatwasser wordt aangezet controleer ik of het opgenomen vermogen boven de 10W komt. Als dat zo is en de status van de vaatwasser is Uit, dan hebben we hem net aangezet.
Dan controleer ik of het terug geleverde vermogen van de zonnepanelen meer is dan het minimale vermogen dat ik wil hebben voordat de vaatwasser aan mag.
Is er onvoldoende vermogen dan krijgt de variabele de status Klaargezet en zet ik de stekker uit en schakelaar uit.
Is er voldoende vermogen dan wordt de status van de variabele Draait en zet ik de schakelaar aan. (Terwijl ik dit uittyp zie ik dat de Vaatwasser nog aangezet moet worden.)
Er zijn nu drie situaties waarbij de vaatwasser aan gaat.
We leveren genoeg vermogen terug om de vaatwasser te mogen starten. Dit controleer ik door te kijken hoeveel we terug leveren.
Op een bepaalde tijd, zodat deze altijd op tijd klaar is
Als de schakelaar door de gebruiker of de eerdere flow wordt aangezet.
Als er geen vermogen wordt gebruikt dan gaat is de vaatwasser normaliter uit en zet ik de variabele weer op Uit evenals de schakelaar.
Dan nog wel een trucje om kleine stroomstoringen of even terugvallen van het vermogen tijdens het draaien te ondervangen.
Als het vermogen onder een bepaalde waarde valt, in mijn geval 1W, dan start ik een timer die 2 minuten gaat lopen.
Als er eerder weer meer vermogen wordt gebruikt dan stop ik te timer.
Is de timer van zichzelf afgelopen dan is de vaatwasser echt uit.
De variabele en de schakelaar gebruik ik binnen een dashboard zodat mijn partner dit allemaal zelf kan doen.
Beste PetervH,
Bedankt voor de duidelijke uitleg. Zelf heb ik een haat/liefde verhouding met variabelen omdat de flow niet altijd doet wat het zou moeten doen maar dit is een goed voorbeeld om het opnieuw te proberen.
Die haat/liefde verhouding heb ik ook.
Het gaat de laatste tijd wel beter nadat ik, voor zover het kan, de logica en dus ook de variabelen voor de actie zet.
Als dan de actie een time-out geeft dan staan de variabelen al goed en andere settings die je daar doet ook. Meestal is de actie namelijk wel gestart en loopt deze ook bij een time-out gewoon door. Maar de flow zelf stopt dan.
Dat merk ik ook nu nog omdat ik pas na de actie de berichten verstuur. Die komen nog steeds niet altijd aan.
Misschien een beetje laat in de discussie. Ik heb nu al een tijdje een homey scriptje draaiend voor het detecteren of de wasmachine klaar is aan de hand van het vermogen (ik gebruik een goedkope Ikea stekker die vermogen doorgeeft). Zo’n scriptje is vaak wat handiger omdat je geen extra apps hoeft te installeren en het gewoon kan copy pasten als tekst.
Voor wie geïnteresseerd is. Het scriptje:
/*
connect this script to power changed with these parmeters as json
{
"power":<fill in the power>,
"lowPowerThreshold":1,
"highPowerThreshold":20,
"deviceName":"Wasmachine",
"triggerFlowId":"386f0e22-9b06-4890-82e3-8d82c3ef2eb8"
}
*/
var lowPowerThreshold = 1;//w
var highPowerThreshold = 20;//w
var waitLowPowerInSeconds = 30;//30 seconden
var deviceName="Wasmachine";
//trigger this flow when x seconds lowPower
var triggerFlowId="386f0e22-9b06-4890-82e3-8d82c3ef2eb8";
var logTimeLine= async (text)=>{
log(text);
var result=await Homey.flow.runFlowCardAction(
{
uri: 'homey:flowcardaction:homey:manager:notifications:create_notification',
id: 'homey:manager:notifications:create_notification',
args: {text: text},
}
);
return result;
}
let arg=args[0];
if (typeof arg !=='string') {
throw new Error("Missing argument for function")
}
var parameters=JSON.parse(arg)
if (typeof parameters !=='object') {
throw new Error("Argument not an json object")
}
if (typeof parameters.power !== 'number') {
throw new Error("missing power input parameter")
}
power=parameters.power
if (typeof parameters.deviceName !== 'string') {
throw new Error("missing deviceName input parameter")
}
deviceName=parameters.deviceName
if (typeof parameters.lowPowerThreshold == 'number') {
lowPowerThreshold=parameters.lowPowerThreshold;
}
if (typeof parameters.highPowerThreshold == 'number') {
highPowerThreshold=parameters.highPowerThreshold;
}
if (typeof parameters.waitLowPowerInSeconds == 'number') {
waitLowPowerInSeconds=parameters.waitLowPowerInSeconds;
}
if (typeof parameters.triggerFlowId == 'string') {
triggerFlowId=parameters.triggerFlowId;
}
const powerVariableName=deviceName+'_currentPower';
var lastPower = global.get(powerVariableName);
if (typeof lastPower!="number") lastPower=0;
global.set(powerVariableName,power);
const powerOnName=deviceName+'_powerOn';
var powerOn = global.get(powerOnName);
if (typeof powerOn!="boolean") powerOn=false;
const waitLowPowerName=deviceName+'_waitLowPower';
var waitLowPower = global.get(waitLowPowerName);
if (typeof waitLowPower!="boolean") waitLowPower=false;
log(`last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
if (lastPower!=power) {
if (power>highPowerThreshold && !powerOn) {
powerOn=true;
global.set(powerOnName,true);
global.set(waitLowPowerName,false);//cancel the low power wait
// await logTimeLine("new power set on");
//logTimeLine(`Wasmachine klaar :set power on last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
}
else if (powerOn && power<lowPowerThreshold && !waitLowPower) {
waitLowPower=true
global.set(waitLowPowerName,true);
//logTimeLine(`Wasmachine klaar :set wait low power last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
await wait(1000*waitLowPowerInSeconds);
waitLowPower = global.get(waitLowPowerName);
if (waitLowPower) {
powerOn=false;
global.set(powerOnName,false);
waitLowPower=false;
global.set(waitLowPowerName,false);//cancel the low power wait
log("wait low detected");
//logTimeLine(`Wasmachine klaar :Trigger flow low power last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
await Homey.flow.triggerFlow({id:triggerFlowId})
//await logTimeLine("was machine ! flow flow triggered");
//
}
}
}
log(`new last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
Ik ben bezig met een app aan het ontwikkelen voor de status van Homey en heb daarin een functie gemaakt om apparaten te monitoren zonder daar flows voor te hoeven maken en ook een widget waarin de statussen getoond worden. Voor de mensen die geen ingewikkelde flows willen maken en in 1 overzicht het willen zien is misschien onderstaande app heel handig.
Leuk dat je zo’n app ontwikkeld. Ik heb nu zelf een handmatig scriptje dat goed werkt, maar ik ben opzoek naar een app voor dit. Bij mijn wasmachine is het niet eenvoudig om te bepalen wanneer hij klaar is groot gedeelte gebruikt hij geen energie. Wat ik dan wacht ik eerst op hoog vermogen als als de hij voor een bepaalde tijd op laag vermogen is dan weet ik dat hij uit is. Je hebt dan configureerbare 2 drempel waarden nodig en een duur om dit goed te configureren. Zie de onderstaande code. Het zou handig zijn als je app dit zou kunnen doen.
var lowPowerThreshold = 1;//w
var highPowerThreshold = 20;//w
var waitLowPowerInSeconds = 30;//30 seconden
var deviceName="Wasmachine";
//trigger this flow when x seconds lowPower
var triggerFlowId="386f0e22-9b06-4890-82e3-8d82c3ef2eb8";
var logTimeLine= async (text)=>{
log(text);
var result=await Homey.flow.runFlowCardAction(
{
uri: 'homey:flowcardaction:homey:manager:notifications:create_notification',
id: 'homey:manager:notifications:create_notification',
args: {text: text},
}
);
return result;
}
let arg=args[0];
if (typeof arg !=='string') {
throw new Error("Missing argument for function")
}
var parameters=JSON.parse(arg)
if (typeof parameters !=='object') {
throw new Error("Argument not an json object")
}
if (typeof parameters.power !== 'number') {
throw new Error("missing power input parameter")
}
power=parameters.power
if (typeof parameters.deviceName !== 'string') {
throw new Error("missing deviceName input parameter")
}
deviceName=parameters.deviceName
if (typeof parameters.lowPowerThreshold == 'number') {
lowPowerThreshold=parameters.lowPowerThreshold;
}
if (typeof parameters.highPowerThreshold == 'number') {
highPowerThreshold=parameters.highPowerThreshold;
}
if (typeof parameters.waitLowPowerInSeconds == 'number') {
waitLowPowerInSeconds=parameters.waitLowPowerInSeconds;
}
if (typeof parameters.triggerFlowId == 'string') {
triggerFlowId=parameters.triggerFlowId;
}
const powerVariableName=deviceName+'_currentPower';
var lastPower = global.get(powerVariableName);
if (typeof lastPower!="number") lastPower=0;
global.set(powerVariableName,power);
const powerOnName=deviceName+'_powerOn';
var powerOn = global.get(powerOnName);
if (typeof powerOn!="boolean") powerOn=false;
const waitLowPowerName=deviceName+'_waitLowPower';
var waitLowPower = global.get(waitLowPowerName);
if (typeof waitLowPower!="boolean") waitLowPower=false;
log(`last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
if (lastPower!=power) {
if (power>highPowerThreshold && !powerOn) {
powerOn=true;
global.set(powerOnName,true);
global.set(waitLowPowerName,false);//cancel the low power wait
// await logTimeLine("new power set on");
//logTimeLine(`Wasmachine klaar :set power on last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
}
else if (powerOn && power<lowPowerThreshold && !waitLowPower) {
waitLowPower=true
global.set(waitLowPowerName,true);
//logTimeLine(`Wasmachine klaar :set wait low power last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
await wait(1000*waitLowPowerInSeconds);
waitLowPower = global.get(waitLowPowerName);
if (waitLowPower) {
powerOn=false;
global.set(powerOnName,false);
waitLowPower=false;
global.set(waitLowPowerName,false);//cancel the low power wait
log("wait low detected");
//logTimeLine(`Wasmachine klaar :Trigger flow low power last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
await Homey.flow.triggerFlow({id:triggerFlowId})
//await logTimeLine("was machine ! flow flow triggered");
//
}
}
}
log(`new last power=${lastPower} new power=${power} powerOn=${powerOn} waitLowPower=${waitLowPower} `)
Hoi Tijmen,
Ontzettend leuk dat je meedenkt over de verbeteringen voor de app!
Ik heb even naar jouw script gekeken en vergeleken met de functionaliteit die al in de app zit voor het monitoren van apparaten. Eigenlijk komt dat grotendeels op hetzelfde neer. Ik zou daarom bijna willen voorstellen om eens een test uit te voeren waarbij beide oplossingen naast elkaar draaien, zodat we kunnen zien of ze hetzelfde resultaat geven. Daarna kunnen we bekijken of er nog aanpassingen nodig zijn in de app.
Zelf heb ik dit bijvoorbeeld ingesteld voor onze wasmachine en dat werkt erg goed. De app controleert of het verbruik gedurende 30 seconden boven de 10 watt blijft. Dan is de wasmachine bezig en gaat hij in de app bij houden hoeveel kWh hij ondertussen gebruikt. Daarna wacht hij totdat het verbruik gedurende 180 seconden onder de 3 watt blijft. Mocht het verbruik in die periode toch weer boven de 3 watt uitkomen, dan wordt de timer automatisch geannuleerd en opnieuw gestart. Is hij wel klaar stop het aantal kWh en kan dit worden verstuurd middels een flow en slaat hij dit op in de geschiedenis.
Deze instellingen kan je zelf helemaal instellen voor jouw wasmachine en zo hetzelfde instellen als wat er in het script staat.
Bedankt,
Ik heb je app geinstalleerd, ik kan nu apparaten met verschillende modusen maken. Maar ik kan nog nergens vinden waar ik het scherm uit je screenshot vinden.
Goedemorgen @Erikje
Bedankt voor de app, Ik ga hier eens naar kijken ![]()
Kleine tip, meervoud van modus is modi , niet modussen ![]()
Goeiemorgen Borssie,
Oeps.. ik heb het gelijk aangepast in de nieuwe testversie.
Ik hoop oprecht dat mijn app iets voor je kan betekenen![]()
Super! Ja ik ga hier morgen even mee spelen, denk dat ik een hoop hiermee kan doen.





