Help with Ja Nee variabele

Wat doe ik fout
Wil graag een script maken die afhankelijk van een Ja Nee variabele een tag genereerd
arg is een ja nee variabele en maakt dan een tag bool aan afhankelijk of deze ja of nee is
wat moet ik invullen in de if () zodat het reageert op ja nee ???
mijn script is

// bolean;
const arg=args[0];
if (arg===true) {
await tag(‘bool’, ‘":{“value”:[1]}}}’);
}
else{ await tag(‘bool’, ‘":{“value”:[0]}}}’);
};

Met fancy (dubbel)quotes gaat het sowieso nooit werken, gebruik uitsluitend rechte ' "
Plaats ajb je script eerst eens in script format, preformatted text genaamd

Goedemorgen Peter,
Het fancy quotes verhaal werkt perfect is een tag om achter een MQTT string te plakken.De dubbele haakjes staan als sring tussen de enkele haakjes.

Het probleem zit in de if() als ik het met een nummerieke variabele doe
bv if(arg===15) werkt het of text variabele if(arg===‘test’) werkt ook.
Alleen bij een ja nee variabele krijg ik het niet voor elkaar om de if of else uit te voeren.

m vr gr ,
Wilco Wassink

1 Like

Gebruik geen drie maar twee gelijktekens?

Bij 2 gelijktekens werkt het ook met getal en string maar ik zoek de oplossing wat ik bij de if() moet gebruiken zodat het werkt bij een Ja/Nee variabele

Ik mis nogal wat context, is dit het begin van een JavaScript functie?
Maar zit het probleem dan in de vergelijking van de if, of heeft de contante “arg” geen waarde? Maak de waarde van “arg” eens zichtbaar, of geef deze zelf een waarde. Of begin met een simpel if statement true==true.

De waarde arg[0] komt van een knop uit de device capabillities
en bevat de waarde Ja als de knop aanstaat en de waarde Nee als de knop uitstaat

als ik een return arg[0] geef komt deze waarde uit het script

Ligt het dan niet voor de hand om if (arg==ja) of if (arg==“ja”) te gebruiken? afhankelijk van wat voor type “arg” is. En zeker geen 3 gelijktekens, omdat dan ook de types gelijk moeten zijn.

als ik dit stukje uitvoer bij Fan Douche Hand has changed krijg ik deze notificatie

bij Ja een ✓ en bij nee een x

probeer deze twee symbolen een een if statement te krijgen
bv if(test=‘x’) maar tot nu toe diverse varianten geprobeerd maar geen resultaat

Er zullen nogal wat onzichtbare tussenstappen en vertalingen bij betrokken zijn, voordat de symbolen in de tijdslijn verschijnen. Misschien kun je (voorlopig) een workaround maken, door met een logica kaart te testen op “Fan Douche Hand” en dan in beide gevallen het kaartje voor MTTQ Client aanroepen. In het ene geval met de vaste waarde TRUE en in het andere geval de vaste waarde FALSE, ipv 1 x aanroepen met een variabele FALSE of TRUE. Dan omzeil je het probleem.
Ik krijg toch het idee dat je in het IF statement dingen met elkaar vergelijkt, die anders zijn dan wat je denkt. Dus je kunt ook de twee waarden én type van de parameters in het if statement uitprinten. Het moeten of 2 booleans zijn, of twee strings, of 2 integers.
Hoe je een Boolean weergeeft, is een heel ander verhaal.

Dat werkt al maanden perfect met de logica kaart zo doe ik het ook al een hele tijd zonder problemen.

Wou met behulp van script de advanced flows wat comprimeren omdat hier geen goto commando
bestaat en het soms zo rommelig word met de if/else kaarten vooral als je niet 5 keer het zelfde kaartje wil invoeren krijg je veel kruisende enz lijnen in je flow

Omdat ik nu een paar dagen vrij had wou ik wat met script expirimenteren aangezien ik normaal plc`s programeer en alleen de talen algol60 ,pascal en visiual basic beheers

Dan zou ik vlak voor de if statement uitgevoerd wordt, het type en de waarde van de twee objecten die je met elkaar vergelijkt, proberen vast te stellen.
Want als je met die programmeertalen bekend ben, weet je dat een Boolean nooit gelijk kan zijn aan een constante of variabele van het type string met de de waarde “ja” of “nee”, of een vinkje of een kruisje.
Het IF statement moet of een ja of een nee geven, óf een runtime error. Maar ik ken je ontwikkelomgeving niet goed genoeg, ik doe (nog) geen Homeyscript.

En om flows op te schonen kun je ook subflows gebruiken.

Door het omzetten van het argument naar String kan ik nu eindelijk wat bereiken
dus geen appels met peren vergelijken zoals jij vermelde
zie voorbeeld:

test= String(args[0]);
if (test == “✓”) enz.

Dus het werkt nu?

Ja prima.

Volgende stap uitzoeken hoe ik een rechtstreeks variabele kan ophalen in een script
zonder het kaartje voer script uit met argument te moeten gebruiken maar met kaartje voer script uit

Ik bedoel dus niet met args[0] maar met een get

Als je zoekt in dit forum op tag en Homeyscript of variable en Homeyscript vind je diverse bijdragen. Daar zal best wel wat tussen zitten wat voor jou van belang is.

Bv Advanced Flow and HomeyScript

Misschien wat aan de late kant, maar om te achterhalen wat er in je tag zit gebruik ik vaak:

console.log(args[0])

Dan krijg je in je console de waarde terug en kan je je code daarop aanpassen…voor een volgende keer.

Klopt ik gebruik dat ook maar ik zoek een mogelijkheid om een tweede tag te koppelen aan het kaartje voer script uit met argument

Een tweede tag?
In het argument veld kun je twee tags toevoegen. Gescheiden door een komma.

_

Probeer deze scripts eens:

1 Like