Anfänger: Gerät aus mehreren Quellen steuern, trotzdem aktuellen Status anzeigen
Verfasst: 20. Feb 2018 20:02
Hallo,
ich habe seit 2 Wochen angefangen mich mit dem Thema openHAB zu beschäftigen. Verzeiht mir deshalb meine Unwissenheit
Ein paar einfache Sachen funktionieren schon: Sonoff Wandschalter An/Aus, das ganze auch über die Oberfläche und über Alexa..., yahoo weather, openhabcloud, astro
Meine Geräte die rumstanden, und zufällig ein Binding für OpenHAB besitzen sind eingebunden (AmazonDash Button, DVD Player, TV, Bose Box) und können aktuell mehr schlecht als recht gesteuert werden - dazu gleich mehr...
Zusätzlich habe ich mir einen kleinen IR-Sender auf ESP8266-Basis gebastelt, der über HTTP Posts beliebige IR- und 433 Mhz-Signale verschicken kann.
Anfangs habe ich meine Items über die PaperUI angelegt. Nachdem ich keinen sinnvollen Weg des Backups gefunden habe, und ich sowieso lieber code als klicke, ist alles nach und nach in die jeweiligen Config-Files gewandert
Außerdem gibt es einige wenige lambdas, die doppelten Code soweit möglich vermeide sollen.
Soviel vorneweg:
Jetzt zu meinem eigentlichem Problem:
- Mein TV kann via Binding nur OFF geschalten werden. Das Binding liefert aber den aktuellen Status des TV zuverlässig zurück. (TV_POWER)
- Via selbstbau IR ("multicontroller") kann ich ON und OFF schalten - habe aber keinen Rückkanal/Status. (esp8266_TV_ONOFF)
- Via Fernbedienung gilt das gleiche
Ich habe also 3 Möglichkeiten zu schalten, wobei eine den aktuellen Status repräsentiert und dafür sorgen soll, dass der Status der jeweils anderen "richtig" gesetzt wird - natürlich ohne zu schalten
Ich bin jetzt auf der Suche nach einer Lösung (am besten ein halbwegs allgemein gültiges Pattern
) welches:
a) dafür sorgt, dass ich auf der Sitemap einen einzigen Schalter für den TV habe, der den aktuellen Status anzeigt und in beide Richtungen schaltbar ist
b) dafür sorgt, dass - egal wie der TV bedient wird - dieser Schalter den korrekten Status anzeigt
c) fürs schalten des TVs benutzt werden kann.
Ich denke mal ich bin der Hunderste mit dieser Problemstellung, deshalb vermute ich, dass es hier bereits ein sinnvolles pattern zur Lösung gibt und ich nur zu doof zum finden bin
Vielen Dank für eure Hinweise zum Algorithmus
folgendes habe ich implementiert:
*.items
*.rules
Ziel soll dann irgendwann sein, das komplette HiFi-Setup + TV + Licht via Dash-Button in den DVD-Abend-Modus zu vesetzen - mit Rücksicht darauf, was schon an war, gedimmt ist, etc... 
ich habe seit 2 Wochen angefangen mich mit dem Thema openHAB zu beschäftigen. Verzeiht mir deshalb meine Unwissenheit

Ein paar einfache Sachen funktionieren schon: Sonoff Wandschalter An/Aus, das ganze auch über die Oberfläche und über Alexa..., yahoo weather, openhabcloud, astro
Meine Geräte die rumstanden, und zufällig ein Binding für OpenHAB besitzen sind eingebunden (AmazonDash Button, DVD Player, TV, Bose Box) und können aktuell mehr schlecht als recht gesteuert werden - dazu gleich mehr...
Zusätzlich habe ich mir einen kleinen IR-Sender auf ESP8266-Basis gebastelt, der über HTTP Posts beliebige IR- und 433 Mhz-Signale verschicken kann.
Anfangs habe ich meine Items über die PaperUI angelegt. Nachdem ich keinen sinnvollen Weg des Backups gefunden habe, und ich sowieso lieber code als klicke, ist alles nach und nach in die jeweiligen Config-Files gewandert

Soviel vorneweg:

- Mein TV kann via Binding nur OFF geschalten werden. Das Binding liefert aber den aktuellen Status des TV zuverlässig zurück. (TV_POWER)
- Via selbstbau IR ("multicontroller") kann ich ON und OFF schalten - habe aber keinen Rückkanal/Status. (esp8266_TV_ONOFF)
- Via Fernbedienung gilt das gleiche
Ich habe also 3 Möglichkeiten zu schalten, wobei eine den aktuellen Status repräsentiert und dafür sorgen soll, dass der Status der jeweils anderen "richtig" gesetzt wird - natürlich ohne zu schalten

Ich bin jetzt auf der Suche nach einer Lösung (am besten ein halbwegs allgemein gültiges Pattern

a) dafür sorgt, dass ich auf der Sitemap einen einzigen Schalter für den TV habe, der den aktuellen Status anzeigt und in beide Richtungen schaltbar ist

b) dafür sorgt, dass - egal wie der TV bedient wird - dieser Schalter den korrekten Status anzeigt
c) fürs schalten des TVs benutzt werden kann.
Ich denke mal ich bin der Hunderste mit dieser Problemstellung, deshalb vermute ich, dass es hier bereits ein sinnvolles pattern zur Lösung gibt und ich nur zu doof zum finden bin

Vielen Dank für eure Hinweise zum Algorithmus
folgendes habe ich implementiert:
*.items
Code: Alles auswählen
//Switch am samsungtv-binding, mit korrektem Rückgabestatus
Switch TV_Power "Power" { channel="samsungtv:tv:livingroom:power"}
//Switch am "multicontroller" - Status ist falsch, wenn über Fernbedienung eingeschalten wird...
//hier hätte ich gerne ein automatisches Update, wenn TV_Power mekt, dass der TV angeschalten wurde
//aber ohne, dass der Schaltvorgang "sendIRCommand.apply() von esp8266_TV_ONOFF erneut ausgeführt wird
Switch esp8266_TV_ONOFF "Fernseher, Samsung" (LivingRoom) [ "Switchable" ] { autoupdate="false" }
Code: Alles auswählen
/************** Samsung TV **************/
rule "virtual - Samsung TV - OnOff"
when
Item esp8266_TV_ONOFF received command
then
logInfo("esp8266_TV_ONOFF", "Command was " + receivedCommand.toString)
if (receivedCommand == ON)
{
if(TV_Power.state != ON /*Not Already runnning*/) {
sendIRCommand.apply("samsung", "E0E040BF")
}
else { logInfo("TV", "already on")}
}
else{
if(TV_Power.state != OFF /*Not already off*/) {
sendIRCommand.apply("samsung", "E0E040BF")}
else { logInfo("TV", "already off")}
}
end
