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} `)
