FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rodnic am 29 März 2020, 20:34:40

Titel: Werte per MQTT senden
Beitrag von: rodnic am 29 März 2020, 20:34:40
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?
Titel: Antw:Werte per MQTT senden
Beitrag von: Otto123 am 29 März 2020, 20:37:22
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.
Titel: Antw:Werte per MQTT senden
Beitrag von: rodnic am 30 März 2020, 08:42:41
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;
Titel: Antw:Werte per MQTT senden
Beitrag 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.

Ergänzend: Da das ein Tasmota ist, kannst du das auch zusammengefaßt auf backlog publishen.
Titel: Antw:Werte per MQTT senden
Beitrag von: rodnic am 30 März 2020, 11:41:30
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?
Titel: Antw:Werte per MQTT senden
Beitrag von: Beta-User am 30 März 2020, 12:13:40
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

Titel: Antw:Werte per MQTT senden
Beitrag von: rodnic am 30 März 2020, 12:51:58
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;
Titel: Antw:Werte per MQTT senden
Beitrag von: rodnic am 30 März 2020, 12:56:07
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.
Titel: Antw:Werte per MQTT senden
Beitrag von: Beta-User am 30 März 2020, 13:02:31
...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 (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.
Titel: Antw:Werte per MQTT senden
Beitrag von: rodnic am 30 März 2020, 13:12:48
so geht es eben nicht

set Mosquitto publish cmd/HAB-Display-01/lednr $min;
Titel: Antw:Werte per MQTT senden
Beitrag von: Otto123 am 30 März 2020, 13:23:53
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")
}
Titel: Antw:Werte per MQTT senden
Beitrag 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 ";").
Titel: Antw:Werte per MQTT senden
Beitrag von: Otto123 am 30 März 2020, 13:37:13
stimmt :)  :-[
Hab es editiert - doppelt gemoppelt  8)
Titel: Antw:Werte per MQTT senden
Beitrag von: rodnic am 30 März 2020, 13:56:35
Super,

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

Danke
Titel: Antw:Werte per MQTT senden
Beitrag von: Otto123 am 30 März 2020, 14:06:26
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.
Titel: Antw:Werte per MQTT senden
Beitrag von: Mucki am 15 Dezember 2021, 18:46:38
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.
Titel: Antw:Werte per MQTT senden
Beitrag von: TomLee am 15 Dezember 2021, 19:17:00
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.
Titel: Antw:Werte per MQTT senden
Beitrag von: Otto123 am 15 Dezember 2021, 19:46:03
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")}

Titel: Antw:Werte per MQTT senden
Beitrag von: Mucki am 15 Dezember 2021, 20:22:10
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!