NEWS
[Neuer Adapter] LinkedDevices
-
Eben, um 14:36Uhr, genau der selbe Fehler wieder und kein Alias mehr erreichbar. Ich hab jetzt mal einen Downgrade auf die V1.4.1 durchgeführt und schau mal wie es da läuft, falls der Fehler vom Adapter kommt.
-
@palm_maniac
Test mal die version von github. Hab was eingebaut, dass der Adapter zumindest nicht mehr abschmieren sollte.
Weiter hab ich die log ausgabe bissle erweitert, da ich noch nicht verstehe was da passiert.
Sobald der Fehler bei dir wieder auftritt, mir das log zur Verfügung stellen. -
Hallo, ich habs gerade über Github installiert. Wenn es wieder passiert, melde ich mich. Vielen Dank.
-
Ich habe unter Experteneinstellung: keine Umwandlung ,0 Nachkommastellen und Umrechnung /xxx eingetragen. Das verlinkte Objekt hat aber Nachkommastellen.
Wie bekomme ich diese weg? -
@sevenup sagte in [Neuer Adapter] LinkedDevices:
@Scrounger ist es möglich ein Boolean Wert negiert zu verlinken?
Habs eingebaut, v1.4.3 sollte demnächst im latest sein.@ryto sagte in [Neuer Adapter] LinkedDevices:
Ich habe unter Experteneinstellung: keine Umwandlung ,0 Nachkommastellen und Umrechnung /xxx eingetragen. Das verlinkte Objekt hat aber Nachkommastellen.
Zeig mal die Einstellungen oder die raw daten des zu verlinkenden Objektes (parent)
-
@scrounger
Hier die Einstellungen:{ "type": "state", "common": { "name": "", "role": "value", "type": "number", "unit": "", "read": true, "write": true, "custom": { "linkeddevices.0": { "enabled": true, "number_unit": "", "linkedId": "dali_ecg_set_color_COORDINATE_Y", "name": "", "role": "", "mergeSettingsOnRestart": true, "expertSettings": true, "number_convertTo": "", "number_maxDecimal": 0, "number_min": "", "number_max": "", "number_calculation": "/65535", "number_calculation_readOnly": "", "number_to_boolean_condition": "", "number_to_boolean_value_true": "", "number_to_boolean_value_false": "", "number_to_string_condition": "", "number_to_duration_convert_seconds": "", "number_to_duration_format": "", "number_to_datetime_convert_seconds": "", "number_to_datetime_format": "", "number_to_multi_condition": "", "boolean_convertTo": "", "boolean_to_string_value_true": "", "boolean_to_string_value_false": "", "string_convertTo": "", "string_prefix": "", "string_suffix": "", "string_to_boolean_value_true": "", "string_to_boolean_value_false": "", "string_to_number_unit": "", "string_to_number_maxDecimal": "", "string_to_number_calculation": "", "string_to_number_calculation_readOnly": "", "string_to_duration_format": "", "string_to_datetime_parser": "", "string_to_datetime_format": "" } } }, "native": { "cat": "db", "type": "WORD", "db": "DB12", "dbId": 12, "address": 972, "offsetBit": 0, "rw": true, "wp": false, "len": "" }, "from": "system.adapter.s7.0", "user": "system.user.admin", "ts": 1615905527674, "_id": "s7.0.DBs.DB12.dali_ecg_set_color_COORDINATE_Y", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
-
@scrounger Hallo. Bisher keine Fehler mehr mit der Version über github, es scheint zu klappen. Das komische dabei ist aber, dass es vorher eigentlich immer ohne Probleme lief. Mal schauen, wie die neue Version 1.4.3 läuft.
-
@ryto sagte in [Neuer Adapter] LinkedDevices:
@scrounger
Hier die Einstellungen:Sieht soweit alles gut aus. Habs getestet funktioniert. Hat den der datenpunkt
s7.0.DBs.DB12.dali_ecg_set_color_COORDINATE_Y
auch einen Wert?
Lösch mal das verlinkte Objekt und starte den Adapter neu.@palm_maniac sagte in [Neuer Adapter] LinkedDevices:
@scrounger Hallo. Bisher keine Fehler mehr mit der Version über github, es scheint zu klappen. Das komische dabei ist aber, dass es vorher eigentlich immer ohne Probleme lief. Mal schauen, wie die neue Version 1.4.3 läuft.
Wie gesagt ich hab nur das Error Handling optimiert, so dass der Adapter nicht mehr abschmieren sollte. Du musst aber trotzdem mal das Log beobachten ob da eine Fehlermeldung kommt.
-
@scrounger
Alles gelöscht, Neustart und alles neu angelegt. Keine Änderung.
Aber:
Wenn ich in Objekte den linked_xxx Datenpunkt ändere, wird der Wert ohne Nachkomma im verlinkten Objekt eingetragen, i.O.
Den Wert im linked_xxx Datenpunkt habe ich bisher über Blockly mit aktualisiere.... geändert, Ergebnis waren Nachkommastellen im Datenpunkt. Da linked_xxx für mich eigentlich eine interne Variable ist, habe ich mit aktualisiere... gearbeitet.
Nun habe ich aktualisiere mit setze... auf den linked_xxx Datenpunkt ersetzt, und die Nachkommastellen sind weg.
Problem gelöst, nur noch mit setze... auf den linked_ und es klappt.
Danke -
@ryto
Nachkommastellen werden auch nur auf den verlinkten Datenpunkt angewendet!Grundsätzlich solltest du nur noch mit den verlinkten Datenpunkten in Script vis, etc. arbeiten, das ist die Idee Konzept hinter dem Adapter
-
@scrounger
Ich hatte nur auf das verlinkte (linked_...) Objekt geschrieben. Es arbeitet aber nur richtig, wenn die Variable mit setze... und nicht aktualisiere... geändert wird. -
@scrounger said in [Neuer Adapter] LinkedDevices:
@sevenup sagte in [Neuer Adapter] LinkedDevices:
@Scrounger ist es möglich ein Boolean Wert negiert zu verlinken?
Habs eingebaut, v1.4.3 sollte demnächst im latest sein.Vielen Dank!
Funktioniert super -
@scrounger Hi. Es gab wieder Fehler. Hier der Logauszug:
2021-03-19 10:38:57.248 - error: linkeddevices.0 (1508) [getConvertedValue] sourceId 'Datenpunkte.0.Energie.Autarkie' targetId 'linkeddevices.0.Sensoren.Keller.Hobbyraum.Wechselrichter.Autarkie_Jetzt', error: Unexpected type of argument in function round (expected: number or Complex or BigNumber or Fraction or Array or Matrix or DenseMatrix or SparseMatrix or string or boolean, actual: null, index: 0), stack: TypeError: Unexpected type of argument in function round (expected: number or Complex or BigNumber or Fraction or Array or Matrix or DenseMatrix or SparseMatrix or string or boolean, actual: null, index: 0) at createError (D:\iobroker\KuhnHome\node_modules\typed-function\typed-function.js:555:19) at Function.generic (D:\iobroker\KuhnHome\node_modules\typed-function\typed-function.js:1077:15) at Object.round (D:\iobroker\KuhnHome\node_modules\typed-function\typed-function.js:1092:24) at Linkeddevices.getConvertedValue (D:\iobroker\KuhnHome\node_modules\iobroker.linkeddevices\main.js:1474:32) at runMicrotasks () at runNextTicks (internal/process/task_queues.js:62:5) at processImmediate (internal/timers.js:434:9) at async Linkeddevices.onStateChange (D:\iobroker\KuhnHome\node_modules\iobroker.linkeddevices\main.js:274:21)
Der Fehler taucht immer wieder regelmäßig auf, obwohl der Alias-Datenpunkt und LinkedDevices sauber laufen. es handelt sich hierbei um einen manuell angelegten Datenpunkt, der per Blockly berechnet wird.
-
@palm_maniac
Zeig mal die raw daten von beiden datenpunkten.
Wird auch der richtige type vom blockly in den DP geschrieben? -
Hier die Daten von der Quelle:
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1613475446191, "common": { "name": "Autarkie Jetzt", "role": "", "type": "number", "desc": "Manuell erzeugt", "unit": "%", "min": 0, "read": true, "write": true, "custom": { "linkeddevices.0": { "enabled": true, "number_unit": "", "linkedId": "Sensoren.Keller.Hobbyraum.Wechselrichter.Autarkie_Jetzt", "name": "Autarkie Jetzt", "role": "", "mergeSettingsOnRestart": true, "expertSettings": true, "number_convertTo": "", "number_maxDecimal": 2, "number_min": "", "number_max": "", "number_calculation": "", "number_calculation_readOnly": "", "number_to_boolean_condition": "", "number_to_boolean_value_true": "", "number_to_boolean_value_false": "", "number_to_string_condition": "", "number_to_duration_convert_seconds": "", "number_to_duration_format": "", "number_to_datetime_convert_seconds": "", "number_to_datetime_format": "", "number_to_multi_condition": "", "boolean_convertTo": "", "boolean_to_string_value_true": "", "boolean_to_string_value_false": "", "string_convertTo": "", "string_prefix": "", "string_suffix": "", "string_to_boolean_value_true": "", "string_to_boolean_value_false": "", "string_to_number_unit": "", "string_to_number_maxDecimal": "", "string_to_number_calculation": "", "string_to_number_calculation_readOnly": "", "string_to_duration_format": "", "string_to_datetime_parser": "", "string_to_datetime_format": "", "boolean_invert": false } } }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "Datenpunkte.0.Energie.Autarkie", "type": "state" }
Und hier vom Ziel:
{ "type": "state", "common": { "name": "Autarkie Jetzt", "role": "", "type": "number", "desc": "Created by linkeddevices", "unit": "%", "min": 0, "max": 100, "def": 0, "read": true, "write": true, "custom": { "linkeddevices.0": { "enabled": true, "parentId": "Datenpunkte.0.Energie.Autarkie", "parentType": "number", "isLinked": true, "mergeSettingsOnRestart": true, "number_maxDecimal": 2, "linkedId": "", "name": "", "role": "", "expertSettings": false, "number_convertTo": "", "number_unit": "", "number_min": "", "number_max": "", "number_calculation": "", "number_calculation_readOnly": "", "number_to_boolean_condition": "", "number_to_boolean_value_true": "", "number_to_boolean_value_false": "", "number_to_string_condition": "", "number_to_duration_convert_seconds": "", "number_to_duration_format": "", "number_to_datetime_convert_seconds": "", "number_to_datetime_format": "", "number_to_multi_condition": "", "boolean_convertTo": "", "boolean_to_string_value_true": "", "boolean_to_string_value_false": "", "string_convertTo": "", "string_prefix": "", "string_suffix": "", "string_to_boolean_value_true": "", "string_to_boolean_value_false": "", "string_to_number_unit": "", "string_to_number_maxDecimal": "", "string_to_number_calculation": "", "string_to_number_calculation_readOnly": "", "string_to_duration_format": "", "string_to_datetime_parser": "", "string_to_datetime_format": "", "boolean_invert": false }, "influxdb.0": { "enabled": true, "changesOnly": false, "debounce": "1000", "retention": 0, "changesRelogInterval": 4, "changesMinDelta": 0, "storageType": "", "aliasId": "Autarkie Jetzt" } }, "icon": "linkeddevices_small.png" }, "native": {}, "from": "system.adapter.linkeddevices.0", "user": "system.user.admin", "ts": 1616149703821, "_id": "linkeddevices.0.Sensoren.Keller.Hobbyraum.Wechselrichter.Autarkie_Jetzt", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Das Blockly scheint richtig zu arbeiten, da nur gerechnet wird. Es handelt sich dabei um einen Prozentwert zwischen 0 und 100.
-
Ich hab nochmal nachgeschaut. Der Fehler taucht nur heute auf, 3mal. Gestern war noch nix drin.
-
@Scrounger Hallo, was mir aufgefallen ist, wenn ich für den Source Datenpunkt History aktiviere wird das auch auf den linked Datenpunkt gespiegelt und umgekehrt. Bisher habe ich keine Stelle gefunden an der ich dieses Verhalten konfigurieren kann - kann man es überhaupt konfigurieren ?
Was mich daran stört ist, dass History dann natürlich zwei Datenpunkte aufzeichnet. Das kann Sinn machen wenn man den Wert konvertiert, somit dann beide Werte aufzeichnet.
Aktuell kann ich History entweder für beide DP aktivieren oder für keinen.Gruß Bungee
-
@palm_maniac sagte in [Neuer Adapter] LinkedDevices:
Das Blockly scheint richtig zu arbeiten, da nur gerechnet wird. Es handelt sich dabei um einen Prozentwert zwischen 0 und 100.
Ich konnte es jetzt reproduzieren, der Fehler tritt auf, wenn der Wert
null
oderundefined
ist.
Ich schätze das da was in deinem Blockly nicht korrekt läuft und eine der Werte schreibt.
Ich werd die log Ausgabe mal noch erweiteren, dass man sieht was zum Zeitpunkt des Fehlers für ein Wert verwenden wird.@bungee71 sagte in [Neuer Adapter] LinkedDevices:
Aktuell kann ich History entweder für beide DP aktivieren oder für keinen.
Stimmt nur halb Wenn du History beim orginalen DP aktiviert hast, dann wird das automatisch beim verlinkten DP auch aktiviert, weil der orginale DP 1zu1 gespiegelt wird - das ist das Konzept des Adapters.
Wenn aber beim orginalen DP kein History aktiviert ist, kannst du das nur für den verlinkten DP aktivieren.Warum ist das so - nehmen wir mal an du hast einen Aktor von dem du Daten per History aufzeichnen willst. Wenn das jetzt nur beim verlinkten DP aktiviert ist, der Aktor defekt ist und getauscht wird, muss man nur die verlinkung reparieren und die Aufzeichnung der Daten per History läuft weiter, d.h. die alten Daten sind dann nach wie vor vorhanden. Genauso funktioniert dann auch alles wieder in VIS, Skripten, etc.
D.h. man sollte immer den roh datenpunkten zunächst verlinken und dann alle Einstellungen wie z.B. History am verlinkten Datenpunkt durchführen bzw. den verlinkten dann in VIS, Skripten, etc. verwenden.
Wenn man jetzt z.B. hier noch eine Umrechnung haben möchte für die VIS, dann kann man sich z.B. eine zweite Instanz vom linkeddevices anlegen, mit dem verlinken DP von Insanz 0 verlinken und z.B. umrechnen. -
@scrounger Den Gedanken hatte ich zuerst auch, dass es nur in ein Richtung gespiegelt was auch vollkommen richtig ist, aber aus irgendeinem Grund geht es bei mir in beide Richtungen.
Hab es jetzt nochmal getestet:
neuen DP angelegt --> verlinkt --> history im linked DP aktiviert.
Ergebnis:
History wird nicht im source DP aktiviert --> Passt.Bei dem DP mit dem ich dieses Verhalten habe war bereits vor dem Verlinken History aktiviert - scheinbar funktioniert es dann in beide Richtungen. Nachdem ich jetzt den Link gelöst habe, History am source DP deaktiviert, den Link wieder aktiviert kann ich History am linked DP aktivieren und es wird nicht zurückgespiegelt --> Passt
Den grundsätzlich Gedanken des Adapter kann ich nachvollziehen (mache seit 26 Jahren Automatisierung ) und finde den Ansatz sehr gut - wie alle deine Sachen - was mir aber noch fehlt sind Strukturen und der Vorteil nur ein Verbindung herstellen zu müssen, das zieht sich aber durch IO Broker. Dein Adapter bzw. die Datenpunkte davon werden ja vom Geräte Adapter erkannt, leider kann man beim Geräte Adapter keine eigenen Datentypen anlegen. Das Ziel wäre es einen Datentyp z.B. Shelly 1 anzulegen und dann nur noch eine (1) Verbindung zum Device zu erstellen die Member sind ja bekannt und könnten somit automatisch verbunden werden. Dann fehlt nur noch ein Widget das sich genauso verhält und ich bringe mit 2 Verbindungen mein komplettes Device in die VIS - wenn ich die original DP nehme sogar nur mit einer Verbindung. Das Corona Widget ist hier ein Paradebeispiel.
Gruß Bungee
-
@scrounger sagte in [Neuer Adapter] LinkedDevices:
@palm_maniac sagte in [Neuer Adapter] LinkedDevices:
Das Blockly scheint richtig zu arbeiten, da nur gerechnet wird. Es handelt sich dabei um einen Prozentwert zwischen 0 und 100.
Ich konnte es jetzt reproduzieren, der Fehler tritt auf, wenn der Wert
null
oderundefined
ist.
Ich schätze das da was in deinem Blockly nicht korrekt läuft und eine der Werte schreibt.
Ich werd die log Ausgabe mal noch erweiteren, dass man sieht was zum Zeitpunkt des Fehlers für ein Wert verwenden wird.Teste mal die aktuelle version von github. Da wird jetzt angezeigt, welchen Wert er hat zum Zeitpunkt des Fehlers. Achtung ich hab die Info von error auf warn umgestellt, d.h. schau nach warn meldung. Wenn der fehler wieder auftritt bitte log posten
@bungee71 sagte in [Neuer Adapter] LinkedDevices:
Den grundsätzlich Gedanken des Adapter kann ich nachvollziehen (mache seit 26 Jahren Automatisierung ) und finde den Ansatz sehr gut - wie alle deine Sachen - was mir aber noch fehlt sind Strukturen und der Vorteil nur ein Verbindung herstellen zu müssen, das zieht sich aber durch IO Broker. Dein Adapter bzw. die Datenpunkte davon werden ja vom Geräte Adapter erkannt, leider kann man beim Geräte Adapter keine eigenen Datentypen anlegen. Das Ziel wäre es einen Datentyp z.B. Shelly 1 anzulegen und dann nur noch eine (1) Verbindung zum Device zu erstellen die Member sind ja bekannt und könnten somit automatisch verbunden werden.
Schau mal hier, evtl. hilft dir das bei der Strukturierung weiter:
https://forum.iobroker.net/topic/40609/organisieren-mit-alias-wie-macht-ihr-dasDann fehlt nur noch ein Widget das sich genauso verhält und ich bringe mit 2 Verbindungen mein komplettes Device in die VIS - wenn ich die original DP nehme sogar nur mit einer Verbindung. Das Corona Widget ist hier ein Paradebeispiel.
Mit den Material Design Widgets und skripten ist sowas schon möglich