NEWS
Automatisierung / batch-Veränderung von Objekten?
-
Hallo,
ich habe eine ioBroker Installation auf einem Raspi 4b und ein gutes Dutzend Sonoff-basierte Steckdosen, die dem ioBroker mit Tasmota bestückt Spannung und Energieverbrauch usw. mitteilen. Das ganze wird in einer Influx DB gespeichert.
Jetzt möchte ich bei allen "sonoff.0.OBJEKTNAME.Wifi_Signal" - wobei OBJEKTNAME variabel ist, eine Liste von 16 Tasmotas - das Speichern in der InfluxDB abschalten, der aktuelle Wert reicht mir.
Ich könnte mich natürlich durch die Web-UI klicken, aber lässt sich das nicht auch auf der Kommandozeile automatisieren, als Skript oder sogar innerhalb von iobroker? Ich kann mir zwar mit
iobroker list sonoff.0.* | grep Wifi_Signal
alle diese Objekte anzeigen lassen und könnte mitfor X in $(...) ; do ... ; done
weiter machen, aber wie modifiziere ich den influxdb-Status der einzelnen Objekte von der Kommandozeile aus?Danke für alle Hinweise
-
@jens77 Zwar nicht im Batch, aber per CLI geht:
$ iob object set iobroker object set <id> propertyname=<value or json-value> Update part of the object by providing a new value or partial object
Z.B. kannst du damit auch Teile eines Objektes bearbeiten, z.B.
common.name
:iob object set "my.0.id" common.name="Neuer Name"
Escapen ist ab und an ein bisschen tricky, gerade wenn du JSON reincshreiben willst.
-
@alcalzone Danke für den Anstoß, das war ja eine schnelle Antwort
Batchverarbeitung in iobroker ist nicht notwendig - das dann in einen for-loop mit
bash
einzubauen kriege ich auch selber hin. Ich bin jetzt einen Schritt weiter, aber stehe vor dem nächsten Problem: Wie du schon gesagt hast, funktioniert das escaping nicht richtig.~/tmp $ iob object get sonoff.0.Backofen.Wifi_Signal {"_id":"sonoff.0.Backofen.Wifi_Signal","common":{"role":"value","read":true,"write":false,"type":"number","name":"Backofen Wifi Signal","custom":{"influxdb.0":{"enabled":true,"storageType":"","aliasId":"","changesOnly":true,"debounce":1001,"changesRelogInterval":3600,"changesMinDelta":0}}},"native":{},"type":"state","from":"system.adapter.admin.0","user":"system.user.admin","ts":1637511781276}
Wie es aussieht, müsste ich wohl
custom { influxdb.0 { enabled: true } }
auffalse
setzen.
Das klappt aber mit dem von Dir vorgeschlagenen Syntax nicht:~/tmp $ iob object set sonoff.0.Backofen.Wifi_Signal custom.influxdb\.0.enabled=false The requested property "custom.influxdb.0.enabled" or one of its parents was not found in the object "sonoff.0.Backofen.Wifi_Signal"! ~/tmp $ iob object set sonoff.0.Backofen.Wifi_Signal custom."influxdb.0".enabled=false The requested property "custom.influxdb.0.enabled" or one of its parents was not found in the object "sonoff.0.Backofen.Wifi_Signal"! ~/tmp $ iob object set sonoff.0.Backofen.Wifi_Signal custom.'influxdb.0'.enabled=false The requested property "custom.influxdb.0.enabled" or one of its parents was not found in the object "sonoff.0.Backofen.Wifi_Signal"!
Wie bekomme ich den String "influxdb.0" (mit Punkt) als JSON Key korrekt übertragen?
Oder was übersehe ich?Danke
-
@jens77 Oh, das ist nicht vorgesehen. Die Logik zum Ermitteln des Objekt-"Pfads" splittet streng an Punkten.
Wäre ggf. ein Issue in https://github.com/ioBroker/ioBroker.js-controller wert, um diesen Fall zu berücksichtigen.Alternativ kannst du dir mit einem Skript in ioBroker behelfen, du musst dazu die IDs kennen oder ermitteln und für jede ID dann getObject, property ändern, setObject machen.
-
Ich bin heute über google auf das Thema gekommen, hatte gleiches "Problem" und habe kein andere Lösung gefunden. Deshalb hier für andere die auf das Thema aufmerksam werden könnten mal meine Lösung wie ich es für "mein Pytontech Objekt" erledigt habe:
chmod +x für die Datei nicht vergessen und entsprechend die Werte für das/die Objekt/e (pylontech.0. und die Elemente battery/volt) entsprechend für den eigenen Bedarf anpasen.
#!/bin/bash # Setzt die InfluxDB Custom-Parameter für alle ioBroker-Objekte mit 'battery' und 'volt' im Namen im Element pylontech.0 iobroker object list pylontech.0.* | awk '{print $5}' | grep "battery" | grep "\.volt$" | while read -r OBJECT_ID; do echo "Setze InfluxDB Custom-Parameter für: $OBJECT_ID" iobroker object extend "$OBJECT_ID" '{ "common": { "custom": { "influxdb.0": { "enabled": true, "storageType": "", "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": false, "changesRelogInterval": "0", "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "enableDebugLogs": false, "debounce": 0 } } } }' done