NEWS
Datenpunkt erzeugen
-
@ahnungsbefreit sagte in Datenpunkt erzeugen:
@dom-sch Ja:
Hallo, danke für deinen Post. Hat mir geholfen. Ich habe noch eine Frage zu dem Common Feld. Was kann man da einschreiben?
Gibt es im Blockly eine Möglichkeit vor dem erstellen abzufragen ob der Datenpunkt schon vorhanden ist? -
@kilian-z said in Datenpunkt erzeugen:
Ich habe noch eine Frage zu dem Common Feld. Was kann man da einschreiben?
Siehe oben, Paul's Post:
-
@ahnungsbefreit sry ich meine unter Common. Soll das bedeuten daß die Funktionen die darin stehen erst ausgeführt werden nachdem der Datenpunkt erstellt wurde?
-
@kilian-z Das sind keine Funktionen, sondern Eigenschaften des Datenpunkts wie z.B. der Typ (number/boolean/string/...) oder für number die Einheit (%/°C/...). Damit kannst Du beim Anlegen das Verhalten des DPs definieren
-
@kilian-z said in Datenpunkt erzeugen:
Gibt es im Blockly eine Möglichkeit vor dem erstellen abzufragen ob der Datenpunkt schon vorhanden ist?
Das ist nicht nötig. Wenn der DP schon existiert, passiert einfach nix. Wenn Du aber die Info trotzdem brauchst, ob der DP existiert, könnte man das über eine Javascript Funktion realisieren.
-
@ahnungsbefreit
Vielen Dank. Hat alles funktioniert. -
@kilian-z Der Vollständigkeit halber: Mit diesem Einzeiler kann man die Überprüfung machen, ob ein DP existiert:
return existsObject(id);
-
Kann man die Objekt ID auch mit einer Variablen angeben?
So wie ich das im Blockly sehe ist die per Hand fest zu vergeben.Ich möchte zB. einen DP anlegen für den jeweils aktuellen Monat.
Dazu sollte der DP dann idealerweise auch den Monatsnamen bekommen.
Beispiel:
0_userdata.0."aktuelles Jahr"."Monat" -
@bavarian sagte: Kann man die Objekt ID auch mit einer Variablen angeben?
Wobei?
-
@paul53
Bei dem oben gezeigten Blockly Datenpunktbaustein.
-
@bavarian sagte: Bei dem oben gezeigten Blockly Datenpunktbaustein.
Nein, man benötigt eine Javascript-Funktion.
-
Hallo, hänge mich hier mal dran. Möchte auch einen Datenpunkt unter "mqtt" erzeugen. Das Blockly funktioniert zwar, aber der Datenpunkt wird unter "javascript.0...." erzeugt und nicht unter "mqtt.0....."
Geht das nicht? -
@atifan Eigene Datenpunkte können und sollen nur unter JavaScript und unter userdata angelegt werden.
-
@ahnungsbefreit Hi ja ich weiß, mache ich normal auch so. Aber in dem Fall MUSS der DB unter mqtt damit das NSPanel funktioniert.
Da ich den mqtt-Objektbaum aber öfter mal manuell lösche, möchte ich dass ein Script mir dann automatisch den DB wieder erstellt, damit das NSPanel wieder funktioniert. -
@atifan sagte: Datenpunkt wird unter "javascript.0...." erzeugt und nicht unter "mqtt.0....."
Das geht unter "mqtt.0" nur mit setObject().
-
@paul53 Hi Danke! Gibts dafür auch ein Blockly-Funktion? Oder geht das dann nur über JavaScript?
-
@atifan sagte: Gibts dafür auch ein Blockly-Funktion?
Nein, absichtlich nicht, denn damit kann man einiges kaputt machen.
Man muss ein komplexes Objekt übergeben, wofür Blockly auch keine Funktion bereit stellt.EDIT: Man kann sich mit einer Javascript-Funktion behelfen:
Inhalt der Funktion createNSPaneCmd(Typ, Name, Rolle, Default):
const obj = { type: 'state', native: {}, common: { type: Typ, name: Name, role: Rolle } }; if(Default != undefined) obj.common.def = Default; const path = 'mqtt.0.NsPanel.cmd.'; if(!existsObject(path + Name)) setObject(path + Name, obj);
-
@paul53 Danke habe es hinbekommen, musste zwar bisschen rumprobieren aber irgendwann ging es
Außerdem muss man im Javascript Adapter das Häkchen setzen, dass die Funktion setObject ausgeführt werden darf.const obj = { type: 'state', native: {}, common: { type: 'string', name: 'CustomSend', role: 'state', } }; if(!existsObject('mqtt.0.NsPanel.cmnd.CustomSend')) setObject('mqtt.0.NsPanel.cmnd.CustomSend', obj);
-
@atifan
Es gibt nur einen Datenpunkt, der per Blockly erzeugt werden muss? -
@paul53 Ja, ich brauche nur den einen Datenpunkt mit dem Namen "CustomSend".
Normalerweise muss man diesen Datenpunkt unter MQTT manuell anlegen, damit das NSPanel funktioniert.Das Problem ist aber, dass ich öfter mal den ganzen Objektbaum unter MQTT lösche, weil dort Geräte mit Hyroglyphen im Namen auftauchen, vermutlich wegen Verbindungsproblemen oder so. Dann wäre der Datenpunkt "CustomSend" auch jedes Mal weg und ich müsste immer daran denken diesen wieder manuell anzulegen, weil ohne den funktioniert das NSPanel nicht.
Deswegen wollte ich das ganze über ein Script lösen.So wie ich es jetzt gemacht hab funktioniert es jedenfalls wie es soll, habs getestet