[gelöst] Fhem , Alexa für Anfänger

Begonnen von apohero, 10 November 2020, 14:05:55

Vorheriges Thema - Nächstes Thema

apohero

Hallo zusammen,

ich bin neu bei FHEM und habe vorher die habridge bzw ein Fuaxmo skript verwendet um meine Lampen zu steuern. Leider funktioniert die ha bridge seit ein paar Wochen nicht mehr. Trotz update findet Alexa meine Geräte nicht mehr.
Jetzt habe ich zu FHEM gewechselt und mit dem Connector und fhem alexa findet er meinen dummy Versuch, den ich in einer Anleitung gefunden habe.
Soweit so gut aber ich möchte ganz simpel, mit Alexa an, aus und dimmen bewerkstelligen. Bei an soll der http request http://192.168.178.33//api/?action=set&ext=DimmerEG&io=Q2&value=100 bei aus http request http://192.168.178.33//api/?action=set&ext=DimmerEG&io=Q2&value=0 geschickt werden.
Beim Dimmen hat früher immer http request http://192.168.178.33//api/?action=set&ext=DimmerEG&io=Q2&value={intensity.percent}  funktioniert.

In FHEM funktioniert der folgende direkte Befehl:
{my $energyTotal = 80;;GetHttpFile("192.168.178.33", "/api/?action=set&ext=DimmerEG&io=Q2&value=$energyTotal")}

Wie erstelle ich nur ein entsprechendes device in FHEM damit die 3 Funktionen klappen?
Ich danke euch schonmal vorab. Ich bin im Forum leider nicht zu 100% fündig geworden.
lg

justme1968

zuerst legst du dir einen dummy an mit den gewünschten kommandos und readings und schaust das du in in fhemweb korrekt bedienen kannst.

hierzu brauchst du passende setList, readingsList, stateFormat und webCmd attribute.

wenn das so weit geht kannst du an deinen dummy ein oder mehrere notify. hängen die den http code ausführen.

wenn das geht bindest du den dummy in alexa wie jede andere lampe in fhem ein. wenn du in 1. deine readings so benannt hast wie alexa-fhem sie erwarte geht alles automatisch. wenn nicht musst du ein passendes homebridgeMapping konfigurieren.


was sind das für Lampen und warum steuerst du sie nicht direkt über fhem?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

apohero

Hallo,
und danke für die Antwort. Ich habe schon viel probiert und einige Beispiele aus dem Forum getestet aber leider ohne Erfolg. Aktuell bin ich soweit, weiß aber nicht warum es nicht geht (siehe Anhang)

apohero

achso, noch zu den Lampen: Ich habe Comexio als Haussteuerung und die API nimmt http requests entgegen

MadMax-FHEM

#4
Poste doch bitte besser lists der Devices statt ScreenShots!


list Grilllicht



list html_aufruf


Und dann hier in "code-Tags" (das '#' im "Menü") posten.

Ich denke es fehlt das Attribut "setList on off" beim dummy...


attr Grilllicht setList on off


EDIT: wenn du den { GetHttpFile("...") } Aufruf in FhemWeb-cmd eingibst funktioniert das?

EDIT: kleine Anmerkung: der Aufruf GetHttpFile blockiert fhem. Wenn es immer schnell geht, mag das "egal" sein, ich wollte es nur anmerken! Es gibt auch nonblockingGet...

EDIT: die FUUID musst du nicht unkenntlich machen ;) Die ist nur eine fhem-interne eindeutige "Kennung" zur eindeutigen "Identifizierung" von Devices innerhalb DEINES fhem... Also nichts groß etwas wo jemand was damit anfangen oder "missbrauchen" könnte ;)

EDIT: beim notify sieht man sie ja auch ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

apohero

Hi,

und danke.Hier die Ausgabe:
Internals:
   FUUID      5fa3ed86-f33f-b4c0-ae4b-31c170c434360afa
   NAME       Grilllicht
   NR         17
   STATE      off
   TYPE       dummy
   READINGS:
     2020-11-10 14:59:00   state           off
Attributes:
   alexaName  Licht Grill
   genericDeviceType switch
   setList    on off
   webCmd     on:off


und


Internals:
   DEF        Grillicht:on { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=40") }
   FUUID      5fa3f82b-f33f-b4c0-aa9f-30644ab9b3dbd9e4
   NAME       html_aufruf
   NR         18
   NTFY_ORDER 50-html_aufruf
   REGEXP     Grillicht:on
   STATE      active
   TYPE       notify
   READINGS:
     2020-11-10 12:33:17   state           active
Attributes:


code-tags sehe ich leider nicht.
wie gesagt  das {my $energyTotal = 80;;GetHttpFile("192.168.178.33", "/api/?action=set&ext=DimmerEG&io=Q2&value=$energyTotal")} geht
lg

MadMax-FHEM

#6
Geht es jetzt mit setList?

Noch mal ein reload beim Alexa-Device gemacht?

EDIT: also wird der dummy per Sprache ein/aus geschaltet?

Code-Tags, wie ich geschrieben hatte: oben, oberhalb der Smilys im "Menü" das '#'...

Man kann den Beitrag auch nachträglich bearbeiten...

Noch mal zur Sicherheit: wenn du das hier

{ GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=40") }

oben in das FhemWeb-cmd eingibst, funktioniert es?

Wie hast du das notify "erzeugt"?
Über den Eventmonitor?
Vermutlich nicht, weil: Grillicht != Grilllicht ;) so kann das notify nicht ausgelöst werden...
https://wiki.fhem.de/wiki/Event_monitor

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

apohero

Hi,
also Grillicht sieht nun so aus:

Internals:
   FUUID      5fa3ed86-f33f-b4c0-ae4b-31c170c434360afa
   NAME       Grilllicht
   NR         17
   STATE      on { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80") }
   TYPE       dummy
   READINGS:
     2020-11-10 19:33:03   state           on { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80") }
Attributes:
   alexaName  Licht Grill
   genericDeviceType light
   setList    on off
   webCmd     on:off


und das notify:
Internals:
   DEF        Grilllicht:.* set Grilllicht on { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80") }
   FUUID      5fa3f82b-f33f-b4c0-aa9f-30644ab9b3dbd9e4
   NAME       html_aufruf
   NOTIFYDEV  Grilllicht
   NR         18
   NTFY_ORDER 50-html_aufruf
   REGEXP     Grilllicht:.*
   STATE      2020-11-10 19:33:03
   TRIGGERTIME 1605036783.53043
   TYPE       notify
   READINGS:
     2020-11-10 19:22:38   state           active
Attributes:

Ich arbeite mit Alexa und wenn ich sage "Alexa schalte Licht Grill an" kommt folgendes im EventMonitor:

2020-11-10 19:32:34 dummy Grilllicht on
2020-11-10 19:32:34 dummy Grilllicht on { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80") }
2020-11-10 19:33:03 dummy Grilllicht on
2020-11-10 19:33:03 dummy Grilllicht on { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80") }


Das Licht geht aber nicht an. Wenn ich  aber { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80") } in fhem eingebe geht die Lampe an.


Den Hash sehe ich nicht. Neben dem Smiley ist nur ein + symbol indem ein leeres Fenster aufploppt.


MadMax-FHEM

#8
Oberhalb der Smilys ist eine "Menü-Leiste" mit "Icons" und da ist ein '#' zu finden...
Neben der Möglichkeit andere Formatierungen wie Schriftgröße etc. einzustellen.

So ist es nicht wirklich lesbar...

Und ob beim dummy das Licht an geht, er also per Sprache ein/aus geschaltet wird hast du nicht beantwortet...

Steht etwas im fhem-Log?

Hast du das notify mal per Eventmonitor anlegen lassen?

EDIT: warum hast du plötzlich das notify komplett "umgebaut"!!? Ins notify gehört NUR der Aufruf von der API-url genauso wie es vorher war? Und genauso wie es in fhemWeb funktioniert! Also KEIN set dummy on!!! Weil wozu das!? Der dummy wird per Sprache gesteuert und das notify reagiert darauf und schaltet dann per Api-Aufruf das "echte" Licht. Und ob der dummy noch passt sehe ich, wenn das list besser lesbar ist...

EDIT: das notify also so wie aus dem Sreenshot. Und den dummy nur mit zusätzlich setList. So wie ich geschrieben hatte! Und dann eben testen, ob der dummy schaltet... Und nicht einfach wild alles umbauen. So ist helfen nicht "lustig"... ;)

EDIT: bitte in die fhem-Grundlagen einlesen. Und auch bzgl. Events und notify etc.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

apohero

Hi,

danke erstmal für die Tipps on und off gehen nun.
Den Hash habe ich immer noch nicht gefunden, meine Oberfläche sieht wie im Anhang aus.
Den notify habe ich nach deinen Tipp mal mit dem Eventmonitor angelegt, deshalb sah der anders aus. Nachdem ich diesen mit den alten notify abgeglichen habe ging nun ein Schaltvorgang, was mich sehr glücklich macht. Auch mit Alexa ging es.*jubel*
Was ich nun noch dringend brauche ist das Dimmen, da habe ich keine Ahnung wie ich das intensity.percent aus dem http call in einem Notify unterbringe. Ist das vielleicht mit den setlist on off pct ?

Noch etwas was mich nicht so hübsch ist, ist das ich für jeden on off und jedes Gerät ein notify gerade anlege. Ich habe gesehen das man auch Funktionen definieren kann, aber mir würde auch 1 notify mit pipes genügen. Dann wäre es eins für jedes Gerät. Gibt es sowas?
mfg

MadMax-FHEM

#10
Von welchem "hash" sprichst du immer?

Was soll mir dein Bild zeigen?

Ja, es geht nat. ein notify pro Gerät/Device.
Du kannst $EVENT mittels if/elsif "auswerten" und dann entsprechend den passenden Http-Request absetzen. Würde ich aber dann in eine Sub in myUtils auslagern...
https://wiki.fhem.de/wiki/99_myUtils_anlegen

Was auch geht: DOIF statt notify mit if/elsif. Da kann ich aber nicht helfen...

Ich werde morgen mal versuchen was zu posten...

Bzgl. dim kann ich auch mal schauen.

Bin grad nur "mobil"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

apohero

Hi,

ich meine die Raute "#" von der du sprachst.
Danke nochmal für deine Mühen, weiß ich wirklich zu schätzen.
Ich schaue mir derweilen die myutils an.

lg

MadMax-FHEM

#12
Welchen Browser hast du?
Wie schreibst du hier im Forum?

Also bei mir sind oberhalb "dieses Tipp-Fensters" wo ich meinen Text eintrage Smileys und da drüber eben einige Icons/Buttons um z.B. die Schriftfarbe, Schriftart zu ändern etc. und genau da gibt es die Möglichkeit "Code" einzufügen ('#') oder auch Zitate etc.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

apohero

Hi,

also ich bin inzwisch ein gutes Stück weiter und kurz vor dem Ziel. Habe nun ein DOIF welches an und aus macht. Das Dimm-Kommando kommt ebenfalls an. Allerdings mit dem Eventinhalt "value 60" (60 sind nur ein Beispiel) . Ich möchte aber dass er mir 60 zurückliefert. Habe schon ein split versucht und $EVTNUM1 aber beides geht nicht. So sieht es nun aus:

Internals:
   DEF        ([Wonhzimmerlicht] eq "on") ({ GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80")}) DOELSEIF ([Wonhzimmerlicht] eq "off") ({ GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=0")}) DOELSE ({my $eve = $EVENT;; GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=$eve")})
   FUUID      5fad120a-f33f-b4c0-a49c-01e82898e5b664db
   MODEL      FHEM
   NAME       Wonhzimmerlicht.DOIF
   NOTIFYDEV  Wonhzimmerlicht,global
   NR         21
   NTFY_ORDER 50-Wonhzimmerlicht.DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   READINGS:
     2020-11-12 15:09:58   cmd             0
     2020-11-12 15:09:58   mode            enabled
     2020-11-12 15:09:58   state           initialized
   Regex:
     accu:
     cond:
       Wonhzimmerlicht:
         0:
           &STATE     ^Wonhzimmerlicht$
         1:
           &STATE     ^Wonhzimmerlicht$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'Wonhzimmerlicht','STATE') eq "on"
     1          ::InternalDoIf($hash,'Wonhzimmerlicht','STATE') eq "off"
   do:
     0:
       0          { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=80")}
     1:
       0          { GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=0")}
     2:
       0          {my $eve = $EVENT;; GetHttpFile("192.168.178.111", "/api/?action=set&ext=DimmerEG&io=Q2&value=$eve")}
   helper:
     DEVFILTER  ^global$|^Wonhzimmerlicht$
     NOTIFYDEV  global|Wonhzimmerlicht
     globalinit 1
     last_timer 0
     sleeptimer -1
   internals:
     all         Wonhzimmerlicht:STATE
   uiState:
   uiTable:
Attributes:


weiß jemand wie ich die nur die 60 aus dem Event erhalte?
mfg

MadMax-FHEM

Freut mich, dass du selber weiter gekommen bist! :)

Leider kann ich bei DOIF nicht wirklich helfen, sorry...

Es gibt bei Abfrage von Readings bei DOIF wohl die Möglichkeit ein :d (also Doppelpunkt und d) dahinter zu schreiben...
Dann wird nur der Zahlenwert zurückgegeben (denke ich).

Ansonsten gibt es noch: ReadingsNum("DeviceName","ReadingName",0) dabei wird nur der Zahlenwert zurückgegeben...

Aber vermutlich ist was am homebridgeMapping "verkehrt" (hast du eins?).

Poste doch mal ein list von Wohnzimmerlicht...

Man kann bestimmt dafür sorgen, dass von alexa-fhem nur die Zahl gesetzt wird.

Wie geschrieben: mehr kann ich bzgl. DOIF nicht helfen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)