NEWS
Fragen zu createState.
-
@paul53 sagte in Fragen zu createState.:
setTimeout
setObject akzeptiert einen Callback:
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#setobject
Damit müsste man sofort nach dem Erstellen den Wert schreiben können, ohne künstlich länger zu warten. -
Danke für die Hilfe aber ich gebe auf ... habe nicht so wirklich den Plan von dem was ich da mache und die Punkte werden einfach nicht angelegt. Werde dann außerhalb von ioBroker die API nutzen und in meine Oberfläche einbauen.
Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:
function createOrUpdateDP(object_path,obj_id,common){ const path = object_path; const id = path + '.' + obj_id; var obj; obj['type'] = 'state'; obj['common'] = common; if(!existsState(id)) { setObject(id, obj, function (err) { if (err) log('Cannot write object: ' + err) else { var init = null; if(common.def === undefined) { if(common.type === 'number') init = 0; if(common.type === 'boolean') init = false; if(common.type === 'string') init = ''; } else init = common.def; setState(id, init); } }); }else{ setState(id, common.def); } } createOrUpdateDP('eufy-security.0.device'+device_count,'cam_id', {read: true, write: true, role: "state", desc: "", type: "string", def: device.device_id });
-
@ChristianG sagte in Fragen zu createState.:
die Punkte werden einfach nicht angelegt
Bist du 100% sicher, dass die Funktion überhaupt ausgeführt wird? Hast du in den Adaptereinstellungen
setObject
erlaubt? -
-
@ChristianG sagte:
Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:
Ich würde Zeile 4 - so wie im verlinkten Beispiel - ändern in:
var obj = {};
-
@paul53 geht nicht, dann gibt es einen Fehler.
-
@ChristianG Warum ist dein Skript auf TypeScript eingestellt?
-
-
@ChristianG natürlich kannst du das.
-
@AlCalzone Okay, war rot hinterlegt aber ausführen geht Danke!!! Dann lag es nur an der kleinen Sache
-
@AlCalzonem habe die Daten nun im ioBroker
Danke!
Wie kann ich das Skript nun noch automatisch stoppen, nachdem es fertig ist?
Also damit es nicht mehr als aktiviert zählt?
-
@ChristianG Üblicherweise stoppt man Skripte nicht. Oder ging es hier nur drum, die Daten einmalig einzulesen?
-
@AlCalzone Habs verstanden. Ich habe das Skript nun aktiv und wenn ich die Daten haben möchte führe ich das Skript mit Blockly aus.
-
@ChristianG Ich glaube ich verstehe den Anwendungsfall nicht. Wenn es wirklich nur um Einlesen-on-demand geht, kannst du es einfach im Skript-Editor manuell starten und stoppen.
Wenn es irgendwie automatisiert werden soll:
Auf einen Datenpunkt triggern und diesen bei Bedarf beschreiben. -
Das geht doch auch:
Kann ruhig beim Neustart ausführen oder alle 5 min wenn das Script triggered wurde.
-
@ChristianG Wie du meinst... Die Lösung mit
scriptEnabled
ist nicht offiziell unterstützt und hat (wie man im Forum nachlesen kann) schon häufig zu Problemen geführt. Verwendung also auf eigene Gefahr - ich werde weiterhin davon abraten.Sauberer wäre ein Trigger-Datenpunkt (keine Ahnung warum du dich so dagegen sträubst, so brauchst du ein weiteres Skript) oder den Timer direkt ins betreffende Skript einbauen.
-
@AlCalzone Ja dann baue ich das direkt mit ins Skript ein, macht ja Sinn.
-
@ChristianG sagte:
dann baue ich das direkt mit ins Skript ein
Verwende besser einen Zeitplan-Trigger für die zyklische Abfrage.
-
@paul53 naja ich will jede 5 Minuten die neue Daten abrufen. Also mit nem Cronjob oder wie?
-