Hauptmenü

setList Frage

Begonnen von hankyzoolander, 23 Juli 2019, 23:22:54

Vorheriges Thema - Nächstes Thema

hankyzoolander

Hallo, ist es denn möglich den Unix Timestamp per SetList von einem mqtt2 device zu senden?

Ziel des ganzen ist es den Unix Timestamp per mqtt an mein DotMatrix Display zu senden.
LedMatrix/time ist das TOPIC

defmod matrix MQTT2_DEVICE
attr matrix IODev mqtt_server
attr matrix icon it_television
attr matrix room Test
attr matrix setList LedMatrix/text $EVENT\
LedMatrix/dim:slider,0,1,10 $EVENT\
LedMatrix/power:off $EVENT\
LedMatrix/scrolling:on,off $EVENT\
LedMatrix/scrollspeed:slider,5,5,100 $EVENT\
LedMatrix/RGB:colorpicker $EVENT\
LedMatrix/RGBPower:off $EVENT\
LedMatrix/time {time()}
attr matrix userReadings timestamp {time()}
attr matrix verbose 5

setstate matrix LedMatrix/time
setstate matrix 2019-07-23 23:19:03 state LedMatrix/time



Heraus kommt leider nur
2019.07.23 23:22:14 5: PINGREQ: (192)(0)
2019.07.23 23:22:14 4: mqtt_server_192.168.0.63_59261 ESP8266Client PINGREQ
2019.07.23 23:22:21 5: mqtt_server: PUBLISH 1563916941


Es wird NUR der Timestamp ausgegeben. Es müsste PUBLISH LedMatrix/time 1563916941 lauten.
Hat da jemand eine Idee??
betateilchen  <--- my personal hero

supernova1963

Nicht getestet, aber vielleicht einen Versuch wert:

LedMatrix/time:{ time()} $EVENT

Beta-User

Witzige Schreibweise, die du da verwendet hast. Hatte erst gedacht, das dürfte eigentlich gar nicht so klappen, aber scheinbar schon...

Üblich ist eigentlich eher:
<readingname>[:<widget>] <topic> <payload>
Dabei scheint es aber zu genügen, wenn am Ende <topic> <payload> zurückgeliefert wird. Wie dem auch sei, man kann auch Perl verwenden, aber dann sollte das ganze etwas anders aussehen, ungetestet etwa in die Richtung:
attr matrix setList text LedMatrix/text $EVTPART1\
dim:slider,0,1,10 LedMatrix/dim $EVTPART1\
power:on,off LedMatrix/power $EVTPART1\
scrolling:on,off LedMatrix/scrolling $EVTPART1\
scrollspeed:slider,5,5,100 LedMatrix/scrollspeed $EVTPART1\
RGB:colorpicker LedMatrix/RGB $EVTPART1\
RGBPower:on,off LedMatrix/RGBPower $EVTPART1\
time:noArg {"LedMatrix/time ".time()}

Kann sein, dass ggf. localtime() besser paßt.
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

hankyzoolander

Hallo,
danke Beta-User!!
dein Vorschlag funktioniert super :)
Allerdings lasse ich die backslashes \ am ende weg, da die sonst bei mir im Display erscheinen.
Also folgender Code geht super

attr matrix setList text LedMatrix/text $EVTPART1
dim:slider,0,1,10 LedMatrix/dim $EVTPART1
power:on,off LedMatrix/power $EVTPART1
scrolling:on,off LedMatrix/scrolling $EVTPART1
scrollspeed:slider,5,5,100 LedMatrix/scrollspeed $EVTPART1
RGB:colorpicker LedMatrix/RGB $EVTPART1
RGBPower:on,off LedMatrix/RGBPower $EVTPART1
time:noArg {"LedMatrix/time ".time()}


Wir sind gerade dabei das "alte Project Matrix Display" von grund auf neu zu schreiben.
Mit so vielen Features wie möglich und diesmal alles über mqtt.

Eine kleine Frage hätte ich doch noch,

Ist es möglich ein reading von z.b. Tempsensor in die setList einzubinden?
Also das in der SetList Temp steht, ich dieses auswähle,und fhem das reading vom Tempsensor abruft und dann per mqtt versendet.

Ziel ist es mit so wenigen (notifys,DOIF) zu arbeiten. Am besten ganz ohne.
Wenn da jemand ne stupser in die richtige Richtung hätte wär das toll.
betateilchen  <--- my personal hero

Beta-User

Danke für die Rückmeldung.

Das mit den backslashes kam so von dir, vermutlich, weil das ein RAW-Format war ;) . Für die direkte Eingabe in den Attributinhalt braucht man das dann natürlich nicht...

Na ja, um einen Wert irgendwohin zu schreiben, wirst du immer was brauchen, was das auslöst (z.B. ein at oder notify). Dann kannst du das zwar auch via setList machen (analog zu time, nur dann eben mit einer ReadingsVal-Abfrage statt time()), ich würde dazu aber ein schlichtes publish an das betreffende IO vorziehen. Das ist einfach direkter, und du brauchst den Wert ja eigentlich nicht im MQTT2_DEVICE, sondern am ESP. (Das gilt für time übrigens genauso => eine zyklisch abzuarbeitende Routine, die die Werte jeweils aktualisiert; eine gewisse Zeitlang sollte auch eine vom ESP gebildete Uhrzeit halbwegs passen, bevor das wieder von/mit FHEM synchronisiert wird...)
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

hankyzoolander

Hallo,
hätte da noch ne Frage, und zwar ist es möglich den RGB Wert in der auswahlbox umzunennen? Hätte da gern rot,grün,blau. Also im Prinzip wie beim Device der ALIAS.
Das das Device aber immernoch den RGB Wert übergibt.
betateilchen  <--- my personal hero

Beta-User

Umbenennen sollte schon gehen, allerdings nur in einen gültigen Readingnamen (z.B. rot-grün-blau).

Aber was gefällt dir an dem "üblichen" RGB nicht?

Man kann den colorpicker übrigens noch weiter "verfeinern". Leider weiß ich nicht ganz genau, was du benötigst, aber versuche mal "colorpicker,HEX,0,15,255". Damit solltest du direkt einen Farbslider angezeigt bekommen.

Es wäre übrigens insgesamt (jedenfalls für mich) einfacher, wenn klar wäre, welche Daten das Ding am Ende in welcher Form bekommen soll, und wie ggf. eine Rückmeldung erfolgt, wenn ein Wert angekommen ist. So hatte ich das erst mal aus dem RAW-Code abgelesen, den du eingangs gepostet hattest.
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

hankyzoolander

Hallo,
also übergeben wird der RGB Wert selber z.b. FF0000, und das kommt auch so vom ESP zurück.
Habe nichts gegen der RGB Wert,dachte nur das es vielleicht nen kleinen Trick gibt um das in fhem einfach umzunennen (ähnlich ALIAS)
Brauch das aber nicht zwingend, war nur so ein Gedanke. Ich brauche auch nur die 3 Farben für mich selbst.
Den colorpicker hatte ich anfangs auch eingebunden, aber ich fand es so mit der Liste besser.

Dieses "kleine,32x8 Pixel" Matrix-Display ist jetzt soweit fertig und der Code ist final.
Hatte vor einiger Zeit dieses projekt mal gepostet. Damals lief noch ein Webserver auf der Matrix wo ein notify jede minute die Uhrzeit hineinpushte.

Der Code ist komplett überarbeitet und ersetzt.
Ich werde die Tage dieses Projekt ausführlich vorstellen.

Zeitgleich stelle ich gerade den Bau der neuen Matrix fertig.
Diese hat 256x8 Pixel und ist glaub über einen Meter lang.
Dafür wird der Code allerdings noch mehr optimiert wegen (ein/aus Effekten,position,Schriftarten und neoPixel Leds)
Aber auch dieses Projekt wird vorgestellt.
betateilchen  <--- my personal hero

Beta-User

Vielleicht noch folgende Anmerkungen:

Evtl. solltest du "rgb" statt "RGB" in der setList verwenden, dann paßt es zur readingList (oder dort den Readingnamen (hinten) ändern), und vor den text-publisch auch noch das Reading "text" schreiben.

Dann gehe ich davon aus, dass sich das Teil mit dem power-Befehl ein- und ausschalten läßt und daher eigentlich nur dieses Reading im DeviceOverview erscheinen soll. Dazu könntest du "setStateList" auf "power" setzen oder ggf on/off direkt als setList-Element verwenden und dann "on off" in die setStateList aufnehmen (müßte ich auch nachsehen, ist der Spur nach aus dem Kopf).

Den Server-autocreate bitte auf "simple" stellen. "complex" brauchst du tendenziell nicht.
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

hankyzoolander

Hallo,
habe RGB in der setList auf rgb geändert. sieht schöner aus.

#LedMatrix/text
Eingabefeld für Text

#RGBPower
nur off, wenn rgb Wert gesendet wird schalten sich die Leds an.

#power (Matrix)
nur off, wenn Text oder time gesendet wird schaltet sich die matrix ein.

#dim
slider von 0 bis 10 in 1er Schritten

#scrolling
on und off

#scrollspeed
slider von 5 bis 100 in 5er Schritten

#time
unix timestamp wird an ESP gesendet. ESP rechnet ihn in stunden:Minuten:Sekunden um und zeigt ihn auf der Matrix. Ein timer im Code zählt die Sekunden hoch. Somit macht der ESP die Uhrzeit alleine. Scrolling ist bei der Uhrzeit im code deaktiviert.

Autocreate steht jetzt auf simple.

Funktioniert alles sehr sehr gut.
Es kommt ja immer auf die Verwendung an. Was soll alles angezeigt werden?
Bei mir ist es Hauptsächlich die Uhrzeit. Aber die kleine Matrix wird bald von der großen ersetzt, da stehen ja wieder viel mehr möglichkeiten zur verfügung.
betateilchen  <--- my personal hero