Ich bin etwas "quer" in die aktuellen AVM-Probleme gefallen - ich nutze das AVM-Plugin schon lange, aber bisher nicht mit Repeater.
Das Problem scheint, dass das genutzte TR064-Modul auf Informationen wie uptime und serial_number über die Eigenschaften des internet_sharing_devices zugreift - das ist aber eine Kategorie, die der Repeater (hier: 2400) nicht hat, weil es kein internet sharing device (oder internet gateway device, igd) ist.
Insofern sind die im "Fehler mit 1.9.4"-Thema geschilderten Probleme "korrekt", weil das darunterliegende Modul es nicht anders anbietet.
Ob es in TR064 noch andere Wege gibt, auf die gewünschten Daten zuzugreifen, weiß ich nicht, so tief stecke ich in TR064 nicht drin.
Ich habe mal einen PR gemacht, der zum Einen die Fehlerbehandlung so umsetzt, dass das FritzDevice dann nicht geladen wird. Wenn ihr möchtet, schaut euch das mal an.
Ankündigung
Einklappen
Keine Ankündigung bisher.
AVM Plugin
Einklappen
X
-
Zitat von kex Beitrag anzeigenFunktioniert leider nicht. Ich werd wohl mal weiter suchen. Aber einen Versuch war es wert ;-)
Code:sh.fb.cancel_call()
Zudem hat das bislang (warum auch immer) nicht zuverlässig funktioniert, so dass ich es so gemacht habe:
https://knx-user-forum.de/forum/supp...ngeln-asterisk
Probier mal.
Einen Kommentar schreiben:
-
Funktioniert leider nicht. Ich werd wohl mal weiter suchen. Aber einen Versuch war es wert ;-)
Einen Kommentar schreiben:
-
Code:sh.fb.start_call("**1") sh.fb.start_call("#811") ... sh.fb.cancel_call()
Einen Kommentar schreiben:
-
Hallo zusammen,
Ich will eigentlich die aktuell laufende Diskussion nicht unterbrechen und gehe eigentlich davon aus, dass mir ein kleiner Tipp reicht um weiter zu kommen:
ich würde gerne über das AVM Plugin DTMF Befehle an meine SIEDLE DoorCom Anlage senden. (z.B. über "#811" den Kettenruf aktivieren.)
Code:sh.fb.start_call("**1") // Hier weiss ich nicht was ich machen muss um die Folge "#811" senden zu können. sh.fb.cancel_call()
Einen Kommentar schreiben:
-
Die Fehlermeldung besagt, dass irgendein Element beim Zusammensetzen von device_string nicht vom Typ str ist. Welches das ist, müsstest Du herausfinden und mit einer Umwandlung str() in den Griff bekommen können.
Gruß
Wolfram
Einen Kommentar schreiben:
-
Hi,
Es klappt übrigens mit folgender Logic, aber nur wenn ich den Host Name abfrage.
Soblad ich IP und MAC hinzufüge bekomme ich die Fehlermeldung aus Kommentar #818
Ich bin aber mit dem Name zufrieden. Danke für euren Support.
Code:hosts = sh.AVMRouter.get_hosts(True) hosts_eg = sh.RepeaterEG.get_hosts(True) hosts_og = sh.RepeaterOG.get_hosts(True) for host_eg in hosts_eg: new = True for host in hosts: if host_eg['mac_address'] == host['mac_address']: new = False if new: hosts.append(host_eg) for host_og in hosts_og: new = True for host in hosts: if host_og['mac_address'] == host['mac_address']: new = False if new: hosts.append(host_og) string = [] for host in hosts: device_string = host['name'] string.append(device_string) sh.AVM.devices.device_list(string)
Einen Kommentar schreiben:
-
Das folgende wird immer nur einen String liefern:
Zitat von fuxl66 Beitrag anzeigenCode:string = '' for host in hosts: device_string = host['name']+':'+host['ip_address']+', '+host['mac_address'] string += device_string
Da musst Du schon eine Liste befüllen, wenn am Ende eine Liste rauskommen soll. z.B. so:
Code:string = [] for host in hosts: device_string = host['name']+':'+host['ip_address']+', '+host['mac_address'] string.append(device_string)
Zitat von fuxl66 Beitrag anzeigenCode:device_string = host.get('name','')+':'+host.get('ip_address','')+ ', '+host.get('mac_address','')
Um das zu überprüfen, kannst Du vor der for Schleife den Inhalt von hosts mal Loggen.
Einen Kommentar schreiben:
-
Code:device_string = host.get('name','')+':'+host.get('ip_address','')+ ', '+host.get('mac_address','')
Einen Kommentar schreiben:
-
Mit der Zeile sh.AVM.devices.device_list(string) weist Du dem Item das eigentlich eine Liste sein soll einen String zu. Das scheint aber so schon in der Doku zu stehen.
Die Zeile 24 geht auf die Bretter, wenn ein Element des dicts mit None belegt ist. Du könntest dort schreiben
Code:device_string = host.get('name','')+':'+host.get('ip_address','')+ ', '+host.get('mac_address','')
Einen Kommentar schreiben:
-
Es klappt leider noch nicht.
Logic:
Code:hosts = sh.AVMRouter.get_hosts(True) hosts_eg = sh.RepeaterEG.get_hosts(True) hosts_og = sh.RepeaterOG.get_hosts(True) for host_eg in hosts_eg: new = True for host in hosts: if host_eg['mac_address'] == host['mac_address']: new = False if new: hosts.append(host_eg) for host_og in hosts_og: new = True for host in hosts: if host_og['mac_address'] == host['mac_address']: new = False if new: hosts.append(host_og) string = '' for host in hosts: device_string = host['name']+':'+host['ip_address']+', '+host['mac_address'] string += device_string sh.AVM.devices.device_list(string)
Code:AVM: devices: device_list: type: list visu_acl: rw
Code:2022-08-29 09:01:07 ERROR logics.AVM_Hosts In der Logik ist ein Fehler aufgetreten: Logik 'AVM_Hosts', Datei '/usr/local/smarthome/logics/AVM.py', Zeile 24 Hauptroutine der Logik, Exception: can only concatenate str (not "NoneType") to str
Sobald ich in Zeile 24 nur "host['name']" verwende klappt es zwar aber ich bekomme eine andere Fehlermeldung ins LOG
Code:WARNING lib.item.item Item AVM.devices.device_list: value "PC-DC-F7-56-D3-0F-80PC-192-168-0-36PC-A8-DB-03-B8-46-35PC-F8-C3-9E-15-E5-39" does not match type list. Via Logic None
Einen Kommentar schreiben:
-
1) Du fängst mit einem leeren String an, lässt die <li> und </li> in device_string weg und lässt auch die Addition von </ul> am Ende weg.
2) Das item im Beispiel heißt avm.devices.device_list. Also muss Dein item auch so benannt werden, oder Du änderst die Anweisung in der Logik in sh.hier_kommt_Dein_item(string). visu_acl sollte auch noch gesetzt werden, damit die Visu auf das item zugreifen kann.
Gruß
Wolfram
Einen Kommentar schreiben:
-
Zitat von wvhn Beitrag anzeigenEin Beispiel für eine Logik steht schon in der Doku. In Deinem Fall kannst Du auf die beiden Funktionsaufrufe für die Repeater und die entsprechenden Schleifen verzichten. Zudem musst Du die html-Tags <ul> und <li> weglassen, denn die fügt das SV-Widget basic.listview später selbst ein.
Gruß
Wolfram
2 Fragen ergeben sich:
1)Code:string = '<ul>' for host in hosts: device_string = '<li><strong>'+host['name']+':</strong> '+host['ip_address']+', '+host['mac_address']+'</li>' string += device_string string += '</ul>' sh.avm.devices.device_list(string)
2)Code:device_list: type: list
Sorry für meine (blöden) Fragen.
Einen Kommentar schreiben:
-
Ein Beispiel für eine Logik steht schon in der Doku. In Deinem Fall kannst Du auf die beiden Funktionsaufrufe für die Repeater und die entsprechenden Schleifen verzichten. Zudem musst Du die html-Tags <ul> und <li> weglassen, denn die fügt das SV-Widget basic.listview später selbst ein.
Gruß
WolframZuletzt geändert von wvhn; 28.08.2022, 10:20.
Einen Kommentar schreiben:
-
Hi,
Könnte mir bitte jemand helfen " get_hosts(only_active) "in eine Logic/item zu packen um es in weiterer Folge via basic.listview in SV auszugeben?
Hab irgendwie grade keinen Plan wie ich das machen muss.
Danke
Markus
Einen Kommentar schreiben:
Einen Kommentar schreiben: