NEWS
Test Adapter KNX v1.0.x
-
@tsero said in Test Adapter KNX v1.0.x:
Danke für die Erklärung! Hatte mir schon sowas gedacht. Allerdings bin ich von der Adapter-Doku ausgegangen, und aufgrund von
habe ich mir gedacht, ein getState wäre ein Trigger für das GroupValueRead. Bin gerade erst dabei mich in ioBroker einzuarbeiten und da gibt es natürlich noch ein paar Startschwierigkeiten ...Gerne.
Ja, das hab ich mir auch gedacht, "Trigger" ist da sicherlich nicht gut verständlich. Da ist man als ioBroker-Entwickler dann auch etwas betriebsblind, weil man weiß, dass ein getState beim Adapter nicht ankommt und es daher nur ein setState sein kann. Also Trigger = setStateDas mit dem Caching von getStates ist mir auch neu und eine Beschreibung dazu konnte ich auch noch nicht finden. Die Funktionsbeschreibung erwähnt das nämlich nicht.
Das ist eine Vereinfachung, die der Javascript Adapter für die User macht, kann man in der Instanz einstellen. Sonst wäre getState immer asynchron, das heißt, du müsstest getState immer mit callbacks verarbeiten, also so z.B.:
getState(id, (state) => { log("State " + id + " is " + state.val); }); // <- hier kann ich auf "state" NICHT zugreifen -> alles muss jetzt in den callback mit rein. Bei mehreren states, die ich abrufen will, wird das schnell sehr unübersichtlich.
Wie du schon schreibst, schön ist die Variante nicht. Ich kann den Messwert auch über eine eigene GA anfordern. Denke mal das wird dann die bessere Variante sein. Das würde ich dann ungefähr so machen
setState('knx.0.0_Zentral.0_1_Messwerte.Abfrage_Wind_max',true); setStateDelayed("javascript.0.scriptEnabled.Wetter.iMaxWind", getState("knx.0.0_Zentral.0_1_Messwerte.Messen_Wind_max_m_s").val*3.6,2000);
Kann ich davon ausgehen, dass ich mit einer Verzögerung von 2s dann schon den neuen Wert mit getState bekomme (am Bus sehe ich den Response nach <0,1s). Oder bekomme ich dann noch den Wert aus dem Cache? Bzw. wie kann man den Cache umgehen?
Das setStateDelayed verwendest du da falsch...? das getState würde so immer noch sofort ausgeführt und nur der Wert später gesetzt. Für das, was du erreichen willst, brauchst du setTimeout (javascript funktion):
setState('knx.0.0_Zentral.0_1_Messwerte.Abfrage_Wind_max',true); setTimeout(function () { const windGeschwindigkeit = getState("knx.0.0_Zentral.0_1_Messwerte.Messen_Wind_max_m_s").val*3.6; setState("javascript.0.scriptEnabled.Wetter.iMaxWind", windGeschwindigkeit); },2000);
Ich würde es so nicht machen, sondern tatsächlich den state abonieren, das heißt, die Funktion wird jedesmal aufgerufen, wenn sich der state ändert -> also sobald ioBroker das Update vom KNX Bus gelesen hat, wird deine Funktion auch aufgerufen. Oder willst du nur, das etwas passiert, wenn du vorher das setState machst?
(Warum hast du scriptEnabled in deiner id, die du setzen willst?)Also:
//log new measurement, ack: true -> only react to readings from bus! on({ id: 'knx.0.0_Zentral.0_1_Messwerte.Messen_Wind_max_m_s', ack: true}, (e) => { //diese Funktion wird jedesmal aufgerufen, wenn der State aktualisiert wird, also wenn was neues vom KNX Bus kommt log("max knx wind = "+e.state.val); setState("javascript.0.Wetter.scriptEnabled.iMaxWind", e.state.val * 3.6, true); //ich setze hier gerne ack=true, dann wird es in der Objektliste grün ;-) }); //update erzeugen: setState('knx.0.0_Zentral.0_1_Messwerte.Abfrage_Wind_max',true); //ggf. auch auf Knopfdruck? -> state erstellen und darauf reagieren on({ id: 'javascript.0.jetzt_mal_wind_auslesen', val: true, ack: false}, function (e) { setState('knx.0.0_Zentral.0_1_Messwerte.Abfrage_Wind_max',true); setStateDelayed('javascript.0.jetzt_mal_wind_auslesen', false, true, 500); //nach 500ms wieder auf false setzen, nicht notwendig aber hübscher ;-) });
Grundsätzlich in Skripten würde ich das immer so machen:
wenn immer etwas passieren soll, wenn neue Information reinkommt, dann unbeding mit on() den state abonnieren.
Wenn du das ganze nur für eine einmalige Berechnung brauchst, dann ist getState ok. In deinem speziellen Fall würde ich aber da bei on bleiben, das du nur einmal was machen willst, könnte man auch so erreichen://update erzeugen: setState('knx.0.0_Zentral.0_1_Messwerte.Abfrage_Wind_max',true); let doSomething = true; //ok, funktion darf einmal ausgeführt werden. //wird nur etwas tun, wenn doSomething = true on({ id: 'knx.0.0_Zentral.0_1_Messwerte.Messen_Wind_max_m_s', ack: true}, (e) => { //diese Funktion wird jedesmal aufgerufen, wenn der State aktualisiert wird, also wenn was neues vom KNX Bus kommt if (doSomething) { log("max knx wind = "+e.state.val); setState("javascript.0.Wetter.scriptEnabled.iMaxWind", e.state.val * 3.6, true); //ich setze hier gerne ack=true, dann wird es in der Objektliste grün ;-) doSomething = false; } });
(ok, besser wäre noch das schedule wieder zu entfernen, geht auch mit unsubscribe, meine ich, müsste ich aber nachgucken).
-
@Garfonso und nochmals danke ... habe wieder einiges gelernt. Ich denke jetzt passt es. Immer zur vollen Stunde frage ich den max-Windwert der letzten Stunde ab und setzte ihn danach zurück. Über die subscription lausche ich auf den neuen max-Werte und setzt ihn dann in meinen DP:
schedule("0 * * * *", function () { setState('knx.0.0_Zentral.0_1_Messwerte.Abfrage_Wind_max',true); setStateDelayed("knx.0.0_Zentral.0_1_Messwerte.Reset_Wind_max",true,500); }); on({ id: 'knx.0.0_Zentral.0_1_Messwerte.Messen_Wind_max_m_s', ack: true}, (e) => { //diese Funktion wird jedesmal aufgerufen, wenn der State aktualisiert wird, also wenn was neues vom KNX Bus kommt setState("javascript.0.Wetter.iMaxWind", e.state.val * 3.6, true); });
Bei deiner Frage Warum hast du scriptEnabled in deiner id, die du setzen willst? bin ich dann gleich mal ins Schwitzen geraten ... und wie befürchtet, habe ich wiedermal ins Schwarze getroffen. Beim initialen Herumspielen habe ich den Ordner scriptEnabled gesehen. Dachte mir, aha, klingt gut, da kommt alles was zu den aktivierten Scripts gehört rein. Also habe ich ohne viel nachzudenken alle DPs da drinnen anlegt.
Nach deiner Frage, habe ich dann mal nach scriptEnabled gegooglt ... war wohl doch nicht so optimal.
Naja, das war jetzt meine Nachmittagsbeschäftigung. Habe alle DPs da raus geholt .. eine schöne Arbeit. Aber jetzt isses sauber.Eine Verständnisfrage hätte ich dann doch noch zur zeitlichen Abfolge. Die Sinnhaftigkeit des Scripts bitte nicht beachten.
Verstehe ich das richtig, dass der zeitliche Ablauf wie folgt ist:(2) wird sofort vom Cache gelesen, aber erst nach 2s in den DP (1) geschrieben.
Das log Kommand (3) wird erst nach Ablauf der 2s ausgeführt, und der DP (4) wird auch erst nach 2s ausgelesen.
Kommt das so hin? -
@tsero said in Test Adapter KNX v1.0.x:
(2) wird sofort vom Cache gelesen, aber erst nach 2s in den DP (1) geschrieben.
Das log Kommand (3) wird erst nach Ablauf der 2s ausgeführt, und der DP (4) wird auch erst nach 2s ausgelesen.
Kommt das so hin?Ja, alles korrekt.
Wenn du jetzt nach }); noch etwas stehen hättest, das würde ebenfalls sofort ausgeführt. Das kann manchmal etwas kontraintuitiv sein.
-
Hi Leute,
jetzt muss ich doch nochmal fragen.
Ich würde gerne ein Button in der Vis haben, der die Jalousie/n ganz runter fährt und dann die Lamellen auf "lichten" verstellt. Heißt, dass die Lamellen gerade sind.
Eigentlich müsste das doch mit der absoluten Lamellenpositon realisierbar sein oder?
Aber dann benötige ich doch eigentlich ein Script, weil ich die absolute Lamellenposition angeben muss und dann noch die Position. Oder stehe ich komplett auf dem Schlauch? Habt ihr das selber vielleicht schon umgesetzt? -
@Hansi1234
Würde ich über ein Skript lösen, ja. -
@Hansi1234 Das sind konstante Positionen die nicht berechnet werden müssen. Mein Knx Aktor kennt dazu Szenen pro Schalktanal. Eine Szene besteht z.B. aus absoluter Höhenposition und Lamellenposition.
-
@killroy2
Das hat funktioniert, danke dir -
Kann mir zufällig jemand sagen, wie ich im iobroker den rawDPvalue eines Datenpunktes anzeigen/nutzen kann?
Ich sehe jeweils nur den DecodedDPvalue...Vielen Dank
-
@Sali84
Ich glaube nicht, dass das vorgesehen ist. Warum brauchst du das denn? (Oder ich verstehe gerade nicht ganz, was der Decoded Value ist). -
Ich habe ein Gerät, dass dooferweise als Value für verschiedene Zustände den "gleichen" Wert. Allerdings bezieht sich das nur auf den Decoder Wert.
Somit hatte ich gehofft den RAW Wert im iobroker zu bekommen.
Aber ich habe nun einen anderen Weg gefunden es zu lösen.
Trotzdem gut zu wissen, dass man den Raw Wert nicht bekommt.Danke Dir!
-
Hallo zusammen,
ich habe folgende Problem, am Montag habe ich ein Update des KNX Adapters auf Version 1.0.39 durchgeführt. Dann habe ich gestern mein geändertes KNX Projekt hochgeladen aus der ETS 7.1.39. Nun startet mein KNX Adapter nicht mehr, im Log steht ständig folgendes.:
Hat jemand eine Idee woran das liegt? Bis dato hat immer alles ohne Probleme funktioniert. Vielleicht kann mir jemand helfen.
Vielen Dank
-
@Goldblaster
Sorry ist natürlich ETS Version 5.7.4 -
Zur weiteren Information:
Ich kann den bestehenden Adpater KNX.0 auch nicht deinstallieren. -
@Billiboy
Konntest du das Problem mit dem GIRA IP Router lösen?
Ich habe das gleiche Problem. -
@Snapergy said in Test Adapter KNX v1.0.x:
Hallo zusammen,
ich habe mal eine Frage, da ich bislang noch keine Antwort gefunden habe
Gibt es eine Möglichkeit die KNX-Telegramme zu via Iobroker sich ausgeben zu lassen? Wie es in der ETS im "Diagnose"-Modul möglich ist. So könnte ich jederzeit im Vis mir die letzten Bus-Mitteilungen anschauen, ohne immer auf die ETS zurückgreifen zu müssen.
Gibt es hier vielleicht schon eine Neuerung oder ggfl. eine explizite Aussage dazu?
-
Hi,
wollte einmal das ganze System neu aufsetzen und habe mich nun gefragt ob anschließend die Datenstruktur vom KNX komplett wiederhergestellt wird OHNE das ich die Projekt Datei neu einspielen muss ??
Leider hat der KNX Adapter auch nicht wie fast alle die Möglichkeit die Config zu speichern, wie macht ihr das ?
Aktuell habe ich es ansonsten nur über den Backitup Adapter gesichert. -
Hallo zusammen,
gibt es schon was Neues bzw. tut sich aktuell was mit dem KNX Adapter?
Ich kämpfe aktuell auch mit dem issue #106 (1 Bit values are wrongly imported as "indicator" and readonly instead of "state" "value" writable).
Die GAs habe ich ich schon in meinem Projekt angepasst, sollte also passen.
Jetzt habe ich gelesen, dass manche als Workaround den "devices" Adapter benutzten um die Geräte anzulegen und zu verwalten.
Lieder finde ich dazu kaum Dokumentation.
Möchte gerne meine KNX Objekte vernünftig von Lovelace erkennen (Entities) lassen.Leider steig ich da noch nicht ganz durch , kann mich da bitte jemand abholen und mir auf die Sprünge helfen?
Vielen Dank!
-
@Snapergy said in Test Adapter KNX v1.0.x:
Gibt es hier vielleicht schon eine Neuerung oder ggfl. eine explizite Aussage dazu?
Bisher gibt es die Möglichkeit nicht, höchstens tief im Debug log.
@sourex said in Test Adapter KNX v1.0.x:
Hi,
wollte einmal das ganze System neu aufsetzen und habe mich nun gefragt ob anschließend die Datenstruktur vom KNX komplett wiederhergestellt wird OHNE das ich die Projekt Datei neu einspielen muss ??
Leider hat der KNX Adapter auch nicht wie fast alle die Möglichkeit die Config zu speichern, wie macht ihr das ?
Aktuell habe ich es ansonsten nur über den Backitup Adapter gesichert.Also wenn du das Backup wiederherstellst werden die Objekte auch wieder erstellt und da steht alles notwendige drinnen, soweit ich sehe -> KNX wird damit dann wieder laufen.
Was mienst du mit "Config speichern"? Die Konfiguration wird in einem Objekt gespeichert, wie bei allen anderen Adaptern auch... (also Instanzkonfiguration).
@nowi03 said in Test Adapter KNX v1.0.x:
gibt es schon was Neues bzw. tut sich aktuell was mit dem KNX Adapter?
Habe jetzt Zugriff auf den Code, aber aktuell leider wenig Zeit (und wollte Lovelace noch ein latest release fertig machen und bin demnächst in Urlaub ... wird wohl eher August alles, mal sehen, wann ich mich in KNX einlese kann).
Jetzt habe ich gelesen, dass manche als Workaround den "devices" Adapter benutzten um die Geräte anzulegen und zu verwalten.
Lieder finde ich dazu kaum Dokumentation.
Möchte gerne meine KNX Objekte vernünftig von Lovelace erkennen (Entities) lassen.Mit dem KNX Adapter wirst du den devices Adapter immer brauchen (außer du baust die Struktur, die ioBroker da erwartet / braucht im KNX Projekt nach... aber auch dann müsstest du die Rollen alle von Hand anpassen... -> nimm den devices Adapter).
Zum anlegen musst du "nur" auf + Drücken. Dann Gerätetyp auswählen (die sind zum Teil etwas kryptisch, insbesondere bei Lampen. Da musst du die "maximale Funktionalität" nehmen, also z.B. RGB für Lampen mit Farbe und R,G,B als einzelne Objekte oder Farbtemperatur für Lampen mit Farbtemperatur). Dann kommt ein Dialog in dem du für die einzelnen Kontrollen die passenden States auswählen kannst, also im Grunde die Objekte passend zu den KNX GAs. Bei den "Power" States gibt es sogar support für Lesen / Schreiben in unterschiedlichen States (ACTUAL ist immer "nur lesen").
Ich wollte das auch mal mit Bildern beim Lovelace Adapter dokumentieren... bin aber noch nicht dazu gekommen.
-
Hallo zusammen,
ich habe ein Problem mit einigen GAs meiner Wetterstation, welche beim Start des KNX Adapters zwar gemäss Log richtig gelesen, in den Objekten aber nur mit "null" angezeigt werden. Wird der Wert hingegen mit "GroupValueWrite" auf den Bus geschrieben, dann wird der Wert aktualisiert.
Ich könnte mir vorstellen, dass es einen Zusammenhang zwischen "GroupValueResponse" und den für diese GAs gesetzten Flags gibt. Da auf diesen GAs einerseits ein neuer Wert gesetzt, aber auch der aktuelle Wert ausgelesen werden kann, sind in ETS alle Flags gesetzt: K, L, S, Ü, A und dementsprechend sind im Objekte auf ioBroker Read, Write und Update aktiv.
Ist das eventuell ein Bug oder habe ich etwas übersehen.Für einen Tipp wäre ich euch sehr dankbar.
Ansicht Objekte:
Ausschnitt Log:
2020-07-16 21:43:13.453 - info: knx.0 (16002) ( 3.3 ) Received TUNNEL_REQUEST (RESPONSE - send ACK) : 06 10 04 20 00 17 04 41 0f 00 29 00 bc e0 11 3e 22 4a 03 00 40 27 53 65 2020-07-16 21:43:13.454 - info: knx.0 (16002) main.js: onGroupValue_Response from 4/2/74 2020-07-16 21:43:13.456 - info: knx.0 (16002) RESPONSE : mappedName : Fasade NO Dämmersungschwelle dest : 4/2/74 val: 300 (DPT9.004) Fasade_NO_Dämmersungschwelle 2020-07-16 21:43:13.457 - info: knx.0 (16002) RESPONSE single-array value : 300 auf knx.0.Sensorik.OG.Fasade_NO_Dämmersungschwelle 2020-07-16 21:43:13.460 - info: knx.0 (16002) =====> STATE_TUNNELING_ACK
Ausschnitt Dokumentation:
-
Hallo zusammen,
ich bin gerade dabei mich in KNX einzulesen, da wir in 6 Monaten mit dem Umbau des Elternhauses anfangen.
Erste Komponenten habe ich bereits bestellt fürs Testboard.
Eine ETS Light ist auch soweit einsatzbereit und ich versuche erste Gehversuche.
Woran ich jedoch scheitere und ich nicht alles später neu vergeben muss, möchte ich gerne kurz nachfragen wie ihr es lösen würdet mit den Gruppenadressen.
In Meiner Wohnung habe ich aktuell diese Struktur im iobroker.
Haus>Wohnzimmer>Beleuchtung
Haus>Wohnzimmer>Beschattung
Haus>Wohnzimmer>Programme
Haus>Zentral>anwesenheitZum Elternhaus:
UG, EG, OG, Dach, Garten, Garage
EG 9 Räume
OG 9 RäumeJetzt hapert es bei mir an den Gruppenadressen und ich weiß einfach nicht was Sinn macht und was nicht.
Gibt es da vielleicht Vorlagen für? Lässt man Reserve zwischen den Adressen, weil dann irgendwas einem einfällt oder erweitert wird?Andere Frage, wie komplex kann knx programmiert werden? Aktuell plane ich so, dass die Grundfunktionen über knx laufen und die komplexen Aufgaben über den Iobroker laufen.
Kann man mit KNX sowas abbilden?
Bodentiefes Fenster links. Im Sommer fahren die halb runter, damit der Raum sich nicht aufheizt. Nun öffne ich das Fenster (nicht Kipp) weil ich den Müll rausbringen will. Jalousie fahren hoch. Nach wiederkehr und Fenster zu oder kipp soll die Jalousie Position vom Fenster rechts wieder angefahren werden.Wäre vielleicht einer bereit mir ein paar Stolperfallen vom KNX aufzuzeigen oder was so alles Möglich ist?
Gruß und Danke