NEWS
Tasmota 10 und sonoff adapter
-
-
welches Ergebnis möchtest du denn?
Ich kann das gerne auch einstellen.WICHTIG für Nachmacher:
Energy gestern und heute gehen nach dem Update flöten.
Für wen das wichtig ist, sollte sich vielleicht die Daten vorher notieren. -
welches Ergebnis möchtest du denn?
Ich kann das gerne auch einstellen.WICHTIG für Nachmacher:
Energy gestern und heute gehen nach dem Update flöten.
Für wen das wichtig ist, sollte sich vielleicht die Daten vorher notieren.ich würde gerne das INFO.Module oder INFO.Info1.Module sehen
das Info1_Module als dp mag ich nicht :-)
-
ich würde gerne das INFO.Module oder INFO.Info1.Module sehen
das Info1_Module als dp mag ich nicht :-)
Ändert sich nichts.
Nach dem Anhaken in den Settings ist ein Datenpunkt dazugekommen.
Energy Period
Leider keine Ahnung was der aussagen soll.
-
Ändert sich nichts.
Nach dem Anhaken in den Settings ist ein Datenpunkt dazugekommen.
Energy Period
Leider keine Ahnung was der aussagen soll.
ich denke, ich werde diese form einfach escapen - sind bei dir alle so ? mit dem Info_...
-
ich denke, ich werde diese form einfach escapen - sind bei dir alle so ? mit dem Info_...
Ab Version 9.3.1 , ja
-
Ab Version 9.3.1 , ja
-
Scheint bei den Adaptern MQTT und Sonoff eine verschiedene Herangehensweise zu sein, wie Datenpunkte bzw Ordner angelegt werden.
-
Scheint bei den Adaptern MQTT und Sonoff eine verschiedene Herangehensweise zu sein, wie Datenpunkte bzw Ordner angelegt werden.
@haselchen bist du in mqtt oder sonoff adapter
-
@haselchen bist du in mqtt oder sonoff adapter
Ganz geschmeidig im Sonoff Adapter.
Der MQTT hatte rumgezickt, wurde immer grün gelb grün gelb... -
@haselchen bist du in mqtt oder sonoff adapter
@liv-in-sky ich wollte mal was mit Klassen machen. Bin nicht sicher ob ich das richtig getroffen habe aber vielleicht hilft das hier etwas:
/** * Zweck: Leichterer Zugriff auf Tasmota Info DP * Datum: 09.11.2011 * Autor: @fastfoot * Forum: https://forum.iobroker.net/topic/49205/tasmota-10-und-sonoff-adapter/34 */ const dbg = true; const DevicesBasePath = '0_userdata.0.Forum.MQTT.Tasmota'; class Tasmota { constructor(id) { this._getDps(id); } get hostname() { return getState(this.dp.hostname).val; } get ipaddress() { return getState(this.dp.ipaddress).val; } get module() { return getState(this.dp.module).val; } get version() { return getState(this.dp.version).val; } get restartreason() { return getState(this.dp.restartreason).val; } getId(state){return this.dp[state]} _getDps(id) { const states = $(`${id}*`); this.dp={}; states.each(state => { const dp = state.split('.').pop(); let attr = dp.slice(dp.indexOf('_') + 1); this.dp[attr.toLowerCase()] = state; }) } } const l1 = new Tasmota(DevicesBasePath + '.Licht1'); const l2 = new Tasmota(DevicesBasePath + '.Licht2'); log('hostname: ' + l1.hostname) log('ip: ' + l2.ipaddress) log('rgb: ' + getState(l2.getId('rgb')).val) log('version: ' + getState(l1.getId('version')).val) -
@liv-in-sky ich wollte mal was mit Klassen machen. Bin nicht sicher ob ich das richtig getroffen habe aber vielleicht hilft das hier etwas:
/** * Zweck: Leichterer Zugriff auf Tasmota Info DP * Datum: 09.11.2011 * Autor: @fastfoot * Forum: https://forum.iobroker.net/topic/49205/tasmota-10-und-sonoff-adapter/34 */ const dbg = true; const DevicesBasePath = '0_userdata.0.Forum.MQTT.Tasmota'; class Tasmota { constructor(id) { this._getDps(id); } get hostname() { return getState(this.dp.hostname).val; } get ipaddress() { return getState(this.dp.ipaddress).val; } get module() { return getState(this.dp.module).val; } get version() { return getState(this.dp.version).val; } get restartreason() { return getState(this.dp.restartreason).val; } getId(state){return this.dp[state]} _getDps(id) { const states = $(`${id}*`); this.dp={}; states.each(state => { const dp = state.split('.').pop(); let attr = dp.slice(dp.indexOf('_') + 1); this.dp[attr.toLowerCase()] = state; }) } } const l1 = new Tasmota(DevicesBasePath + '.Licht1'); const l2 = new Tasmota(DevicesBasePath + '.Licht2'); log('hostname: ' + l1.hostname) log('ip: ' + l2.ipaddress) log('rgb: ' + getState(l2.getId('rgb')).val) log('version: ' + getState(l1.getId('version')).val)@fastfoot danke - aber dann muss ich die klassen auf die unterschiedlichen möglichkeiten anpassen - aber ich schaue es mir nochmal an
@haselchen danke fürs testen
-
@fastfoot danke - aber dann muss ich die klassen auf die unterschiedlichen möglichkeiten anpassen - aber ich schaue es mir nochmal an
@haselchen danke fürs testen
@liv-in-sky sagte in Tasmota 10 und sonoff adapter:
aber dann muss ich die klassen auf die unterschiedlichen möglichkeiten anpassen
eigentlich ist dafür getId() vorgesehen. Statt unterschiedliche Pfade abzufragen frägst du nur den Statenamen ab, also zB rgb, on etc.. In der Klasse sind die Datenpunkte dazu gespeichert. In den gettern sind halt nur die hier im Thread behandelten Info-Punkte implementiert
-
Hilft zwar jetzt nicht, aber für's nächste mal :
Wenn ich in Skripten mit Datenpunkten arbeite, nutze ich den alias-manager Adapter. Dort weise ich den Variablen die ich im Skript nutze die Datenpunkte zu. Wenn sich dann ein Datenpunkt mal ändert, muss ich das nur im alias-manager machen und das Skript bleibt unberührt. -
@liv-in-sky ich wollte mal was mit Klassen machen. Bin nicht sicher ob ich das richtig getroffen habe aber vielleicht hilft das hier etwas:
/** * Zweck: Leichterer Zugriff auf Tasmota Info DP * Datum: 09.11.2011 * Autor: @fastfoot * Forum: https://forum.iobroker.net/topic/49205/tasmota-10-und-sonoff-adapter/34 */ const dbg = true; const DevicesBasePath = '0_userdata.0.Forum.MQTT.Tasmota'; class Tasmota { constructor(id) { this._getDps(id); } get hostname() { return getState(this.dp.hostname).val; } get ipaddress() { return getState(this.dp.ipaddress).val; } get module() { return getState(this.dp.module).val; } get version() { return getState(this.dp.version).val; } get restartreason() { return getState(this.dp.restartreason).val; } getId(state){return this.dp[state]} _getDps(id) { const states = $(`${id}*`); this.dp={}; states.each(state => { const dp = state.split('.').pop(); let attr = dp.slice(dp.indexOf('_') + 1); this.dp[attr.toLowerCase()] = state; }) } } const l1 = new Tasmota(DevicesBasePath + '.Licht1'); const l2 = new Tasmota(DevicesBasePath + '.Licht2'); log('hostname: ' + l1.hostname) log('ip: ' + l2.ipaddress) log('rgb: ' + getState(l2.getId('rgb')).val) log('version: ' + getState(l1.getId('version')).val)@fastfoot sagte in Tasmota 10 und sonoff adapter:
habe das nochmal angesehen - habe nicht so viel erfahrung mit class. habe mal vor langer zeit ein java project gemacht - ist lange her.
das gefällt mir besonders:states.each(state => { const dp = state.split('.').pop(); let attr = dp.slice(dp.indexOf('_') + 1); this.dp[attr.toLowerCase()] = stateleider bin ich da am selben problem - ich muss die abfragen, um was es für dp geht , auch auf alle möglichkeiten hin abfragen. z.b dein attr. das beginnt nicht immer mit _Illuminance - es wird mittlerweile mit nur Illuminance im dp geschrieben, dafür ist es in einem anderen ordner in der sonoff-instanz
letztlich ist aber dein vorschlag interessant - man kann mit einer klasse alles abdecken - muss halt gut geschrieben sein - ändert sich was, muss nur die class geändert werden und nicht überall mit if gearbeitet werden
in meinem tabellescript werde ich das nicht verwenden - ist mir im moment zuviel anpassung
aber ich versuche gerade ein neues project - ich habe den firetv adapter nie stabil zum laufen bekommen - evtl versuche ich da mal was mit class und einem script ans laufen zu bekommen
auf jeden fall danke für die idee
-
@fastfoot sagte in Tasmota 10 und sonoff adapter:
habe das nochmal angesehen - habe nicht so viel erfahrung mit class. habe mal vor langer zeit ein java project gemacht - ist lange her.
das gefällt mir besonders:states.each(state => { const dp = state.split('.').pop(); let attr = dp.slice(dp.indexOf('_') + 1); this.dp[attr.toLowerCase()] = stateleider bin ich da am selben problem - ich muss die abfragen, um was es für dp geht , auch auf alle möglichkeiten hin abfragen. z.b dein attr. das beginnt nicht immer mit _Illuminance - es wird mittlerweile mit nur Illuminance im dp geschrieben, dafür ist es in einem anderen ordner in der sonoff-instanz
letztlich ist aber dein vorschlag interessant - man kann mit einer klasse alles abdecken - muss halt gut geschrieben sein - ändert sich was, muss nur die class geändert werden und nicht überall mit if gearbeitet werden
in meinem tabellescript werde ich das nicht verwenden - ist mir im moment zuviel anpassung
aber ich versuche gerade ein neues project - ich habe den firetv adapter nie stabil zum laufen bekommen - evtl versuche ich da mal was mit class und einem script ans laufen zu bekommen
auf jeden fall danke für die idee
@liv-in-sky sagte in Tasmota 10 und sonoff adapter:
z.b dein attr. das beginnt nicht immer mit _Illuminance - es wird mittlerweile mit nur Illuminance im dp geschrieben, dafür ist es in einem anderen ordner in der sonoff-instanz
aber das ist doch der Sinn der Klasse! Du möchtest einen DP abfragen der irgendwas mit illuminance enthält, entweder _illuminance oder Info1_Illuminance oder auch Info2.illuminance usw. Mit der Klasse werden die Attribute vereinfacht zu illuminance, egal in welcher Hierarchie sie stehen. Alles vor und incl. _ wird gelöscht. Das wäre auch schon der Nachteil, im tr-064 Adapter gibt es jede Menge json DP, da klappt das nur wenn man nicht den gesamten Adapter durchsucht sondern nur den nächst höheren Level. Für normale Geräte sollte es aber nur ein on oder rgb oder volume etc. geben und da ist es dann egal wo sie stehen.
In einer 2ten Version habe ich die Getter dynamisch erstellt, d.h. man muss die Klasse nicht anpassen sondern greift einfach auf NeuesLicht.NeuesFeature zu und erhält den Wert ohne ihn vorher in der Klasse explizit definiert zu haben und ohne zu wissen wo er genau steht. Auch ist es so erweitert dass man auch auf den Originalnamen zugreifen kann, also device.hostname und device.Info1_hostname liefern den gleichen Wert
Ich habe mir Teile deines Skriptes angesehen und denke immer noch dass das genau das ist was du brauchst. Allerdings müssen die DP eindeutige Namen haben, rgb etc darf nicht zweimal erscheinen.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden


