Hauptmenü

Werte per MQTT senden

Begonnen von rodnic, 29 März 2020, 20:34:40

Vorheriges Thema - Nächstes Thema

rodnic

Hallo,

ich habe einen LED Strip an einen ESP8266 angeschlossen.
Den mit ESP Easy geflasht.
Nun möchte ich diesen mit MQTT mit Werten aus dem FHEM füttern.

Wie kann ich nun am besten per MQTT Werte an z.B.  das Topic "cmd/HAB-Display-01/ledfarbe1" senden?

Otto123

Ich mach mal einen Querverweis: https://forum.fhem.de/index.php/topic,109632.msg1036267.html#new
Und kann mir etwas generelles nicht verkneifen ;)
https://tty1.net/smart-questions_de.html#beprecise

Ich denke es ist schon mal erheblich ob Du MQTT oder MQTT2 einsetzt.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rodnic

Hallo,

ich möchte nun nach auslösen des Signals OUT.Aktie:Dow:.*
per MQTT den Minutenwert übertragen.
Dazu habe ich die Variable $min aus fhem genutzt.
Für die anderen MQTT Publish's verwende ich feste Zahlen.
Klappt aber leider nicht.
Was könnte da in der Syntax falsch sein?

OUT.Aktie:Dow:.*      set Mosquitto publish cmd/HAB-Display-01/lednr "$min";
                               set Mosquitto publish cmd/HAB-Display-01/ledfarbe1 26;
                set Mosquitto publish cmd/HAB-Display-01/ledfarbe2 1;
                set Mosquitto publish cmd/HAB-Display-01/ledfarbe3 25;

Beta-User

Na ja, wenn du Perl-Variablen nutzen willst, mußt du auch auf die Perl-Ebene.

Ergänzend: Da das ein Tasmota ist, kannst du das auch zusammengefaßt auf backlog publishen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rodnic

Hm, Tasmota ist es zwar nicht ich nutze ESP Easy.

Wollte nur gern wissen wie ich in dem Befehl
set Mosquitto publish cmd/HAB-Display-01/lednr 23;

statt der 23 die Variable $min verwende, in etwa so

set Mosquitto publish cmd/HAB-Display-01/lednr $min;

Leider klappt das so nicht, also was könnte ich noch tuen?

Beta-User

Bitte selbst in Grundlagen einlesen. Die Antwort auf die Frage stand schon hier:
Zitat von: Beta-User am 30 März 2020, 10:27:03
Na ja, wenn du Perl-Variablen nutzen willst, mußt du auch auf die Perl-Ebene.
Offizieller Weg:
https://fhem.de/commandref_DE.html#perl

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rodnic

Leider komme ich da nicht weiter.
Könnten sie mir bitte weiter helfen?

Wollte nur gern wissen wie ich in dem Befehl
set Mosquitto publish cmd/HAB-Display-01/lednr 23;

statt der 23 die Variable $min verwende, in etwa so

set Mosquitto publish cmd/HAB-Display-01/lednr $min;

rodnic

so kalppt es:
OUT.Aktie:Dow:.*      {
               if ($min ==2)
               {
                   fhem("set Mosquitto publish cmd/HAB-Display-01/lednr 2");
                                            fhem("set Mosquitto publish cmd/HAB-Display-01/ledfarbe1 2");
                   fhem("set Mosquitto publish cmd/HAB-Display-01/ledfarbe2 0");
                   fhem("set Mosquitto publish cmd/HAB-Display-01/ledfarbe3 0");
                }

ist aber irgendwie zu aufwendig.

Beta-User

...na geht doch, du kannst $min vermutlich auch direkt in die _doppelten Quotes_ rein schreiben...

Jetzt noch aus https://fhem.de/commandref_DE.html#command die richtigen Schlüse ziehen, dann wird es wieder etwas einfacher:
ZitatMehrere FHEM-Kommandos hintereinander werden mittels Semikolon ( ;) getrennt. Weil Semikola auch in perl-Code oder Shell-Programmen benutzt werden, müssen sie mittels doppelten Semikola geschützt werden. Lesen Sie sich bitte die Bermerkungen des notify-Abschnittes zu Kommandoparametern und Regeln durch.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rodnic

so geht es eben nicht

set Mosquitto publish cmd/HAB-Display-01/lednr $min;

Otto123

#10
OUT.Aktie:Dow:.* {
    fhem("set Mosquitto publish cmd/HAB-Display-01/lednr $min");
    fhem("set Mosquitto publish cmd/HAB-Display-01/ledfarbe1 2");
    fhem("set Mosquitto publish cmd/HAB-Display-01/ledfarbe2 0");
    fhem("set Mosquitto publish cmd/HAB-Display-01/ledfarbe3 0")
}

oder so (korrigiert)
OUT.Aktie:Dow:.* {
    fhem("set Mosquitto publish cmd/HAB-Display-01/lednr $min;;
        set Mosquitto publish cmd/HAB-Display-01/ledfarbe1 2;;
        set Mosquitto publish cmd/HAB-Display-01/ledfarbe2 0;;
        set Mosquitto publish cmd/HAB-Display-01/ledfarbe3 0")
}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Das sollte auch funktionieren:
OUT.Aktie:Dow:.* {
fhem("
  set Mosquitto publish cmd/HAB-Display-01/lednr $min;;
  set Mosquitto publish cmd/HAB-Display-01/ledfarbe1 2;;
  set Mosquitto publish cmd/HAB-Display-01/ledfarbe2 0;;
  set Mosquitto publish cmd/HAB-Display-01/ledfarbe3 0;;
");
}


(@Otto: schneller edit... Aber es fehlt vermutlich je ein ";").
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

stimmt :)  :-[
Hab es editiert - doppelt gemoppelt  8)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rodnic

Super,

vielen lieben Dank, das hat funktioniert.
Nun hab ich ne Uhr aus nem LED Strip.

Danke

Otto123

Zitat von: rodnic am 30 März 2020, 12:51:58
Wollte nur gern wissen wie ich in dem Befehl
set Mosquitto publish cmd/HAB-Display-01/lednr 23;

statt der 23 die Variable $min verwende, in etwa so

set Mosquitto publish cmd/HAB-Display-01/lednr $min;
Nur der Vollständigkeit halber, was prinzipiell auch geht:
set Mosquitto publish cmd/HAB-Display-01/lednr {($min)}
Diese Form nennt sich set magic (siehe commandref). Meist ist es besser, den kompletten Ausführungsteil in Perl zu setzen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mucki

Hallo Spezialisten,

ich habe diesen Beitrag ausgegraben, weil er genau auf mein Problem zutrifft.

Ich möchte ein Display (ILI9341), das an einem ESPEasy Device per MQTT an FHEM angebunden ist, steuern.
Das funktioniert auch prima, aber ich kann nicht mehrere publish Befehle mit nur einem fhem ("set ....") in Perl versenden. Der zweite Befehl wird stets als Text an den ersten Befehl angehängt. Das passiert sowohl bei einem notify als auch dann, wenn ich eine sub in der 99-MyUtil.pm aufrufe.

ABER, wenn ich den gleichen Code über die Kommandozeile abschicke, funktioniert es einwandfrei und es werden zwei publish-Befehle versendet.

Vielleicht hat jemand einen Vorschlag, wie das Problem zu lösen ist. Der Vorschlag war ja:


Zitat von: Beta-User am 30 März 2020, 13:25:55
Das sollte auch funktionieren:
OUT.Aktie:Dow:.* {
fhem("
  set Mosquitto publish cmd/HAB-Display-01/lednr $min;;
  set Mosquitto publish cmd/HAB-Display-01/ledfarbe1 2;;
  set Mosquitto publish cmd/HAB-Display-01/ledfarbe2 0;;
  set Mosquitto publish cmd/HAB-Display-01/ledfarbe3 0;;
");
}


(@Otto: schneller edit... Aber es fehlt vermutlich je ein ";").

Bei folgender Eingabe in der Kommandozeile

{fhem("set MQTT publish ESP-79-LCD/cmd tftcmd,clear,yellow;;set MQTT publish ESP-79-LCD/cmd tft,txtfull,7,33,2,black,white,a1");;}


kommen beim ESP wie gewünscht zwei Befehle an:

28264158: Command: tftcmd
28264159: tftcmd,clear,yellow
28264159: Par1: 1073421600 Par2: 1073421600 Par3: 0 Par4: 0 Par5: 0
28264245: Command: tft
28264246: tft,txtfull,7,33,2,black,white,a1
28264246: Par1: 1073421600 Par2: 7 Par3: 33 Par4: 2 Par5: 2




Bei einem Aufruf in einem notify oder über die 99_myUtils.pm

defmod testmqtt_notify_1 notify testmqtt:.* {fhem("set MQTT publish ESP-79-LCD/cmd tftcmd,clear,yellow;;;;set MQTT publish ESP-79-LCD/cmd tft,txtfull,7,33,2,black,white,a1");;;;}


wird alles in einem Befehl versendet.

28296161: Command: tftcmd
28296161: tftcmd,clear,yellow;set MQTT publish ESP-79-LCD/cmd tft,txtfull,7,33,2,black,white,a1
28296161: Par1: 1073421600 Par2: 1073421600 Par3: 1073421600 Par4: 1073421600 Par5: 1073421600


Das liegt vermutlich nicht am Empfänger, denn in einem MQTT Explorer wird das auch so angezeigt.
Trotz Recherche ist es mir nicht gelungen, den Fehler zu finden. Vielleicht ist es wichtig: mein MQTT ist ein MQTT2_SERVER.

TomLee

Hallo,

vermutlich darf es nur ein Semikolon zum trennen der set-Befehle in dem notify sein, reine Vermutung nicht getestet.
Benötigst du denn das notify wirklich ?
Man könnte im MQTT2_DEVICE auch einen "setter" in setList hinterlegen, der mehrere set-Befehle ausführt.

Otto123

Bei einem defmod, also für die Kommandozeile sollte das so aussehen:
defmod testmqtt_notify_1 notify testmqtt:.* {fhem("set MQTT publish ESP-79-LCD/cmd tftcmd,clear,yellow;;set MQTT publish ESP-79-LCD/cmd tft,txtfull,7,33,2,black,white,a1")}

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mucki

Ihr seid super, da darf nur ein Semikolon stehen. Nun funktioniert es. Besten Dank Euch beiden.  :)

Zitat von: TomLee am 15 Dezember 2021, 19:17:00
Benötigst du denn das notify wirklich ?
Das notify war nur ein Versuch und wird wieder gelöscht. Das Display will ich durch Aufrufe der 99_myUtils.pm steuern. Dazu benötige ich mehrere publish Kommandos direkt hintereinander.
Nochmals vielen Dank!