NEWS
syntax von createState für "custom"
-
Wie ist der richtige syntax um per JS in einem Script den "custom" eintrag zu meinen Objektdaten zu erzeugen? siehe Code:
"common": { "name": "Regenmenge Juli", "def": 0, "type": "number", "unit": "mm", "role": "value", "read": true, "write": true, "custom": { "influxdb.1": { "enabled": true, "storageType": "", "aliasId": "Regenwert.2025.Juli", "debounceTime": 0, "blockTime": 0, "changesOnly": false, "changesRelogInterval": 0, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "enableDebugLogs": false, "debounce": 1000 } } }Den common habe ich schon per JS und einem script von hier erzeugen lassen, die
Custom muss ich immer per Hand aktivieren (influxdb)createState('0_userdata.0.' + id, val, {name: Name, def: val, type: 'number', unit: 'mm', role: 'value', read: true, write: true}); -
-
@paul53
vielen dank!
-
@paul53
da ich über 100 Datenpunkte unterhalb von 0_userdata anlegen will soll das per JS erfolgen.Die entsprechenden createState Kommandos erzeuge ich automatisch per Shellskript, welches sich die notwendigen Informationen aus einer (exportierten) Exceltabelle holt, das seht das z. B. so aus:
// -------------------------------------------------------------------- // Erstellung von Datenpunkten unterhalb von 0_userdata // -------------------------------------------------------------------- function createDatapointUserdata(id,bezeichnung,typ,rolle,einheit,wert) { if(!id.includes('0_userdata.0.')) id = '0_userdata.0.' + id; log("id = " + id + " typ=" + typ + " rolle=" + rolle + " einheit= " + einheit + " value=" + wert) ; createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit} ); }; createDatapointUserdata('Energiezaehler.Strom_Bezug','Stromzaehler-Bezug','number','value.power','kWh','5655,05'); createDatapointUserdata('Energiezaehler.Strom_Einspeisung','Stromzaehler-Einspeisung','number','value.power','kWh','13230,27'); createDatapointUserdata('Energiezaehler.Gas_Bezug','Gaszaehler-Bezug','number','value.power','m3','1808,736');Was mir noch fehlt ist im Prinzip die Anforderung wie sie bigmike71 hatte, allerdings müsste ich für jeden Datenpunkt ein eigenes custom-Objekt erstellen (da ich die Daten in unterschiedlichen Intervallen protokollieren möchte will ich dass über mehrere SQL-Instanzen lösen, z. B. sql.0 soll alle 60 Sekunden, sql.1 z. B. alle 15 Minuten protokollieren. Die Zuordnung pflege ich in einer Exceltabelle als Basis für ein Shellskript, was mir die JS-Kommandos erstellt. Daher suche ich eine Lösung, wie ich den für einen Datenpunkt korrekte SQL-Instanz direkt im Aufruf von createstate einbauen kann.
Der markierte Bereich ist ja für common-Objekte:
createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit} );
wie bekomme ich in die Zeile noch die custom-Objekte rein?
Hast Du dafür auch eine Lösung?
Gruß
FritzPS: das von Dir entwickelte JS zum erstellen der Aliase ist bei mir im Einsatz und hat sich prima bewährt

-
@fritz-0 sagte: wie bekomme ich in die Zeile noch die custom-Objekte rein?
Versuche es mal so:
const sqlObj = { "enabled": true, "storageType": "", "counter": false, "aliasId": "", "debounceTime": 0, "blockTime": 59999, "changesOnly": true, "changesRelogInterval": 60, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "retention": 31536000, "customRetentionDuration": 365, "maxLength": 100, "enableDebugLogs": false, "debounce": 1000 }; function createDatapointUserdata(id,bezeichnung,typ,rolle,einheit,wert, sqlinstanz) { if(!id.includes('0_userdata.0.')) id = '0_userdata.0.' + id; const custom = { [sqlinstanz]: sqlObj }; log("id = " + id + " typ=" + typ + " rolle=" + rolle + " einheit= " + einheit + " value=" + wert) ; createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit, custom: custom}); };Ob das gezeigte Objekt sqlObj zum SQL-Adapter passt, weiß ich nicht. Deshalb bitte anpassen.
EDIT: Wie oft aufgezeichnet wird, kann man beim SQL-Adapter in der Instanz-Konfiguration einstellen?
Die Voreinstellungen werden durch das Custom-Objekt im Datenpunkt ersetzt. -
ich glaube damit kann ich was anfangen, ich werde das mal ausprobieren.
Schon mal vielen Dank dafür

Gruß
Fritz -
@fritz-0 sagte: sql.0 soll alle 60 Sekunden, sql.1 z. B. alle 15 Minuten protokollieren.
Da ich mir nicht vorstellen kann, dass man das Protokoll-Intervall in der Instanz vorgeben kann, würde ich es so versuchen (nur die Funktion dargestellt):
function createDatapointUserdata(id,bezeichnung,typ,rolle,einheit,wert, intervall) { if(!id.includes('0_userdata.0.')) id = '0_userdata.0.' + id; sqlObj.blockTime = 59999 * intervall; sqlObj.changesRelogInterval = 60 * intervall; log("id = " + id + " typ=" + typ + " rolle=" + rolle + " einheit= " + einheit + " value=" + wert) ; createState(id,wert,{name: bezeichnung, type: typ, role: rolle, read: true, write: true, unit: einheit, custom: {'sql.0': sqlObj}}); };intervall enthält Minuten.
-
@paul53
bisher ging ich davon aus, dass ich in der jeweiligen Instanz diese Werte anpasse:
Wobei ich mich schon gefragt habe, ob der Wert einer Stunde als ms nicht zu hoch wird und ob das überhaupt noch sauber funktioniert.
Dein Weg scheint mir sehr vielversprechend, werde ich auf jeden Fall auch ausprobieren.
Kennst Du einen Weg, z. B. über createstate o. ä., Räume zu erstellen? Das wäre so das i-Tüpfelchen der Automatisierung ...
-
@fritz-0 sagte: dass ich in der jeweiligen Instanz diese Werte anpasse:
Diese Werte werden nur bei manueller Erstellung zum Datenpunkt vorgeschlagen und durch die tatsächlichen Werte ersetzt. Für die Erstellung des Custom-Objektes per Skript haben sie keine Bedeutung.
-
@fritz-0 sagte: Kennst Du einen Weg, z. B. über createstate o. ä., Räume zu erstellen?
Nein, nicht per createState().
Man kann Datenpunkte zu bestehenden Räumen hinzufügen. Siehe hier -
@paul53
das war ein wichtiger Hinweis, hatte ich zwar anders gehofft, aber das ist dann eben so.Das setzen der Werte im custom-Bereich hat wunderbar funktioniert, ich konnte auch eine zweite Definition für die History-Instanz mit einsetzen.
Genau das habe ich gesucht, vielen Dank, Dein Hinweis hat mir viel Zeit gespart....
Gruß
Fritz