@armilar
Dein Tipp zum Einstiegspunkt war genau richtig ...
@Alle
Wie in der ioBroker Basisinstallation beschrieben, hatte ich auf dem MQTT-Server mit dem MQTT-Explorer den CMND-Topic über PUBLISH (json) angelegt:
myHOME/devices/nspanel_xyz/cmnd/CustomSend
Im ioBroker taucht der Eintrag dann auch im MQTT-Client auf ... und jetzt ganz wichtig: mit dem Wert (null) - und genau DAS war mein Fehler: ich hatte übersehen, dass mit dem Topic auch '12:00' als Wert mit zu übergeben ist, damit der Topic eben NICHT (null) ist!!!
Achtung: wenn man den MQTT-Client einsetzt, wird der Wert '12:00' NICHT im ioBroker gesetzt - dh. der MQTT-Pfad wird erzeugt, aber der Wert steht auf (null) und nicht auf '12:00'. Es muss zuerst für 'CustomSend' die Publish-Funktion aktiviert werden (Zahnrad rechte Seite) - erst jetzt kann man nochmal den Wert mit dem MQTT-Explorer publischen oder den Wert '12:00' direkt im ioBroker unter 'CustomSend' eingeben.
Anmerkung: ich habe im MQTT-Client für alle Topics des NSPanels das Publish-Flag gesetzt.
Erläuterung: ... für die Experten, warum dieser kleine Fehler dazu geführt hat, dass das NSPanel nicht angelaufen ist ...
Alle MQTT-Ausgaben im Script laufen über die Funktion 'setIfExists'. In dieser Funktion wird mit der JS-Funktion 'existsState' überprüft, ob die Objekt-Instanz vorhanden ist. Im vorliegenden Fall zeigt die Instanz bei mir auf:
mqtt-client.0.myHOME.devices.nspanel_xyz.cmnd.CustomSend
Beim Starten des Skripts war der MQTT-Pfad im Objektbaum zwar vorhanden, jedoch sorgte '(null)' dafür, dass die JS-Funktion 'existsState' in der Script-Funktion 'setIfExists' immer 'false' zurück gibt ... Ergebnis: es fand keine MQTT-Ausgabe zum NSPanel statt. Sobald im MQTT-Client Topic etwas eingetragen wurde, läuft die Verbindung zum NSPanel sofort an.
@armilar
Beim Debuggen sind mir noch zwei Dinge aufgefallen, die Du bitte noch korrigieren kannst:
1.) Fehler Zeile 1074 - a enthält 'mqtt' oder 'mqtt-client'
Original: if (a === 'mqtt' && !isNaN(Number(i))) {
Neu: if (a.substring(0, 4) === 'mqtt' && !isNaN(Number(i))) {
2.) Fehlende Debug-Ausgabe in Funktion 'SendToPanel' hinzugefügt - ab Zeile 3520
async function SendToPanel(val: NSPanel.Payload | NSPanel.Payload[]) {
try {
if (Array.isArray(val)) {
val.forEach(function (id) {
setIfExists(config.panelSendTopic, id.payload);
if (Debug) {
log('function SendToPanel id-payload: ' + id.payload, 'info');
}
});
} else {
setIfExists(config.panelSendTopic, val.payload);
if (Debug) {
log('function SendToPanel val-payload: ' + val.payload, 'info');
}
}
} catch (err: any) {
log('error at function SendToPanel: ' + err.message, 'warn');
}
}
Danke für die Unterstützung - ich hoffe der Beitrag hilft den Leuten, die nur einen MQTT-Client einsetzen