Datum-abfrage in NodeRed

Sorry, hier steht mal wieder der Ochs vorm Berg. Ich möchte in NodeRed abfragen, ob der letzte des Monats ist und wenn ja, um 00 Uhr den Zäherstand abfragen und die Daten in eine Datei schreiben oder übermitteln oder was auch immer.

Heute haben wir den 21.02.2024, aber wenn ich in NodeRed das Datum abfrage, komme ich auf den 03.01.2024. Wat nu?

var jetzt = new Date();
jetzt =jetzt.getDay();
msg.payload = jetzt;
return msg;

msg = 3

var jetzt = new Date();
jetzt =jetzt.getMonth();
msg.payload = jetzt;
return msg;

msg = 1

var jetzt = new Date();
jetzt =jetzt.getFullYear();
msg.payload = jetzt;
return msg;

msg = 2024

Und wenn Du es so machst:
image
image

[{"id":"4b38c4117b695cb9","type":"server-state-changed","z":"5e38a40b1ab38ea9","name":"Aktuelle Zeit","server":"a1aba8eb.bfd618","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"sensor.time","entityIdType":"exact","outputInitially":true,"stateType":"str","ifState":"","ifStateType":"num","ifStateOperator":"is","outputOnlyOnStateChange":false,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":2014,"y":1132,"wires":[["5f0a45ca9d8663c0"]]},{"id":"1f23579162873683","type":"debug","z":"5e38a40b1ab38ea9","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2380,"y":1134,"wires":[]},{"id":"5f0a45ca9d8663c0","type":"moment","z":"5e38a40b1ab38ea9","name":"Zeit formatieren","topic":"","input":"payload","inputType":"msg","inTz":"Europe/Berlin","adjAmount":"0","adjType":"minutes","adjDir":"add","format":"YYYY-MM-DD HH:mm","locale":"de","output":"payload","outputType":"msg","outTz":"Europe/Berlin","x":2198,"y":1134,"wires":[["1f23579162873683"]]},{"id":"a1aba8eb.bfd618","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

der tut nix (will der nur spielen?).
Ich habe dein Beispiel in einen flow importiert und dann… ich kann ja nix starten, aber er sagt running unter dem Node, aber das isset. :rofl:

eine Stunde später: haha: kann auch nicht funktionieren. Der Node “Aktuelle Zeit” greift auf die Entität sensor.time zu. un die gibt´s bei mir nicht. :roll_eyes:

Ja, die kommt aus dieser Integration:


und liefert jede Minute aktuelle Zeit/Datum.

jo, hatte ich inzwischen auch gefunden und integriert. bei mir heißt die ID-Intität sensor.date_time.
Egal, der Weg ist die Lösung, ich muss jetzt nur aus der msg.payload Monat, Tag und Stunden als einzelne Variablen darstellen.
Trotzdem ärgere ich mich, dass obj.getMonth() oder obj.getDay() so unerwartete Ergebnisse liefern.
Gruß Rolf

Du meinst sicherlich am 1 Tag des Monats um 00:00 Uhr. Ansonsten fehlt Dir ein Tag im Monat.

Falls Du je auf die absurde Idee kommen solltest, das ganze in Home Assistant umsetzen zu wollen. :wink:

Der Auslöser 00:00 am ersten Tag des Monats wäre:


trigger:
  - platform: time
    at: "00:00:00"
condition:
  - condition: template
    value_template: "{{ now().day == 1}} "

Gruß
Osorkon

Warum nehmt die hr nicht die cronplus node?
Die triggered zur gewünschten Zeit

  1. weil ich keine Ahnung habe. :thinking:
  2. weil HarryP mir es nicht gesagt hat. :kissing_closed_eyes:
  3. weil du es bisher verschwiegen hast. :face_with_open_eyes_and_hand_over_mouth:
  4. Spaß bei Seite, hast du mehr für mich, als nur das Stichwort cronplus node?

ICH habe die Lösung. Gerade habe ich nach cron pls node gegoogelt, mir im Moment zu kompliziert. Aber: dort habe ich gelesen, dass der Januar mit 0 (Null) indiziert ist. Heißt, zu jedem Ergebnis von get.Month() eine 1 hinzu addiert werden muss.

Und bei der Funktion get.Day() wird wahrscheinlich der Wochentag zurück gegeben, wir haben heute Mittwoch, deshalb 3.
Danke an alle

Ja, deine Anmerkung trifft den Kern, du hast recht, es muss der 1. des Monats um 00.00 Uhr sein, um die Daten zu erheben. Damit entfallen auch solche Probleme ob es sich um 30/31 oder 28/29 Tage handelt. Klasse Idee, damit wird natürlich :laughing: der Programmierumfang deutlich verringert und vereinfacht, obwohl ich deinen Programmschnitzel noch nicht wirklich verstanden habe. :upside_down_face:
Gruß Rolf

Du wolltest doch um 00:00 eines jeden ersten im Monat eine Aktion ausführen.

Der Programmschnitzel wäre der erste Teil einer Home Assistant Automatisierung, falls das ein Begriff sein sollte. Der am ersten eines Monats auslöst. Es fehlen dann nur die entsprechenden Aktionen .

Gruß
Osorkon

Was ist bittte daran kompliziert

Zur Sekunde 0, Minute 0 und Stunde 0 am 1. des Monats ein event auszulösen.

oder um 23:59:59 am Monatsletzten:

Die node kann man über den Paletten-Manager installieren, wenn man den Namen der Node eingibt - eine Beschreibung findet man hier: node-red-contrib-cron-plus (node) - Node-RED

hallo mickym, ohne Scheiß, ich ziehe vor Ehrfurcht meinen Hut vor deinem Wissen. Und glaub mir, wenn ich dir sage, das ist mir zu kompliziert, dann ist es so. Als ich meimen Ing. gemacht habe, da wurde noch auf der IBM 1401 in FORTRAN IV mit Lochkarten programmiert und das Teil passte gut auf eine 2 1/2 Zimmerwohnung. Also, ich hab es anders gelöst:

Das ist der flow. Im Timestamp wird jeden Tag um 00.00 Uhr einmal täglich gestartet.
Node-RED-–-Datum2

In der func wird nun geschaut, ob der 1. des Monats ist. Falls ja, naja dann schreib ich in die db oder sonst was.


und das war´s

Na ja bevor ich jeden Tag um 0:00 eine Nachricht erzeuge und dann was berechne - nehme ich halt lieber eine Node, die genau zum gewünschten Zeitpunkt triggert und das war es dann. Einfacher geht es nicht und die Cron Syntax ist wirklich easy.

vielleicht muss ich ja irgendwann da dran :rofl: :rofl: :rofl:

Hier noch mal was, falls Dir diese Erklärung von cron mehr taugt:

https://github.com/jaclarke/cronosjs#supported-expression-syntax

und wie gesagt, was ist daran kompliziert - Du brauchst genau diese Syntax die ich gepostet habe:

0 0 0 1 * * *

und das trägst Du in die Node ein und damit wird jeden Monatsersten um 00:00:00 getriggert und nicht Code geschrieben und keine 3 Nodes.

:kissing_heart:danke, aber ich habe nach dem ersten Blick in diesen link beschlossen, nen actionfilm auf netflix zu gucken
LG Rolf

Klappt damit wirklich super einfach, danke.
Hat sich gelohnt, nach den Actionfilm. :innocent:

1 „Gefällt mir“