[Gelöst]Benutzung von $NAME und $EVENT in AT funktion mit SignalBot

Begonnen von Kohle77, 17 Oktober 2022, 07:53:30

Vorheriges Thema - Nächstes Thema

Beta-User

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

MadMax-FHEM

#16
Zitat von: Beta-User am 18 Oktober 2022, 09:31:48
...irgendwie wird das hier immer gruseliger...

;)


Zitat von: Kohle77 am 18 Oktober 2022, 09:29:38
Hi,
ich bin ein kleines Stück weiter und denke ich habe schon wieder einen Denkfehler.
Die Fensterkontakte habe ja keinen OK oder False status reading. Also hatte ich die Idee ein userreading anzulegen das wie folgt aussieht.
batteryState { return "ok" if(ReadingsVal("BueroChris","batteryPercent","0"))>"25"; return "low"}
damit wird ein Reading "batteryState" angelegt das ok ist und auf low gesetzt wird wenn die batteryPercent kleiner 25 ist.

[/code]

nimm ReadingsNum weil Zahlenwerte ;)
nimm $name im userReadings, dann brauchst du nicht bei jedem Device anpassen, sondern kannst dasselbe userReadings bzw. denselben userReadings-Code einfach einfügen :)


Zitat von: Kohle77 am 18 Oktober 2022, 09:29:38
Das erzeugt auch ein EVENT (aus dem Event Monitor):
Wenn ich nun das DOIF von MadMax-FHEM benutze:

([06:06])
{
my @devs;;
my $ms="";;
## variables don't work inside the brackets, so use AttrVal
my $s='[?@:"":"^[Bb]attery$":!($_ =~ /ok/) && !(AttrVal("$SELF","exRooms",0) =~ /$room/) && !(AttrVal("$SELF","exDevices",0) =~ /$name/) ]';;
@devs=split(",",$s);;
foreach (@devs) {
   my $alias=AttrVal($_,"alias","");;
   my $bt=ReadingsVal($_,"battery","");;
   my $vt=ReadingsVal($_,"voltage","");;
## batteryThreshold is an optional userAttr to avoid false alarms for seldom used devices
   if ($vt ne "") {
      $ms.="$_($alias):$bt(voltage:$vt)\n";;
      } else {
         $ms.="$_($alias):$bt\n";;
      }
    }
  if ($ms ne "") {
      $ms="Potential battery issues:\n".$ms;;
      fhem("set SignalBot send \@+49123456789 $ms");;
  }
}


Danke für die Lorbeeren aber ist nicht von mir ;)

EDIT: warum eben nicht den einfachen Code von mir? Da wird der NAME des Devices ausgegeben und gut... :) Ok, du musst nat. noch die Zeile für's Senden eingeben... Und evtl. schauen ob du wirklich beide devspec2array brauchst... Und noch mal es muss keine Sub in myUtils sein, man kann das auch einfach ins at packen. Mache ich aber so, da ich es übersichtlicher finde, ich weiß, dass ich in Perl unterwegs bin, ich die myUtils bearbeiten kann ohne die Config anpacken zu müssen usw.

Zitat von: Kohle77 am 18 Oktober 2022, 09:29:38
Sollte der Name nicht auch in der gesendeten Nachricht stehen da es ja ein Reading "batteryState" mit ok hat?
Warum wird die Nachricht geschickt obwohl der "batteryState" ok hat?
Trotzdem so ich das sehe wird mit alias gearbeitet.
Da du leider nur die Readings und kein komplettes list gepostet hast -> keine Ahnung, ob es einen alias gibt ;)
Und bitte sowas in code-Tags, danke :)

EDIT: der NAME müsste in $_ stehen...

Zitat von: Kohle77 am 18 Oktober 2022, 09:29:38
Wie kann ich mir in fhem commando zeile den wert eine Variable anzeigen lassen.
Also in etwa so

{my $vt=ReadingsVal("BueroChris","voltage","");; print $vt}

?

Entweder einfach:

{ReadingsVal("BueroChris","voltage","")}


Besser:

{ReadingsVal("BueroChris","voltage","Ersatz")}

Dann siehst du besser was passiert 8)

Oder eben noch besser (weil Zahlenwerte):

{ReadingsNum("BueroChris","voltage",-1)}


Ausgabe einer Variablen dann genauso (warum aber der Umweg über eine Variable?):

{my $vt=ReadingsVal("BueroChris","voltage","");; return $vt}


bzw. obige "Abwandlungen"... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Kohle77

Hallo,
vielen Dank für eure Hilfe.
Ich habe es mir mal noch einfacher gemacht so das ich es halt verstehe.
Es sind ja nur 10 Devices die eine Batterie haben. Habe mich daran orientiert:
Ansatz von hier: https://www.meintechblog.de/2015/08/fhem-rechtzeitige-benachrichtigung-bei-leeren-batterien/
Habe ein AT für die FB Dect Heitkörperthermostate und ein AT für die Fensterkontakte.
Musste auch feststellen das die Fensterkontakte nicht zyklisch senden aber das ist was anderes.

Mit dem Code untern prüfe ich immer Mittwochs um 15:00 ob eine der 4 Geräte unter 25 ist:
define BatteryLowSignal at *15:00:00 {if ($wday == 3)\
{if (ReadingsVal("Device1", "batteryPercent", "-1") < "25")\
  {fhem ("set SigBot send \@NameNr 'Heizkoerper Ventil RAUM-A' 'Bitte Batterie tauschen' ")}\
};\
{if (ReadingsVal("HzMiGaWc", "batteryPercent", "-1") < "25")\
  {fhem ("set SigBot send \@NameNr 'Heizkoerper Ventil RAUM-B WC' 'Bitte Batterie tauschen' ")}\
};\
{if (ReadingsVal("HzMiSzLi", "batteryPercent", "-1") < "25")\
  {fhem ("set SigBot send \@NameNr 'Heizkoerper Ventil RAUM-C links' 'Bitte Batterie tauschen' ")}\
};\
{if (ReadingsVal("HzMiSzRe", "batteryPercent", "-1") < "25")\
  {fhem ("set SigBot send \@NameNr 'Heizkoerper Ventil RAUM-C rechts' 'Bitte Batterie tauschen' ")}\
};\
}


Vielleicht nicht schön aber es funktioniert für mich.

Gruß
Christian

MadMax-FHEM

Hallo Christian,

schön, dass wieder offen ist ;)

Wie bereits geschrieben:

schön, dass es für dich geht.
Umständlich ist es trotzdem ;)
(wenn ein neues Gerät dazu kommt musst du an den Code, wenn es umbenannt wird musst du anpassen usw. ;)  )
Aber kann ja noch werden...

Du solltest trotzdem mal überlegen wenigstens auf ReadingsNum umzubauen, dann vergleichst du wirklich Zahlen und nicht Zeichenketten.

Und wenn du das < verwendest müsste es mindestens einen Eintrag geben sowas wie: isn't numeric... ;)

Weil Zeichenketten werden mit ne, eq, le, usw. verglichen...
https://de.wikibooks.org/wiki/Perl-Programmierung:_Operatoren#Stringvergleichende_Operatoren

Und: meine Lösung ist doch von deiner gar nicht so weit weg, außer, dass ich halt keine festen Devices nutze, sondern nur die, die eben ein batteryPercent bzw. BatteryPercent haben ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Kohle77

Hallo,
weil doch nach einem vollen list gefragt wurde.
Für den Fritz!DECT 301:
Internals:
   CFGFN      /opt/fhem/FHEM/CFG/21_heizung.cfg
   DEF        FritzSmart:09995_0702078 actuator,tempSensor
   FUUID      6006cddc-f33f-d2f4-8485-208a926f2f4ce162
   FritzSmart_MSGCNT 37
   FritzSmart_TIME 2022-10-19 11:18:49
   IODev      FritzSmart
   LASTInputDev FritzSmart
   MSGCNT     37
   NAME       HzMiChBu
   NR         400
   STATE      desired-temp: 14.0 C
   TYPE       FBDECT
   eventCount 37
   id         09995_0702078
   props      actuator,tempSensor
   webCmd     desired-temp
   READINGS:
     2022-10-19 11:18:49   AIN             09995 0702128
     2022-10-19 11:18:49   FBNAME          Büro Chris
     2022-10-19 11:18:49   FBPROP          actuator,tempSensor
     2022-10-19 11:18:49   FBTYPE          FRITZ!DECT 301
     2022-10-19 11:18:49   ID              20
     2022-10-19 08:18:46   IODev           FritzSmart
     2022-10-19 11:18:49   battery         80 %
     2022-10-19 11:18:49   batteryPercent  80
     2022-10-19 11:18:49   batteryState    ok
     2022-10-19 11:18:49   batterylow      0
     2022-10-19 11:18:49   boostactive     no
     2022-10-19 11:18:49   boostactiveendtime N/A
     2022-10-19 11:18:49   day-temp        21.0 C
     2022-10-19 11:18:49   desired-temp    14.0 C
     2022-10-19 11:18:49   devicelock      no
     2022-10-19 11:18:49   errorcode       noError (0)
     2022-10-19 11:18:49   fwversion       05.02
     2022-10-19 11:18:49   holidayactive   no
     2022-10-19 11:18:49   locked          no
     2022-10-19 11:18:49   nextPeriodStart 1970-01-01 01:00:00
     2022-10-19 11:18:49   nextPeriodTemp  21.0 C
     2022-10-19 11:18:49   night-temp      16.0 C
     2022-10-19 11:18:49   present         yes
     2022-10-19 11:18:49   state           desired-temp: 14.0 C
     2022-10-19 11:18:49   summeractive    no
     2022-10-19 11:18:49   tempadjust      0.0 C
     2022-10-19 11:18:49   temperature     22.5 C (measured)
     2022-10-19 11:18:49   windowopenactiv no
     2022-10-19 11:18:49   windowopenactiveendtime N/A
Attributes:
   DbLogExclude .*
   IODev      FritzSmart
   alias      Heizköper Büro
   event-min-interval power:120
   room       DG_MI->Buero Chris
   verbose    0


uns für den Fenstersensor (Shelly):
Internals:
   CFGFN      /opt/fhem/FHEM/CFG/13_mqtt.cfg
   FUUID      617a2729-f33f-d2f4-5e7e-67421914707b79af
   IODev      Mosquitto
   NAME       BueroChris
   NR         288
   STATE      close
   TYPE       MQTT_DEVICE
   eventCount 2
   READINGS:
     2022-10-19 08:18:46   IODev           Mosquitto
     2022-10-19 05:47:23   announce        {"id":"mibueoben","model":"SHDW-2","mac":"E8DB84D3BA82","ip":"192.168.178.32","new_fw":false,"fw_ver":"xxxxxxxx-yyyyyyy/va.bb.c-eeeeee12"}
     2022-10-19 05:47:23   batteryPercent  97
     2022-10-19 08:18:50   batteryState    ok
     2022-10-19 05:47:23   error           0
     2022-10-19 05:47:23   fw_ver          xxxxxxxx-yyyyyyy/va.bb.c-eeeeee12
     2022-10-19 05:47:23   id              mibueoben
     2022-10-19 05:47:23   ip              190.132.150.32
     2022-10-19 05:47:23   mac             E7DA84B3BC92
     2022-10-19 05:47:23   model           SHDW-2
     2022-10-19 05:47:23   new_fw          0
     2022-10-19 05:48:54   online          false
     2022-10-17 10:01:35   state           close
     2022-10-19 08:18:50   transmission-state subscription acknowledged
   message_ids:
   sets:
   subscribe:
     shellies/mibueoben/announce
     shellies/mibueoben/sensor/battery
     shellies/mibueoben/sensor/error
     shellies/mibueoben/online
     shellies/mibueoben/sensor/state
   subscribeExpr:
     ^shellies\/mibueoben\/announce$
     ^shellies\/mibueoben\/sensor\/battery$
     ^shellies\/mibueoben\/sensor\/error$
     ^shellies\/mibueoben\/online$
     ^shellies\/mibueoben\/sensor\/state$
   subscribeQos:
     shellies/mibueoben/announce 0
     shellies/mibueoben/online 0
     shellies/mibueoben/sensor/battery 0
     shellies/mibueoben/sensor/error 0
     shellies/mibueoben/sensor/state 0
   subscribeReadings:
     shellies/mibueoben/announce:
       cmd       
       name       announce
     shellies/mibueoben/online:
       cmd       
       name       online
     shellies/mibueoben/sensor/battery:
       cmd       
       name       batteryPercent
     shellies/mibueoben/sensor/error:
       cmd       
       name       error
     shellies/mibueoben/sensor/state:
       cmd       
       name       state
Attributes:
   DbLogExclude .*
   alias      Fenster Büro Chris
   comment    IP: 190.132.150.32
   devStateIcon open:fts_window_1wbb_open@red close:fts_window_1w@black
   group      Chris Buero
   room       Buero Chris
   subscribeReading_announce shellies/mibueoben/announce
   subscribeReading_batteryPercent shellies/mibueoben/sensor/battery
   subscribeReading_error shellies/mibueoben/sensor/error
   subscribeReading_online shellies/mibueoben/online
   subscribeReading_state shellies/mibueoben/sensor/state
   userReadings batteryState { return "ok" if(ReadingsVal("BueroChris","batteryPercent","0"))>"25"; return "low"}
   userattr   subscribeReading_state subscribeReading_batteryPercent subscribeReading_error subscribeReading_announce subscribeReading_online


Gruß
Christian

MadMax-FHEM

Zitat von: Kohle77 am 19 Oktober 2022, 11:27:06
weil doch nach einem vollen list gefragt wurde.

Wenn sich das auf das:
Zitat
Und wenn man dort ein list seiner Devices postet, kann es sogar sein, dass es eingebaut wird.

von hier: https://forum.fhem.de/index.php/topic,129736.msg1240072.html#msg1240072
bezieht, dann war ja gemeint (und formuliert) das list DORT zu posten, wenn du willst, dass es DORT eingebaut wird ;)

Zumindest ist mir jetzt keine weitere "Anfrage" eines lists aufgefallen ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)