au man ... wie mach ich das ?! Also wie muss ich vorgehen ?
Bzw.: Wie ist das gemeint =? Wäre das auch eine Methode ? :
https://community.openhab.org/t/xiaomi-robor…anup-rule/55138
au man ... wie mach ich das ?! Also wie muss ich vorgehen ?
Bzw.: Wie ist das gemeint =? Wäre das auch eine Methode ? :
https://community.openhab.org/t/xiaomi-robor…anup-rule/55138
Sodele - mit der oben genannten Methode kann ich Räume saugen lassen die ich über die Map in der XiHomeApp benannt hab.
Nun zur Alexa Rule:
Genutzt wird das Echo binding - meine Idee war es wenn ich etwas bestimmtes sag - das Last Voice Command den Sauger triggert und fahren lässt:
rule "Alexa - Wohnzimmer saugen"
when
Member of Amazon_Echos changed to "saug das Wohnzimmer"
then
val currentEcho = Amazon_Echos.members.sortBy[lastUpdate].last
{sendCommand(XiaVac_action_Command,"app_segment_clean[16]" )
}
end
Alles anzeigen
Er macht aber mit der Rule gar nichts.
Diese Rule hab ich abgewandelt von einer bestehenden bei mir (funktionierend)
ule "Alexa - Fenster offen"
when
Member of Amazon_Echos changed to "sind noch fenster offen"
then
val currentEcho = Amazon_Echos.members.sortBy[lastUpdate].last
val OffeneFenster = Fenster.members.filter[ i | i.state == OPEN ].map[ label ].reduce[ s, label | s + ", " + label ]
if(Fenster.state == OPEN) {
////// Echo_Kitchen_TTS.sendCommand("Achtung, folgende Fenster sind geöffnet. " + OffeneFenster)
currentEcho.sendCommand("Ja, folgende Fenster sind geöffnet. " + OffeneFenster)
}
else {
////// Echo_Kitchen_TTS.sendCommand("Keine Fenster sind geöffnet")
currentEcho.sendCommand("Nein alle Fenster sind zu")
}
end
Alles anzeigen
Leider muss ich irgendwo ein Fehler haben - vielleicht sieht ihn jemand.
Bei der Fenster Rule geht es. Wenn sich mein "LastVoiceCommand auf "sind noch fenster offen" ändert startet die Abfrage Rule.
Wenn sich aber bei der Sauger Rule der LastVoiceCommand auf "saug das Wohnzimmer" ändert schiest er den sendcommand nicht ab.
deine rule erscheint mir ein wenig konfus.
1. changed to "saug das Wohnzimmer" ist keine gute lösung lösung. da solltest du nur auf changed als trigger setzen und in der rule eine if abfrage mit contains machen.....bspw
if(triggeringItem.state.toString.contains("saug das wohnzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[16]"
}
2. wenn du keinen value der zuletzt angesprochenen alexa in deiner rule nutzt, dann brauchst du den natürlich auch nicht erstellen.
@xSaSx die geschweiften klammern in der rule sind auch falsch wenn der sendcommand befehl nicht von irgendwas abgetrennt ist.
ok - aber bei der fenster rule geht es doch auch so `?!
Warum hier nicht ?
Also du meinst es dann so :
rule "Alexa - Wohnzimmer saugen"
when
Member of Amazon_Echos received update
then
if(triggeringItem.state.toString.contains("saug das wohnzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[16]")
}
end
Alles anzeigen
"Amazon_Echos" Gruppe hinter mehreren Echos für den "LastVoiceCommand"
Kann ich das dann einfach im IF auch einsetzen ? also GruppenName "Amazon_Echos.state.toString.contains" oder geht das beiu Gruppen nicht.
Will ja das egal auf welchem Echo ich das Frage oder sage er das macht
ok - aber bei der fenster rule geht es doch auch so `?!
Warum hier nicht ?
das macht keinen sinn es so umzusetzen. dann bräuchtest du für jeden raum eine rule.
deswegen sollte man da contains in einer zusätzlichen abfrage nutzen.
contains hat auch noch den vorteil, dass der wortlaut nicht komplett übereinstimmen muss um die rule zu triggern sondern nur eine wortkette.
wenn du bspw ....toString.contains(" wohnzimmer saugen") in der rule nutzt, dann wird die rule auch getriggert wenn du sagst "Alexa, sofort das wohnzimmer saugen, aber zackig".
Kann ich das dann einfach im IF auch einsetzen ? also GruppenName "Amazon_Echos.state.toString.contains" oder geht das beiu Gruppen nicht.
nein wozu...du benutzt als rule trigger Member of Amazon_Echos received update
also sobald von dir ein mitglied der gruppe angesprochen wird triggert die rule.
in dem folgenden abschnitt wird immer das item geprüft, welches die rule getriggert hat
triggeringItem.state.toString.contains
....somit sind alle mitglieder der gruppe abgedeckt.
es ist also unerheblich welche alexa du ansprichst wenn sie mitglied deiner gruppe ist.
ok nun hab ichs verstanden ! ich denk einfach immer zu statisch und dediziert - alles klar...
wie verpackt man dann mehrere räume und befehle in eine rule ?
also zB:
Member of Amazon_Echos received update
then
if(triggeringItem.state.toString.contains("saug das wohnzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[16]")
OR ??
IF ???
(triggeringItem.state.toString.contains("saug das schlafzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[17]")
}
Alles anzeigen
einfach mehrere if abfragen hintereinander
if(triggeringItem.state.toString.contains("saug das wohnzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[16]")
if (triggeringItem.state.toString.contains("saug das schlafzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[17]")
if (triggeringItem.state.toString.contains("saug das scheisshaus")){
sendCommand(XiaVac_action_Command,"app_segment_clean[17]")
du kannst mit contains auch noch mehr rumspielen um noch freier beim wortlaut zu sein. dafür nutzt du die und abfrage bei if
if(triggeringItem.state.toString.contains("saug") && triggeringItem.state.toString.contains("wohnzimmer")){
sendCommand(XiaVac_action_Command,"app_segment_clean[16]")
dann würde send command abgesetzt werden wenn "saug" und "wohnzimmer" im befehl vorkommt.
Also auch bei "Alexa, saug an mir im Wohnzimmer"
Langsam komm ich dahinter - mir ist bei so einem Rule bau einfach noch vieles unbewusst - vom aufbau etc .
Powershell ist halt doch etwas anders
Ich danke dir wie immer und mach mir mal ans bauen !
ok nun nochmal ein rule thema:
also hab mir jetzt die Rule für Alexa gebaut mit allen Räumen - das tut soweit - will aber noch eine pushbenachrichtigung wenn er fertig ist - was muss ich da abfragen ? bzw wie geht das ?
nun will ich aber noch für die GUI schalter.
Also hab ich nen dummy schalter gemacht:
mit dieser rule verknüpft:
rule "WZ Saugen"
when
Item WZ_Saugen received command
then
if (receivedCommand==ON){
sendCommand(XiaVac_action_Command,"app_segment_clean[18]" )
}
end
das tut auch - wenn er fertig ist geht der schalter aber nicht auf OFF zurück sondern bleibt ein (was ziemlich doof und verwirrend ist)
zusätzlich frag ich mich jetzt ob ich für jeden raum eine eigene rule file wie oben brauch oder ob ich das in eine packen kann ?! hier würde ich mir dann wie bei der alexa rule auch gerne wenn fertig eine pushbenachrichtigung senden lassen
Ich spinn mal rum und sage sie soll trigern wenn er den status zurück zum dock bekommen ?!
also hab mir jetzt die Rule für Alexa gebaut mit allen Räumen - das tut soweit - will aber noch eine pushbenachrichtigung wenn er fertig ist - was muss ich da abfragen ? bzw wie geht das ?
da musste den status channel für nehmen. das sollte der in_cleaning sein.
weiss gerade nicht was der channel empfängt...entweder waren das 0-100% oder nur 0= aus und 1= ein. musst du mal prüfen.
dementsprechend muss deine rule aussehen.
bspw wenn status 0=aus 1= saugen ist und dein item mit dem channel in_cleaning den unique-namen Sauger_Status hat
rule "saugen"
when
Item Sauger_Status changed from 1 to 0
then
val telegramAction = getActions("telegram","telegram:telegramBot:bot")
telegramAction.sendTelegram("Hallo, die Hütte wurde gesaugt ")
end
telegram optionen müssen natürlich auf deine config angepasst werden
das tut auch - wenn er fertig ist geht der schalter aber nicht auf OFF zurück sondern bleibt ein (was ziemlich doof und verwirrend ist)
es ist nicht notwendig alle dummies für die räume in die sitemap einzubauen. nutze lieber selection dafür. dann wird das so ein dropdownmenü und du machst die sitemap nicht unnötig voll
für selection erstellst du dir ein dummy item:
String Zimmerauswahl "Staubsauger" <pump>
in die sitemap folgendes:
Selection item=Zimmerauswahl mappings=[aus="Bitte wählen",wz="Wohnzimmer",sz="Schlafzimmer"]
jetzt hast du in der sitemap schonmal das menü.
jetzt fehlt noch eine erule, die den dummy switches sagt das bspw wohnzimmer gesaugt werden soll wenn wohnzimmer im menü angeklickt wird.
dafür nimmst du am besten eine case rule...bspw:
rule "sauger sitemap"
when
Item Zimmerauswahl changed
then
switch Zimmerauswahl.state.toString {
case "wz": {
WZ_Saugen.sendCommand(ON)
}
case "sz": {
SZ_Saugen.sendCommand(ON)
}
}
end
Alles anzeigen
deine dummies werden also vom selection item gesteuert.
du kannst natürlich die optionen nach belieben erweitern....bspw mit "Alle Räume"
jetzt siehst du ja das ich im selection item die option aus="Bitte wählen" drin hab.
dieser punkt soll nach dem saugen natürlich aktiviert werden.
dafür erweiterst du einfach die erste rule mit der push benachgrichtigung mit der zeile
Zimmerauswahl.postUpdate("aus")durch diese kombination von rules und items brauchst du sowohl für die reinigung von einzelnen räumen als auch für die statusanzeige des saugers nur einen einzigen eintrag in der sitemap.
Klingt sehr geil - kann es aktuell nicht testen aber hab es mal so gebaut (untested) :
item:
sitemap:
Selection item=Zimmerauswahl mappings=[aus="Bitte wählen",all="Alle Räume",wz="Wohnzimmer",ez="Esszimmer",ku="Küche",fl="Flur"]
rule:
rule "Staubsauger Sitemap"
when
Item Zimmerauswahl changed
then
switch Zimmerauswahl.state.toString {
case "wz": {
sendCommand(XiaVac_action_Command,"app_segment_clean[16]")
}
case "ez": {
sendCommand(XiaVac_action_Command,"app_segment_clean[17]")
}
case "fl": {
sendCommand(XiaVac_action_Command,"app_segment_clean[18]")
}
case "ku": {
sendCommand(XiaVac_action_Command,"app_segment_clean[19]")
}
case "all": {
sendCommand(XiaVac_action_Command,"app_segment_clean[16,17,18,19]")
}
}
end
rule "Staubsauger Überwachung: Benachrichtigung"
when
Item XiaVac_status_CleanStats changed from 3 to 0
then
pushover("azXXXkx83jXXXXX6foiXXX7xaz", "upXXXXZbYs9XXMWVuBXXXXXfwK", "Staubsauger: Fertig !")
Zimmerauswahl.postUpdate("aus")
end
Alles anzeigen
du sendest jetzt direkt die koordinaten anstatt das kommando zu den dummy items zu schicken.
dadurch fehlt in der sitemap natürlich möglichkeit anzuzeigen welcher raum gesaugt wird wenn du per sprache startest.
ja aber die Anzeige in der sitemap springt so nicht auf den Raum in dem gesaugt wird.
Für dich vlt unwesentlich, für mich ein Schönheitsfehler
ja bspw so kannst du das machen.
wenn du es so umsetzen willst dann natürlich auch Zimmerauswahl.postUpdate("wz") usw usw
Ich will mir demnächst auch einen kleinen Staubsklaven anschaffen, es wird wohl der Xiaomi Mijia S1 werden, weiss zufällig einer von euch wie hoch z.b. ein Sofa mindestens sein muss damit der drunter fährt?
ca 1-2 cm höher als der sauger muss es schon sein.....also grob 12cm.
supi das sollte noch passen, thx
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!