MQTT publish nur nach Sonnenaufgang bis Sonnenuntergang

Begonnen von Alex_S, 13 Juli 2023, 07:47:54

Vorheriges Thema - Nächstes Thema

Alex_S

Hi

ich möchte von einem Device Werte nach MQTT publishen, dass funktioniert auch soweit.

Aber wie bekomme ich es hin, dass die Nachrichten nur in dem Zeitraum zwischen Sonnenaufgang und Sonnenuntergang gesendet werden, auch wenn das Device in den Nachtstunden auch events generiert?

Ich habe schon über die SetExtensions gelesen, bin mir aber nicht sicher, ob ich es damit hinbekomme.
Es wäre super wenn mir jemand einen Tipp geben könnte, wie ich es am besten anstelle.

Edit:
Ich hab vergessen zu erwähnen, dass es sich um eine MQTT_DEVICE handelt.
Danke

Beta-User

Kannst du die Kette etwas näher beschreiben?

Jedenfalls mir ist nicht klar, WARUM Events gepublisht werden; automatisch passiert das ja nicht, es müßte ein notify, DOIF, MQTT_GENERIC_BRIDGE-Device o.ä geben, das das publish verursacht (oder den set-Befehl an das MQTT_DEVICE generiert)? notify kennt z.B. ein Attribut "disabledForIntervals" (oder so).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Alex_S

#2
Ok vielleicht war "event" der falsche Begriff, wahrscheinlich meinte ich ein Reading.

Also ich hab ein MQTT Device dort wird per subscription ein Reading aktualisiert.
Dieses Reading gebe ich per publish an ein anderes Topic weiter.

Und das soll nur zwischen Sonnenaufgang und Sonnenuntergang passieren. 

Otto123

Zitat von: Alex_S am 13 Juli 2023, 10:53:36Dieses Reading gebe ich per publish an ein anderes Topic weiter.
Wie genau tust Du das?
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

Alex_S

#4
Ich hab einfach ein mqttPublish reingesetzt

define WMBUS_DEVICE MQTT_DEVICE
attr WMBUS_DEVICE IODev Mosquitto
attr WMBUS_DEVICE mqttPublish SEN_21363953_104_7_total_m3:topic=fhem/water/volume\

attr WMBUS_DEVICE stateFormat transmission-state
attr WMBUS_DEVICE subscribeReading_21363953 wmbusmeters/SEN_21363953_104_7
attr WMBUS_DEVICE subscribeReading_50007932 wmbusmeters/ZRI_50007932_10_55
attr WMBUS_DEVICE subscribeReading_Meter wmbusmeters/#

[...]

Oh habe gerade gesehn, dass das mqttPublish aus der MQTT_GENERIC_BRIDGE kommt.

Beta-User

Zitat von: Alex_S am 13 Juli 2023, 11:05:25Oh habe gerade gesehn, dass das mqttPublish aus der MQTT_GENERIC_BRIDGE kommt.
QED...

Also: MGB kennt die Option, Perl-Code zur Vorverarbeitung des Versendens einzusetzen. Da könntest du ggf. eine isday()-Abfrage unterbringen (kann sein, dass du das nach main verweisen musst: "::isday()"). Die Hilfe zu MGB könnte ggf. weitergehende Infos enthalten, wie man das publish verhindert bzw. filtert.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

Man könnte auch einfach prüfen, ob das device, dessen readings gebridged werden, ein disabledForIntervals unterstützt. Setzt natürlich voraus, dass man die readings selbst nicht noch für andere Zwecke benötigt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Alex_S

Danke für die Hilfe, jetzt klappt es
attr WMBUS_DEVICE mqttPublish SEN_21363953_104_7_total_m3:topic=fhem/water/test SEN_21363953_104_7_total_m3:expression={(main::isday())?'OK':''}

mal schauen, ob die Nachrichten nach Sonnenuntergang ausbleiben und morgen früh wiederkommen.

betateilchen

Zitat von: Alex_S am 13 Juli 2023, 15:10:24mal schauen, ob die Nachrichten nach Sonnenuntergang ausbleiben

da wette ich mal eine Tüte Popcorn dagegen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Alex_S

#9
Zitatda wette ich mal eine Tüte Popcorn dagegen...


Warum? hab ich offensichtliches übersehen?

betateilchen

Naja, ich habe noch nicht genau verstanden, welches Verhalten Du jetzt nach Sonnenuntergang erwartest.

Aber dass dann keine Nachricht kommt, erwarte ich eher nicht. Denn ich kann nicht erkennen, an welcher Stelle

attr WMBUS_DEVICE mqttPublish SEN_21363953_104_7_total_m3:topic=fhem/water/test SEN_21363953_104_7_total_m3:expression={(main::isday())?'OK':''}
Du das unterbunden haben möchtest.
Nur mal interessehalber: welche Nachricht wird denn aktuell verschickt?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: Alex_S am 13 Juli 2023, 15:38:11
Zitatda wette ich mal eine Tüte Popcorn dagegen...


Warum? hab ich offensichtliches übersehen?
commandref sagt:
ZitatThe return value is used as a new message value, the changed variables have priority.
 If the return value is undef, setting / execution is suppressed.
In deinem Code sehe ich kein "echtes undef", das zurückgegeben werden würde....
Und wenn was "tagsüber" zurückkommt, dann nicht der geänderte Wert, sondern ein "OK".

Und dann scheint mir zu guter letzt noch eine Klammer zuviel zu sein; es könnte sein, dass ein leeres Array (wenn das undef korrekt an der richtigen Stelle stünde) zurückgegeben wird, und das ist auch "was" (also kein echtes undef!)....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

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

Beta-User

Zitat von: betateilchen am 13 Juli 2023, 16:31:57Spaßbremse... 8)
....gelernt ist halt gelernt...

Im Ernst: Für diesen Anwendungfall gibt es m.E. keine wirklich guten (anfängertauglichen) Beispiele, und mir war klar, nach was man in der commandref suchen muss....

Von daher galt hier noch "Welpenschutz" ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Alex_S

#14
So ...
hat geklappt - zumindest fast alles ;)

Eine sache musste ich noch ändern. Ich habe expression={(main::isday())?'OK':''} durch expression={(main::isday())?'OK':undef} ersetzt.

Da nach Sonnenuntergang ein "(Null)" beim Broker ankam.

Dass ein OK statt eines Wertes gesendet wird ist Absicht. Das OK ist nur ein Trigger für ein anderes Gerät, was dann Daten pollt.

Nochmals Danke für den Hinweis mit den expressions