Status von Lampen über Telegram abfragen

Begonnen von Stefan_Anfänger, 23 Februar 2018, 17:30:12

Vorheriges Thema - Nächstes Thema

Stefan_Anfänger

Hallo,
Ich bin neu in diesen Forum und hoffe das mein Beitrag hier richtig ist.
Bei der folgenden Aufgabe habe ich Probleme:
Ich bekomme von meiner SPS den Schaltzustand der Lampen (insgesamt 9 Stk.) und möchte sie über Telegramm abfragen.
Jetzt zu den Details: Der Status von der SPS kommt als ModbusCoil an und ich habe schon ein Notify geschrieben das meine Telegramm Nachrichten abfängt,
aber ich bekomme die beiden Sachen nicht vernünftig mit einander verbunden.
Ich hoffe das ihr mir weiter helfen könnt.
Stefan der Anfänger

MadMax-FHEM

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)

Stefan_Anfänger

Erstmal fielen Dank für die Antwort, die Idee ist zwar sehr gut, aber für meine Zwecke zu aufwändig.
ich habe gestern noch was ausprobiert. Vielleicht  kann man es verbessern:
wenn ich "Wohnzimmerlampe Status" über Telegram schreibe, setzt mein Telegram-Bot ein Dummy auf an.
Als nächstes habe ich 2 DOIF, beide warten darauf das der Dummy auf an geht.
Der 1. DOIF schickt mir eine Nachricht, wenn das Licht an ist und
der 2. DOIF wenn das Licht aus ist. Danach wird der Dummy wieder ausgeschaltet.
Die Idee funktioniert auch sehr gut, aber ich brauche sehr fiele Dummys und DOIF oder ist das Normal?

MadMax-FHEM

Wenn ich mir deine Umsetzung so ansehe und mit den verlinkten Möglichkeiten vergleiche, dann ist mindestens die erste verlinkte deutlich einfacher und v.a. es wird geprüft, wer die Nachricht geschickt hat, sonst kann ja "jeder" bei dir schalten und walten...

Die erste verlinkte Variante reagiert per Notify auf eine eingegende Nachricht und führt entsprechende Befehle nach Prüfung aus...

Ich habe genau ein Notify und dann eine Sub die prüft was zu tun ist und dann eben Befehle ausführt oder Statusmeldungen zurück schickt...

Ohne Dummy und zusätzliche DOIFs aber wenn's tut...

Wie geschrieben: prüfen wer schickt und auch sonst absichern nicht vergessen...

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)

Stefan_Anfänger

Ich habe jetzt doch die erste Variante genommen und der Anfang ging auch sehr einfach. Jetzt sitze ich schon wieder fest.

define openedWindows_dialog DOIF
### Fenster ###
([Michael_Telegram:msgText:"(^\/Fenster$)"])(
  ({my @windows = devspec2array('model=HM-SEC-SC(-\d)?:FILTER=state!=closed');;
    my $msg = "Es sind folgenede Fenster geöffnet:\n";;

    if (@windows > 0 and defined($defs{$windows[0]})){
      foreach (@windows){
        $msg .= "\n".AttrVal($_, "alias", $_);;
      }
    }else{
      $msg = "Es sind alle Fenster geschlossen.";;
    }
    $msg .= "\n
             \n/heimdall
            ";;
 
    fhem("set myTelegramBot message \@[myTelegramBot:msgPeerId] $msg");;
   }
  ),
  sleep 0.001; setreading openedWindows_dialog state send status
)


Ich wollte diesen Code für eine Lampe umschreiben, habe es auch ungefähr alles verstanden, aber der Array macht mir Probleme. Ich bekomme in leider nicht raus.
Es wäre nett, wenn mir jemand hilft.

MadMax-FHEM

Ich muss gestehen so genau verstehe ich nicht was du willst bzw. wo (genau) das Problem ist...

Ich kann später ja mal einstellen was ich gemacht habe, vielleicht hilft das...

Zumindest kann ich dann besser helfen weil ich zumindest meinen Teil verstehe... ;)

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)

MadMax-FHEM

#6
So hier mal was ich habe.

Nicht mehr aktuell, will heißen das geht mitlerweile sehr viel "schöner" aber für mich reicht das (noch) ;)

Notify auf die Nachricht:


define nTelegramBotDialogs notify myTelegramBot:msgText:.* {my_Chatbot(ReadingsVal($NAME,"msgPeerId","na"), ReadingsVal($NAME,"msgText","na"))}



In myUtils:


sub my_Chatbot($$)
{
  my ($MessagePeerID, $Message) = @_;
  my $Answer = "Sorry, did not find what you were looking for...";

# check for right Peer: example 123456789
  if($MessagePeerID ne "123456789")
  {
    Log 1, "my_Chatbot    illegal call Name: $Name      PeerID: $MessagePeerID      Message: $Message";
    return;
  }

# everything to lower case
  $Message = lc $Message;

# message is: co2_status?
  if($Message eq "co2_status")
  {
    $Answer = "CO2: " . ReadingsVal("myCO2", "CO2", "na") . "\n";
    $Answer .= "Luftdruck: \n    aktuell: " . ReadingsVal("httpmodLuftdruck", "Luftdruck", "na") . " hPa\n";
    $Answer .= "    historie: " . ReadingsVal("httpmodLuftdruck", "statLuftdruckDayAvgLast", "na") . " hPa\n";

    $Answer .= "Luftfeuchte-Ø: " . my_HumidityAverage() . "%\n";

    $Answer .= "Außen:\n    Ist-Temp: " . ReadingsVal("Aussenthermometer", "temperature", "na") . "°C\n    Luft: " . ReadingsVal("Aussenthermometer", "humidity", "na") . "%\n Taupunkt: " . ReadingsVal("Aussenthermometer", "dewpoint", "na") . "°C\n";
  }
  fhem("set $myTelegramBot message $Answer");
}


Wobei das jetzt eigentlich eine (sehr) abgespeckte Variante ist.

Also in wirklichkeit prüfe ich in der Chatbot Sub, nur die PeerID und dann ob ein '?' gekommen ist.
Wenn ein '?' angekommen ist schicke ich mir ein "Menü" mit möglichen Befehlen.

Alles was vom richtigen Peer kommt  aber kein Fragezeichen ist gebe ich dann an die Sub "ProcessMessage" weiter.
Dort prüfe ich dann welcher Befehl angekommen ist und verfahre dann wie in der hier geposteten Chatbot Sub ( if($Message eq "co2_status")  )...

Mittels weiterer if bzw. elsif prüfe ich dann die angekommene Message und bearbeite dann was gekommen ist, also welcher der möglichen Befehle ankam...
...und antworte (falls eine Antwort erfolgen soll) ansonsten wird nur der Befehl ausgeführt (beispielsweise: fhem("set Licht on")  ).

Aber sollte eigenltich so ähnlich wie im ersten Link sein...
...denke/dachte ich.

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)