Hallo OH Spezialisten,
für ein Binding mit dem ich wechselnde Variablen über http holen möchte, brauche ich dynamisch erzeugte Items in OH. Also statt einem statischen *.items File sollen die Items dynamisch per Binding erzeugt werden (nachdem die Konfiguration des Gerätes abgefragt wurde) und in OH verfügbar gemacht werden.
Aktuell habe ich das schon zum Teil erreicht über die Funktion org.openhab.core.items.ItemProvider:getItems()
zB so:
Nur möchte ich nun auch die url für das http-Binding dynamisch in OH erzeugen. Soweit ich es verstanden habe müsste ich die Funktion org.openhab.binding.http.internal.HttpGenericBindi ngProvider-processBindingConfiguration in meinem Binding ansprechen können um so etwas hinzubekommen.
Nur lässt sich (zumindest hab ich es nicht hin bekommen) dieser "internal" Teil des http-Binding nicht über OSGI einbinden weder über eine Referenz (set, unset) noch über einen Service Provider (service,provide:interface).
Hat jemand Ideen wie ich das evtl. sauber lösen kann?
Mir ist klar, dass OH (derzeit noch) nicht dafür gedacht ist solche Funktionalität zu bauen, aber ich will mal vorgreifen.
Danke für Eure Gedanken dazu.
Helmut
für ein Binding mit dem ich wechselnde Variablen über http holen möchte, brauche ich dynamisch erzeugte Items in OH. Also statt einem statischen *.items File sollen die Items dynamisch per Binding erzeugt werden (nachdem die Konfiguration des Gerätes abgefragt wurde) und in OH verfügbar gemacht werden.
Aktuell habe ich das schon zum Teil erreicht über die Funktion org.openhab.core.items.ItemProvider:getItems()
zB so:
Code:
@Override public Collection<Item> getItems() { logger.info("### DynItemService! ### getItems called in "+this); //TEST: http://localhost:8080/rest/items/dynItemNAME GenericItem item = new GenericItem("dynTestItem") { @Override public List<Class<? extends State>> getAcceptedDataTypes() { List<Class<? extends State>> list = new ArrayList<Class<? extends State>>(); list.add(StringType.class); return list; } @Override public List<Class<? extends Command>> getAcceptedCommandTypes() { List<Class<? extends Command>> list = new ArrayList<Class<? extends Command>>(); list.add(StringType.class); return list; } }; GroupItem g = new GroupItem("dynItemNAME", item); StringItem srtt1 = new StringItem("memberStrinItem1"); NumberItem srtt2 = new NumberItem("memberNumberItem2"); NumberItem srtt3 = new NumberItem("memberNumberItem3"); srtt1.setState(new StringType("StringType String Value")); srtt2.setState(new PercentType(10)); srtt3.setState(new DecimalType(10.11)); g.addMember(srtt1); g.addMember(srtt2); g.addMember(srtt3); dynEnergyItems.put("item1", g); return dynEnergyItems.values(); }
Nur lässt sich (zumindest hab ich es nicht hin bekommen) dieser "internal" Teil des http-Binding nicht über OSGI einbinden weder über eine Referenz (set, unset) noch über einen Service Provider (service,provide:interface).
Hat jemand Ideen wie ich das evtl. sauber lösen kann?
Mir ist klar, dass OH (derzeit noch) nicht dafür gedacht ist solche Funktionalität zu bauen, aber ich will mal vorgreifen.
Danke für Eure Gedanken dazu.
Helmut