LaMetric Time Modul

Hallo IPSymcon Community,

da ich schon viele Ideen, Module, Skripte, usw. von Euch nutzen durfte, möchte ich Euch heute etwas zurück geben.

Ich habe soeben die erste (hoffentlich nutzbare) Version meines ersten IPSymcon Moduls fertig gestellt. Bitte verzeiht wenn es nicht ganz den üblichen Konventionen entspricht, meine besten Entwickler Tage liegen schon etwas länger zurück und das ist mein erster Versuch ein Modul für IPSymcon zu schreiben.

Long Story short: Ich bin LaMetric Time Fan (LaMetric Time - clock for smart home and office) und habe schon lange nach einer solchen Lösung im Zusammenhang mit IPSymcon gesucht. Leider kostet die LaMetric Time einiges, aber sie ist nach meiner Meinung Ihr Geld wert.

Was kann man nun mit dem Modul machen?

  • Beliebige Texte an die LaMetric senden, inkl. Icon und Sound wenn gewünscht.
  • Lautstärke einstellen.
  • Helligkeit und Helligkeitssensor einstellen.
  • Bluetooth ein und aus stellen und den Namen des Bluetoothmoduls setzen.
  • Konfigurations Daten von der LaMetric auslesen und in IPS Variablen schreiben.

Mehr gibt leider die API der LaMetric noch nicht her, es soll aber bald eine Erweiterung der Funktionalität geben.

Alle API Aufrufe gehen direkt auf die LaMetric im internen Netz. Die Cloud API wird nicht verwendet.

Hier findet Ihr das Modul und auch eine kleine Anleitung:

GitHub - Tuxos/Symcon-LaMetric: IPSymcon module for LaMetric

Was mache ich mit der LaMetric?

  • Wenn auf einer der Sonos Boxen ein neues Lied gespielt wird, zeigt die entsprechende LaMetric den Titel und den Interpreten an. Somit gleicht LaMetric den Umstand aus, dass Sonos kein Display hat.
  • Wenn ein Anruf auf meiner Fritzbox eingeht wird der Anrufername auf der LaMetric angezeigt.
  • LaMetric erinnert mich an Termine.
  • LaMetric zeigt die Wetterinformationen an, damit ich den Kindern sagen kann was sie anziehen müssen wenn sie raus gehen.
  • Und natürlich --> Die meiste Zeit zeigt sie einfach die Zeit an :smiley:

LaMetric kann aber noch deutlich mehr. Schaut Euch einfach mal die Webseite des Herstellers an (siehe oben).

Fragen bitte hier in den Thread. Leider kann ich nicht täglich hier reinschauen, ich werde aber versuchen in der Anfangszeit so oft wie möglich nach zu sehen.

Es würde mich freuen wenn jemand, der auch eine LaMetric hat, das Modul testen könnte und hier im Forum Feedback geben könnte. Vielen Dank :slight_smile:

Schöne Grüße,
Dennis

Ich habe heute das Modul um einen Alarm Befehl erweitert. Der Unterschied zu Notification sind die unterschiedlichen Sounds, das der Sound beliebig oft wiederholt werden kann und das der Alarm an der LaMetric bestätigt werden muss.
Natürlich ist die Priorität auch höher als die des LM_notification Befehls.

Viel Spass damit :slight_smile:

Schöne Grüße,
Dennis

— snip 8< : Zitat aus der Doku —
Einen Alarm auf einer LaMetric Time ausgeben

Ein Alarm wird solange angezeigt bis er an der LaMetric bestätigt wird. Evtl. vorher die Lautstärke mit LM_volume(instanz-id, volume);setzen.

Befehl: LM_alarm(instanz-id, notification, icon, sound, repeat);

instanz-id
Die Objekt-ID der LaMetric Time.

notification
Die Nachricht die angezeigt werden soll.

icon
Die Nummer des Icons mit führendem „i“. Die zur Verfügung stehenden Icons können unter LaMetric: Web eingesehen werden. Wenn kein Icon angezeigt werden soll kann das entsprechende Feld leer gelassen werden. „“ sind notwendig.

sound
Unter Notifications — LaMetric 1.6.0 documentation findet sich eine Liste an Sounds. Nur die der alarm id funktionieren. Wenn kein Sound abgespielt werden soll kann das entsprechende Feld leer gelassen werden. „“ sind notwendig.

repeat
Wie häufig der Sound gespielt werden soll. 0 = bis der Alarm auf der LaMetric bestätigt wird.

Beispiel

<?
  LM_alarm(49941 /*[Devices\LaMetric\LaMetric Büro]*/, "Die Hütte Brennt!!!", "i1003", "alarm6", 0);
?>

Hallo LaMetric Fans,

ich habe dem Modul zwei neue Funktionen gegönnt:

Mit LM_chart(instanz-id, data); lassen sich Graphen auf der LaMetric zeichnen und mit LM_progressbar(instanz-id, start, current, end, unit); lässt sich ein Fortschrittsbalken darstellen.

Wie immer weitere Infos in der Doku: GitHub - Tuxos/Symcon-LaMetric: IPSymcon module for LaMetric

Schöne Grüße,
Dennis

Hallo LaMetric Fans,

ich habe das Modul um einen neuen Befehl erweitert: LM_apps(Instanz_ID, kommando);

Bisher kann man nur auf die nächste oder vorherige App wechseln. Sobald Smart Atoms die erweiterte API Dokumentiert, werde ich weitere Funktionen einbauen.

Modul & Doku wie immer hier: GitHub - Tuxos/Symcon-LaMetric: LaMetric module for IPSymcon

Würde mich über Feedback freuen :slight_smile:

Schöne Grüße,
Dennis

Feedback kommt bald, habe mir einen gebrauchten LaMetric gekauft und werde in den nächsten Wochen mit Deinem Modul basteln
Herzlichen Dank im voraus uns das Teil zur Verfügung zu stellen

BestEx

Hallo BestEx,

ich würde mich sehr über Dein Feedback freuen :slight_smile:
Vielen Dank dafür im voraus!

Sag bitte bescheid wenn ich helfen kann!

Schöne Grüße,
Dennis

so mal schnell eingebunden :wink:

Notification und Alarm funktioniert !

Die anderen habe ich noch nicht getestet.

Danke für’s Modul.

Danke für das Feedback! Klingt ja schonmal gut das es auch bei anderen IPSymcon Instanzen läuft :slight_smile:

Bei Fragen oder Verbesserungswünschen, bitte hier melden.

Schöne Grüße,
Dennis

Schönes Modul, macht Spass :slight_smile:

Kleine Anregung : In Bezug auf Text Nachrichten hätte ich gerne Zugriff auf die folgenden Parameter

repeat – defines the number of times sound must be played. If set to 0 sound will be played until notification is dismissed. By default the value is set to 1.

cycles – the number of times message should be displayed. If cycles is set to 0, notification will stay on the screen until user dismisses it manually or you can dismiss it via the API (DELETE /api/v2/device/notifications/:id). By default it is set to 1.

Wäre toll wenn das Modul entsprechend erweitert werden könnte

Nochmals herzlichen Dank für das Modul

PS. Sehe gerade das „Repeat“ bei der Alarm Funktion bereits implementiert wurde

Hi BestEx,

gerne kann ich der „cycles“ Parameter einbauen. Das ginge sehr schnell :slight_smile:

Aber wäre es vielleicht nicht besser einfach eine LM_alarmDelete($id); Funktion zu bauen und den Alarm darüber zu löschen? Dann kann auch die Zeit festgelegt werden oder auch bei einer Aktion (z.B. Taste Alarm aus wurde gedrückt).

Dauert länger einzubauen, ist aber die flexiblere Lösung denke ich.

Was meinst Du?

Schöne Grüße,
Dennis

Das ist in der Tat eine bessere Möglichkeit.

Gefällt mir gut Danke

Hi,

heute angekommen eingerichtet mit IOS App funkt
Registriert API Key bei LeMetric vorhanden

Modul auf SymBox eingerichtet Daten eingegeben —>> funkt nicht
Beim lesen Konfiguration wirf eine ganze Latte von Fehlern aus.

1.Zeile
Undefined property:stdClass::display

  1. Zeilen
    Notice: Trying to get property of non–oject in …

usw.

was mache ich falsch?

Modul läuft bei mir einwandfrei! Danke Tuxos!

Man könnte es „Modul-technisch“ vom Aufbau noch ein wenig optimieren, aber es macht was es soll, also erstmal alles gut :slight_smile:

Besten Dank und Grüße,
Chris

Hallo Dennis,

Fehler gefunden vor und auch hinter dem API-Key waren Leerzeichen, die haben den Fehler verursacht :banghead:

Wenn Du da mal wieder dran bist kannste ja das Problem abfangen.

Danke für das Modul.

Dann mache ich das am Wochenende :slight_smile:

Schöne Grüße,
Dennis

Ja, ich hab da auch schon ein paar Dinge gefunden die ich überarbeiten könnte. Ich schau mal, wenn ich die nächste Zeit etwas Zeit habe schreibe ich ein paar Sachen um.

Schöne Grüße,
Dennis

Ich sollte den API Key vorher prüfen lassen. Wie Chris schon geschrieben hat, das Modul bedarf noch ein paar Optimierungen. Aber ich bin fleissig am Lernen. War mein erstes Modul. Inzwischen habe ich schon ein paar andere und habe ein paar „Lessons learned“ :wink:

Ich werde erstmal die Notofication Delete Funktion für BestEx einbauen und dann schaue ich mal das ich das Modul generell überarbeite.

Schöne Grüße,
Dennis

p.s. Heute ist meine dritte LaMetric angekommen. Meine Motivation das Modul weiter zu entwickeln ist also hoch :wink: Ich warte gespannt auf die Dokumentation der API Erweiterung. Dann kann ich auch weitere Funktionen einbauen.

et is doch ken Problem wir helfen doch gerne

Hallo,

nun kann man einen Alarm zurücksetzen :slight_smile:

Auch fragt er nun die Länge des API Keys ab und meldet das evtl. Leerzeichen vorhanden sind. Wenn jemand weiss wie man Property-Variablen setzten kann (hab nix in der Doku gefunden) würde ich die auch einfach auf Leerzeichen filtern.

Ich habe dies allerdings nicht in den Master Branch aufgenommen, sondern habe einen Branch development erstellt. Bitte einmal den Branch auf development stellen und auf Updates prüfen und dann updaten. Bitte nicht vergessen den Symcon Dienst zu restarten, da neue Funktionen hinzu gekommen sind. Wenn ein, zwei Leute das ganze erfolgreich getestet haben, dann nehme ich die Neuerungen in den master Zweig auf.

Folgendes ist neu:

Der LM_alarm(); Befehl gibt nun die Notification-ID des Alarms zurück.

Einen Alarm löschen

Der Befehl löscht einen Alarm mit einer speziefischen ID.

LM_resetalarm(instanz-id, notification-id);

instanz-id
Die Objekt-ID der LaMetric Time.

notification-id
Eindeutige Notification-ID. Die ID wird als return Wert beim ausführen des LM_alarm(); Befehls zurückgegeben. Die ID zählt bei jedem Alarm eins hoch. Die aktuelle ID des angezeigten Alarms kann mit LM_getalarmid(instanz-id,); abgefragt werden.

Beispiel


<?
  LM_resetalarm(49941 /*[Devices\LaMetric\LaMetric Büro]*/, 33);
?>

Die aktuell angezeigte Alarm-ID abfragen
Der Befehl gibt die ID des aktuell angezeigten Alarms aus. Wird für den Befehl LM_resetalarm(); benötigt.

LM_getalarmid(instanz-id);

instanz-id
Die Objekt-ID der LaMetric Time.

Beispiel:

<?
  $alarmid = LM_getalarmid(49941 /*[Devices\LaMetric\LaMetric Büro]*/);
  LM_resetalarm(49941 /*[Devices\LaMetric\LaMetric Büro]*/, $alarmid);
?>

Moin!

So kann man die Leerzeichen vor und nach einem String entfernen:

$tempAPIkey = $this->ReadPropertyString("apikey");
$cleanAPIkey = trim($tempAPIkey);
IPS_SetProperty($this->InstanceID, "apikey", $cleanAPIkey);
IPS_ApplyChanges($this->InstanceID);

Oder wenn alle Leerzeichen innerhalb vom API-Key weg sollen, dann so:

$tempAPIkey = $this->ReadPropertyString("apikey");
$cleanAPIkey = str_replace(" ", "", $tempAPIkey);
IPS_SetProperty($this->InstanceID, "apikey", $cleanAPIkey);
IPS_ApplyChanges($this->InstanceID);

Wenn du erst auf Leerzeichen prüfen willst und nur bei vorhandenen Leerzeichen den API-Key neu setzen möchtest, könntest du das auch noch so machen:

$tempAPIkey = $this->ReadPropertyString("apikey");
preg_match("|(\s)|", $tempAPIkey, $LeerzeichenMatch)
if ($LeerzeichenMatch)
{
    $cleanAPIkey = trim($tempAPIkey);
    IPS_SetProperty($this->InstanceID, "apikey", $cleanAPIkey);
    IPS_ApplyChanges($this->InstanceID);
}

>> Das muss in „public function ApplyChanges()“ - damit wird bei jedem Klick auf „Übernehmen“ in der Modul-Instanz der API-Key gelesen und „umgeschrieben“.

EDIT: Die Änderung sieht man optisch erst, wenn man die Modul-Instanz schließt und wieder neu öffnet!

Grüße,
Chris