New Image v2.0.9

Ich muss mal schauen,
das werde ich wahrscheinlich erst im August instalieren wenn wir 3 Wochen in Spanien sind…

Dann mache ich noch eine Hardcopy der SD Karte, das ich ohne Stress zurück kann falls mir alles um die Ohren fliegt…:face_with_peeking_eye: :face_with_symbols_on_mouth:

Mal schauen, was dann von meinen Änderungen danach noch funktioniert :man_facepalming:

Gruß
Roland

also solange du die Änderungen nur in den Userflows machst funktioniert nach alles wie gehabt

einzige was ich ändern hab müssen waren die Zugriffspunkte für

.) Victron GX server für MQTT
.) InfluxDB Server für History
.) Gotify Server für Push Benachrichtigung

der erst hat alles problemlos wieder funktioniert

Naja ich habe auch auf dem System einige Skripte erstellt die im Hintergrund laufe. U.a. Mein Backupskript über RaspberryBackup, dann ein MQTT Mirror von VenusOS usw…

Ich lass mich einfach überraschen und dann schauen, Hauptsache mir bleibt genug Zeit für die Sonnenfinsternis …

Ich werde dann berichten

also das Update hat keinen Einfluss auf Sachen die direct am pi laufen und nichts mit node-red zu tun haben

hab auch ein sshfs Mount und raspiBackup und die laufen ganz normal weiter

Bei mir ist ja nur das App Update gemacht,
aber seit dem reagiert meine App ganz komisch. Bei den Schaltern kommt die Rückmeldung auf den richtigen Schalter, aber einschalten muss ich immer mit dem Schalter darunter.
Also Licht 1 schalte ich mit Schalter 2. Am Programm habe ich in dem
Bereich aber die letzten 4 Wochen nichts geändert.
Das schaue ich mir heute Abend mal an.

Geil!!!
Sitze Grade sonstwo, mache die App auf und gucke verwundert.
Sieht Klasse aus!
Und das die Entladerate des Akkus in Watt erscheint ist Mega. :heart_eyes:
Auch aktualisieren die Werte alle paar Sekunden.
Mega geil!
Geil geil geil :smiley:

1 Like

Ich habe das jetzt mal bei mir geprüft.
wenn ich den ersten Taster in der App drücke, schmeist mir das Debug ein zero raus

msg : Object
object
_msgid: "9e04e22e7ebbe577"
payload: true
relay: "zero"
relaystate: true
req: object
res: object

da in der SwitchNode kein Zero abgefragt wird passiert nix.
drücke ich den 2. Taster kommt ein one, beim 3 taster ein two, und so weiter, daher verschiebt sich der Schalter bei mir um einen nach unten. Die Rückmeldungen kommen aber auf dem richtigen Taster.
ich habe das dann wie folgt geändert.


jetzt bin ich wieder in der Reihenfolge. :roll_eyes:
Das liegt sicher an meiner 2.0.8er Version in Verbindung mit der neuen App.
Daher wäre es vieleicht gut, wenn die App keine Automatischen Updates macht,
und wenn man ein Update gemacht hat, und es nicht funktioniert, das man auf die letzte Version zurückspringen kann.(Optionen für die nächte App :wink:)
Ich bin mal gespannt ob noch andere mit niedrigen Versionen das Problem haben, hatten, oder ob das an meinem verbastelten System liegt. :sweat_smile:
@Tristan

und wo ist das ???


Direkt bei Batterie :smiley:
Der Entladestrom ist nämlich immer sehr hinderlich bei einem 48V System, wenn der Kopf Jahre lang auf ein 12v System geeicht ist.

1 Like

Ich fass hier mal schnell die neuen Funktionen der App zusammen, zum VanPi OS Update schreib ich dann seperat nochmal was.

Startup und Onboarding:

  • Die App probiert eine lokale Verbindung herzustellen während das Pekaway Logo noch sichtbar ist. Idr geht das so schnell, dass die App direkt in den Homescreen springt.
  • Checks für Remote Verbindungen (starten gleichzeitig mit dem Check für lokale Verbindung bei bestehendem Wifi) werden nach einem kurzen Timeout direkt ein zweites Mal getriggert, sollte irgendwer in der Datenkette mal nicht sofort antworten.
  • Wenn keine Verbindung aufgebaut werden kann, checkt die App ob noch GPS-Daten auf dem Server liegen (“Retained”), damit kann der letzte erfasste Standort abgerufen werden
  • Wenn das Handy eine neue Wifi-Verbindung herstellt wird im Hintergrund automatisch die lokale Verbindung geprüft und, falls erfolgreich, ggf. auf lokal gewechselt. Das passiert komplett im Hintergrund und solltet ihr im besten Fall gar nicht merken, außer an der Verbindungsbezeichnung oben rechts
  • Für lokale Verbindungen gibt es einen neuen Wifi-Scanner (in den Einstellungen). Es werden alle IPs auf dem angegebenen Port gescannt und dann die gefundenen Systeme angezeigt

UI/UX

  • Alle Seiten aktualisieren sich automatisch im Hintergrund. Dafür gibt es verschiedene Intervalle, die in den Einstellungen unter “Homescreen anpassen” konfiguriert werden können. Remote/Bridge Verbindungen haben ein höheres Mindestintervall als die lokale Verbindung. Außerdem gibt es ein Hard-Cap für Remote/Bridge Verbindungen, nach 10min App-Uptime (also auch wenn die App nicht im Vordergrund ist), wird das Auto-Refresh gestoppt
  • Timberline Heizung ist vollständig integriert, die Steuerungslogik wurde weitesgehend dem Original Display nachempfunden (VanPi OS 2.0.10)
  • Relays, W-Relays und Dimmer, die in VanPi OS als Namen einen einfachen Bindestrich “-” haben, werden in der App ausgeblendet
  • Relays, W-Relays und Dimmer können in den Einstellungen unter “Homescreen anpassen” an den Homescreen gepinnt werden (VanPi OS 2.0.10). Diese Konfiguration kann nur während einer lokalen Verbindung vorgenommen werden und neu gepinnte Relays werden mit der nächsten Aktualisierung angezeigt. Die Anzeige geht natürlich dann auch Remote, nur die Konfiguration an sich nicht.
  • Die Banner “Willkommen Zuhause” und “Willkommen Reisender” können verändert oder komplett ausgeblendet werden
  • Die Batterie Anzeige errechnet Watt aus Ampere*Spannung (direkt in der App)
  • Der App-Hintergrund ist komplett überarbeitet, hauptsächlich um Ressourcen zu schonen und das Ganze etwas cleaner zu machen

Push-Notifications

  • Unter Einstellungen bei Fernzugriff könnt ihr der App die Berechtigung für Push-Nachrichten auf diesem Gerät erteilen. Klickt dann einmal “Speichern und verbinden”, damit die App sich mit dem Backend-Server synchronisiert.
  • Die App alleine sendet keine Nachrichten, ihr müsst sie selber erstellen, dazu gibt es im Tab “Example functions” Vorlagen (VanPi OS 2.0.10). Mit Hilfe des Namens (in der App festlegen) könnt ihr Benachrichtigungen an einzelne Geräte schicken, sollten mehrere Geräte mit eurem Account hinterlegt sein
  • Es muss ein Account hinterlegt sein, wenn ihr aus NR heraus sendet wird zuerst überprüft, ob es diesen Account überhaupt in der Datenbank gibt.
  • Das Ganze ist erstmal noch als experimentell zu sehen, hat aber soweit gut funktioniert in den Tests. Wird sich zeigen wie stabil es läuft, wenn etwas Last auf den Push-Worker kommt

Ich denke das war so das Wichtigste, es hat sich noch einiges im Hintergrund an Kleinigkeiten und Stabilität getan, aber das sind soweit die neuen Funktionen.

Das neue Batterie Widget zeigt im Titel “Batterie” und dann den aktuellen SoC an, je nach Bildschirmbreite und DPI wird dann der Titel ausgeblendet. Vielleicht könnten die Leute, bei denen das nicht korrekt passiert, also sich Titel und SoC überlagern, mir einmal sagen bei welchem Gerät genau das passiert? Dann kann ich schauen, dass das Ausblenden bei kleineren Bildschirmen noch etwas strikter passiert

Wenn ihr Fragen habt immer her damit :smiling_face_with_sunglasses:

1 Like

@Vincent
Hast du dafür eine Erklärung??
Danke im voraus

Nicht so richtig. Kannst du mal Debugs direkt hinter den HTTP Endpunkt hängen, damit wir sehen was genau von der App kommt, und dann hinter die Funktion “check input and switch state”?

Im ersten sollte eine leerer String als payload kommen und der eigentliche Befehl steht in msg.req.params.input (und in msg.req.url).

Ich habs grad auf der v2.0.8 (lokale Verbindung) getestet. Die Funktion an sich wurde nochmal überarbeitet für das letzte Update, aber bei mir funktioniert es bei beiden Versionen mit Relay 1.

Hallo Vincent
ich habe den Bereich mal zugeflaster mit Debug


ich hoffe das ich die Meldungen alle aufgeklappt habe, ist viel Text :wink:

Das passiert beim öffnen der Schalter Seite in der APP

10.6.2026, 17:18:40node: get/relay/msg : Object
object
_msgid: "2f86b9f20a1b1daa"
payload: object
empty
req: object
_events: object
_readableState: object
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[6]
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay"
method: "GET"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: false
next: function
baseUrl: ""
originalUrl: "/relay"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay"
path: "/relay"
href: "/relay"
_raw: "/relay"
params: object
input: "all"
query: object
empty
res: "[internal]"
body: object
empty
_parsedOriginalUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay"
path: "/relay"
href: "/relay"
_raw: "/relay"
route: object
path: "/relay/"
stack: array[6]
methods: object
secret: undefined
cookies: object
empty
signedCookies: object
empty
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
host: "127.0.0.1:1880"
connection: "keep-alive"
res: object
_res: [internal]
append: function
attachment: function
cookie: function
clearCookie: function
download: function
end: function
format: function
get: function
json: function
jsonp: function
links: function
location: function
redirect: function
render: function
send: function
sendfile: function
sendFile: function
sendStatus: function
set: function
status: function
type: function
vary: function

10.6.2026, 17:18:40node: setze msg.req.params.inputmsg : Object
object
_msgid: "2f86b9f20a1b1daa"
payload: object
empty
req: object
_events: object
close: undefined
error: undefined
data: undefined
end: undefined
readable: undefined
_readableState: object
highWaterMark: 65536
buffer: array[0]
bufferIndex: 0
length: 0
pipes: array[0]
awaitDrainWriters: null
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[6]
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay"
method: "GET"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: false
next: function
baseUrl: ""
originalUrl: "/relay"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay"
path: "/relay"
href: "/relay"
_raw: "/relay"
params: object
input: "all"
query: object
empty
res: "[internal]"
body: object
empty
_parsedOriginalUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay"
path: "/relay"
href: "/relay"
_raw: "/relay"
route: object
path: "/relay/"
stack: array[6]
methods: object
secret: undefined
cookies: object
empty
signedCookies: object
empty
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
host: "127.0.0.1:1880"
connection: "keep-alive"
res: object
_res: [internal]
append: function
attachment: function
cookie: function
clearCookie: function
download: function
end: function
format: function
get: function
json: function
jsonp: function
links: function
location: function
redirect: function
render: function
send: function
sendfile: function
sendFile: function
sendStatus: function
set: function
status: function
type: function
vary: function



Das passiert beim Schalten

10.6.2026, 17:22:55node: relay/:input/:valuemsg : Object
object
_msgid: "42b6ef3071f58b28"
payload: "relay0"
req: object
_events: object
close: undefined
error: undefined
data: undefined
end: undefined
readable: undefined
aborted: undefined
_readableState: object
highWaterMark: 65536
buffer: array[0]
bufferIndex: 0
length: 0
pipes: array[0]
awaitDrainWriters: null
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[8]
0: "user-agent"
1: "got (https://github.com/sindresorhus/got)"
2: "Content-Length"
3: "6"
4: "Host"
5: "127.0.0.1:1880"
6: "Connection"
7: "keep-alive"
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay/0/true"
method: "PUT"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: false
next: function
baseUrl: ""
originalUrl: "/relay/0/true"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay/0/true"
path: "/relay/0/true"
href: "/relay/0/true"
_raw: "/relay/0/true"
params: object
input: "zero"
value: "true"
query: object
empty
res: "[internal]"
body: "relay0"
route: object
path: "/relay/:input/:value"
stack: array[9]
0: object
1: object
2: object
3: object
4: object
5: object
6: object
7: object
8: object
methods: object
put: true
secret: undefined
cookies: object
empty
signedCookies: object
empty
_body: true
_eventsCount: 0
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
content-length: "6"
host: "127.0.0.1:1880"
connection: "keep-alive"
res: object
_res: [internal]
append: function
attachment: function
cookie: function
clearCookie: function
download: function
end: function
format: function
get: function
json: function
jsonp: function
links: function
location: function
redirect: function
render: function
send: function
sendfile: function
sendFile: function
sendStatus: function
set: function
status: function
type: function
vary: function


10.6.2026, 17:22:55node: check input and switch state Ausgang 1msg : Object
object
_msgid: "42b6ef3071f58b28"
payload: true
relay: "zero"
relaystate: true
req: object
_events: object
close: undefined
error: undefined
data: undefined
end: undefined
readable: undefined
aborted: undefined
_readableState: object
highWaterMark: 65536
buffer: array[0]
bufferIndex: 0
length: 0
pipes: array[0]
awaitDrainWriters: null
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[8]
0: "user-agent"
1: "got (https://github.com/sindresorhus/got)"
2: "Content-Length"
3: "6"
4: "Host"
5: "127.0.0.1:1880"
6: "Connection"
7: "keep-alive"
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay/0/true"
method: "PUT"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: false
next: function
baseUrl: ""
originalUrl: "/relay/0/true"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay/0/true"
path: "/relay/0/true"
href: "/relay/0/true"
_raw: "/relay/0/true"
params: object
input: "zero"
value: "true"
query: object
empty
res: "[internal]"
body: "relay0"
route: object
path: "/relay/:input/:value"
stack: array[9]
0: object
handle: function
name: "cookieParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
1: object
handle: function
name: "httpMiddleware"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
2: object
handle: function
name: "corsHandler"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
3: object
handle: function
name: "metricsHandler"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
4: object
handle: function
name: "jsonParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
5: object
handle: function
name: "urlencodedParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
6: object
handle: function
name: "rawBodyParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
7: object
handle: function
name: "<anonymous>"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
8: object
handle: function
name: "<anonymous>"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
methods: object
put: true
secret: undefined
cookies: object
empty
signedCookies: object
empty
_body: true
_eventsCount: 0
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
content-length: "6"
host: "127.0.0.1:1880"
connection: "keep-alive"
res: object
_res: [internal]
append: function
attachment: function
cookie: function
clearCookie: function
download: function
end: function
format: function
get: function
json: function
jsonp: function
links: function
location: function
redirect: function
render: function
send: function
sendfile: function
sendFile: function
sendStatus: function
set: function
status: function
type: function
vary: function


10.6.2026, 17:22:55node: check input and switch state Ausgang 1msg : Object
{ _msgid: "42b6ef3071f58b28", payload: true, relay: "zero", relaystate: true, req: object … }
10.6.2026, 17:22:55node: check input and switch state Ausgang 2msg : Object
object
_msgid: "42b6ef3071f58b28"
payload: true
relay: "zero"
relaystate: true
req: object
_events: object
close: undefined
error: undefined
data: undefined
end: undefined
readable: undefined
aborted: undefined
_readableState: object
highWaterMark: 65536
buffer: array[0]
bufferIndex: 0
length: 0
pipes: array[0]
awaitDrainWriters: null
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[8]
0: "user-agent"
1: "got (https://github.com/sindresorhus/got)"
2: "Content-Length"
3: "6"
4: "Host"
5: "127.0.0.1:1880"
6: "Connection"
7: "keep-alive"
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay/0/true"
method: "PUT"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: false
next: function
baseUrl: ""
originalUrl: "/relay/0/true"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay/0/true"
path: "/relay/0/true"
href: "/relay/0/true"
_raw: "/relay/0/true"
params: object
input: "zero"
value: "true"
query: object
empty
res: "[internal]"
body: "relay0"
route: object
path: "/relay/:input/:value"
stack: array[9]
0: object
handle: function
name: "cookieParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
1: object
handle: function
name: "httpMiddleware"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
2: object
handle: function
name: "corsHandler"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
3: object
handle: function
name: "metricsHandler"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
4: object
handle: function
name: "jsonParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
5: object
handle: function
name: "urlencodedParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
6: object
handle: function
name: "rawBodyParser"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
7: object
handle: function
name: "<anonymous>"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
8: object
handle: function
name: "<anonymous>"
params: undefined
path: undefined
keys: array[0]
regexp: /^\/?$/i
method: "put"
methods: object
put: true
secret: undefined
cookies: object
empty
signedCookies: object
empty
_body: true
_eventsCount: 0
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
content-length: "6"
host: "127.0.0.1:1880"
connection: "keep-alive"
res: object
_res: [internal]
append: function
attachment: function
cookie: function
clearCookie: function
download: function
end: function
format: function
get: function
json: function
jsonp: function
links: function
location: function
redirect: function
render: function
send: function
sendfile: function
sendFile: function
sendStatus: function
set: function
status: function
type: function
vary: function


10.6.2026, 17:22:55node: check input and switch state Ausgang 2msg : Object
{ _msgid: "42b6ef3071f58b28", payload: true, relay: "zero", relaystate: true, req: object … }
10.6.2026, 17:22:55node: set answermsg : Object
object
_msgid: "42b6ef3071f58b28"
payload: object
relay: "zero"
state: true
autooff: undefined
relay: "zero"
relaystate: true
req: object
_events: object
close: undefined
error: undefined
data: undefined
end: undefined
readable: undefined
aborted: undefined
_readableState: object
highWaterMark: 65536
buffer: array[0]
bufferIndex: 0
length: 0
pipes: array[0]
awaitDrainWriters: null
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[8]
0: "user-agent"
1: "got (https://github.com/sindresorhus/got)"
2: "Content-Length"
3: "6"
4: "Host"
5: "127.0.0.1:1880"
6: "Connection"
7: "keep-alive"
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay/0/true"
method: "PUT"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: true
next: function
baseUrl: ""
originalUrl: "/relay/0/true"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay/0/true"
path: "/relay/0/true"
href: "/relay/0/true"
_raw: "/relay/0/true"
params: object
input: "zero"
value: "true"
query: object
empty
res: "[internal]"
body: "relay0"
route: object
path: "/relay/:input/:value"
stack: array[9]
methods: object
secret: undefined
cookies: object
empty
signedCookies: object
empty
_body: true
_eventsCount: 0
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
content-length: "6"
host: "127.0.0.1:1880"
connection: "keep-alive"
res: object
_res: [internal]
append: function
attachment: function
cookie: function
clearCookie: function
download: function
end: function
format: function
get: function
json: function
jsonp: function
links: function
location: function
redirect: function
render: function
send: function
sendfile: function
sendFile: function
sendStatus: function
set: function
status: function
type: function
vary: function
10.6.2026, 17:22:55node: debug 767msg : Object
{ _msgid: "42b6ef3071f58b28", payload: "on", relay: "zero", relaystate: true, req: object … }

Zeig mal bitte nur Debug 763. Und in der Function davor, steht da ab Zeile 20:

    for (let i = 1; i <= 8; i++) {
        const key = number2words(i); // e.g., "one"
        msg.payload[`Relay${i}`] = {
            "state": global.get(key),
            "name": global.get("N" + key),
            "autooff": global.get(`${key}offauto`) ?? 0,
            "offtime": global.get(`offtime${i}`)
        };
    }

Liegt dann daoch an meinem verbastelten System :wink:

function number2words(n){
    if (n < 20) return num[n];
    var digit = n%10;
    return number2words(~~(n/1000)) + " thousand" + (n%1000 != 0? " " + number2words(n%1000): "");
}

var globalVar = msg.req.params.input

if (isNaN(parseInt(msg.req.params.input)) == false){
    var num = "zero one two three four five six seven eight nine ten eleven twelve thirteen forteen fivteen sexteen".split(" ");
    msg.req.params.input = parseInt(msg.req.params.input)
    msg.req.params.input = number2words(msg.req.params.input)
    globalVar = msg.req.params.input
}

if (msg.req.params.input=="all") {
    msg.payload = {
            "Relay0": {
            "state":global.get("bdimmone"),            
            "name":global.get("Ndimmer0"),
            
        },
        "Relay1": {
            "state":global.get("bdimmthree"),            
            "name":global.get("Ndimmer2"),
            
        },
        "Relay2": {
            "state":global.get("bdimmfive"),            
            "name":global.get("Ndimmer4"),
            
        },
        "Relay3": {
           "state":global.get("bdimmseven"),            
            "name":global.get("Ndimmer6"),
            
        },
            "Relay4": {
            "state":global.get("one"),            
            "name":global.get("None"),
            
        },
        "Relay5": {
            "state":global.get("five"),            
            "name":global.get("Nfive"),
            
        },
        "Relay6": {
            "state":global.get("six"),            
            "name":global.get("Nsix"),
            
        },
        "Relay7": {
            "state":global.get("seven"),            
            "name":global.get("Nseven"),
            
        },
        "Relay8": {
            "state":global.get("230_AUTO"),            
            "name":"Wechselrichter Auto",
            
        },
        "Relay9": {
            "state":global.get("Booster_AUTO"),            
            "name":"Booster_AUTO",
            
        },
        "Relay10": {
            "state":false,            
            "name":"GPS_Aus",
            
        },
        "Relay11": {
            "state":global.get("three"),            
            "name":global.get("Nthree"),
            
        },
        "Relay12": {
             "state":global.get("four"),            
            "name":global.get("Nfour"),            
        },
        "Relay13": {
            "state": global.get("bdimmfour"),            
            "name":global.get("Ndimmer3"),

         },
         "Relay14": {
             "state":global.get("BoosterS1_AUTO"),            
            "name":"BoosterS1_AUTO",               
        },

        "Relay15": {
             "state":global.get("two"),            
            "name":global.get("Ntwo"),               
        }
    };
}
else if (global.get(msg.req.params.input)!==undefined) {
    var n = "N"+msg.req.params.input
    var autooff = global.get(msg.req.params.input+"offauto")
    msg.payload = {
        "relay":msg.req.params.input,
        "state":global.get(msg.req.params.input),
        "name":global.get(n),
        //"autooff": autooff
    };
}
else {
    msg.payload = "relay " + msg.req.params.input + " does not exist"
}
    
return msg;
10.6.2026, 17:54:39node: get/relay/msg : Object
{ _msgid: "d3f6d0323002ea56", payload: object, req: object, res: object }
10.6.2026, 17:54:39node: setze msg.req.params.inputmsg : Object
{ _msgid: "d3f6d0323002ea56", payload: object, req: object, res: object }
10.6.2026, 17:54:39node: debug 763msg : Object
object
_msgid: "d3f6d0323002ea56"
payload: object
Relay0: object
Relay1: object
Relay2: object
Relay3: object
Relay4: object
Relay5: object
Relay6: object
Relay7: object
Relay8: object
Relay9: object
Relay10: object
Relay11: object
Relay12: object
Relay13: object
Relay14: object
Relay15: object
req: object
_events: object
close: undefined
error: undefined
data: undefined
end: function
readable: undefined
_readableState: object
highWaterMark: 65536
buffer: array[0]
bufferIndex: 0
length: 0
pipes: array[0]
awaitDrainWriters: null
_maxListeners: undefined
socket: "[internal]"
httpVersionMajor: 1
httpVersionMinor: 1
httpVersion: "1.1"
complete: true
rawHeaders: array[6]
0: "user-agent"
1: "got (https://github.com/sindresorhus/got)"
2: "Host"
3: "127.0.0.1:1880"
4: "Connection"
5: "keep-alive"
rawTrailers: array[0]
joinDuplicateHeaders: null
aborted: false
upgrade: false
url: "/relay"
method: "GET"
statusCode: null
statusMessage: null
client: "[internal]"
_consuming: false
_dumped: true
next: function
baseUrl: ""
originalUrl: "/relay"
_parsedUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay"
path: "/relay"
href: "/relay"
_raw: "/relay"
params: object
input: "all"
query: object
empty
res: "[internal]"
body: object
empty
_parsedOriginalUrl: object
protocol: null
slashes: null
auth: null
host: null
port: null
hostname: null
hash: null
search: null
query: null
pathname: "/relay"
path: "/relay"
href: "/relay"
_raw: "/relay"
route: object
path: "/relay/"
stack: array[6]
methods: object
secret: undefined
cookies: object
empty
signedCookies: object
empty
headers: object
user-agent: "got (https://github.com/sindresorhus/got)"
host: "127.0.0.1:1880"
connection: "keep-alive"
_eventsCount: 1
res: object

Jup, da ist dein Relay 0 :smiley: Die App nutzt die IDs und sendet sie auch so wieder zurück beim Schalten

Du könntest da aber einfach die Zahlen jeweils +1 erhöhen, wenn du willst dass dein aktuelles Relay0 ganz oben angezeigt wird. Sollte klappen

Nee ich habe das ja jetzt in der Switch Node geändert.
Aber es hat ja vorher funktioniert, ich habe ja eigentlich nur den vorhandenen Script nach unten erweitert. weil als ich das gemacht habe gab es deine Beispielseite noch nicht.
Das Relay0 muss da vorher auch drinne gestanden haben.
Ich habe ja nur da anstatt die Relays die Dimmer eingetragen,

if (msg.req.params.input=="all") {
    msg.payload = {
            "Relay0": {
            "state":global.get("bdimmone"),            
            "name":global.get("Ndimmer0"),
            
        },
        "Relay1": {
            "state":global.get("bdimmthree"),            
            "name":global.get("Ndimmer2"),

Und im gleichen Stiel nach unten erweitert. ???

Egal funktioniert ja wieder :wink:
Trotzdem Danke :+1:

1 Like