gelöst: JSON zu MQTT Device senden aus Fhem

Begonnen von matze1999, 01 April 2023, 15:24:37

Vorheriges Thema - Nächstes Thema

matze1999

Hallo,

ich hab ein Device mit Pxelit und MQTT, mittels JSON kann man dort beliebige Texte schreiben.

Das Device:

define MQTT2_PixelIt MQTT2_DEVICE PixelIt
attr MQTT2_PixelIt readingList PixelIt:House/PixelIt/state:.* state\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212Temperature/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212Humidity/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212Illuminance/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/binary_sensor/PixelIt145899349270212/PixelIt145899349270212Button0/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/binary_sensor/PixelIt145899349270212/PixelIt145899349270212Button1/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/binary_sensor/PixelIt145899349270212/PixelIt145899349270212Button2/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212wifiRSSI/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212WifiQuality/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212cpuFreqMHz/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212WifiSSID/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212WifiBSSID/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/sensor/PixelIt145899349270212/PixelIt145899349270212chipID/config:.* { json2nameValue($EVENT) }\
PixelIt:homeassistant/light/PixelIt145899349270212/PixelIt145899349270212LEDMatrixLight/config:.* { json2nameValue($EVENT) }\
PixelIt:House/PixelIt/luxsensor:.* { json2nameValue($EVENT) }\
PixelIt:House/PixelIt/sensor:.* { json2nameValue($EVENT) }\
PixelIt:House/PixelIt/matrixinfo:.* { json2nameValue($EVENT) }
attr MQTT2_PixelIt room MQTT2_DEVICE
#   CFGFN     
#   CID        PixelIt
#   DEF        PixelIt
#   FUUID      641b5d26-f33f-214e-6ec7-0b739c3a6f301173
#   IODev      myBroker
#   LASTInputDev myBroker
#   MSGCNT     432
#   NAME       MQTT2_PixelIt
#   NR         199942
#   STATE      connected
#   TYPE       MQTT2_DEVICE
#   eventCount 449
#   myBroker_CONN myBroker_192.168.1.191_61707
#   myBroker_MSGCNT 432
#   myBroker_TIME 2023-03-22 21:00:49
#   READINGS:
#     2023-03-22 20:55:18   IODev           myBroker
#     2023-03-22 20:55:41   avty_t          House/PixelIt/state
#     2023-03-22 20:55:41   bri_tpl         {{ value_json.currentMatrixBrightness }}
#     2023-03-22 21:00:47   chipID          145899349270212
#     2023-03-22 20:55:41   cmd_off_tpl     {'sleepMode': true}
#     2023-03-22 20:55:41   cmd_on_tpl      {'sleepMode': false {%- if brightness is defined -%}, 'brightness': {{ brightness }}{%- endif -%}}
#     2023-03-22 20:55:41   cmd_t           House/PixelIt/setScreen
#     2023-03-22 21:00:47   cpuFreqMHz      80
#     2023-03-22 21:00:47   currentMatrixBrightness 20
#     2023-03-22 20:55:41   dev_cla         signal_strength
#     2023-03-22 20:55:41   dev_cu          http://192.168.1.191
#     2023-03-22 20:55:41   dev_ids         PixelIt145899349270212
#     2023-03-22 20:55:41   dev_mdl         PixelIt
#     2023-03-22 20:55:41   dev_mf          PixelIt
#     2023-03-22 20:55:41   dev_name        PixelIt
#     2023-03-22 20:55:41   dev_sw          2.2.0-RC1-UlanziTC001
#     2023-03-22 20:55:41   enabled_by_default false
#     2023-03-22 20:55:41   ent_cat         diagnostic
#     2023-03-22 21:00:47   freeHeap        212572
#     2023-03-22 21:00:47   freeSketchSpace 1310720
#     2023-03-22 21:00:44   gas             Not installed
#     2023-03-22 21:00:47   hostname        PixelIt
#     2023-03-22 21:00:44   humidity        59
#     2023-03-22 20:55:41   ic              mdi:developer-board
#     2023-03-22 20:55:41   icon            mdi:led-strip
#     2023-03-22 21:00:47   ipAddress       192.168.1.191
#     2023-03-22 21:00:49   lux             0.496
#     2023-03-22 20:55:41   name            LED Matrix
#     2023-03-22 21:00:47   note           
#     2023-03-22 21:00:47   pixelitVersion  2.2.0-RC1-UlanziTC001
#     2023-03-22 20:55:41   pl_avail        connected
#     2023-03-22 20:55:41   pl_not_avail    disconnected
#     2023-03-22 20:55:41   pl_off          false
#     2023-03-22 20:55:41   pl_on           true
#     2023-03-22 21:00:44   pressure        Not installed
#     2023-03-22 20:55:41   schema          template
#     2023-03-22 21:00:47   sleepMode       false
#     2023-03-22 20:55:41   stat_t          House/PixelIt/matrixinfo
#     2023-03-22 20:55:41   stat_tpl        {{ 'on' if value_json.sleepMode is false else 'off' }}
#     2023-03-22 20:55:41   state           connected
#     2023-03-22 20:55:18   subscriptions   House/PixelIt/getConfig House/PixelIt/getLuxsensor House/PixelIt/getMatrixinfo House/PixelIt/setConfig House/PixelIt/setScreen
#     2023-03-22 21:00:44   temperature     25.69
#     2023-03-22 20:55:41   uniq_id         PixelIt145899349270212LEDMatrixLight
#     2023-03-22 20:55:41   unit_of_meas    MHz
#     2023-03-22 20:55:41   val_tpl         {{value_json.chipID}}
#     2023-03-22 21:00:47   wifiBSSID       DC:39:6F:38:C8:B1
#     2023-03-22 21:00:47   wifiQuality     64
#     2023-03-22 21:00:47   wifiRSSI        -68
#     2023-03-22 21:00:47   wifiSSID        alfmatz
#
setstate MQTT2_PixelIt connected
setstate MQTT2_PixelIt 2023-03-22 20:55:18 IODev myBroker
setstate MQTT2_PixelIt 2023-03-22 20:55:41 avty_t House/PixelIt/state
setstate MQTT2_PixelIt 2023-03-22 20:55:41 bri_tpl {{ value_json.currentMatrixBrightness }}
setstate MQTT2_PixelIt 2023-03-22 21:00:47 chipID 145899349270212
setstate MQTT2_PixelIt 2023-03-22 20:55:41 cmd_off_tpl {'sleepMode': true}
setstate MQTT2_PixelIt 2023-03-22 20:55:41 cmd_on_tpl {'sleepMode': false {%- if brightness is defined -%}, 'brightness': {{ brightness }}{%- endif -%}}
setstate MQTT2_PixelIt 2023-03-22 20:55:41 cmd_t House/PixelIt/setScreen
setstate MQTT2_PixelIt 2023-03-22 21:00:47 cpuFreqMHz 80
setstate MQTT2_PixelIt 2023-03-22 21:00:47 currentMatrixBrightness 20
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_cla signal_strength
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_cu http://192.168.1.191
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_ids PixelIt145899349270212
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_mdl PixelIt
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_mf PixelIt
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_name PixelIt
setstate MQTT2_PixelIt 2023-03-22 20:55:41 dev_sw 2.2.0-RC1-UlanziTC001
setstate MQTT2_PixelIt 2023-03-22 20:55:41 enabled_by_default false
setstate MQTT2_PixelIt 2023-03-22 20:55:41 ent_cat diagnostic
setstate MQTT2_PixelIt 2023-03-22 21:00:47 freeHeap 212572
setstate MQTT2_PixelIt 2023-03-22 21:00:47 freeSketchSpace 1310720
setstate MQTT2_PixelIt 2023-03-22 21:00:44 gas Not installed
setstate MQTT2_PixelIt 2023-03-22 21:00:47 hostname PixelIt
setstate MQTT2_PixelIt 2023-03-22 21:00:44 humidity 59
setstate MQTT2_PixelIt 2023-03-22 20:55:41 ic mdi:developer-board
setstate MQTT2_PixelIt 2023-03-22 20:55:41 icon mdi:led-strip
setstate MQTT2_PixelIt 2023-03-22 21:00:47 ipAddress 192.168.1.191
setstate MQTT2_PixelIt 2023-03-22 21:00:49 lux 0.496
setstate MQTT2_PixelIt 2023-03-22 20:55:41 name LED Matrix
setstate MQTT2_PixelIt 2023-03-22 21:00:47 note
setstate MQTT2_PixelIt 2023-03-22 21:00:47 pixelitVersion 2.2.0-RC1-UlanziTC001
setstate MQTT2_PixelIt 2023-03-22 20:55:41 pl_avail connected
setstate MQTT2_PixelIt 2023-03-22 20:55:41 pl_not_avail disconnected
setstate MQTT2_PixelIt 2023-03-22 20:55:41 pl_off false
setstate MQTT2_PixelIt 2023-03-22 20:55:41 pl_on true
setstate MQTT2_PixelIt 2023-03-22 21:00:44 pressure Not installed
setstate MQTT2_PixelIt 2023-03-22 20:55:41 schema template
setstate MQTT2_PixelIt 2023-03-22 21:00:47 sleepMode false
setstate MQTT2_PixelIt 2023-03-22 20:55:41 stat_t House/PixelIt/matrixinfo
setstate MQTT2_PixelIt 2023-03-22 20:55:41 stat_tpl {{ 'on' if value_json.sleepMode is false else 'off' }}
setstate MQTT2_PixelIt 2023-03-22 20:55:41 state connected
setstate MQTT2_PixelIt 2023-03-22 20:55:18 subscriptions House/PixelIt/getConfig House/PixelIt/getLuxsensor House/PixelIt/getMatrixinfo House/PixelIt/setConfig House/PixelIt/setScreen
setstate MQTT2_PixelIt 2023-03-22 21:00:44 temperature 25.69
setstate MQTT2_PixelIt 2023-03-22 20:55:41 uniq_id PixelIt145899349270212LEDMatrixLight
setstate MQTT2_PixelIt 2023-03-22 20:55:41 unit_of_meas MHz
setstate MQTT2_PixelIt 2023-03-22 20:55:41 val_tpl {{value_json.chipID}}
setstate MQTT2_PixelIt 2023-03-22 21:00:47 wifiBSSID DC:39:6F:38:C8:B1
setstate MQTT2_PixelIt 2023-03-22 21:00:47 wifiQuality 64
setstate MQTT2_PixelIt 2023-03-22 21:00:47 wifiRSSI -68
setstate MQTT2_PixelIt 2023-03-22 21:00:47 wifiSSID myWIFI

JSON String zum Text senden:

{
    "text": {
        "textString": "Pixel it 😀",
        "scrollText": "auto",
        "bigFont": false,
        "centerText": false,
        "scrollTextDelay": 40,
        "hexColor": "#FFFFFF",
        "position": {
            "x": 0,
            "y": 1
        }
    }
}

Wie bekomme ich einen Text aus Fhem, per JSON String zum MQTT Device?

matze1999

Otto123

Hi,

erstmal testen mit publish über den Broker,
set myBroker publish DeinTopic DeinJsonStringdann mit eine attr setList so zum interaktiven Test, einfach deinen String ins Textfeld werfen und set drücken.
test:textfield House/PixelIt/setConfig $EVTPART1Der Topic ist nur geraten!

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

Beta-User

Du legst eine entsprechende setList an, ganz einfach. Dann musst du nur entscheiden, ob du den ganzen JSON vorher zusammenbaust und dann per "set" raussendest, oder ob das nur Teile sein sollen (letzteres ist eher schwierig in diesem Fall).

Beispiele findest du zuhauf in mqtt2.template (im AttrTemplate-Verzeichnis).

Und schau dir mal im Wiki "Schritt für Schritt" zu MQTT2_DEVICE an, dann weißt du hoffentlich, wie du das Device gleich "entschlacken" kannst.

@Otto: $EVTPART1 ist hier schwierig, weil ja "das erste Wort" (der Reading-Name) verworfen werden muss. Aber da hatten wir doch was im sonos-Thread, oder?
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

Otto123

stimmt  :-* schon wieder vergessen. EVTPARTx ist mit Json insgesamt schwierig (Leerzeichen), müsste man mit myUtils machen.

Also erstmal mit publish testen und dann verfeinern.
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

matze1999

das getestet:

set myBroker publish House/PixelIt/setScreen {"text":{"textString":"Pixel it 😀","scrollText":"auto","bigFont":false,"centerText":false,"scrollTextDelay":40,"hexColor":"#FFFFFF","position":{"x":0,"y":1}}}
funktioniert.

Jetzt der nächste Schritt: myUtils?

matze1999


matze1999

#5
...noch etwas zum ein- und Ausschalten:

von hier

Display ausschalten:
set myBroker publish House/PixelIt/setScreen {"sleepMode":true}
Display einschalten:
set myBroker publish House/PixelIt/setScreen {"sleepMode":false}
usw.

matze1999

Otto123

letzteres kann man (nicht perfekt) so machen:
attr MQTT2_PixelIt setList sleep:true,false House/PixelIt/setScreen {"sleepMode":$EVTPART1}
Beim ersten hängt es ein bisschen davon ab welchen Level das bekommen soll.
von der Sache her machst Du hinten einen Aufruf { sub_name($NAME,$EVENT) } und dann eine Sub in der 99_myUtils.pm
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

matze1999

Hallo,

danke, ich hab keine Ahnung wie man so etwas macht:

sub PixelItText($)
{
 my $text;
 fhem( set myBroker publish House/PixelIt/setScreen {"text":{"textString":$text:"auto","bigFont":false,"centerText":false,"scrollTextDelay":40,"hexColor":"#FFFFFF","position":{"x":0,"y":1}}})
}

Ich weiss nicht mal, wenn das richtig sein sollte, wie ich das dann in Fhem nutze.

matze1999

Otto123

Willst Du das einmalig als Steuersequenz ausgeben? Oder sollen da noch veränderliche Bestandteile in diesen json?
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

matze1999

Wenn ich das erst mal verstanden habe, sollte ich auch in der Lage sein, die anderen Optionen, wie z.b. die Farbe der Schrift, usw. als Wert mit zu geben.


matze1999

matze1999

ich hab noch was, um auf die Uhr zurück zu schalten:

attr MQTT2_PixelIt setList sleep:true,false House/PixelIt/setScreen {"sleepMode":$EVTPART1}\
clock:noArg House/PixelIt/setScreen { "clock": {}}

;D  matze1999 ;D

matze1999

#11
Wenn ich das richtig sehe, sind diese JSON Schnipsel für alle PixelIt Devices (WS2812B basiert) nutzbar (bis auf diese sonderfälle wie "clock" für diese Ulanzi Uhr). Kann man das so gestalten, dass man das für alle Pixelit Devices als template erstellt?

matze1999

matze1999

#12
Zitat von: matze1999 am 02 April 2023, 12:06:05Hallo,

danke, ich hab keine Ahnung wie man so etwas macht:

sub PixelItText($)
{
 my $text;
 fhem( set myBroker publish House/PixelIt/setScreen {"text":{"textString":$text:"auto","bigFont":false,"centerText":false,"scrollTextDelay":40,"hexColor":"#FFFFFF","position":{"x":0,"y":1}})
}

Ich weiss nicht mal, wenn das richtig sein sollte, wie ich das dann in Fhem nutze.

matze1999


Geht nicht, kann ich schon nicht in dieser form in der myUtils speichern:

ERROR:
Unknown regexp modifier "/e" at ./FHEM/99_myUtils.pm line 64, at end of line Unknown regexp modifier "/t" at ./FHEM/99_myUtils.pm line 64, at end of line Unknown regexp modifier "/S" at ./FHEM/99_myUtils.pm line 64, at end of line Unknown regexp modifier "/r" at ./FHEM/99_myUtils.pm line 64, at end of line Unknown regexp modifier "/e" at ./FHEM/99_myUtils.pm line 64, at end of line Unknown regexp modifier "/e" at ./FHEM/99_myUtils.pm line 64, at end of line syntax error at ./FHEM/99_myUtils.pm line 64, near "/PixelIt/setScreen {" syntax error at ./FHEM/99_myUtils.pm line 64, near "}}"

Beta-User

Wenn du was in einen "fhem"-Aufruf verpacken willst, musst du die Syntax-Regeln einhalten, also Quotes außen herum machen.

Das ist hier aber speziell, weil du einerseits die Variablen auflösen willst ($text), aber andererseits innerhalb des JSON ja auch wieder doppelte Anführungszeichen brauchst...

Bitte mal mit "Quotes in Perl" beschäftigen und mit "concatenation". ("escapen" war noch ein Stichwort, aber das macht alles unleserlich).
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

Otto123

#14
naja weil man die function so schreiben kann: fhem "irgendwelcher text",aber eben nicht so fhem(irgendwelcher Text).
Genau genommen gehört es so: fhem( "irgendwelcher Text" )
Schreib das mal so, im ersten Versuch in die 99_myUtils:
sub PixelItText {
    my $text = shift;
    fhem( qq(set myBroker publish House/PixelIt/setScreen {"text"{"textString":"$text":"auto","bigFont":false,"centerText":false,"scrollTextDelay":40,"hexColor":"#FFFFFF","position":{"x":0,"y":1}}) )
}

Dann kannst Du das in FHEM in der Kommandozeile aufrufen mit
{PixelItText ("Mein Text")}
Die Aufgabe von Beta-User musst Du auch abarbeiten, concatenation kannst Du mal reinlesen, die "Alternative" qq() bzw. q() ist meist besser zu lesen ;)

Da bleibt noch die Schwierigkeit: "Pixel it 😀","scrollText"  ;)
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