Erste Schritte Erste Hürde

Hallo,

ich habe eigentlich zwei themen die ich über Node Blue fürs erste realisieren will. Leider scheiter ich daran noch etwas. Hoffe mir kann jemand den richtigen Weg aufdeuten.

  1. Lichttaster ausschalten wenn Licht Länger als 30min an ist.

Jeder der Kinder hat kennt das Problem. Kind war auf dem Klo und rennt raus zum spielen. Problem das licht ist an. Das bleibt dann wenn es blöd läuft über Stunden oder ganz Blöd Tage an.

Ziel wäre also erstmal die einfache Variante. Meldet der Taster 30min den Status true, soll ein aussignal an den Taster gesendet werden. Irgendwie will meine Lösung nicht. Der Plan war das Toggle modul nach Zeit X toggeln zu lassen und den eingang des delay nodes mit dem true signal zu koppeln.
Leider ergibt sich hierdurch eine Schaltung(mir ist nicht klar warum) die an und wieder ausgeht.

  1. Klassiche Heizsteuerung
    Ein Temepratur sensor gibt einen String im payload der unter anderem Die Temperatur enthält. Diese müßte man jetzt als Float konvertieren um es an den Heizregler zu überreichen.
    Dafür wollte ich den finction node nutzen. PHP ist nicht ganz mein Steckenpferd aber C++ und C# etc.geht also sollte das ja kein Problem sein. Leider doch!

in der Theorie wollte ich den String zerlegen und dann den wert in float wandeln.
Aber irgendwie funktioniert das nicht. Schon beim suchen des Strings “temperature” gibt die funktion keinerlei Rückgabe.
Mach ich da was grundsätzlich falsch?
grafik

So das wäre es mal fürs erste. Ich komme hier nicht weiter und bräuchte hilfe :wink:

Gruß und Danke der Doc

Ich will dir ja nicht zu nahe treten, aber das node blue Forum hat ca. 20 Posts, einer enthält eine Lichtsteuerung. Das ist nicht wirklich unübersichtlich. Ob ein Bewegungsmelder oder ein Taster schaltet, ist egal.

1 Like

Für Dein erstes Problem sollte es doch reichen, den Aktor entsprechend zu konfigurieren, zumindest wenn es sich um ein Homematic Gerät handelt.
Beim zweiten Problem wäre der String, den Du auswerten willst recht hilfreich. Ich würde so etwas in der Art nehmen:

$only_digits = preg_replace('/\D+/', '', $string);

Siehe auch: https://lmgtfy.com/?q=php+extract+number+from+string

1 Like

Hallo Job,

den bewegungsmelder habe ich natürlich gesehen, aber hier wird zum einen eine HUE Lampe gesteuert und kein Taster. Der Taster reagiert auf einen state wechsel von 1 auf 0 oder von 0 auf 1(soweit ich das verstanden habe).
Des weiteren ist mir bis jetzt nicht klar wie das mit den Inputs und outputs funktioniert die du verwendest und wo die her kommen. Solche Nodes habe ich bei mir gar nicht gefunden. Welches Zeitglied du verwendet hast ist auch nicht wirklich ersichtlich.
Und aktuell habe ich auch keine möglichkeit gefunden diese Text Datei die du verlinkt hast mal zu öffnen in Node blue und das nach zu prüfen.
Das alles wollte ich jetzt nicht in den Thread Bewegungsmelder schreiben weil es ja mit dem Projekt nichts zu tun hat und daher andere verwirrt.

Das sind die Grundprobleme. Du als alter Hase machst sowas mit links, ich brauche hier einfach ein paar hints die mich in die richtige Richtung stoßen.

Hier gibt es noch genug grundsätzlich Verständis Probleme die Parallel dazu laufen aber. Ich würde halt gern mal eine einfache Aufgabe lösen und daran dann weiter arbeiten. Ein Licht zeitbasiert auszuschalten sah ich jetzt nicht als extrem schwer an und scheitere trotzdem kläglich.
Die fehlende Doku zu den Nodes macht es nicht einfacher.
Wenn ich mir zum Beispiel den Node Variable anschaue, kommt beim hint, das die Variable gesetzt wird. Wo ist das Rücksetzen? Verständnis und das macht der gleiche Node oder gibt es da etwas anderes. Etc. alles kleine Problemchen die man sehr schnell nachlesen könnte.

So hoffe du verstehst es jetzt nicht falsch oder als Vorwurf wollte nur erläutern warum dieser Thread entstanden ist.

Gruß

Der Doc.

Hallo,

nein es handelt sich um ein KNX System. Das man es auch im KNX machen könnte denke ich auch aber es ist ja primär mal ein lernprojekt für mich für Node Blue und zum anderen Wenn ich mal was ändern möchte brauche ich wieder ETX Software samt elektriker und das kostet Geld.

Zu deiner Frage ja wäre clever gewesen den String mit zu posten :wink:

also der String kommt vom device:
WSDCGQ01LM von Xiaomi.

Den String habe ich grad nicht 100% parat da ich im Büro bin.

Grundsätzlich ist er 81 Zeichen lang

Er sieht vom prinzip her so aus:
[temperature: 24.36 , humidtiy: 86.54 , signal quality: 20 battery:90 Voltage:3140]

Werde heute abend aber den korrekten String nochmal dazu packen.

Gruß und Danke
Der Doc

Ist der String vielleicht einfach JSON?

Es steht zumindest mal string[81] in der debug Ausgabe

Aber das Jason Prinzip ist mir auch noch nicht ganz klar. Also die Struktur schon aber Wie könnte man dann darauf zugreifen?

So hier noch der String wie er aus der debug rauskommt:

$message['payload'] : string[83]
"{"temperature":27.42,"linkquality":2,"humidity":43.67,"battery":100,"voltage":3005}"

Wenn du deine Grundprobleme direkt angesprochen hättest, wüsste man besser wie dir geholfen werden muss. :wink:

Ich fang mal an:

Das sind Subflows, die gibt es erst wenn man sie erstellt hat. Die sind dann später in eigenen Flows als Nodes verwendbar.

Den Inhalt der Textdatei musst Du in die Zwischenablage kopieren und dann in Node-Blue importieren.

image

Das ist nicht richtig, der Subflow liefert eine bestimmte Zeitspanne nach einem True ein False. Sofern nicht zwischendurch ein weiteres True kommt, dann zählt der Timer von neuem. Zusätzlich liefert er noch weitere Werte die als Helligkeit verwendet werden können. Ich schalte damit Hue-Lampen und Sonoff-Schalter. Der Subflow hat nichts mit der Hardware zu tun.

Ich schlage vor, dass du dir mal die Subflows und Flows importierst und anschaust. So ziemlich alle deine Fragen sind darin gelöst. Sieh das als lebensnahe Doku. :wink:

Das soll jetzt nicht heissen, dass Du keine Fragen stellen sollst, nicht falsch verstehen. Mir kommt es nur komisch vor, wenn Fragen gestellt werden, die 3 Posts darunter beantwortet sind. Aber das lag ja daran, dass Du die Antworten nicht anwenden konntest.

Du solltest vielleicht auch zigbee2mqtt umstellen, dass die Attribute einzeln geliefert werden, da spart man sich einen Menge Json-Bastelei. In der configuration.yaml:

experimental:
  output: attribute
1 Like

Hey, Job,

danke für die Tipps. Heute Abend werde ich mir deine Lichtsteuerung mal anschauen.

Der Tipp mit dem output ist genial, macht das ganze deutlcih einfacher.

Ich dachte auch es funktioniert jetzt so, allerdings bekomme ich keine Debug ausgabe von dem Heizregler, die kleine 86 oben drüber würde ich aber als Regelparameter U sehen oder?

Allerdings wird der Wert vom Seonsor als string an den Regler übergeben, das passt ihm wohl nicht denn er steht seit dem auf 100%. Und das obwohl die soll-Temp bei 22°C liegt.

Gibt es einen Grund warum das am Debug nicht ankommt?

Wie gesagt Rest schaue ich am Wochenende nur das würde mich grad brennend interessieren.

Und was mir auch auffällt, der kleine grüne Punkt unter dem MQTT modul mit connected fehlt so. Aber die daten kommen, das sehe ich am output

gibt es irgendein beispiel mit den Datenkonvertierungen? irgendwo hab ich da glaub einen Fehler.

grafik

da kommt immer “null” raus

Vielleicht sollten wir erst mal klären, was denn nun wirklich in $message[‘payload’] steht …

Da steht 27.25 drin.

Also meine function-nodes bekommen als Rückgabewert immer das $message-object mit entsprechendem payload, nicht einfach einen string.

Hier mal die Online-Hilfe zum function-Node (den relevanten Teil habe ich mal markiert):

Der Heating-Controller arbeitet auch vernünftig, Setpoint ist 30°, aktuelle Temperatur 27.25°, Ventilöffnung 86% ist ziemlich plausibel. (Quelle: Online-Hilfe)

Dachte ich auch anfänglich, aber als ich den setpoint auf 20.0°C gestellt hatte blieb er auf 100% und da steht er immernoch.

Hab ich auch gesehen aber hab nichts anderes gesehen.
Wie machst du typ konvertierungen?

dann reicht es ja, daraus einen float zu machen, das andere Beispiel würde nur den Dezimalpunkt entfernen
floatval($message['payload'])
siehe https://www.php.net/manual/de/function.floatval.php
Aber ich glaube, Du musst Dir erst mal ein paar Grundlagen erarbeiten

1 Like

Häh? Sorry, wie bitte?

Z.B. mit floatval, wie @DasKleingedruckte geschrieben hat.

Vergiss bitte Regex, die haben hier nichts zu suchen. (Ausnahmen gibt es natürlich, aber nicht in deinem Szenario.)

Was für eine Heizung versuchst Du eigentlich zu steuern?

Mhm ich krieg damit trotzdem immer nur den Null verweiss aus der function.
grafik

Was jetzt funktioniert ist das:

so ganz verstehe ich das aber nicht.

Sorry Fernsehen, mit der Frau diskutieren warum man am Laptop hängt und schreiben da ging was schief.

Hast du denn den markieten Text aus der Online-Hilfe gelesen? Du kannst keine Zahl zurückgeben!

Ok irgendwie reden wir aneinander vorbei.
Ich fragte wie du/ihr typen konvertiert. Die Antwort war:

Aber die konvertierte Zahl kann ich dann nicht zurück geben, da die Function das nicht zu läßt.

Ich bin doch da irgendwo auf dem Holzweg falsch abgebogen :astonished:

Wäre es möglich das du mir das kurz mal zusammen klickst wie du eine payload in eine Zahl wandelst?

$message[‘payload’] = floatval($message[‘payload’);
return $message;

Du musst ein vollständiges Message-Objekt zurückgeben, keine Zahl.

1 Like