Dummy Variable über MQTT übertragen

Begonnen von good_mike, 25 Oktober 2020, 20:01:06

Vorheriges Thema - Nächstes Thema

good_mike

Hallo,

ich bin absoluter Newbie. Habe mich mit Hilfe des Forum so weit voran gebracht das ich MQTT / Mosquitto installiert habe und zeitgesteuert einen fixen Text über MQTT an NodeRed senden kann.
define a7 at +*00:00:05 set mosquitto publish /smarthome TestZeit

sendet z.B. alle 5 Sekunden das Wort "TestZeit" an NodeRed.

So weit so gut.
Aber ich habe eigentlich die Variable Dummy TestZeit angelegt um dynamisch die Systemzeit übertragen zu können

define TestZeit dummy
define at_TestZeit at +*00:00:05 {my $t=substr($hms,0,5);; fhem("set TestZeit $t")}

Aber leider wir nur das Wort TestZeit übertragen und nicht der Inhalt.....

Irgendwie hat es bei mir noch nicht klick gemacht.....

Wäre super wenn Ihr mir einen Tip geben könntet!

Otto123

Hi,

ich habe jetzt nicht verstanden, was nicht geht.
Das zweite at sollte dir alle 5 sec die aktuelle Zeit in den dummy schreiben - funktioniert bei mir.

Das Ganze ändert nichts an deinem ersten at - welches stur nur den String übermittelt. Du wolltest das ändern? In den Inhalt von Testzeit?
Dann so:
defmod a7 at +*00:00:05 set mosquitto publish /smarthome [TestZeit]

Gruß Otto
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

good_mike

Danke schon mal, aber ich kapiers leider nicht  :(    - sorry bin halt Anfänger und am lernen....

Ich habe jetzt alles damit zusammen hängende gelöscht und folgenden Code eingegeben:

define TestZeit dummy
define a7 at +*00:00:05 set mosquitto publish /smarthome [TestZeit]
define at_TestZeit at +*00:00:05 {my $t=substr($hms,0,5);; fhem("set TestZeit $t")}


Das Ergebnis ist das gleiche, jetzt halt mit eckigen Klammern - Es wird das Wort [Testzeit] im Node Red ausgegeben > siehe Screenshot

Gruß

Michael






betateilchen

Noch eleganter und ganz ohne substr():

defmod a7 at +*00:00:05 {fhem("set mosquitto publish /smarthome $hour:$min");;fhem("set TestZeit $hour:$min")}

Welchen Sinn hat eigentlich das dummy device?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Zitat von: good_mike am 01 November 2020, 11:04:59
Das Ergebnis ist das gleiche, jetzt halt mit eckigen Klammern - Es wird das Wort [Testzeit] im Node Red ausgegeben > siehe Screenshot
Hallo Michael,

dann macht Dein mosquitto Device etwas anders als andere FHEM Geräte und verarbeitet den set magic Syntax offenbar nicht.
Ich habe das gerade mit meinem MQTT2 Geräten (CLIENT  UND SERVER) getestet, da funktioniert das genau so.

Dann hast Du nur die Möglichkeit, den Syntax von betateilchens Beispiel zu verwenden und den Publish String in Perl zusammensetzen.

Gruß Otto
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

TomLee

ZitatIch habe das gerade mit meinem MQTT2 Geräten (CLIENT  UND SERVER) getestet, da funktioniert das genau so.

Bei mir nicht, hab ich vorhin aus Interesse mal ausprobiert.

siehe Reading lastPublish:

defmod mqtt2s MQTT2_SERVER 1883 global

setstate mqtt2s 2020-11-01 11:50:46 RETAIN {"homeassistant/music_player/RINCON_000E58F7F67C01400/sonos/config":"{\u0022available_commands\u0022:[\u0022adv-command\u0022,\u0022clearqueue\u0022,\u0022command\u0022,\u0022joingroup\u0022,\u0022leavegroup\u0022,\u0022mute\u0022,\u0022next\u0022,\u0022notify\u0022,\u0022pause\u0022,\u0022play\u0022,\u0022playmode\u0022,\u0022previous\u0022,\u0022queue\u0022,\u0022seek\u0022,\u0022selecttrack\u0022,\u0022setavtransporturi\u0022,\u0022sleep\u0022,\u0022speak\u0022,\u0022stop\u0022,\u0022switchtoline\u0022,\u0022switchtoqueue\u0022,\u0022switchtotv\u0022,\u0022toggle\u0022,\u0022unmute\u0022,\u0022volume\u0022,\u0022volumedown\u0022,\u0022volumeup\u0022],\u0022command_topic\u0022:\u0022sonos/RINCON_000E58F7F67C01400/control\u0022,\u0022device\u0022:{\u0022identifiers\u0022:[\u0022RINCON_000E58F7F67C01400\u0022],\u0022manufacturer\u0022:\u0022Sonos\u0022,\u0022name\u0022:\u0022Wohnzimmer\u0022},\u0022device_class\u0022:\u0022speaker\u0022,\u0022icon\u0022:\u0022mdi:speaker\u0022,\u0022json_attributes\u0022:true,\u0022json_attributes_topic\u0022:\u0022sonos/RINCON_000E58F7F67C01400\u0022,\u0022name\u0022:\u0022Wohnzimmer\u0022,\u0022state_topic\u0022:\u0022sonos/RINCON_000E58F7F67C01400\u0022,\u0022unique_id\u0022:\u0022sonos2mqtt_RINCON_000E58F7F67C01400_speaker\u0022,\u0022availability_topic\u0022:\u0022sonos/connected\u0022,\u0022payload_available\u0022:\u00222\u0022}","sonos/RINCON_000E58F7F67C01400":"{\u0022uuid\u0022:\u0022RINCON_000E58F7F67C01400\u0022,\u0022name\u0022:\u0022Wohnzimmer\u0022,\u0022groupName\u0022:\u0022Wohnzimmer\u0022,\u0022coordinatorUuid\u0022:\u0022RINCON_000E58F7F67C01400\u0022,\u0022currentTrack\u0022:{\u0022AlbumArtUri\u0022:\u0022http://192.168.188.23:1400/getaa?u=x-rincon-mp3radio:%2f%2fhttp:%2f%2fopml.radiotime.com%2fTune.ashx%3fid%3de88185605%26sid%3ds2485%26formats%3daac,mp3,hls%26partnerId%3drjyYMwEH%26serial%3dAHFLNOA3T2XT6VWH2BAPMLPWOGLA&v=85\u0022,\u0022Title\u0022:\u0022102.8 Radio Regenbogen Heidelberg\u0022,\u0022UpnpClass\u0022:\u0022object.item\u0022,\u0022ItemId\u0022:\u0022-1\u0022,\u0022ParentId\u0022:\u0022-1\u0022,\u0022TrackUri\u0022:\u0022x-rincon-mp3radio://http://opml.radiotime.com/Tune.ashx?id=e88185605&sid=s2485&formats=aac,mp3,hls&partnerId=rjyYMwEH&serial=AHFLNOA3T2XT6VWH2BAPMLPWOGLA\u0022,\u0022ProtocolInfo\u0022:\u0022x-rincon-mp3radio:*:*:*\u0022},\u0022enqueuedMetadata\u0022:{\u0022AlbumArtUri\u0022:\u0022https://cdn-radiotime-logos.tunein.com/s2485q.png\u0022,\u0022Title\u0022:\u0022102.8 Radio Regenbogen Heidelberg\u0022,\u0022UpnpClass\u0022:\u0022object.item.audioItem.audioBroadcast\u0022,\u0022ItemId\u0022:\u0022-1\u0022,\u0022ParentId\u0022:\u0022-1\u0022},\u0022transportState\u0022:\u0022STOPPED\u0022,\u0022playmode\u0022:\u0022NORMAL\u0022,\u0022ts\u0022:1604227846481,\u0022volume\u0022:{\u0022Master\u0022:18,\u0022LF\u0022:100,\u0022RF\u0022:100},\u0022mute\u0022:{\u0022Master\u0022:false,\u0022LF\u0022:false,\u0022RF\u0022:false},\u0022bass\u0022:3,\u0022treble\u0022:-5}","sonos/connected":"2","tele/DVES_55F827/LWT":"Offline"}
setstate mqtt2s 2020-11-01 12:33:21 lastPublish /smarthome:[TestZeit]
setstate mqtt2s 2020-11-01 12:33:33 nrclients 2
setstate mqtt2s 2020-10-24 17:05:36 state Initialized


defmod TestZeit dummy

setstate TestZeit 12:36
setstate TestZeit 2020-11-01 12:36:24 state 12:36


betateilchen

#6
Zitat von: Otto123 am 01 November 2020, 12:29:16
dann macht Dein mosquitto Device etwas anders als andere FHEM Geräte und verarbeitet den set magic Syntax offenbar nicht.
Ich habe das gerade mit meinem MQTT2 Geräten (CLIENT  UND SERVER) getestet, da funktioniert das genau so.

Zitat von: TomLee am 01 November 2020, 12:37:15
Bei mir nicht, hab ich vorhin aus Interesse mal ausprobiert.

Bei mir funktioniert der Vorschlag von Otto auch nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

#7
Also ok ich habe eine MQTT2_Client. Der verbindet sich zu einem MQTT2 Server
Dort mach ich
set mqtt2c publish -r home/states/fuehler1/temperature [fuehler3:temperature]
lastPublish home/states/fuehler1/temperature:25 2020-11-01 12:53:46

Ok ich teste nochmal mit einem Server...
Edit: geht dort auf die gleiche Art.
lastPublish home/states/fuehler1/temperature:25 2020-11-01 12:59:41
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

betateilchen

Parallel zu Deinem Schreiben habe ich gerade folgendes getestet:

+*00:00:05 set mqtt2 publish /smarthome [TestZeit:state]

Und DAS funktioniert :)

2020-11-01 13:00:06 MQTT2_CLIENT mqtt2 lastPublish: /smarthome:12:34

Trotzdem würde ich sowas nicht mit einem dummy und substr() lösen, wenn es die benötigten Werte ohnehin schon als Variablen gibt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

#9
Das war jetzt noch meine Idee: STATE geht eventuell nicht?
Also nur [device] wird nicht aufgelöst - warum ist das so?

Edit: gegencheck: [fuehler1] funktioniert nicht!
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

betateilchen

Zitat von: Otto123 am 01 November 2020, 12:58:07
Edit: geht dort auf die gleiche Art.

Ja, wie gesagt. Die Kombination [device:reading] funktioniert, nur das [device] anzugeben (wie von Dir ursprünglich vorgeschlagen) funktioniert nicht.

Zitat von: Otto123 am 25 Oktober 2020, 20:43:41
Dann so:
defmod a7 at +*00:00:05 set mosquitto publish /smarthome [TestZeit]
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Otto123 am 01 November 2020, 13:01:55
Das war jetzt noch meine Idee: STATE geht eventuell nicht?

mit STATE sollte man überhaupt nie arbeiten, maximal mit state... ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Ich bin doof und wieder dem erlegen was in DOIF geht  :'(

set magic kann das nicht nicht [device] es muss [device:reading] sein!!!
https://fhem.de/commandref.html#set

SORRY für die Verwirrung

Zitatmit STATE sollte man überhaupt nie arbeiten, maximal mit state... ;)
Ich weiß  :)
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

betateilchen

Zitat von: Otto123 am 01 November 2020, 13:09:23
Ich bin doof und wieder dem erlegen was in DOIF geht  :'(

DOIF... die Wurzel allen Übels...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

good_mike

Zitat
Zitat von: betateilchen am 01 November 2020, 11:37:45
Noch eleganter und ganz ohne substr():

defmod a7 at +*00:00:05 {fhem("set mosquitto publish /smarthome $hour:$min");;fhem("set TestZeit $hour:$min")}

Welchen Sinn hat eigentlich das dummy device?

Funktioniert  :) - Vielen Dank!!

Jetzt muss ich nur noch verstehen warum und wie die zitierte Lösung wirklich funktioniert. Ich mach das Ganze ja um zu lernen und verstehen.  Könnt Ihr mir da vielleicht noch ein Tip geben?