NEWS
Test Adapter Devices 0.3.x
-
Genau, das ist auch super so, damit später die Datenpunkte auch jeweils die passende Rollen, Funktionen haben.
Meine ersten Gehversuche sind hier beschrieben.
https://forum.iobroker.net/topic/30324/array-erstellen-mit-prüfung-für-json-tabelle
zunächst dachte ich mir, dass ich mir ein Array zusammenstelle, wo die States, Prüfung und Meldetexte enthalten sind.Mein Problem ist, dass ich nicht weiß, wie ich das Array überwachen kann, wenn sich ein State sich ändert.
Eigentlich wünsche ich mir so ein Meldearchiv, Ich versuch es mal zu beschreiben.
Ich habe 10 Fenster, 5 Fenster mit Homematic Kontakten, 5 Fenster mit Xiaomi Kontakten.
zunächst sind die Datenpunkte unterschiedlich, was connect, battery und so angeht.
Da kommt der Adapter ins Spiel, sodass ich später 10 gleiche Fensterkontakte habe.
Die Alias haben alle die gleiche Funktion "Meldungen"Jetzt kann ich mit dem selector auf die Funktion Meldungen reagieren und mir ein Json zusammenbauen, wo alle Fenster die offen sind gelistet sind, Beschreibung des Fensters würde ich dann vom Alias nehmen, meine Kryptischen Bezeichnungen wäre für Frau nicht gerade hilfreich
Ich könnte über alle Adapter hinweg alle Aktoren wovon ich eine Meldung haben möchte zwar die Funktion "Meldungen" hinzufügen, nur ist das recht unübersichtlich. Da wäre der Alias am besten.
Hilft das???
Hier mal vielleicht etwas um es zu verdeutlichen
ich habe mir mal ein paar Meldungen angelegt. Die Namen würde ich dann später in einer Tabelle anzeigen lassen wollen.Schön wäre noch, wenn man im Adapter sehen könnte, womit die gemappt sind. Bei mir steht nur alias.0.... bei euch in den Screen jeweils der Datenpuntk aus dem Adapter.
-
@ple sagte:
Die Alias haben alle die gleiche Funktion "Meldungen"
Auf das Gewerk(function) kann man bei dieser Struktur verzichten, denn der folgende Selektor leistet es auch:
const meldungen = $('alias.0.Meldung.*');
@ple sagte in Test Adapter Devices 0.3.x:
prüfe die ob die False oder true sind, oder vielleicht > 0%.
Das erledigt die automatische Typwandlung, wenn die Alias-Datenpunkte immer vom Typ "boolean" sind.
Es ist vielleicht einfacher, die Alias-Datenpunkte per Script zu erstellen, als mit dem Adapter "ioBroker.devices". Beginn des Scriptes z.B.:
// Original-Datenpunkt const idOrigin = 'hm-rpc.0.XEQ1234567.1.STATE'; // Alias-Datenpunkt const idAlias = 'Meldung.Fenster.Wohnzimmer_links'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Fenster Wohnzimmer links'; desc = 'per Script erstellt'; typeAlias = 'boolean'; // oder 'number' role = 'indicator';
Dann nur IDs und Name anpassen.
-
mit den selector komme ich soweit klar, bekomme auch die id, Name des State, aber der ist ja immer ACTUAL.
Wenn ich jetzt den Namen des channels bekommen könnte, dann wäre ich ein Schritt weiter.
dann könnte ich auf jede Änderung mit dem Selector reagieren und dort wo true ist mit ein Array aus den Channelnamen zusammenbauen. hoffe somit bekomme ich irgendwann ein Json, damit ich meine Table erzeugen kann.Ich hatte auch schon überlegt die Datenpunkte in Java anzulegen, aber dann fehlt das mappen noch, daher wollte ich den Adapter dafür missbrauchen.
-
-
@ple sagte:
Wenn ich jetzt den Namen des channels bekommen könnte
let idCh = id.substring(0, id.lastIndexOf('.')); let nameCh = getObject(idCh).common.name;
-
Ich glaube, ich denke einfach zu kompliziert.
Mit mappen meinte ich sowaslet Meldung= [] on({id: 'ping.0.192_168_10_1'/*Steuerung*/, val: false }, function () { Meldung.push("Server nicht erreichbar") })
das bei 100 Meldungen wird unübersichtlich, daher die Suche nach einer automation.
Gedacht hatte ich mal das hier.
let Meldung = [ {trigger: getState("Hm-rpcxxxxxx").val, Check: true, message: "Fenster im Schlafzimmer ist offen" }, {trigger: getState("XXXXXXX").val, Check: >100, message: "Jalosie im Schlafzimmer ist oben" }, {trigger: getState('ping.0.192_168_10_1'/*Steuerung*/).val, Check: false, message: "Server nicht erreichbar" }, ]
Dort würde ich alle Meldungen reinpacken, die mir so einfallen.
im array wird der Trigger angegeben, auf was geprüft werden soll und die Meldung.
Wenn ein Check true ist, dann die Meldung per push ins neue Array, was später die Tabelle ist.Nur wusste ich jetzt nicht, wie immer Ereignisgesteuert das Array jedesmal neu einlese und alle Trigger erneut prüfe.
Hatte erst überlegt ein Intervall (s) laufen zu lassen, der mir immer wieder das Array einliest und prüft und eine neue Json erzeugt, aber ob das sauber ist kann ich nicht beurteilen. -
@ple sagte:
im array wird der Trigger angegeben
Das macht der Selektor
meldungen.on(schleife);
@ple sagte in Test Adapter Devices 0.3.x:
auf was geprüft werden soll
true und != 0 erfolgt automatisch. Alles andere macht man mit common.alias.read:
read = "val >= 100 ? true : false"; // Jalousie oben
read = "!val"; // Server nicht erreichbar
@ple sagte in Test Adapter Devices 0.3.x:
message: "Fenster im Schlafzimmer ist offen"
Der Name des Alias-Datenpunktes kann die Message enthalten, denn es geht ja um Meldungen (bei true).
-
Ich versuche derzeit mit Hilfe dieses Adapters Alias-Geräte für meine diversen Homematic Sensoren/Aktoren einzurichten. In der Geräte-Übersicht (Admin > Menü "Geräte") finde ich aber nicht alle Geräte, obwohl diese in ioBroker bekannt sind und mir auch unter Objekte angezeigt werden.
Teilweise werden mir für identische Gerätemodelle auch unterschiedliche Geräte angezeigt. Habe z.B. zwei Homematic Thermostate: Bei einem werden mit 4 Geräte/Kanäle (Wohnzimmer, rot markiert) angezeigt, beim anderen nur ein Gerät/Kanal (Kinderzimmer, blau markiert):
Manche Geräte (z.B. Homematic Fenstergriffsensoren (RHS) werden überhaupt nicht angezeigt.
Weiß jemand, woran das liegen kann?
Neustart, HM-Geräte neu einlesen, etc. habe ich alles schon versucht.Grüße,
maeb3 -
Moin,
ich hätte mal eine Frage zu dem Device-Adapter. Ich habe eben ein Gerät (Typ Farbtemperatur) angelegt und alle angegebenen Felder verlinkt. Wenn ich die Erstellung nun mit "OK" abschließe sind die Datenpunkte auch richtig im Alias.0-Baum eingetragen. Wenn ich aber wieder in den Geräte-Tab wechsele, dann gibt es plötzlich zwei Geräte mit dem selben Namen. EInmal mit dem Typ CT, in dem aber nur noch "TEMPERATURE" gesetzt ist und alles andere leer und ein zweites Gerät vom Typ INFO in dem 4 States vorhanden sind, die alle mit "*ACTUAL" betitelt sind. In allen vier States steht der Punkt den ich vorher "SATURATION" zugewiesen hatte.
Ist das irgendwie ein Bug oder mache ich beim erstellen etwas falsch?
Danke & Gruß,
Porys -
@Porys
klingt, als ob sich type-detector und devices adapter nicht ganz einig wären. Hm... kannst du es mal ohne color temperature versuchen? -
@Garfonso
Habe grade mal ein der Lampen als "Dimmer" angelegt. Nun wird kein zweites "INFO" Gerät erzeugt und er speichert 3 von 4 eingegebenen States. Nur "ON_SET" ist nach einem Reload wieder leer. -
Hi,
was genau macht der Adapter ?
Ist das so ähnlich die der LinkedDevices Adapter oder wie die neuen Aliase? -
@martinschm es ist wie linkeddevices nur das es die aliases nutzt.
-
@apollon77 said in Test Adapter Devices 0.3.x:
@martinschm es ist wie linkeddevices nur das es die aliases nutzt.
Ok, noch besser
Wollte die Aliase schon nutzen, hab mich nur zurück gehalten, da das Anlegen per Skript etwas mühsam erschien. LinkedDevices wollte ich nicht nutzen, da ich es besser finde die vom System bereit gestellten Mechanismen zu verwenden als parallel neue aufzubauen.Schade, das man linkedDevices nicht "einfach" umbiegen kann.
-
@apollon77 : Ich hab mir mal den Adapter installiert, aktuell noch die aus dem latest repository.
Kann man da links wo root steht auch noch weitere Unterverzeichnisse anlegen?
-
@martinschm Einfach Punkte im Namen nutzen
-
Hi,
ich habe grade mal ein wenig weiter getestet.
Was ich beim Anlegen der Geräte noch nicht verstanden habe, wofür *SET und dann ACTUAL ist.Bei einem Thermostat könnte es die aktuelle Temperatur und dann die "Wunsch"temperatur sein. Aber bei einer Lampe oder Jalousie ?
Das Feld LowBat ist als true/false gedacht, oder?
Wenn mein Sensor einen Volt Wert ausgibt, kann ich den dort nicht unterbringen,oder?Und wofür ist das Feld Maintenance?
ciao
Martin -
@martinschm SET/ACTUAL machen bei steuerbaren Geräten Sinn wenn eine Steueraktion ggf länger dauert o.ä. oder wie bei einem Thermostat wo eine gemessene temperatur hat etwas anderes ist als eine die man als Ziel einstellt. Alles wären so Dinge.
Auch bei einer Jalousie könnte man (weil ja die aktion etwas dauert) das trennen. ACTUAL ist der aktuelle Wert. SET der Zielwert. ACTUAL wird dann erst nach der erfolgten Fahrt aktualisiert.
LowBat ist eher als Boolean gedacht, ja einen Volt Wert würde ich dort nicht reinschreiben, aber mittelen read logik kannst Du ja eine grenze definieren und true setzen wenn dein Wert <3V oder so ist.
Maintenance bedeutet das das Gerät irgendetwas braucht (Batteriewechsel, Störung o.ä.)
-
wenn ich mir einen Alias anlegen möchte, erhalte ich folgende Warnungen, mache ich da etwas falsch, oder stimmt da etwas nicht?
admin.0 2020-05-05 00:33:27.145 warn (989) This object will not be created in future versions. Please report this to the developer. admin.0 2020-05-05 00:33:27.145 warn (989) Object alias.0.Zaehler.Abwasser.ACTUAL is invalid: obj.common.type has an invalid value (state) but has to be one of number, string, boolean, array, object, mixed, file, json admin.0 2020-05-05 00:29:49.974 warn (989) This object will not be created in future versions. Please report this to the developer. admin.0 2020-05-05 00:29:49.972 warn (989) Object alias.0.Zaehler.Abwasser.ACTUAL is invalid: obj.common.type has an invalid value (state) but has to be one of number, string, boolean, array, object, mixed, file, json iogo.0 2020-05-05 00:28:54.361 info (1282) database initialized with 104 state values iogo.0 2020-05-05 00:28:54.220 info (1282) database initialized with 104 state values iogo.0 2020-05-05 00:28:47.719 info (1282) uploading state iogo.0 2020-05-05 00:28:47.696 info (1282) uploading state influxdb.0 2020-05-05 00:28:47.652 warn (1233) Alias alias.0.Zaehler.Abwasser.ACTUAL has no target 12 influxdb.2 2020-05-05 00:28:47.664 warn (2240) Alias alias.0.Zaehler.Abwasser.ACTUAL has no target 12 javascript.0 2020-05-05 00:28:47.654 warn (1700) Alias alias.0.Zaehler.Abwasser.ACTUAL has no target 12 iogo.0 2020-05-05 00:28:47.658 warn (1282) Alias alias.0.Zaehler.Abwasser.ACTUAL has no target 12 javascript.1 2020-05-05 00:28:47.655 warn (1707) Alias alias.0.Zaehler.Abwasser.ACTUAL has no target 12 admin.0 2020-05-05 00:28:47.628 warn (989) This object will not be created in future versions. Please report this to the developer. admin.0 2020-05-05 00:28:47.624 warn (989) Object alias.0.Zaehler.Abwasser.ACTUAL is invalid: obj.common.type has an invalid value (state) but has to be one of number, string, boolean, array, object, mixed, file, json influxdb.2 2020-05-05 00:28:47.346 warn (2240) Alias alias.0.Zaehler.Abwasser has no target 12 iogo.0 2020-05-05 00:28:47.355 warn (1282) Alias alias.0.Zaehler.Abwasser has no target 12 javascript.1 2020-05-05 00:28:47.348 warn (1707) Alias alias.0.Zaehler.Abwasser has no target 12 javascript.0 2020-05-05 00:28:47.349 warn (1700) Alias alias.0.Zaehler.Abwasser has no target 12 influxdb.0 2020-05-05 00:28:47.342 warn (1233) Alias alias.0.Zaehler.Abwasser has no target 12
Unit habe ich nachträglich eingetragen, role hab ich geändert von "state" auf "value"
die Raw vom Original
nächste Frage, wenn ich diesen Alias wieder lösche
kommen sämtliche Warnmeldungen im LOG
-
@crunchip Der eine Teil der meldungen kam wegen dem falschen typ (state anstelle einem datentyp). Der andere teil das auch "Stukturobjekte" Fehlermekdungen werden wird in der nächsten Controller Version gefixt sein. Der andere Fehler auch Danke!