LaMetric - LED WLAN Anzeige

Begonnen von ceear, 05 Juli 2014, 00:46:48

Vorheriges Thema - Nächstes Thema

Thyraz

Ok, mittlerweile funktioniert das wie gewünscht. :)
Hab mal einen Pull Request gestellt.
Hoffe der passt so, hab sowas bei Github bisher noch nicht gemacht...

- Senden mit Identifier statt Zahl als letzter Parameter:
set lametric msg 'i2448' 'Dies ist ein Test' '' 'test'

- Löschen der Notification:
set lametric msgCancel 'test'

Die aktuelle Queue an Sticky Notifications wird mit dem DeviceState einmal die Minute abgeholt um Notifications aus dem Modul zu löschen die händisch am Gerät quittiert wurden.
Zusätzlich passiert das vor dem eigentlichen Löschen nochmal am Anfang des msgCancel Befehls.
So wird sichergestellt, dass man nicht doch versucht eine nicht vorhandene Nachricht nochmal zu löschen (sonst kommt ein Error vom Gerät zurück).

Weiß nicht ob das noch 1-2 testen wollen ob es auch bei ihnen geht bevor man das übernimmt?
Hier könnte man die Datei laden:
https://github.com/Thyraz/fhem-lametric/tree/sticky-notifications
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

#31
So, leider viel zu wenig Zeit gerade.
Hab aber noch die Commandref angepasst und das automatische Durchwechseln der Sticky Notifications implementiert.

Meldungen die Dauerhaft angezeigt werden, wechseln dann alle 5 Sekunden durch.
Wird eine neue Meldung mit Sound hinzugefügt, wird dieser nur beim ersten Anzeigen abgespielt.

Hab meinen PullRequest auf Github auf die neuste Version upgedated.

Wer es manuell testen will, findet die Datei hier:
https://github.com/Thyraz/fhem-lametric/tree/sticky-notifications/FHEM
(Auf "Raw" drücken und unter 70_LaMetric.pm abspeichern.)

Testen kann man das Ganze dann so:

set lametric msg 'a1624' 'Homer Simpson' '' '' 'homer'
set lametric msg 'a3971' 'Super Mario' '' '' 'mario'
set lametric msg 'a3637' 'Pacman' '' '' 'pacman'


Nun sollte die Anzeige alle 5 Sekunden weiter zur nächsten Nachricht in der Queue wechseln.
nach einem

set lametric msgCancel 'homer'

Sollte diese Message aus dem Cycle verschwinden.
Aternativ kann man eine Nachricht auch mit dem mittlereren Knopf an der LaMetric Uhr quittieren.

@Matthias, aufgrund weniger Freizeit steckt da jetzt sehr viel in dem Http-Utils Receive Callback.
Wenn ich etwas Langeweile hab, splitte ich das in Einzelfunktionen auf, die dann im Callback aufgerufen werden.
Deine Idee mit Json encode + Hashref Objekt statt einfachem String in der Senden-Funktion hab ich auch noch im Hinterkopf.

Statt festen 5 Sekunden zum Durchwechseln der Nachrichten wäre auch noch ein Attribut nett.

Noch eine Idee die mir gerade kam:
Sticky Notifications könnte man immer mit der Priorität "Info" schicken.
Hat der User dann im Modul per Attribut mindestens "Warning" gewählt, würden nicht-sticky Messages sofort angezeigt werden und nicht in der Queue eingereiht.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

mando667

Hallo,

habe das gerade anhand deiner Beispiele getestet, allerdings bekomme ich die Meldung nur beim ersten Mal angezeigt, danach kommt nix mehr.

Fehlt mir noch eine weitere Einstellung? Anstatt die cycles mit dem identifier z.B. 'pacman' zu übernehmen wird anscheinend der default Wert = 1 genommen.

Hier der Log dazu:
2017.05.17 12:19:09 5: LaMetric lametric: called function LaMetric_SetMessage()
2017.05.17 12:19:09 4: LaMetric lametric: Found 4 argument(s)
2017.05.17 12:19:09 5: LaMetric lametric: called function LaMetric_SendCommand()
2017.05.17 12:19:09 5: LaMetric lametric: POST http://10.0.1.33:8080/api/v2/device/notifications (DATA: { "priority": "info", "icon_type": "none", "lifeTime": 60000, "model": { "frames": [ { "icon": "a3637", "text": "Pacman"} ] , "cycles": 1 } } (noshutdown=1)
2017.05.17 12:19:09 5: LaMetric lametric: called function LaMetric_ReceiveCommand() for: device/notifications
2017.05.17 12:19:44 5: LaMetric lametric: called function LaMetric_CheckState()
2017.05.17 12:19:44 5: LaMetric lametric: called function LaMetric_SendCommand()
2017.05.17 12:19:44 5: LaMetric lametric: GET http://10.0.1.33:8080/api/v2/device? (DATA:  (noshutdown=1)
2017.05.17 12:19:44 5: LaMetric lametric: called function LaMetric_ReceiveCommand() for: device
2017.05.17 12:20:44 5: LaMetric lametric: called function LaMetric_CheckState()
2017.05.17 12:20:44 5: LaMetric lametric: called function LaMetric_SendCommand()
2017.05.17 12:20:44 5: LaMetric lametric: GET http://10.0.1.33:8080/api/v2/device? (DATA:  (noshutdown=1)
2017.05.17 12:20:44 5: LaMetric lametric: called function LaMetric_ReceiveCommand() for: device
2017.05.17 12:20:51 5: LaMetric lametric: called function LaMetric_SetCancelMessage()
2017.05.17 12:20:51 5: LaMetric lametric: called function LaMetric_SendCommand()
2017.05.17 12:20:51 5: LaMetric lametric: GET http://10.0.1.33:8080/api/v2/device/notifications? (DATA:  (noshutdown=1)
2017.05.17 12:20:51 5: LaMetric lametric: called function LaMetric_ReceiveCommand() for: device/notifications


Danke & Beste Grüße
Julian

Thyraz

#33
Verdammt, der msg Befehl hat einfach zu viele Parameter. :P

Da gehört überall noch ein paar Anführungszeichen mehr dazwischen.
Hab die Beispielbefehle oben korrigiert.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

ralf-ms

Hallo Matthias, Thyraz,

Vielen Dank für eure Arbeit und das Modul bzw. die eingeflossenen Erweiterungen!

Die Frage nach dem icon-Typ mit 'i' oder 'a' davor versteckt sich, denke ich, in der Dokumentation:

info – "i" icon will be displayed prior to the notification. Means that notification contains information, no need to take actions on it.
alert – "!!!" icon will be displayed prior to the notification. Use it when you want the user to pay attention to that notification as it indicates that something bad happened and user must take immediate action.


Inkonsistent ist aber die gleiche Aktion für beide ("icon will be displayed prior to the notification"), vielleicht noch software-seitig nicht richtig umgesetzt...
Also ist es egal ob 'n 'a'  oder n' 'i' vor der Icon-ID steht...

Grüße
Ralf


Thyraz

Das info und alert Icon ist nicht das normale Icon das mit der Message angezeigt wird.
Es ist möglich vor der eigentlichen Message ein "i" Icon oder ein "!!!" Icon darzustellen.

Lässt sich über das Attribut notificationIconType im Modul einstellen.

Die Buchstaben a und i vor den Icons würde ich auch als icon oder animated interpretieren.
Jedenfalls hatte ich auf die Weise noch nie Probleme mit nicht dargestellten Icons.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

ares

Am 10. Juli 2017 war die LaMetric Amazon Prime als Tagesangebot günstig für 139,00 EUR zu haben. Kaum angeschlossen hat sie meine Frau bereits anders als von mir geplant im Wohnzimmer vereinnahmt. Die Implementierung in fhem und die nachfollgenden Tests waren überraschend schnell und einfach. Dank der Arbeit von Matthias und Thyraz wird nun zur Strafe ein Sticky Notification für den Trockner im Keller gemeldet und erst beim Trockner ausschalten bzw. dem nächsten Start automisch gelöscht.

In der API vermisse ich aber die Definition zum ClockFace ändern. Habe ich etwas übersehen oder ist das (noch) nicht implementiert?
Ist die Funktion Chart nur implementiert weil sie von der API angeboten wird oder hat jemand eine sinnvolle Anwendung gefunden?
Auf die laut LaMetric Development Roadmap geplante Sonos App durch LaMetric selbst bin ich schon gespannt. Hat schon jemand eine fertige Alternative in fhem?

VIELEN Dank für das Modul
Manfred

mameier1234

Ich hatte leider nicht das Glück mit dem günstigen Angebot...

Aber: nachdem meine Frau nun nicht mehr umsonst in den Keller rennt, weil die Wama und der Trockner noch nicht fertig sind...Wurde das voll akzeptiert :-)

gibt es eine Möglichkeit wenn mit dem Modul eine Anzeige gerade durchläuft, das Drücken des Action Buttons irgendwie nach FHEM zurückzugeben ? Ich gebe nämlich auch noch nen Ton mit aus, und das nervt manchmal, wenn nicht gleich einer läuft... Momentan habe ich das über nen doif gelöst damit ich bei Bedarf nur den Alarm abschalten kann..

Ansonsten: Super Modul !!

Thyraz

@ares ich schätze mal Chart wurde eingebaut weil es da war. ;)
Ich nutze es jedenfalls auch noch nicht mangels Ideen wozu ich es einsetzen sollte..

@mameier1234 ich spiele nur einmal einen Sound ab damit es nicht nervt. ;)
Habe auch schonmal überlegt das mit dem "Dismissen" von Notifications irgendwie an FHEM zurückzugeben.

Das Hauptproblem ist hier, dass man das nur durch Pollen der Notification-Queue rausfinden kann.
Im Moment wird die Queue einmal die Minute abgefragt vom Modul. Kann also immer etwas dauern bis das Modul das mitbekommt.

Bin mir auch nicht sicher wie man sowas FHEM-like in ein Modul integriert.
Das ganze sollte ja ein Event erzeugen, schätze also mal als Reading.
Evtl. in der Art "lastDismissedNotificationID" welche dann immer den letzten vom User per Button gecancelten Identifier enthält?
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

ares

Hat sich schon jemand Gedanken für eine INDICATOR APP (mit mehreren Frames) gemacht oder bereits eine App fertig?

Mir schwebt da eine App vor, welche z.B. die Raumtemperatur/-feuchte anzeigt, welche dauerhaft im Wechsel mit der Uhr angezeigt wird.

Und dann noch eine weitere App, welche "infoSummarize1" mit Icon Play/Pause/Stop eines Sonosplayers anzeigt und beim Wechsel von "infoSummarize2" automatisch aktualisiert und per Code aktiviert wird. Die Anzeige könnte ich auch per Nachricht umsetzen, habe dann aber nicht die Möglichkeit manuell nochmal den aktuellen Titel anzeigen zu lassen. Außerdem kann in der Indicator App Pause/Play gesteuert werden.

Würdet ihr das direct per curl umsetzen?
curl -X POST \
-H "Accept: application/json" \
-H "X-Access-Token: ABCABCDEFDEF01234567890ABCABCDEFDEF01234567890ABCABCDEFDEF01234567890ABCABCDEFDEF01234==" \
-H "Cache-Control: no-cache" \
-d '{
    "frames": [
        {
            "text": "frame1",
            "icon": "a87"
        },
        {
            "goalData": {
                "start": 10,
                "current": 15,
                "end": 20,
                "unit": "kg"
            },
            "icon": null
        },
        {
            "index": 3,
            "chartData": [
                1,
                2,
                3,
                2,
                1
            ]
        }
    ]
}' \
https://192.168.123.123/api/V1/dev/widget/update/com.lametric.abc123def456abc789def123abc45600?channels=channel1,channel2

mameier1234

Momentan lasse ich etwas händisch 2 nebeneinander liegende Lametric Apps wechseln...

defmod di_LametricWechsel DOIF ([+60] and ReadingsVal("di_LametricWechsel", "Uhr", "off") eq "on")  (set lametric app next,setreading di_LametricWechsel Uhr off)\
DOELSEIF\
([+60] and ReadingsVal("di_LametricWechsel", "Uhr", "off") eq "off")  (set lametric app prev,setreading di_LametricWechsel Uhr on)
attr di_LametricWechsel room Wohnzimmer


Wenn ich es richtig verstanden habe, kann man ja auch eine App gezielt mit ID aufrufen... nur wie bekomme ich die ID ?

ares

Zitat von: mameier1234 am 27 Oktober 2017, 19:40:12
Wenn ich es richtig verstanden habe, kann man ja auch eine App gezielt mit ID aufrufen... nur wie bekomme ich die ID ?

ID für DeineAPP ermitteln:
curl -X GET -u "dev" -k -H "Accept: application/json" \
  https://192.168.0.111:4343/api/v2/device/apps


Beispielausgabe:
"com.lametric.01234567890abcdef01234567890abcd": {
"package": "com.lametric.01234567890abcdef01234567890abcd",
"vendor": "DeinName",
"version": "1",
"version_code": "1",
"widgets": {
"9876543210fedcba9876543210fedcba": {
"index": 6,
"package": "com.lametric.01234567890abcdef01234567890abcd",
"settings": {
"_title": "DeineAPP"
}
}
}
},


DeineAPP aktivieren:
{LaMetric_SendCommand($defs{'LaMetric1'}, 'device/apps/com.lametric.01234567890abcdef01234567890abcd/widgets/9876543210fedcba9876543210fedcba/activate', 'PUT', ' ')}

mameier1234

Ok.. da will er jetzt das Passwort des Users 'dev' ... Ich habe ja eigentlich nur nen apikey für das fhem-modul...

Wie krieg ich das Passwort für dev raus ?

mameier1234


mameier1234

Ok..

Ich denke ich habe die Appid...

Wenn ich nun aus Fhem die gezielt aufrufen will, dann so ???

set lametric app next|prev|switch [app_id]

also z.B. set lametric app switch e29a0ef259ba41649e400b61782f2bc5

Geht aber nicht ..