shelly i3 Model?: Welches model soll ich auswählen

Begonnen von Andi.Riese, 26 November 2020, 16:52:20

Vorheriges Thema - Nächstes Thema

curt

Zitat von: Prof. Dr. Peter Henning am 30 November 2020, 10:32:12
@curt: Wer "für nix gut ist" schreibt, sollte das umgehend überdenken.

Es war eine Replik auf einen vorherigen Beitrag, Bezug war da i3. - Das ist inzwischen dank auch Deiner Erklärung verstanden.
RPI 4 - Jeelink HomeMatic Z-Wave

tklein

Hallo zusammen,

werden denn per MQTT die diversen Events (kurz-lang, lang kurz, doppel etc.) gemeldet?
Oder geht das dann nur per FHEM-URL-Aufruf aus dem Shelly I3?

Grüße
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

stenny

Also, per mqtt lassen sich die doppel oder 3fach Betätigungen nicht auswerten.
Ich habe meinen i3, wie auch alle anderen Shellys, per mqtt angebunden.

Beim i3, und nur bei denen, nutze ich dann unter Action die url....

gestein

Wenn Ihr die ix3 über das Template eingebunden habt, ist da sicher noch Raum für Verbesserungen ;)

In der Doku steht als Voraussetzung für diese Events: https://shelly-api-docs.shelly.cloud/#shelly-i3-input-events
Input events are only monitored if a button is configured as momentary
Ich bin mir nicht sicher, ob man die Actions am ix3 auf "enabled" setzen muss, damit die Events kommen.
Und ich bin mir auch nicht sicher, ob man eine URL hinterlegen muss damit das funktioniert.

Welche Attribute habt Ihr denn bei Euren Shellys (im Speziellen readingList und setList)?

lg, Gerhard

stenny

Als erweitern ist da nicht wirklich möglich....

Internals:
   CID        shellyix3_A4CF12F4701A
   DEF        shellyix3_A4CF12F4701A
   DEVICETOPIC Schalter_Flur_i3
   FUUID      5fee2781-f33f-b900-971c-30d2fb6e313816fb
   FVERSION   10_MQTT2_DEVICE.pm:0.233820/2020-12-19
   IODev      MQTT2Server
   LASTInputDev MQTT2Server
   MQTT2Server_MSGCNT 6422
   MQTT2Server_TIME 2021-01-07 17:45:59
   MSGCNT     6422
   NAME       Schalter_Flur_i3
   NR         187
   STATE      In 1:
0
<br>In 2:
1
<br>In 3:
0
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-01-01 11:28:18   attrTemplateVersion 20201110
     2021-01-07 17:45:59   event           
     2021-01-07 17:45:59   event_cnt       0
     2021-01-07 08:51:24   fw_ver          20201124-092930/v1.9.0@57ac4ad8
     2021-01-07 08:51:24   id              shellyix3-A4CF12F4701A
     2021-01-07 17:45:59   input_0         0
     2021-01-07 17:45:59   input_1         1
     2021-01-07 17:45:59   input_2         0
     2021-01-07 08:51:24   ip              192.168.111.163
     2021-01-07 08:51:24   mac             A4CF12F4701A
     2021-01-07 08:51:24   model           SHIX3-1
     2021-01-07 08:51:24   new_fw          false
     2021-01-07 08:51:24   online          true
Attributes:
   IODev      MQTT2Server
   devStateIcon 0:off 1:on
   model      shelly_ix3
   readingList shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input/1:.* input_1
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/1:.* { json2nameValue($EVENT) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input/2:.* input_2
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/2:.* { json2nameValue($EVENT) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input/0:.* input_0
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/0:.* { json2nameValue($EVENT) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/online:.* online
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/announce:.* { json2nameValue($EVENT) }
   room       Flur
   stateFormat In 1:
input_0
<br>In 2:
input_1
<br>In 3:
input_2


Im Reading event bekommt man z.B "SSS" "SS" "S" "L"..... - Keine Auswertung von welchem Eingang

Im Reading input_0 bis input_3 bekommt man "0" oder "1" - bei jeder betätigung ein wechsel, der Startzustand vom jeweiligen Eingang kann "0" oder"1" sein.....


Ich hab es aufgegeben, sobald ich mit mehrfach Betätigung arbeite nehme ich die URL....

gestein

Könntest Du mal versuchen in dem Reading "readingList" die Punkte zu ändern:
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/1:.* { json2nameValue($EVENT) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/2:.* { json2nameValue($EVENT) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/0:.* { json2nameValue($EVENT) }


neu:
shellyix3_A4CF12F4701A:shellies/shellyix3_A4CF12F4701A/input_event/0:.* { json2nameValue($EVENT, '0_', $JSONMAP) }
shellyix3_A4CF12F4701A:shellies/shellyix3_A4CF12F4701A/input_event/1:.* { json2nameValue($EVENT, '1_', $JSONMAP) }
shellyix3_A4CF12F4701A:shellies/shellyix3_A4CF12F4701A/input_event/2:.* { json2nameValue($EVENT, '2_', $JSONMAP) }

Damit solltest Du die Events pro Kanal bekommen.
Ändert das was?

lg, Gerhard

stenny

Hi,

damit gibt es den event pro Kanal...

Internals:
   CID        shellyix3_A4CF12F4701A
   DEF        shellyix3_A4CF12F4701A
   DEVICETOPIC Schalter_Flur_i3
   FUUID      5fee2781-f33f-b900-971c-30d2fb6e313816fb
   FVERSION   10_MQTT2_DEVICE.pm:0.233820/2020-12-19
   IODev      MQTT2Server
   LASTInputDev MQTT2Server
   MQTT2Server_MSGCNT 41
   MQTT2Server_TIME 2021-01-08 12:07:55
   MSGCNT     41
   NAME       Schalter_Flur_i3
   NR         187
   STATE      In 1:
0
<br>In 2:
0
<br>In 3:
0
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-01-08 12:07:55   0_event         S
     2021-01-08 12:07:55   0_event_cnt     12
     2021-01-08 12:07:55   1_event         SS
     2021-01-08 12:07:55   1_event_cnt     23
     2021-01-08 12:07:55   2_event         
     2021-01-08 12:07:55   2_event_cnt     8
     2021-01-08 12:03:12   attrTemplateVersion 20201110
     2021-01-08 12:04:40   event           S
     2021-01-08 12:04:40   event_cnt       5
     2021-01-08 12:05:55   fw_ver          20201124-092930/v1.9.0@57ac4ad8
     2021-01-08 12:05:55   id              shellyix3-A4CF12F4701A
     2021-01-08 12:07:55   input_0         0
     2021-01-08 12:07:55   input_1         0
     2021-01-08 12:07:55   input_2         0
     2021-01-08 12:05:55   ip              192.168.111.163
     2021-01-08 12:05:55   mac             A4CF12F4701A
     2021-01-08 12:05:55   model           SHIX3-1
     2021-01-08 12:05:55   new_fw          false
     2021-01-08 12:05:55   online          true
Attributes:
   IODev      MQTT2Server
   devStateIcon 0:off 1:on
   model      shelly_ix3
   readingList shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input/0:.* input_0
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input/1:.* input_1
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input/2:.* input_2
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/0:.* { json2nameValue($EVENT, '0_', $JSONMAP) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/1:.* { json2nameValue($EVENT, '1_', $JSONMAP) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/input_event/2:.* { json2nameValue($EVENT, '2_', $JSONMAP) }
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/online:.* online
shellyix3_A4CF12F4701A:shellies/shellyix3-A4CF12F4701A/announce:.* { json2nameValue($EVENT) }
   room       Flur
   stateFormat In 1:
input_0
<br>In 2:
input_1
<br>In 3:
input_2


Damit wäre eine Auswerting aus fhem möglich.....

Nur zur Info....

Bisher nutze ich nur kurze Befehle, Bei einem Long Press gibt es keine Event Meldung - bisher gesagt nur eine Rückmeldung ohne Inhalt....

diver

#22
Hi,

super - danke :-)
Da bin ich auch gerade am Thema

Wenn ich statt  { json2nameValue($EVENT) } ein  { json2nameValue($EVENT, 'X_', $JSONMAP) } schreibe,wie oben beschrieben, kommt es für jeden Schalter einzeln :-)

Wie kann ich mir denn die json Syntax selbst herleiten oder nachlesen / anlernen?
Wie kommt man darauf? Ist das bei MQTT erläutert?

Nun habe ich aber noch ein anderesProblem:
beim loslassen des Schalters wird kein Event dafür gesendet. Das macht der Shelly von sich aus wohl nicht.

Ich möchte erreichen, das die Helligkeit einer Lampe so lange erhöht wird, so lange man den Schalter gedrückt hält.
Problem hierbei ist, das nach loslassen der Count für die Events erst hochgezählt wird, wenn die Max Longpush Zeit rum ist.
Würde also deutlich nachlaufen. Herumexperimentieren mit den Werten für Longpush Duration und multipush duration hat nichts geändert.

Optimal wäre:
1x Kurz gedrückt: Licht Toggle
2x Kurz gedrückt Lichtfarbe ändern
Gedrückt halten: dimmen

Man könnte den shelly in den Tooglemodus setzen. Dann wird eine 1 gesendet so bald der Kontakt geschlossen ist.
Bei loslassen geht das denn direkt wieder auf 0
Da bräuchte man dann eine eigene Logik welche die Zeit zwischen dem Zustandswechsel misst und interpretiert.

Danke und Gruß Andre

Prof. Dr. Peter Henning

ZitatWie kann ich mir denn die json Syntax selbst herleiten oder nachlesen / anlernen?
Wie kommt man darauf? Ist das bei MQTT erläutert?

Das sind 3 Fragen.

1. JSON eingeben bei Google -> GANZ VIELE Tutorials.
2. API-Doku der Shellys lesen https://shelly-api-docs.shelly.cloud/#shelly-family-overview
3. Nein

ZitatDa bräuchte man dann eine eigene Logik welche die Zeit zwischen dem Zustandswechsel misst und interpretiert.
Sequence-Modul.

Allerdings schlage ich vor, als Anfänger von so etwas eher die Finger zu lassen - das führt nur zu Frustration.

LG

pah

gvzdus

Moin,
ich habe jetzt gerade meinen i3 im Zusammenhang mit COAP/CoIoT untersucht. Ich denke, die Implementierung geht dann morgen rein (schreibe ich noch in den ShellyMonitor-Thread), aber out of the box geht es auch schon halbwegs:

Das Folgende gilt jetzt für CoIoT und Shelly-Monitor, aber die Events sind vermutlich für MQTT ähnlich:

Wer wissen will, "ob das Licht an ist", also den Zustand auf der Leitung wissen will, muss (per Hand) in den "Toggle Switch"-Modus wechseln (default ist "Momentary"). Da wird auf dem Reading input_0 / input_1 / input_2 eine 0 oder 1 übertragen. 1 = gemäß Diagram Verbindung zu L.

Im "Momentary"-Modus werden Taster erwartet, und aus der Einschaltfolge "S", "SS", "SSS" oder "L"-Events erzeugt. (1 x kurz, 2 x  kurz, 3 x kurz, 1 x lang). Hier ist nun eine Anpassung in ShellyMonitor gefragt, um vernünftig und einfach darauf Events aufsetzen zu können. Wie (sicherlich) auch bei MQTT, wird ja der Event-Kanal alle 30 Sekunden wiederholt. Daher lässt sich das Auftreten des Events erst aus der Kombination mit "inputEventCnt_0/1/2 erhöht" ableiten. Die Logik muss also sein:

if (inputEventCnt_x > inputEventCnt_x(old)) {
  setze inputEvent_x als readingUpdate
}

Mod_Shelly arbeitet ja normalerweise immer mit readingsBulkUpdateIfChanged - ein Event wird also nur bei einer Änderung generiert. MQTT hingegen immer (?) mit readingsBulkUpdate. Der "MQTTler" müsste als ein "event-on-change" auf den inputEventCnt_x legen, darauf ein notify etc hängen, um dort inputEvent_x als Art des Ereignisses auszulesen.

Der "Mod_Shellyianer" Stand jetzt genauso, aber ich werde das - gemeinsam für den Button - so implementieren, dass man bei Mod_Shelly sich direkt mit dem Notify auf inputEvent_x "hängen" kann.

Hoffe, damit zur Shelly-Forschung beigetragen zu haben - Vollzug melde ich dann im ShellyMonitor-Thread

diver

Hi,

genau das habe ich auch gemerkt. Der S oder SS kommt öfter und muss mit dem anderen Parameter kombiniert abgefragt werden. Das habe ich bisher nicht hinbekommen.
Daher habe ich direkt im Shelly die Action URLs genutzt.
Wenn Zeit ist versuche ich nochmal MQTT.

Allerdings gibt es leider eine merkbare Verzögerung zwischen Tastenbetätigung und dem Licht.
Da muss ich mal sehen ob das am Shelly an sich, MQTT, der Lampe oder was auch immer liegt.

Gruß André

gvzdus

Du kannst ja auch - ohne das MQTT-Device zu löschen - mal eine 2. Definition mit Mod_Shelly und Mod_ShellyMonitor probieren. Allerdings ist die Verzögerung wohl eher dem Warten auf die Auszeit "Kommt da noch ein Klick?" geschuldet. Logischerweise kann z.B. "SS" erst ausgelöst werden, wenn feststeht, dass es kein "SSS" mehr wird.
Wenn Du auf die multiplen Tastendrücke verzichten kannst und lieber ad hoc dafür hast, dann solltest Du den Mode umstellen. Da wirst Du wohl binnen Millisekunden den Status haben.

diver

Hi,

danke. Guter Hinweis mit dem Warten auf Mehrfachklick.
Habe nun MQTT deaktiviert und den Shelly auf Toogle Mode gestellt.
Jetzt fühlt sich das an wie ein physikalischer Schalter ohne Verzögerung :-)

Gruß André