Ulanzi Smart Pixel clock TC001 und Awtrix light in Fhem Beispiele

Begonnen von laserrichi, 23 Juni 2023, 23:37:33

Vorheriges Thema - Nächstes Thema

laserrichi

Ich möchte hier einmal aufzeigen wie man das Display in Fhem einbinden kann.

Zuerst lädt man sich awtrix light auf die Ulanzi TC001
https://blueforcer.github.io/awtrix-light/#/

Man kann sich entscheiden über welche arten das Display mit Meldungen gefüttert wird.

1. Variante ist mittels http api Aufrufe:

hier kann man sich ein shell script basteln das wir dann über Fhem aufrufen und mit Daten füttern:

Das Shell Script:

#!/bin/sh
curl -s -X POST --data '{"text":"'$1:$2'","color":[0,255,255],"icon":"35"}' -H 'Content-Type: application/json' 'http://<IP-ADRESSE>/api/notify' &> /dev/null

Der Notify bei dem z.b. Anrufe aus dem Fritzcall modul mir den namen des Anrufers in $a setzt und die Rufnummer in $b was wir dann an das Shell script beim Aufruf mit anhängen:
defmod notify_Display_Anruf notify FritzAnrufe:event:.ring {my $a = ReadingsVal($NAME,"external_name","");; my $b = ReadingsVal($NAME,"external_number","");; system("sh /opt/fhem/FHEM/scripte/notifyanruf.sh $a $b > /dev/null")}
2. Variante ist mit MQTT füttern:


dazu legen wir das als MQTT Device in Fhem an:

defmod Display_Wohnzimmer MQTT2_DEVICE awtrix_TC001  #anmerkung, der mqtt Name muss auch in awtrix eingetragen werden
attr Display_Wohnzimmer cmdIcon false:on true:off
attr Display_Wohnzimmer icon display_dot
attr Display_Wohnzimmer setList on:noArg awtrix_TC001/power {"power": true}\
off:noArg awtrix_TC001/power {"power": false}\
brightness:colorpicker,BRI,0,1,255 awtrix_TC001/moodlight {"$EVTPART0":"$EVTPART1"}\
kelvin:colorpicker,CT,2500,1,6000 awtrix_TC001/moodlight {"$EVTPART0":"$EVTPART1"}\
color:colorpicker,RGB awtrix_TC001/moodlight {"$EVTPART0":"$EVTPART1"}\
text awtrix_TC001/notify {"$EVTPART0":"$EVTPART1"}\
progress awtrix_TC001/notify {"$EVTPART0":"$EVTPART1"}\
notify awtrix_TC001/notify\
custom awtrix_TC001/custom\
notifytext1 awtrix_TC001/notify {"icon": "$EVTPART2","text": [{"t": "$EVTPART5","c":"$EVTPART3"},{"t": "$EVTPART6","c": "$EVTPART4"}]}\
Battdisplay1 awtrix_TC001/custom/$EVTPART1 {"icon": "$EVTPART2","progress": "$EVTPART5","text": [{"t": "$EVTPART6","c":"$EVTPART3"},{"t": "$EVTPART7","c": "$EVTPART4"}]}\
apptext1 awtrix_TC001/custom/$EVTPART1 {"icon": "$EVTPART2","text": [{"t": "$EVTPART5","c":"$EVTPART3"},{"t": "$EVTPART6 ","c": "$EVTPART4"}]}\
apptext2 awtrix_TC001/custom/$EVTPART1 {"icon": "$EVTPART2","text": [{"t": "$EVTPART5","c":"$EVTPART3"},{"t": "$EVTPART6 ","c": "$EVTPART4"},{"t": "$EVTPART7","c": "$EVTPART3"},{"t": "$EVTPART8","c": "$EVTPART4"}]}\
apptext3 awtrix_TC001/custom/$EVTPART1 {"icon": "$EVTPART2","text": [{"t": "$EVTPART5","c":"$EVTPART3"},{"t": "$EVTPART6 ","c": "$EVTPART4"},{"t": "$EVTPART7","c": "$EVTPART3"},{"t": "$EVTPART8 ","c": "$EVTPART4"},{"t": "$EVTPART9","c": "$EVTPART3"},{"t": "$EVTPART8","c": "$EVTPART4"}]}
attr Display_Wohnzimmer stateFormat Batterie: bat

kelvin und color ist wenn man das Display einfach als licht verwenden will, wie man das wieder ausschaltet hab ich noch nicht rausgefunden außer durch reboot :-)

hier habe ich ein paar vordefinitionen gemacht. Mann kann hier notify senden, das wird dann sofort auf dem Display angezeigt, oder man kann das als app senden (im prinzip eine zusätzliche seite die nach der eingestellten zeit wechselt)
Ich schicke aus den notifys oder doifs an das mqtt device die entsprechenden aufrufe und Daten.

Um es flexibel zu halten und nicht alles im jeweiligen Notify komplett einzubauen rufe ich das ganze so auf:
defmod notify_Display_Aussenfeuchte notify Wetterstation:humidity.* \
{my $farbsteuerung = sprintf('%.0f', $EVTPART1);;;;\
my $farbetext = $farbsteuerung >= 80 ? '0000FF' :\
                $farbsteuerung >= 65 ? '0099FF' :\
                $farbsteuerung >= 50 ? '00FF77' :\
                $farbsteuerung >= 40 ? '22FF00' :\
                $farbsteuerung >= 30 ? '99FF00' :\
                $farbsteuerung >= 20 ? 'FFFF00' :\
                                   'FF0000';;;;\
\
{fhem("set Display_Wohnzimmer apptext1 feuchte 39042 $farbetext FFFFFF $EVTPART1 %")}}
attr notify_Display_Aussenfeuchte room Notify_DOIF

im Prinzip wird hier Display_Wohnzimmer apptext1 ein set gemacht, es legt mir eine app feuchte an mit dem Icon 39042 das ich auf der Uhr runtergeladen habe. Im apptext1 habe ich vorgesehen das ich den wert mit seiner eigenen Farbe setze, und dann noch die Einheit mit ebenfalls eigenen Farbwert.

Anderes Beispiel bei dem ich für meine Solarbatterie auch den Ladezustand mit einem Balken versehe und die momentan entnommene Leistung wird mir als Text angezeigt:

defmod notify_Display_PVBatterie notify RCTModbus:batteryPercent.* \
{my $a = ReadingsVal($NAME,"Battery_Power","") >= 1000 ? sprintf("%.1f",ReadingsVal($NAME,"Battery_Power","")/1000):\
ReadingsVal($NAME,"Battery_Power","") <= -1000 ? sprintf("%.1f",ReadingsVal($NAME,"Battery_Power","")/1000):\
               ReadingsVal($NAME,"Battery_Power","");;;;\
\
my $balken = sprintf("%.0f",$EVTPART1);;;;\
my $einheit = ReadingsVal($NAME,"Battery_Power","") >= 1000 ? 'kW' :\
              ReadingsVal($NAME,"Battery_Power","") <= -1000 ? 'kW' :\
                                   'W';;;;  \
\
my $icondisplay = $EVTPART1 >= 80 ? '2741' :\
                  $EVTPART1 >= 60 ? '2740' :\
                  $EVTPART1 >= 40 ? '2739' :\
                  $EVTPART1 >= 20 ? '2738' :\
                                   '2737';;;;\
fhem("set Display_Wohnzimmer Battdisplay1 PVbatterie $icondisplay 00FF00 FFFFFF $balken $a $einheit")}
attr notify_Display_PVBatterie room Notify_DOIF

3. Variante das man im Notify bereits den MQTT Code einbaut. Hierbei funktioniert das ganze auch mit Leerzeichen die sonst beim Variablen übergeben nicht funktioniert:

Hier lasse ich mir anzeigen welche Fenster offen sind, bzw. länger offen sind was ich aus dem Monitoring raushole, da hier die Texte sehr lang sind, scrollt das ganze durch:

defmod notify_Display_OffeneFenster notify Fenster_monitoring:.* {my $a = ReadingsVal("Fenster_monitoring","error","");;;; \
my $b = ReadingsVal("Fenster_monitoring","warning","");;;;\
fhem(qq(set MQTT publish awtrix_TC001/custom/Fenster {"icon": "23847","duration":"20","text": [{"t": "Lang Offen:","c":"FFFFFF"},{"t": "$a","c": "FFFF00"},{"t": " Kurz Offen:","c":"FFFFFF"},{"t": "$b","c": "FFFF00"}]}))}
attr notify_Display_OffeneFenster room Notify_DOIF
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

Jackie

Hallo laserrichi,

ich habe seit zwei Tagen ebenfalls die TC001 mit AWTRIX Light Firmware, und dein Guide hat mir sehr weitergeholfen.

Ein Hinweis an alle, die wie ich bei Punkt 3 verzweifelt sind: In der Zeile

fhem(qq(set MQTT publish ...

bezieht sich "MQTT" auf den Server, also in meinem Falle:
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
musste ich hier MQTT2_FHEM_Server eintragen. Ist klar wenn man Erfahrung hat, für mich als absoluten MQTT Neuling war das aber eine echte Hürde :-)

Aber den Rest konnte ich super an meine Bedürfnisse anpassen und das hat mir den Einstieg sehr erleichtert! Vor allem da AwTrix in der FHEM Community im Gegensatz zu manch anderer Heimautomatisierung bisher eher eine Nischenrolle fristet, was ich sehr schade finde...
Raspi 3 mit FHEM, LWZ 304 Trend, Fronius Symo 10.0-3-M, Conbee II Stick, Optokoppler (USB, FTDI), diverse Ikea Tradfri Komponenten,...

Laffer72

Hallo laserrichi,

habe mir das ganze auch mal eingerichtet. Danke für Deine Anleitung.
Was mir aber beim besten Willen nicht gelingt ist im MQTT2-Device eine custom-App zu erzeugen mit Deiner setList-Vorgabe

custom awtrix_TC001/custom
Wie übergibst Du den Namen? Ich habe es wie folgt probiert, die Seite wird aber nicht erzeugt.
test  {"icon":"batman","text":"test"}

oder

/test  {"icon":"batman","text":"test"}

Wenn ich den Namen der App in der setList-Vorlage mit angebe und dann nur den JSON-Teil eingebe klappt es.
Ich vermute zwischen der Vorlage und der Eingabe wird immer noch ein Leerzeichen eingefügt. Hast Du dafür eine Lösung?

Danke Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

laserrichi

#3
wenn ich dich richtig verstehe willst du mit dem web befehl set custom  eine app anlegen ?

Geht bei mir so auch nicht...
Hab mir mal das ganze mit dem MQTT Explorer angesehen, du hast recht, es sieht für mich auch so aus als das hier immer ein Leerzeichen drin ist.


ich rufe die meisten sachen ja mit notifys auf

im Device Display_Wohnzimmer
defmod Display_Wohnzimmer MQTT2_DEVICE awtrix_TC001 habe ich unter setlist:
apptext1 awtrix_TC001/custom/$EVTPART1 {"icon": "$EVTPART2","text": [{"t": "$EVTPART5","c":"$EVTPART3"},{"t": "$EVTPART6 ","c": "$EVTPART4"}]}\
im notify rufe ich dann z.b.:
{fhem("set Display_Wohnzimmer apptext1 feuchte 39042 0000FF FFFFFF $EVTPART1 %")}
feuchte wird dann direkt als app so angelegt mit den werten befüllt:

awtrix_TC001/custom/feuchte {"icon": "39042","text": [{"t": "83","c":"0000FF",{"t": "%","c": "FFFFFF"}]}
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

marboj

#4
Hallo zusammen,

habe nun auch meine AWTRIX Light nach o.g. Beispiel in Betrieb genommen. Klappt auch gut.

Meine Custom Apps schicke ich per set-Befehl an die Uhr. Nutze hier auch die offene Fenster-Anzeige und die Produktion des Balkonkraftwerkes.

set m2s publish awtrix_2c2b60/custom/Solar {"icon": "solaranimated", "text":"aktuell [ShellySolar:aktuelleLeistung] heute [Solar:ErtragTag]"}
set m2s publish awtrix_2c2b60/custom/SolarGesamt {"icon": "solaranimated", "text":"Gesamt [Solar:GesamterErtrag]"}
set m2s publish awtrix_2c2b60/custom/offeneFenster {"icon": "window", "text":"[di_uiTable_windows:windows]"}

Du darfst diesen Dateianhang nicht ansehen.
Du darfst diesen Dateianhang nicht ansehen.



Die Aktualisierung der Anzeige an der UHR mache ich derzeit mit dem at-Befehl, der alle X Minuten die App erneut per Set an die Uhr sendet.

Geht die Aktualisierung auch anders?

Weiterhin nutze ich die Anzeige, um mit Hilfe des Abfallkalenders anzeigen zu lassen, welche Tonne als nächstes abgeholt wird.

set m2s publish awtrix_2c2b60/custom/Müll {"icon": "tonne_bio", "text":"als nächstes [myABFALL:next_text] [myABFALL:next_weekday] in [myABFALL:next_days] Tag(en)"}
Du darfst diesen Dateianhang nicht ansehen.

Der Abfallkalender gibt ja den Namen aus, welche Tonne als nächstes abgeholt wird. Wie kann ich in dem set-Befehl steuern, dass je nach Abfallart ein anderes icon genutzt wird?

Habe die durch mich benutzten Icons mal angehängt, falls jemand Bedarf hat...

Gruß
Marco
Du darfst diesen Dateianhang nicht ansehen.Du darfst diesen Dateianhang nicht ansehen.Du darfst diesen Dateianhang nicht ansehen.   
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

TomLee

Zitat von: marboj am 20 Februar 2024, 13:08:37Geht die Aktualisierung auch anders?

Hallo,

ja, wenn du noch kein MQTT2_DEVICE hast (hab den Thread nur überflogen, hab auch kein Ulanzi oder Awtrix-Device und mich nicht damit beschäftigt nachzuvollziehen warum  du die Befehle bisher direkt am MQTT2-Server ausführst), erstell Dir eines, ergänze deine set-Befehle in der setList und setze das Attribut periodicCmd für deine setter.

periodicCmd <cmd1>:<period1> <cmd2>:<period2>...
periodically execute the get or set command. The command will not take any arguments, create a new command without argument, if necessary. period is measured in minutes, and it must be an integer.


Gruß

Thomas

laserrichi

Zitat von: marboj am 20 Februar 2024, 13:08:37Der Abfallkalender gibt ja den Namen aus, welche Tonne als nächstes abgeholt wird. Wie kann ich in dem set-Befehl steuern, dass je nach Abfallart ein anderes icon genutzt wird?
Du darfst diesen Dateianhang nicht ansehen.Du darfst diesen Dateianhang nicht ansehen.Du darfst diesen Dateianhang nicht ansehen. 

wie wäre es wenn du die Icons auch auf dem awtrix Display entsprechend so benennst, und dein "icon": "tonne_bio"  durch "icon": "[myABFALL:next_text]" ersetzt ?
Darf natürlich dann keine Leerzeichen enthalten.
Ansonsten notifys entsprechend füttern wenn aus deinem Abfallkalender täglich ein trigger kommt.
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

marboj

Hallo laserrichi,

vielen Dank für den Tipp. Manchmal ist es so einfach. Es funktioniert, wenn man als Icon-Name die Variable icon": "[myABFALL:next_text]" nimmt.

Du hast ja auch die Benachrichtigung für die offenen Fenster. Wie aktualisiert Du diese auf der Uhr?

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

laserrichi

oben steht ja der notify dafür, der reagiert auf ein monitoring:

defmod Fenster_monitoring monitoring Fenster.*:(open|tilted) .*:closed
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light