TelegramBot: Ein einzelnes Reading via Handy abfragen?

Begonnen von curt, 17 September 2019, 02:17:33

Vorheriges Thema - Nächstes Thema

curt

Ihr habt Euch ja schön gestritten - ich bin immer wieder beeindruckt, wie man perfekten (und perfekt unverständlichen) Perl-Code schreiben kann. Nein, das ist keine Kritik. Ich kann das halt nicht.

Eins ging unter:

@Beta-User
Mir ist nachträglich aufgefallen, dass bei Deinem Vorschlag für das Fensterbeispiel in #33 der Zweig "Keine offenen Fenster!" nicht funktioniert (oder ich war mal wieder zu blond). Mich persönlich stört das nicht, ich möchte es aber für andere User anmerken.
RPI 4 - Jeelink HomeMatic Z-Wave

Beta-User

Es ging nicht unter, nur leider war meine Antwort nicht korrekt...
Zitat von: Beta-User am 07 April 2021, 16:12:18
Jedenfalls dürfte das hier "theoretisch" zu kurz gegriffen sein:
return if @devs == 1;;\devspec2array liefert nämlich in zwei Fällen ein Array mit genau einem Element zurück: bei Fehlschlag (=>devspec) und wenn es genau einen Treffer gibt. Kann sein, dass mein eq-Vorschlag nicht funktioniert (evtl. muss man klammern, vielleicht geht es so auch gar nicht), aber dann sollte man was anderes machen, z.B. prüfen, ob es $defs{$dev[0]} gibt.
Das basierte auf dem Wiki-Eintrag zu devspec2array, was auch der Beobachtung in FHEMWEB entspricht. ABER: Tatsächlich liefert devspec2array aus Perl heraus aufgerufen ein LEERES Array zurück...

Daher zur Belohnung für's Aufspühren dieser kleinen Unsauberkeit hier der funktionierende Code:
defmod teleBot_notify_window notify teleBot:msgText:.Fenster { \
  my @devs = devspec2array('TYPE!~structure:FILTER=state=^open|tilted$');;\
  my $text = !@devs || @devs == 1 && !defined $defs{$devs[0]} ? \
  'Keine offenen Fenster!' : \
  join q{, }, @devs;;\
  fhem "set teleBot message Fenster: $text";;\
}

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

curt

Zitat von: Beta-User am 11 April 2021, 08:45:19
Es ging nicht unter, nur leider war meine Antwort nicht korrekt...

Ich hatte ja die Befürchtung, dass Du mich wegen eines "haste übersehen" in der Luft zerreißen würdest ...

Zitat von: Beta-User am 11 April 2021, 08:45:19
Daher zur Belohnung für's Aufspühren dieser kleinen Unsauberkeit hier der funktionierende Code:

Der Tag wird immer schöner: Ich bedanke mich herzlich.
RPI 4 - Jeelink HomeMatic Z-Wave

Beta-User

Nachtrag noch zu dem Code: Die Doppelung des Rückgabewerts von devspec2array kann man eigentlich auf !@devs beschränken:
defmod teleBot_notify_window notify teleBot:msgText:.Fenster { \
  my @devs = devspec2array('TYPE!~structure:FILTER=state=^open|tilted$');;\
  my $text = !@devs ? \
  'Keine offenen Fenster!' : \
  join q{, }, @devs;;\
  fhem "set teleBot message Fenster: $text";;\
}

Hatte das nur dringelassen, weil der Textteil diese Prüfung so beschrieben hatte.

Propos "in der Luft zerreißen": Einen Verbesserungsvorschlag hätte ich noch: Wäre gleich gekommen (statt "funktioniert nicht"): "Ich bekomme ... gesendet, wenn alle Fenster zu sind", hätte ich ggf. dann nur den Lösungsschnippsel posten können und der eine oder andere hätte es dann vollends selbst finalisieren können, ohne dass ich alles selbst ausprobieren muss  :P ...

Macht in dem Fall aber nichts, weil ich diese Logik eigentlich sowieso vermutet hatte und das dann auch gleich in die aktuelle RHASSPY-Fassung übergenommen habe :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

curt

Neues Thema:
Telegram und ReadingsGroup.

ich habe eine schicke Readingsgroup:
Alle Heizkörper, für jeden die Temperatur, den Ventilöffnungsstand, den Restladewert der Batterie. Sieht als Tabelle wirklich schick aus, ist ja eine ReadingsGroup.

Ich würde auf dem Handy nun gern "Heiz" schreiben - und der teleBot antwortet mir mit dem Inhalt der ReadingsGroup - die ist ja schon vorhanden.

Das Forum weiß dazu nichts - lediglich unbeantwortete Anfragen ... geht das denn so einfach, dass ich dem teleBot einfach den Namen der ReadingsGroup mitgebe und das geht dann?

Oder muss ich ich wieder obskure Handstände machen?
RPI 4 - Jeelink HomeMatic Z-Wave

Beta-User

Vermutlich musst du da schon irgendwie in die Trickkiste greifen. readingsGroup ist dazu gemacht, HTML-code zu erzeugen (wenn er abgefragt wird). So ein list von einer readingsGroup enthält relativ wenige Daten, die man direkt verwenden könnte. Den HTML-Code kann man vermutlich irgendwie abgreifen (macht z.B. FTUI ja auch), aber das solltest du ggf. mal direkt im entsprechenden Forenbereich nachfragen, ob und wie das ggf. geht (und wie man das umwandeln kann).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

curt

Ja - danke für die Bestätigung.

Ich war unsicher ob meine Einschätzung stimmt - oder ich etwas übersah.
RPI 4 - Jeelink HomeMatic Z-Wave