HMCCU und hmscript

Begonnen von Horti, 07 April 2020, 22:48:02

Vorheriges Thema - Nächstes Thema

Horti

Guten Abend,

ich versuche immer noch mit einem für mich vertretbaren Aufwand mein HB-Dis-EP-42BW mit FHEM ans Laufen zu kriegen. Da mein letzter Versuch, das Ding direkt mit FHEM in Betrieb zu nehmen scheiterte, versuche ich es nun mit HMCCU. Dank des genialen Scripts von TomMajor muss das Ding ja theoretisch noch nicht mal in FHEM über HMCCU eingerichtet sein, denn zur Ausgabe auf dem Display muss "nur" ein Einzeiler ausgeführt werden, z.B.:
system.Exec("tclsh /usr/local/addons/epaper42.tcl " # "JPDISEP000 /5 'Test ABC ÄÖÜäöüß' 1");
wobei nur "/5 'Test ABC ÄÖÜäöüß' 1" dynamisch ist, der Rest ist statisch, zumindest bei nur einem HB-Dis-EP-42BW im System.

Meine naive Vorstellung wäre nun, dass ich diese Zeichenkette in FHEM berechne und mittels HMCCU an die CCU zur Ausführung übergebe. Doch lt. Wiki muss das Script als Datei vorliegen, damit das an die CCU übergeben werden kann:
set d_ccu hmscript /opt/fhem/sysvars.scr

Versuche ich die Anweisung doch als Zeichenkette zu übergeben:
set d_ccu hmscript "system.Exec("tclsh /usr/local/addons/epaper42.tcl " # "JPDISEP000 /5 'Test ABC ÄÖÜäöüß' 1");"
sagt HMCCU:
HMCCU: d_ccu Usage: set d_ccu hmscript {file|!function|'['code']'} ['dump'] [parname=value [...]]

Auch Hochkommata und Doppelhochkommata anstelle der Anfürungszeichen funktionieren nicht, obwohl ich so die Ausgabe von HMCCU interpretieren würde. Kann es so funktionieren, wie ich es mir vorstelle? Wie müsste dann die Syntax lauten?

Danke schon mal!

zap

#1
Wenn, dann so:

set d_ccu hmscript [system.Exec("tclsh /usr/local/addons/epaper42.tcl JPDISEP000 /5 'Test ABC ÄÖÜäöüß' 1");]

HMScript Code in der Kommandozeile muss in [] angegeben werden. Vermutlich wird es wegen der " trotzdem nicht funktionieren, da FHEM diese interpretiert, bevor sie ans Modul übergeben werden.

Bzw. Versuche es erst mal ohne die Umlaute. Das bit garantiert Probleme.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Horti

Auch ohne Umlaute kommt leider
Unknown command ], try help.

Kann man die Anführungszeichen für FHEM irgendwie maskieren? Oder muss HMCCU dafür angepasst werden?

zap

#3
Kannst Du nicht ein Script-File mit Parametern verwenden?

Wenn ich mich rechte erinnere, werden Parameter mit $ eingeleitet, also:

system.Exec("tclsh /usr/local/addons/epaper42.tcl $Device /5 '$Text' 1");

und dann

set d_hccu hmscript <File> Device=JPDISEP000 Text="Test ABC"
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Horti

Hm, sieht nach "Von hinten durch die Brust ins Auge" aus, aber wenn's funktioniert  ;D

Ich werd's später versuchen, aber so wie ich das sehe, kann ich auch den kompletten Befehl als Parameter übergeben und in der Datei nur
$PARAM
stehen haben?

zap

Dann bist Du aber wieder in der Hochkommahölle
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Horti

Zitat von: zap am 08 April 2020, 20:45:54
Dann bist Du aber wieder in der Hochkommahölle

Das habe ich auch schon bemerkt :) Ich habe das jetzt so gelöst, in der scr-Datei steht Folgendes:
system.Exec("tclsh /usr/local/addons/epaper42.tcl $Device $Text");
und in FHEM rufe ich auf
set d_hccu hmscript <File> Device=JPDISEP000 Text="/5 'Test ABC' 1"

Damit sollte ich alles abbilden können, was ich mir vorgestellt habe und was das Display und TomMajors Script so hergibt. Zugegeben, ich habe noch nicht alle möglichen Parameter- und Sonderzeichenkombinationen ausprobiert, aber das ergibt sich dann, Learning by Doing :) Das Nonplusultra wäre, wenn ich mit einem Aufruf auch mehrere Zeilen setzen könnte, wie TomMajors Script das ja auch unterstützt:
usage: epaper42 serial /line text [icon number] [/nextline text [icon number]] ...

D.h. im Prinzip würde ich gerne Folgendes in FHEM aufrufen (zum Beispiel):
set d_hccu hmscript <File> Device=JPDISEP000 Text%1="/5 'Test ABC' 1" Text%2="/6 'Test XYZ' 2"

Wie müsste die dazugehörige scr-Datei aussehen? Ich weiss, die Frage ist nicht mehr HMCCU-spezifisch, aber vielleicht ist sie doch hier am Besten aufgehoben, wg. dem Kontext.

@zap: Danke für das HMCCU-Modul und Deine Unterstützung!

zap

Muss ich mal drüber nachdenken ...

Andere Frage: inwiefern unterscheidet sich die Ansteuerung des Displays von HM Dis-EP-WM55?

Falls es sich nicht unterscheidet, könnte ich es kurzfrisitg direkt in HMCCU unterstützen?
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Horti

Zitat von: zap am 09 April 2020, 07:15:28
Andere Frage: inwiefern unterscheidet sich die Ansteuerung des Displays von HM Dis-EP-WM55?

Falls es sich nicht unterscheidet, könnte ich es kurzfrisitg direkt in HMCCU unterstützen?

Nach Jerome's Aussage so gut wie gar nicht: https://forum.fhem.de/index.php/topic,73954.msg962094.html#msg962094.

Aber würde sich dann irgendwas bzgl. der Ansteuerung ändern? Oder Würde man dann TomMajors-Script quasi nach FHEM reinziehen und HMCCU nur noch fertige HM-Messages übergeben und hätte den Salat mit den Anführungszeichen nicht?

zap

Du brauchst das Script dann gar nicht mehr. Die Parameter (Texte, Farben, Icons) werden einfach per Set Befehl übergeben. Das Script wird benötigt, um die Angaben in ein Display-Konformes Format zu wandeln. Das macht dann HMCCU, wie jetzt schon bei dem anderen Display.

Ich trage mal den Typ in HMCCU nach und du kannst dann testen, ob es einfach so ohne weitere Anpassung funktioniert.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

tndx

Guten Abend,

ich habe mein HB-DIS-EP-42BW seit einiger Zeit mit FHEM im Betrieb, im Prinzip genau so, wie hier beschrieben. Da die direkte FHEM-Unterstützung trotz einiger Nachfragen wohl nicht geplant ist, könnte ich zufrieden sein, wenn nicht ein Problem wäre: ich habe sporadische Verbindungsstörungen zwischen der CCU und dem Display. Das bekomme ich aber nur mit, wenn ich mich mal wieder auf die Weboberfläche der CCU verirre oder wenn ich mal wieder einen falschen Status auf dem Display sehe. Leider bekommt FHEM nicht mit, wenn das tcl-Script auf der CCU auf eine Störung läuft. Da ich einige Status nur sehr selten aktualisiere, bleiben sie u.U. sehr lange falsch.

Zitat von: zap am 10 April 2020, 08:55:18
Ich trage mal den Typ in HMCCU nach und du kannst dann testen, ob es einfach so ohne weitere Anpassung funktioniert.

Ist das schon geschehen? Würde mir diese Integration bei meinem Problem helfen? Oder gibt es irgendeinen anderen Mechanismus, um die Störung zu detektieren und das Script ggf. erneut auszuführen?

zap

Ist noch nicht integriert. Du kannst das Gerät aber trotzdem mit HMCCUDEV oder HMCCUCHN in FHEM anlegen. In Kanal 0 hast Du dann die Standard Datenpunkte wie UNREACH usw und bekommst es mit, wenn das Gerät nicht erreichbar ist.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

tndx

#12
Guten Abend,

ich habe mein Display heute endlich per HMCCU in FHEM angebunden. Hauptsächlich um die Verbindungsprobleme mitzubekommen, aber auch um die Tasterkanäle nutzen zu können.

Ich bin ein ziemlicher Anfänger in Sachen HMCCU und hätte eigentlich erwartet, dass spätestens nach
ccureadingfilter             .*
alle Datenpunkte angezeigt werden, doch das scheint nicht der Fall zu sein?! Jedenfalls sind erst die 0-Datenpunkte angelegt worden, aber nicht die 1-11-Datenpunkte. Erst nachdem ich die Taster 1-10 kurz und lang betätigt habe, kamen auch die entsprechenden Datenpunkte an. Allerdings fehlt der Datenpunkt 11.SUBMIT aber auch 0.UNREACH.

Ich habe nun künstlich für ein Verbindungsproblem gesorgt, in der Hoffnung, dass wenigstens 0.UNREACH auf diese Art noch nachkommt, leider vergeblich. An folgenden Datenpunkten/Readings hat sich dann aber was geändert:
0.STICKY_UNREACH             1
activity             dead
hmstate             unreachable


Wo kommen denn die "activity" und "hmstate" her? Was ist der Unterschied zw. 0.UNREACH und 0.STICKY_UNREACH? Ist vermutlich nicht HB-Dis-EP-42BW spezifisch, oder?

Ich bin im Moment noch etwas ratlos, wie ich in meinen DOIFs die Verbindungsprobleme abfangen und darauf reagieren soll. Einfach noch mal senden? Solange bis es klappt? Oder auf die Änderung von einem der 3 Datenpunkten/Readings warten (oder einer Kombination von denen)?

Sorry, viele Fragen, die hier teilweise OT sind, sollte das noch weitern ausufern, werde ich einen neuen Thread aufmachen.

Edit:
Nachdem das Verbindungsproblem "behoben" ist, sieht die Kombination so aus:
0.STICKY_UNREACH             1
activity             alive
hmstate             Initialized

0.STICKY_UNREACH ist also eher nicht zu gebrauchen.

zap

Ein list vom Device wäre hilfreich.

Sticky Unreach bedeutet: Das Gerät war nicht erreichbar.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

tndx

Hier das List:
Internals:
   CFGFN     
   DEF        4CZ0VF0VOG
   FUUID      5efa4493-f33f-7a7c-b7e5-11dd2ce1b29d9f22
   IODev      myHMCCU
   NAME       ePaper_1
   NR         2097
   STATE      Initialized
   TYPE       HMCCUDEV
   ccuaddr    4CZ0VF0VOG
   ccudevstate active
   ccuif      BidCos-RF
   ccuname    ePaper_1
   ccutype    HB-DIS-EP-42BW
   channels   12
   statevals  devstate
   READINGS:
     2020-06-29 21:57:10   0.AES_KEY       off
     2020-06-29 21:57:10   0.CONFIG_PENDING false
     2020-06-29 21:57:10   0.DEVICE_IN_BOOTLOADER false
     2020-06-29 21:57:10   0.RSSI_DEVICE   183
     2020-06-29 21:57:10   0.RSSI_PEER     60
     2020-06-30 03:15:02   0.STICKY_UNREACH 1
     2020-06-29 21:57:10   0.UPDATE_PENDING false
     2020-06-29 22:40:11   1.INSTALL_TEST  1
     2020-06-29 22:24:40   1.PRESS_CONT    1
     2020-06-29 22:24:39   1.PRESS_LONG    1
     2020-06-29 22:24:40   1.PRESS_LONG_RELEASE 1
     2020-06-29 22:40:11   1.PRESS_SHORT   1
     2020-06-29 22:25:02   10.INSTALL_TEST 1
     2020-06-29 22:25:03   10.PRESS_CONT   1
     2020-06-29 22:25:02   10.PRESS_LONG   1
     2020-06-29 22:25:03   10.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:19   10.PRESS_SHORT  1
     2020-06-29 22:24:41   2.INSTALL_TEST  1
     2020-06-29 22:24:43   2.PRESS_CONT    1
     2020-06-29 22:24:41   2.PRESS_LONG    1
     2020-06-29 22:24:43   2.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:05   2.PRESS_SHORT   1
     2020-06-29 22:24:44   3.INSTALL_TEST  1
     2020-06-29 22:24:45   3.PRESS_CONT    1
     2020-06-29 22:24:44   3.PRESS_LONG    1
     2020-06-29 22:24:45   3.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:07   3.PRESS_SHORT   1
     2020-06-29 22:24:47   4.INSTALL_TEST  1
     2020-06-29 22:24:48   4.PRESS_CONT    1
     2020-06-29 22:24:47   4.PRESS_LONG    1
     2020-06-29 22:24:48   4.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:09   4.PRESS_SHORT   1
     2020-06-29 22:24:49   5.INSTALL_TEST  1
     2020-06-29 22:24:50   5.PRESS_CONT    1
     2020-06-29 22:24:49   5.PRESS_LONG    1
     2020-06-29 22:24:50   5.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:10   5.PRESS_SHORT   1
     2020-06-29 22:24:51   6.INSTALL_TEST  1
     2020-06-29 22:24:53   6.PRESS_CONT    1
     2020-06-29 22:24:51   6.PRESS_LONG    1
     2020-06-29 22:24:53   6.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:12   6.PRESS_SHORT   1
     2020-06-29 22:24:54   7.INSTALL_TEST  1
     2020-06-29 22:24:55   7.PRESS_CONT    1
     2020-06-29 22:24:54   7.PRESS_LONG    1
     2020-06-29 22:24:55   7.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:14   7.PRESS_SHORT   1
     2020-06-29 22:24:57   8.INSTALL_TEST  1
     2020-06-29 22:24:58   8.PRESS_CONT    1
     2020-06-29 22:24:56   8.PRESS_LONG    1
     2020-06-29 22:24:58   8.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:15   8.PRESS_SHORT   1
     2020-06-29 22:24:59   9.INSTALL_TEST  1
     2020-06-29 22:25:01   9.PRESS_CONT    1
     2020-06-29 22:24:59   9.PRESS_LONG    1
     2020-06-29 22:25:01   9.PRESS_LONG_RELEASE 1
     2020-06-29 22:24:18   9.PRESS_SHORT   1
     2020-06-29 21:46:11   R-DEVICE_LED_MODE 1
     2020-06-29 21:46:11   R-DISPLAY_INVERTING 0
     2020-06-29 21:46:11   R-HB_CRITICAL_BAT_LIMIT 1.000000
     2020-06-29 21:46:11   R-HB_DISPLAY_REFRESH_WAIT_TIME 0.000000
     2020-06-29 21:46:11   R-KEY_TRANSCEIVER 0
     2020-06-29 21:46:11   R-LOW_BAT_LIMIT 1.000000
     2020-06-29 21:46:11   R-POWERUP_ACTION 0
     2020-06-30 03:15:02   activity        alive
     2020-06-29 21:57:10   battery         ok
     2020-06-30 03:15:02   hmstate         Initialized
     2020-06-29 21:44:19   state           Initialized
   hmccu:
     devspec    4CZ0VF0VOG
     dp:
       0.AES_KEY:
         OSVAL      off
         OVAL       0
         SVAL       off
         VAL        0
       0.CONFIG_PENDING:
         OSVAL      false
         OVAL       false
         SVAL       false
         VAL        false
       0.DEVICE_IN_BOOTLOADER:
         OSVAL      false
         OVAL       false
         SVAL       false
         VAL        false
       0.LOWBAT:
         OSVAL      ok
         OVAL       false
         SVAL       ok
         VAL        false
       0.RSSI_DEVICE:
         OSVAL      183
         OVAL       183
         SVAL       183
         VAL        183
       0.RSSI_PEER:
         OSVAL      60
         OVAL       60
         SVAL       60
         VAL        60
       0.STICKY_UNREACH:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       0.UNREACH:
         OSVAL      dead
         OVAL       1
         SVAL       alive
         VAL        0
       0.UPDATE_PENDING:
         OSVAL      false
         OVAL       false
         SVAL       false
         VAL        false
       1.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       1.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       1.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       1.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       1.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       10.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       10.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       10.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       10.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       10.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       2.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       3.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       3.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       3.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       3.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       3.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       4.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       4.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       4.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       4.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       4.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       5.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       5.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       5.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       5.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       5.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       6.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       6.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       6.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       6.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       6.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       7.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       7.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       7.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       7.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       7.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       8.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       8.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       8.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       8.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       8.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       9.INSTALL_TEST:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       9.PRESS_CONT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       9.PRESS_LONG:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       9.PRESS_LONG_RELEASE:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
       9.PRESS_SHORT:
         OSVAL      1
         OVAL       1
         SVAL       1
         VAL        1
Attributes:
   IODev      myHMCCU
   ccureadingfilter .*
   ccureadingformat datapoint
   event-on-update-reading .*
   room       Flur_OG


Diese Stelle
       0.UNREACH:
         OSVAL      dead
         OVAL       1
         SVAL       alive
         VAL        0

lässt mich vermuten, dass hier offenbar automatisch eine Ersetzung stattfindet von "0.UNREACH" nach "activity"?