[HomeyScript] Zelfs in een kleine test, om ergens anders iets te begrijpen, snap ik de fout melding niet

Eindelijk de moed gehad om eens te kijken of enkele functions in JavaScript om te zetten in HomeyScript.
Als eerste de paasdatum in een jaar en daarna het Juliaansedag getal van een dag.
Het werk zit in de kop en de staart. De data erin en er weer uit te krijgen.

Helaas ging terug krijgen van een Juliaans dagnummer naar de datum niet lekker.
Wel tijdens het testen maar niet in de flow omgeving.

Dan ga je wat kleine testjes doen en de eerste geeft in de flow omgeving een voor mij onbegrijpelijke fout.

let JulianDay = args[0]        // args[0]   2460169.5  
 
 var YMD = JulianDay;
 var Year = 2023;
 var Month = 8;
 var DayTotal = 13;
 
  await tag('Yearj', Year);		
  await tag('Monthj', Month);
  await tag('Dayj', DayTotal);
  await tag('YMDj', YMD);
 

console.log(Year,Month,DayTotal,YMD,JulianDay);
return(true);	

De kaart antwoord met “het krijgen van een string waar een nummer wordt verwacht.”
Diezelfde kaart geeft bij dezelfde invoer waarde geen fout bij een ander script.
(Wel het bewuste script wat geen uitvoer wil geven.)

De await tag’s zijn die ik in dat andere script wil gebruiken.

Wanneer het hier al fout gaat dan hoef ik niet verder te werken aan het grotere script.

Data van type String / Tekst die je in tags wil schrijven, moet met ’ ’ worden omgeven

 var YMD = 'JulianDay';

Zie de ‘example-tag.js’ in Homeyscript:

// Create Tags
log('Creating My String...');
await tag('My String', 'abcdef');

log('Creating My Number...');
await tag('My Number', 123);

log('Creating My Boolean...');
await tag('My Boolean', true);

Waarschijnlijk worden argumenten als string doorgegeven en moet je JulianDay expliciet omzetten naar nummer:

var YMD = Number(JulianDay);

Het blijkt inderdaad niet de punt of komma te zijn.

Ga ik in het script bovenaan op JulianDay staan dan geeft de pop-up:
“let JulianDay: number”
En dat is bij elke keer.

Bij YMD is dat:
“var YMD: number”

Dit geldt verder voor al de andere var’s

De komma wordt alleen gebruikt voor “display purposes” en is afhankelijk van je land/taalinstelling. Intern (en in scripts) zou het gewoon een nummer met een punt moeten zijn.

1 Like

Helemaal gelijk @robertklep

Zeker weer de test waarde laten zitten en opgeslagen.


Edit: helaas niet gevonden

Het is niet voor niets een testscript.
Alleen door tikfouten en test tag's is die lijst onder "hom" wat vervuild.
Zo die graag zelf opruimen. Kan dat?

Bedankt allemaal voor het meedenken.
Nu dan toch verder met het lastigere script.

HomeyScripts staan op zichzelf, en variabelen staan los van tags. Dus het lijkt me sterk dat dit het echte probleem is.

Ja, zie “example-tag.js”. Schrijf de tag waarde in een script weg met waarde “null”.

1 Like

Dit is wat ik opmerk.

  await tag('Yearj', Year);		
  await tag('Monthj', Month);
  await tag('Dayj', DayTotal);
  await tag('YMDj', YMD);

Die ‘YMDj’ geeft het probleem en met name de j achteraan.
Deze heeft wel een een groene tag. Ook een andere van een ander script.
Later maar verder uitzoeken waarom.

@Torch1969, ik ga vanavond eens kijken hoe “example-tag.js” werkt. Bedankt.

Ik heb al uitgelegd waarom.

Het in de await tag alleen YDMj die dat doet.
Moet nu echt weg.
Vanavond kijken naar die ander kleur van de YDMj tag.

Na zo’n 2,5 uur rommelen denk ik dat ik het nu begrijp, alhoewel… :wink:

Het vreemdste is wel dat zaken soms wel en dan weer niet werken.
Mij Easter script werkte ineens ook niet meer bij het testen.
De tip: var YMD = Number(JulianDay); werkte eerst ook echt niet.

Toen maar puin gaan ruimen in het HomeyScipt tag chaos.
Daarna

let input_easter = args[0]  // args[0]  2023

  var easteryear = Number(input_easter);

Dit wil ik dan ook standaard gaan doen.
De naam van het script in de input.

Hoewel twee script zeer nauw verwant zijn blijkt dat je moet uitkijken naar benamingen.
YMDtoJullian en JulianToYMD.
Vanavond zal il wel niet meer verder gaan om die laatste verder te bekijken met omzetten.

Nogmaals bedankt voor de tips.