Funktion in Funktion-node

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
stahchde
Beiträge: 63
Registriert: 08.03.2018, 08:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal

Funktion in Funktion-node

Beitrag von stahchde » 21.06.2019, 11:29

Hallo zusammen,

ich habe den unten stehenden Quelltext in eine function-node eingefügt und diese funktioniert auch einwandfrei. Jedoch habe ich immer das rote Dreieck an der node und beim Implementieren kommt jedes mal die Meldung, das der Knoten nicht ordnungsgemäß konfiguriert ist. Diese Meldung (inkl. rotem Dreieck) verschwindet nur, wenn ich die Zeile

Code: Alles auswählen

var tag = getWeekDay(30,05,2019);
mit dem Aufruf der Funktion auskommentiere oder lösche, was die node unbrauchbar macht ;-)

Wie gesagt, funktionieren tut alles, aber warum kommt diese Meldung? Müssen Funktionen an einer anderen stelle noch bekanntgegeben werden?


Code: Alles auswählen

var anzahl = msg.payload.items.length;
var xStart = msg.payload.items[1].start.dateTime;
var xEnde = msg.payload.items[1].end.dateTime;
var Beschreibung = msg.payload.items[1].summary;

function getWeekDay(dd,mm,yyyy) {

    var month = "312831303130313130313031";
    var days = (yyyy-1)*365 + (dd-1);
    for(var i=0;i<mm-1;i++) days += month.substr(i*2,2)*1;

    if(yyyy>1582 || yyyy==1582 && (mm>10 || mm==10 && dd >4)) days -= 10;

    var leapyears = Math.floor(yyyy / 4);
    if(yyyy%4===0 && mm<3) leapyears--;
    if(yyyy>=1600) {
      leapyears -= Math.floor((yyyy-1600) / 100);
      leapyears += Math.floor((yyyy-1600) / 400);
      if(yyyy%100===0 && mm<3) {
        leapyears++;
        if(yyyy%400===0) leapyears--;
      }
    }
    days += leapyears;

    // Ergebnis anzeigen
    var week = "SaSoMoDiMiDoFr";
    return days%7; //week.substr(days%7*2,2);
}


var TagStart = xStart.substr(0, 10);
var TagEnde = xEnde.substr(0, 10);
var Start = xStart.substr(11, 5);
var Ende = xEnde.substr(11, 5);
var tag = getWeekDay(30,05,2019);

msg.eintrag = Beschreibung;
msg.TagStart = TagStart;
msg.Start = Start;
msg.TagEnde = TagEnde;
msg.Ende = Ende;
msg.ytag = tag;

return msg;

Hypnos
Beiträge: 460
Registriert: 06.01.2018, 12:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 39 Mal

Re: Funktion in Funktion-node

Beitrag von Hypnos » 22.06.2019, 00:12

das Dreieck ist auch weg, wenn du folgendes schreibst:

Code: Alles auswählen

var tag = getWeekDay(30, 5, 2019);
Bei Zahlen scheint er führende nullen nicht zu mögen.

Ist die Funktion nicht etwas mit "Kanonen auf Spatzen geschossen"?

Wenn man nicht gerade den Wochentag von einem Jahr vor 1583 benötigt, geht es so einfacher:

Code: Alles auswählen

let tag = 30;
let monat = 5;
let jahr = 2019;
let d = new Date(jahr, monat -1, tag , 0,0, 0);
let wochentag= d.getDay(); //0=So, 1=Mo ... 6=Sa
Zuletzt geändert von Hypnos am 22.06.2019, 00:28, insgesamt 1-mal geändert.

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Funktion in Funktion-node

Beitrag von hobbyquaker » 22.06.2019, 00:16

Führende Nullen stellen in Javascript Oktalzahlen dar:

Code: Alles auswählen

> console.log(010)
8
Da das eigentlich kein Mensch braucht und es eine häufige Fehlerquelle darstellt meckern es die meisten Linter an, ich vermute das ist der Grund für das rote Dreieck.

stahchde
Beiträge: 63
Registriert: 08.03.2018, 08:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal

Re: Funktion in Funktion-node

Beitrag von stahchde » 22.06.2019, 07:51

Vielen Dank für die Antwort. Ich nutze jetzt die Funktion von dir und nicht mehr die aus der Uni-Zeit (>10 Jahre her) ... macht den Code auch wieder schlanke, da stehe ich ja eh drauf ;-)

Hypnos
Beiträge: 460
Registriert: 06.01.2018, 12:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 39 Mal

Re: Funktion in Funktion-node

Beitrag von Hypnos » 22.06.2019, 23:19

hobbyquaker hat geschrieben:
22.06.2019, 00:16
Führende Nullen stellen in Javascript Oktalzahlen dar
Danke für die Erklärung. Ich hatte schon fast so etwas vermutet, war aber zu faul zu googeln ;)

Antworten

Zurück zu „RedMatic“