IR-LED an ESP8266 mit EspEasy

Begonnen von erotikbaer, 18 Februar 2017, 03:02:47

Vorheriges Thema - Nächstes Thema

Reinhart

OK, das ist mir jetzt klar wie du das machst.

Du übergibst also mit "set LG_TV_Wohnzimmer KEY_POWER" das $Event "KEY_POWER" dem Script irsend.sh und dieses filtert nun mit der IF Abfrage was es tun soll.
Da du im Script außer dem Protokoll JVC nichts geändert hast, sendet irsend jetzt die Codes die ich von meiner Samsung FB definiert habe und das kann doch in meinen Augen bei deinem TV nicht funktionieren. Selbst wenn der Code für Power gleich wäre, ist doch der Pre-Code ein ganz anderer und somit der Hex bzw. der zusammen gesetzte Dezimalwert komplett anders.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

TomLee

#46
Schau noch mal genauer. Geändert hab ich den Namen von TestSwitch in sonnoffIR, ich sehe nix von JVC, nur NEC. Die Codes hab ich alle umgerechnet keiner stimmt mit deiner Vorlage überein.

#!/bin/sh -e
# 20DF40BF   551489775
if [ "$1" = "KEY_POWER" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551489775}'
fi
# 20DF40BF   551502015
if [ "$1" = "KEY_VOLUMEUP" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551502015}'
fi
# 20DFC03F   551534655
if [ "$1" = "KEY_VOLUMEDOWN" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551534655}'
fi
# 20DF906F   551522415
if [ "$1" = "KEY_MUTE" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551522415}'
fi
# 20DF8877   551520375
if [ "$1" = "KEY_1" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551520375}'
fi
# 20DF48B7   551504055
if [ "$1" = "KEY_2" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551504055}'
fi   
# 20DFC837   551536695
if [ "$1" = "KEY_3" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551536695}'
fi
# 20DF28D7   551495895
if [ "$1" = "KEY_4" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551495895}'
fi
# 20DFA857   551528535
if [ "$1" = "KEY_5" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551528535}'
fi
# 20DF6897   551512215
if [ "$1" = "KEY_6" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551512215}'
fi
# 20DFE817   551544855
if [ "$1" = "KEY_7" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551544855}'
fi
# 20DF18E7   551491815
if [ "$1" = "KEY_8" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551491815}'
fi
# 20DF9867   551524455
if [ "$1" = "KEY_9" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551524455}'
fi         
# 20DF08F7   551487735
if [ "$1" = "KEY_0" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551487735}'
fi
# 20DF00FF   551485695
if [ "$1" = "KEY_CHANNELUP" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551485695}'
fi
# 20DF807F   551518335
if [ "$1" = "KEY_CHANNELDOWN" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551518335}'
fi

Reinhart

ja sieht gut aus. Und funktioniert es jetzt?

Wenn nein, kannst du in der Konsole vom Broker diesen Befehl absetzen und damit einschalten?
mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551489775}'

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

TomLee

Zitat von: TomLee am 27 März 2017, 22:56:05
Es funktioniert alles, doch wie gesagt ein

set LG_TV_Wohnzimmer state KEY_POWER

oder anderer Befehl ( KEY_1,KEY_2,KEY_3 ...) aus der Befehlszeile, notify oder doif nicht.

Getauscht hatte ich nichts mehr nachdem ich mit dem IRrecvDumpV2 feststellte das NEC verwendet wird.

edit:
Ein

set LG_TV_Wohnzimmer KEY_POWER

ist die Lösung. Warum auch immer.

Hatte ich doch erwähnt☺

TomLee

#49
Die letzte Rätsel bezog sich darauf, warum im remotecontrol Device in Fhem ein

Zitatset LG_TV_Wohnzimmer state KEY_POWER

abgesetzt wird und aus der Befehlszeile, notify oder doif ein

Zitatset LG_TV_Wohnzimmer KEY_POWER

TomLee

Hi,

keine Ahnung ob hier nun OT. Aber meine weitere Frage knüpft an das Thema an.
Hab mir mal Readingsproxy angesehen und schalte nun über dieses Modul die TV Programme. Hier mal ein Bsp.:

nternals:
   CHANGED
   DEF        LG_TV_Wohnzimmer:state
   DEVICE     LG_TV_Wohnzimmer
   NAME       rp_LG_TV_ARD
   NOTIFYDEV  global,LG_TV_Wohnzimmer
   NR         399
   NTFY_ORDER 50-rp_LG_TV_ARD
   READING    state
   STATE      on
   TYPE       readingsProxy
   Content:
     LG_TV_Wohnzimmer 1
   Readings:
     2017-04-10 00:12:06   lastCmd         on
     2017-04-10 00:12:06   state           on
Attributes:
   alexaName  das erste
   devStateIcon on:control_on_off@green off:control_standby
   event-on-change-reading .*
   genericDeviceType switch
   room       Alexacontrol,TV Fernbedienungen
   setFn      { return 'KEY_1' if( $CMD eq 'on' );; return 'off';; }
   setList    on off
   valueFn    { return 'on' if( $VALUE eq 'KEY_1' );; return 'off';; }


Das funktioniert auch soweit. Doch wie setz ich es jetzt um zweistellige Zahlen zu senden. Muss ich hier dann wieder auf Dummys mit notify oder doif zurückgreifen ?



TomLee

@Reinhart

Wäre/ist es denn möglich den JSON String so zu erweitern das er zwei Codes hintereinander sendet? Hab schon etwas rumgespielt bekomme aber immer nur ein

10:59:23 MQTT: stat/sonoffIR/RESULT = {"IRSend":"Invalid JSON"}

Reinhart

da es ja nur die Tasten 0-9 gibt, wirst du die 2-stelligen Codes wohl hintereinander senden müssen. Das Timeout bestimmt ja ohnehin der TV der eine kurze Zeit wartet um einen zweiten Code zu empfangen.

Beispiel: Wenn die auf Sender 29 schalten willst, musst halt zuerst die 2 dann die 9 an den irsend übergeben.

Wenn ich das mit meiner virtuellen FB mache klappt das so wie man es auf der normalen FB machen würde. Natürlich darf ich nicht zulange warten bis die 2 Taste gesendet wird, sonst schaltet der TV nur auf den ersten Code.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

TomLee

Das ist auch bei mir nicht anders. Der Hintergrund weshalb ich readingsproxy nutze ist der, ein notify/doif zu sparen um bspw. via Sprachsteuerung zu schalten. Für die zweistelligen Codes sehe ich mit meinem derzeitigen Fhem-Wissen und deiner Antwort, in diesem Fall, nur wieder auf dummy mit notify/doif zurückzugreifen.

TomLee

Zitat von: TomLee am 11 April 2017, 12:26:25
@Reinhart

Wäre/ist es denn möglich den JSON String so zu erweitern das er zwei Codes hintereinander sendet? Hab schon etwas rumgespielt bekomme aber immer nur ein

10:59:23 MQTT: stat/sonoffIR/RESULT = {"IRSend":"Invalid JSON"}

Ich kann kein Perl hab mich jetzt wieder mit beschäftigt und nach kurzer Suche herausgefunden das man das ganz einfach so löst:

if [ "$1" = "KEY_10" ]; then
 mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551520375}';
 sleep 1;
 mosquitto_pub -q 2 -t cmnd/sonoffIR/IRSend/set -m '{"protocol": "NEC","bits": 32, "data": 551487735}'
fi


Zuvor, mit dieser Meldung,

10:59:23 MQTT: stat/sonoffIR/RESULT = {"IRSend":"Invalid JSON"}
[/quote]

hatte ich es nur mit einem Komma und ohne Pause versucht.


ZitatWeiter versuch ich das ja auch auf einem ESP_01 zum laufen zu bringen. Hier hat der ESP mit angeschlossenem IR-Modul Probleme beim starten. Ohne IR-Modul keine. Zur Spannungsversorgung verwende ich ein IPad Netzteil  und ein MB102, der ESP steckt auf einem Eigenbaubreakoutboard mit integriertem 220µF Kondensator. Verbinde ich das Modul erst nach dem starten ist alles kein Problem und auch das senden möglich. Ein Kondensator (versucht mit 220µF und 100µF) direkt vor dem IR-Modul hilft nicht. Hat da jemand Rat dazu?

Hier decken sich jetzt meine Erfahrungen bei einem ESP8266 01 und 12-F mit der Aussage des Users Michael U. (amiga) in diesem Thread:

https://www.mikrocontroller.net/topic/417044

Mit den Pins die er als ruhig bezeichnet (und mehr) gibt's keine Probleme beim starten.
Mit GPIO0 und GPIO2 klappt's bei mir mit keinem der Module.

Beim ESP 01 (mehrere) hab ich alle Pins ausprobiert ausschließlich mit RX hatte ich Erfolg.


TomLee

Für alle die es interessiert hier ein Bild der fertigen Integration dieses Projekts in mein vorhandenes Schalterprogramm.

TomLee

Hallo Reinhart,

wieder ein {"Command":"Unknown"} Problem.☺

heute hab ich einen Wemos D1 mini mit "Program Version 5.5.1" geflasht.

Senden aus der Konsole ist wie gehabt möglich mit

irsend  {"protocol": "NEC","bits": 32, "data": 551489775}

Beim drücken einer Taste der Fernbedienung in Fhem erhalte ich jetzt in der Konsole ein

22:18:39 MQTT: stat/sonoffIRFR/RESULT = {"Command":"Unknown"}

Verwende ich die gleiche .sh mit der "Program Version 4.0.8" funktioniert wieder alles.

Du hattest ja schon erwähnt das es in den 5er Versionen mehrere Änderungen gab.
Hast du vlt. eine Vorstellung was genau im Skript angepasst werden muss.

Reinhart

#57
@TomLee

Einer der wesentliche Änderungen in Tasmota ab 5.x ist die Syntax eines Sende Kommandos.

mosquitto_pub -q 2 -t cmnd/sonoff_electrodragon2/IRSend/set -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'

alte Version Tasmota bis 4.x, hier wird noch "set" verwendet.


mosquitto_pub -q 2 -t cmnd/sonoff_electrodragon2/IRSend -m '{"protocol": "SAMSUNG","bits": 32, "data": 3772793023}'

neue Version von Tasmota ab 5.x. hier entfällt einfach das "set"

stat/sonoff_electrodragon2/RESULT {"IRSend":"Done"}

hier die Rückmeldung von Tasmota 5.5

Also einfach das als Parameter definierte /set entfernen und alles läuft. Das Gleiche gilt auch für einen Switch Schaltbefehl oder sonstiges.
Der Parameter -m zum Senden der Message bleibt natürlich.

Hier die möglichen Parameter für Mosquitto in der Brokerkonsole.
-A : bind the outgoing socket to this host/ip address. Use to control which interface
      the client communicates over.
-d : enable debug messages.
-f : send the contents of a file as the message.
-h : mqtt host to connect to. Defaults to localhost.
-i : id to use for this client. Defaults to mosquitto_pub_ appended with the process id.
-I : define the client id as id_prefix appended with the process id. Useful for when the
      broker is using the clientid_prefixes option.
-k : keep alive in seconds for this client. Defaults to 60.
-l : read messages from stdin, sending a separate message for each line.
-m : message payload to send.
-M : the maximum inflight messages for QoS 1/2..
-n : send a null (zero length) message.
-p : network port to connect to. Defaults to 1883.
-P : provide a password (requires MQTT 3.1 broker)
-q : quality of service level to use for all messages. Defaults to 0.
-r : message should be retained.
-s : read message from stdin, sending the entire input as a message.
-S : use SRV lookups to determine which host to connect to.
-t : mqtt topic to publish to.
-u : provide a username (requires MQTT 3.1 broker)
-V : specify the version of the MQTT protocol to use when connecting.
      Can be mqttv31 or mqttv311. Defaults to mqttv31.


Ich hoffe du kannst jetzt mit diesen Informationen deine Probleme mit Tasmota 5.5 lösen.

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

TomLee

#58
edit:
Also auch hier ist es wieder das /set 😂.

Mit

mosquitto_pub -q 2 -t cmnd/sonoffIRFR/IRSend -m '{"protocol": "NEC","bits": 32, "data": 551489775}'

oder

mosquitto_pub -h 192.168.188.26 -t cmnd/sonoffIRFR/IRSend -m '{"protocol": "NEC","bits": 32, "data": 551489775}'

wird der Code jetzt auch aus dem Terminal gesendet.

Trag ich das so in die .sh Datei ein

#!/bin/sh -e
# 20DF08F7   551487735 TV Frühstücksraum und Sat Receiver
if [ "$1" = "KEY_POWERTVSAT" ]; then
mosquitto_pub -q 2 -t cmnd/sonoffIRFR/IRSend -m '{"protocol": "NEC","bits": 32, "data": 551489775}';
sleep 2;
mosquitto_pub -q 2  -t cmnd/sonoffIRFR/IRSend -m '{"protocol": "NEC","bits": 32, "data": 4278227565}'
fi


bekomm ich im Logfile diese Ausgabe

/opt/fhem/ircmdFR.sh: Zeile 4:  mosquitto_pub: Kommando nicht gefunden.

Weitere Versuche hier die Sonderzeichen zu escapen, mit sytem oder ohne, nur in ", wie hier beschrieben

https://forum.fhem.de/index.php/topic,73453.msg651026.html#msg651026

brachten bisher auch keinen Erfolg.

TomLee

Es geht jetzt.

Habe wieder den falschen Editor genutzt, wodurch die ircmdFR.sh vermutlich wieder im falschen Format abgespeichert wurde und zu dem Fehler führte.