[Modul] Homematic Extended (Systemvariablen, Programme, Powermeter, u.v.m.)

Kann durchaus sein dass es da noch Fehler gibt.
Die Instanz habe ich noch nie zu 100% durch getestet, die Doku fehlt ja auch :o
Schaue ich mir mal an.
Danke fürs testen und die Info.
Der Timer soll eigentlich mit jeden Tastendruck zurück gesetzt werden und nach auslösung wieder deaktiv werden.
Allerdings sind die Timer in der 4.0 aktuell noch nicht fertig implementiert (für Module).
Michael

UPDATE: Auch der Timer-Fehler der Dis-WM55-Instanze ist behoben.

Noch ein Hinweis zur Funktion „hex_encode“. Das Mapping der Umlaute in dieser Funktion funktioniert nur für UTF-8 codierte Strings als Input. Hat mir eine Menge Zeit gekostet, um herauszufinden, dass „Köln“ nicht gleich „Köln“ ist ;). Man sollte also sicherstellen, dass alle anzuzeigenen Strings im UTF-8 Format vorliegen, oder man ändert die Zeile

$return = str_replace($umlaut, $hex_neu, $string); in
$return = str_replace($umlaut, $hex_neu, utf8_encode($string));
um.

Viele Grüße
Peter

Moin!

Leider kann man aber nicht immer UTF-8 bekommen. Manche IPS Funktionen lesen in UTF-8 aus, wandeln dann aber intern irgendwie in ANSI und dann kann man mit decode/encode versuchen was man will und keine Chance an einen sauberen Zeichensatz zu bekommen.

Aber paresy meinte ja, dass er sich darum bald mal kümmern will und dann ist das sehr nervige Thema „Umlaute“ hoffentlich bald Vergangenheit und man kann wieder halbwegs normal mit IPS arbeiten.

Grüße,
Chris

@Peter: worauf beziehst du dich ?
Der interne Datenaustausch ist immer enkodiert. Weil JSON_encode das nicht automatisch macht.
Michael

Ich lese mit einem anderen Skript die Abfahrtstafeln der Bahn aus, und dabei werden dann (scheinbar) Strings im nicht-UTF8 Format erzeugt. Ich will aber auch nicht ausschließen, dass das Problem irgendwie auf meiner BananaPI-Installation „hausgemacht“ ist. Das ganze Thema mit den Zeichensätzen habe ich noch nie komplett durchdrungen :p.
Gruß
Peter

Und was hat das jetzt hier mit dem Thema zu tun?
Michael

Das sollte für andere nur ein Hinweis sein, dass der zu „displayende“ Text in UTF-8 Format vorliegen muss.

Wo? Bei dem Displaytaster ?
Der kann doch gerade mal ASCII und 5-6 Sonderzeichen.
Michael

Natürlich nicht die ganze Abfahrttafel :). Auf dem Display werden nur die nächsten Abfahrtzeiten für den Bus vor der Tür und die S-Bahn in der Nähe dargestellt:

Abfahrt 015
in 5 min Ost
in 7 min Mitte
Abfahrt S6
in 12 min Essen
in 10 min Köln

Das Display hängt an der Haustür, und sagt mir, ob das Rennen zum Bus noch lohnt :wink:

Gruß
Peter

Ah… ja jetzt wird ein Schuh draus und ich verstehe was du meinst. :slight_smile:

@Chris und das hat nix mit IPS zu tun, außer das es schwierig ist so etwas in der Konsole zu debuggen.

Es ist einfach so, dass die JSON-Funktionen von PHP immer UTF8-Strings brauchen, sonst kann er es nicht korrekt verarbeiten.
Und wenn man es dann richtig macht, sieht Köln im JSON-String so aus: „K\u00f6ln“
Wobei da aber immer das größte Problem ist, welches Format haben die Daten welche man ausliest :rolleyes:

Allerdings wundert es mich dass es überhaupt mit Umlauten so bei dir funktioniert.
In meinem Beispiel werden Texte mit Umlaut vorher noch mit hex_encode umgewandelt, weil die Anzeige für ein ‚ö‘ z.B: ein ‚|‘ haben möchte.

$display_line[1] = array('Text' => hex_encode("Führe"),
        'Icon' => Icon_no,
        'Color' => Color_orange);

Und „K|ln“ kann JSON_encode dann auch so verarbeiten, ohne dass du vorher den String „K|ln“ noch mit utf8_encode bearbeiten musst.

Michael

Ja, Du hast recht - mein Fehler. Ich hatte die Funktion utf8_encode nicht wie oben beschrieben, beim json_encode eingesetzt, sondern in der Funktion hex_encode an der Stelle:
$return = str_replace($umlaut, $hex_neu, utf8_encode($string));
Ohne diese Änderung greift das Mapping von ö auf | nicht, da bei mir das ö ja nicht im utf8-Format vorliegt.

(ich habe meinen Eintrag oben entsprechend geändert)

Gruß
Peter

Und das ist wohl wirklich wieder ein IPS Problem… Scripte scheinen da wohl Probleme zumachen, je nachdem wie man sie auf sein System importiert / anlegt oder mit C&P den Code einfügt.
Danke für die Rückmeldung, ich werde die Funktion mal umbauen.
Michael

Ich habe mir mal die laufenden Threads angeschaut und dabei festgestellt das bei mir das Modul dauerhaft die meisten Threads belegt. Teilweise sind das bis zu 15 Threads gleichzeitig.

Ist das normal habe ich da einen Fehler in meiner Konfiguration? Kann man das irgendwie auch reduzieren?

Ja, nein, nein :smiley:
Die Instanzen hängen am HM-Socket und somit ist das Verhalten normal.
Michael

UPDATE: Mit IPS 4.1 behoben! Es werden nicht permanent Thread-Slots belegt.

Hallo zusammen,

ich möchte gerne eine CCU Var. auslesen ob diese True oder False ist.

Der wert möchte ich gleich in einen if Abfrage einbinden.

if (*CCU Abfrage* == true)

Was müsste bei CCU Var abfrage stehen?

Danke

Wie Abfragen?
Einfach GetValueBoolean auf die IPS-Variable.
Oder was hast du genau vor?
Michael

Aha so einfach;-)

Möchte einfach wenn die var true ist Geräte a einschalten wenn die var false ist gerät b und c einschalten.

Denke jetzt geht es.

Danke^^^^

Update-Preview für IPS 4.1

Im Modul-Control auf den Branch ‚tester‘ umstellen !

Michael

Hallo,

kannst Du ganz kurz noch erläutern, wie man das Modul für den Displaytaster verwendet.

Die beiden ersten Werte sind klar, die IDs der Taster.
Die beiden nächsten Werte sind mir schon nicht klar. Ich hätte ein Script vermutet, darf ich aber nicht verlinken.

Was ist mit Timeout gemeint, wird der Displayinhalt< danach gelöscht?
Was macht das Displayskript?

Ich habe bisher über die beiden Taster anwesend und abwesend gesetzt. Jeder Taster hat ein Script ausgelöst und in den verschiedenen Systemen den Status passend gesetzt.

Gruß
Christian

Schau mal ob das paßt:
GitHub - Nall-chan/IPSHomematicExtended at tester

Ich habe das mal versucht in Worte zu fassen.

In den ersten vier Feldern kannst die vier PRESS-Datenpunkte der Statusanzeige eintragen.
Also z.B. Hoch und runter PRESS_SHORT und bei Aktion PRESS_LONG.

Die Aktionen stehen dann im Display-Script zur Verfügung, inkl. der Seitennummer.
Dieses Script stellt meinem Modul den anzuzeigenden Inhalt zur Verfügung, und muss von dir erweitert / angepaßt werden.

Das Timeout heißt nur dass nächstes mal wieder Seite 1 angezeigt wird. Die Dauer der Anzeige selbst, kannst du glaube ich direkt in der CCU / dem Gerät einstellen.

Michael