@sesamstrasse sagte: Namen eins Kanals von einem Datenpunkt per JavaScript zu ermitteln.
function parentName(id) { // Datenpunkt-ID
id = id.substring(0, id.lastIndexOf('.'));
if(existsObject(id)) return getObject(id).common.name;
}
@oliverio @AlCalzone
OK Danke.
Dann scheint das debuggen eines Adapters über VBCode tatsächlicher einfacher zu sein als das einzelne Script im Java Adapter.
Ist irgendwie auch logisch.
Also der einzige Weg das über VSCode zu machen:
(Scripte werden wohl in /opt/iobroker/iobroker-data/objects.json gespeichert, also die direkt zu editieren geht wohl nicht.)
IOBroker: iobroker stop javascript
node --inspect-brk=0.0.0.0:9229 node_modules/iobroker.javascript/main.js --force –logs
VSCode: Scripte herunterladen mit z.B. der Extension IOBroker.javascript
VSCode: Script bearbeiten
VSCode: Script wieder hochladen
VSCode: launch.json starten
Habe mir zwei Fenster in VBCode geöffnet.
Im ersten ioBroker Extension geöffnet und hier editiere ich dann die Java Datei aus dem IOBroker
Sobald diese geändert wurden ist (Einstellungen -Auto Save auf after delay oder einfach nur speichern) erscheint sie unter Changed Scripts und kann dann wieder hochgeladen werden.
In der zweiten Sitzung den Debugger geöffnet und auf Weiter gedrückt. Änderungen sind da und man kann jede einzelne Variable debuggen.
Damit kann ich dann eventuell doch alles mit VBCode machen.
[image: 1645197944215-vscode_debuggen.png]
@flehmann1234 sagte: diese neu anlegen lassen.
Dann kann man die Tatsache verwenden, dass "Ordner" die "device-id" enthält.
createState("0_userdata.0."+ Ordner +".ALARM", 0, {name: Ordner.split('.')[3] + " ALARM", unit: "", read: true, write: true, desc: "ALARM", type: "number", role: 'indicator.alarm'});
Danke euch beiden,
das war der Schlüssel, und natürlich ein klassischer Namensfehler( ich werde heute noch Asche auf mein haupt tun).
Klar kommt da sum(val) hin!!!!
Also wieder was gelernt und nicht nur Sport gekuckt.
Dann kann ich ja jetzt meine Solartabellen über die Monate und Jahre aufbauen.
Gruß Reinald
@paul53 sagte in Anfänger: const vs var; übergreifend möglich [solved]:
@ticaki sagte: dass die Deklaration nicht beim ersten Aufruf erfolgen muß:
Das gilt nur für var, nicht aber für const/let.
Und wieder was gelernt.
So, nach etwas längerem Rumprobieren habe ich jetzt eine Lösung gefunden, die bisher zu funktionieren scheint. So ganz gefällt mir das nicht, dass ich auf die child_proc.pid immer 1 draufaddieren muss, aber besser bekomme ich es jetzt erstmal nicht hin:
// Python-Skript auf Systemebene ausführen
const child_proc = exec("python3 Skriptpfad.py", function(err, stdout, stderr) {
if(err) log('Exec-Fehler: '+ stderr, 'error');
});
var child_pid = child_proc.pid + 1; // die PID des Python Skripts ist eine größer als die Shell
console.log(`Die PID ist ${child_pid}`); // PID in Konsole ausgeben
// Wenn das js-Skript beendet wird, soll das Python-Skript ebenfalls beendet werden (entspricht Strg+C)
onStop(() => {
exec(`kill -2 ${child_pid}`); // Child Prozess beenden mit Signal -2 (entspricht SIGINT)
console.log("Skript beendet!");
});
Vielen Dank allen Helfern!
@marc-berg Hi Marc
Thank you for quick response. it works
this is my code thank you for helping: (two different formats for testing)
// ---
sensor.neulcT = (new Date(msg.payload[i].lc)).toLocaleTimeString();
sensor.neulc = (new Date(msg.payload[i].lc)).toLocaleString();
@homoran ich habe ja nicht gesagt, dass der Ausdruck Sinn macht (macht er ja auch nicht wenn ich einmal sage "Tage 1-7" und dann noch sage "jeden Donnerstag"
@jarek
Hi,
Ja läuft schon bei mir.
Habs irgendwie nicht hinbekommen mich am Ochsner Terminal anzumelden mit selbst geschriebenen Script.
Jetzt läuft halt auf dem ioBroker Rechner zusätzlich a nginx Server wo besagtes Script aufgerufen wird.
Den eigentlich aufruf mache ich dann per ioBroker JS Script zum abrufen aller Daten.
Ein 2. kleines Blockly hab ich auch probiert, zum Aussentemperatur lesen und auf den KNX Bus schreiben.
Läuft eigentlich sehr stabil...
Maxx