FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: good_mike am 25 Oktober 2020, 20:01:06

Titel: Dummy Variable über MQTT übertragen
Beitrag von: good_mike am 25 Oktober 2020, 20:01:06
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!
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: Otto123 am 25 Oktober 2020, 20:43:41
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
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: good_mike am 01 November 2020, 11:04:59
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





Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag 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?
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: Otto123 am 01 November 2020, 12:29:16
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
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: TomLee am 01 November 2020, 12:37:15
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

Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: betateilchen am 01 November 2020, 12:50:50
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.
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: Otto123 am 01 November 2020, 12:58:07
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
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: betateilchen am 01 November 2020, 12:59:53
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.
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: Otto123 am 01 November 2020, 13:01:55
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!
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: betateilchen am 01 November 2020, 13:03:57
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]
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: betateilchen am 01 November 2020, 13:07:52
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... ;)
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: Otto123 am 01 November 2020, 13:09:23
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ß  :)
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: betateilchen am 01 November 2020, 13:13:49
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...
Titel: Antw:Dummy Variable über MQTT übertragen
Beitrag von: good_mike am 01 November 2020, 15:31:31
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?