Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    ok dann schreib ichs lieber um, sonst kommts irgendwann zu merkwürdiegen Ereignissen und ich erinnere mich nicht mehr dran.

    Kommentar


      Zitat von Fry Beitrag anzeigen
      Die Möglichkeit gibt es, aber nur im Logikprozessor selbst.
      Danke für die Info. Dann wäre es wahrscheinlich eleganter ich schreibe eine eigene sub wie "is_holiday_in_sachsen" und frage dieser in der translate-Sektion ab, oder?

      Danke
      Micha

      Kommentar


        Zitat von mivola Beitrag anzeigen
        Danke für die Info. Dann wäre es wahrscheinlich eleganter ich schreibe eine eigene sub wie "is_holiday_in_sachsen" und frage dieser in der translate-Sektion ab, oder?

        Danke
        Micha
        Kommt drauf an.
        Ich an deiner Stelle würde den Logikprozessor selbst patchen.
        VG, Fry

        Kommentar


          Zitat von Fry Beitrag anzeigen
          Kommt drauf an.
          Ich an deiner Stelle würde den Logikprozessor selbst patchen.
          VG, Fry
          Naja, aber wenn, dann erst nachdem die neue/aktuelle Version bei mir läuft :-)

          Micha

          Kommentar


            Zitat von kingolli Beitrag anzeigen
            Danke für deine Antwort, aber das zurücksetzen des Wertes (was ja das löschen des Alarms ist) sollte sofort erfolgen. Theoretisch müsste ich ja dann nur eine eigene Logik einbauen, wenn alle Fenster zu sind den Alarm-Wert wieder zurück zu setzen. Ich probiere es heute Abend mal aus und geb Bescheid...

            Grüße
            David
            Hi David,

            hast du das mittlerweile mal ausprobiert und umgesetzt? Ich habe eine ähnliche Aufgabe vor mir und bin unsicher wie es am besten geht...

            VG
            Micha

            Kommentar


              Zitat von mivola Beitrag anzeigen
              ich bin die Tage über NMA (eine Android-Alternative zu Prowl) gestolpert und dachte, das wäre doch sicher eine schicke Erweiterung für den Logikprozessor.
              So, nun hat es mich mal gepackt und ich habe versucht NMA-Nachrichten zu verschicken. Dabei ist folgendes herausgekommen:

              Code:
              sub sendNma {
                  my (%parameters)=@_;
                  my ($priority, $event, $description, $application, $url, $apikey, $targetUrl);
              
                  # Parameter ermitteln
                  # dom, 2012-11-05: $settings auch hier auswerten. Damit kann addRssLog() direkt aus der Logik aufgerufen werden!
              	$priority = $parameters{priority} || $settings{nma}{priority} || 0;
                  $event = $parameters{event} || $settings{nma}{event} || '[unbenanntes Ereignis]';
                  $description = $parameters{description} || $settings{nma}{description} || '';
                  $application = $parameters{application} || $settings{nma}{application} || 'WireGate KNX';
                  $targetUrl = $parameters{targetUrl} || $settings{nma}{targetUrl} || '';
              	$url = $parameters{url} || $settings{nma}{url} || '';
                  $apikey = $parameters{apikey} || $settings{nma}{apikey} || '';
                  
                  use LWP::UserAgent;
                  use URI::Escape;
                  use Encode;
              
              	# HTTP Request aufsetzen
              	my ($userAgent, $request, $response, $requestURL);
              	$userAgent = LWP::UserAgent->new;
              	$userAgent->agent("WireGatePlugin/1.0");
              
              	$requestURL = sprintf($url."?apikey=%s&priority=%s&event=%s&description=%s&application=%s&url=%s",
              		uri_escape($apikey),
              		uri_escape($priority),
              		uri_escape(encode("utf8", $event)),
              		uri_escape(encode("utf8", $description)),
              		uri_escape(encode("utf8", $application)),
              		uri_escape($targetUrl));
              
              	$request = HTTP::Request->new(GET => $requestURL);
              	#$request->timeout(5);
              
              	$response = $userAgent->request($request);
                      if ($response->is_success) {
                 	    plugin_log($plugname, "NMA-Nachricht erfolgreich abgesetzt: $priority, $event, $description, $application") if $parameters{debug};
                      } elsif ($response->code == 401) {
                 	    plugin_log($plugname, "NMA-Nachricht nicht abgesetzt: API key gültig?");
                      } else {
                 	    plugin_log($plugname, "NMA-Nachricht ($requestURL) nicht abgesetzt: " . $response->content);
                      }
              
                  return undef;
              }
              Momentan läuft das bei mir noch in der .conf-Datei, aber wenn Fry sein OK gibt und es irgendwann mal den neuen PL fürs WG mit seinen Änderungen gibt (*leise nachfrag*), dann sollte das in den eigentlichen Logikprozessor wandern und dann bleibt nur noch die Konfiguration in der .conf übrig:

              Code:
              %settings=(
                nma => {
                  apikey => "enterYourApiKey",
              	application => 'SmartHome Logikprozessor',
              	targetUrl => 'urlToYourVisu',
                  url => 'http://www.notifymyandroid.com/publicapi/notify'
                }
              );
              Hier noch ein Beispiel wie ich es benutze:

              Code:
              sendNma(event=>'Garagentor auf seit 15min!', description=>'bitte Garagentor schließen');
              Auch hierfür gibt es sicherlich noch Verbesserungspotential um es ähnlich elegant wie "prowl" zu nutzen, aber auch das erst nach dem neuen PL...

              So, Fragen und Anregungen sind gern gesehen ;-)

              VG
              Micha

              Kommentar


                Und weil ich nun grade mal dabei war, habe ich auch noch eine Routine geschrieben um Einträge in das RSSLog (siehe hier, hier und hier) zu erzeugen, evtl. kann es ja jemand gebrauchen:

                Code:
                sub addRssLog {
                    my (%parameters)=@_;
                    my ($title, $content, $tags, $url);
                
                    # Parameter ermitteln
                    # dom, 2012-11-05: $settings auch hier auswerten. Damit kann addRssLog() direkt aus der Logik aufgerufen werden!
                    $title = $parameters{title} || $settings{rssLog}{title} || '';
                    $content = $parameters{content} || $settings{rssLog}{content} || '';
                    $tags = $parameters{tags} || $settings{rssLog}{tags} || '';
                    $url = $parameters{url} || $settings{rssLog}{url} || '';
                    
                    use LWP::UserAgent;
                    use URI::Escape;
                    use Encode;
                
                	# HTTP Request aufsetzen
                	my ($userAgent, $request, $response, $requestURL);
                	$userAgent = LWP::UserAgent->new;
                	$userAgent->agent("WireGatePlugin/1.0");
                
                	$requestURL = sprintf("%s?t=%s&c=%s&tags=%s",
                		uri_escape($url),
                		uri_escape(encode("utf8", $title)),
                		uri_escape(encode("utf8", $content)),
                		uri_escape(encode("utf8", $tags));
                
                	$request = HTTP::Request->new(GET => $requestURL);
                	#$request->timeout(5);
                
                	$response = $userAgent->request($request);
                
                	if ($response->is_success) {
                	plugin_log($plugname, "RSSLog erfolgreich abgesetzt: $title, $content, $tags, $url") if $parameters{debug};
                	} else {
                	plugin_log($plugname, "Prowl-Nachricht nicht abgesetzt: " . $response->content);
                	}
                
                    return undef;
                }
                Die Config ist sehr einfach:

                Code:
                %settings=(
                  rssLog => {
                    url => 'http://localhost/visu-svn/plugins/rsslog/rsslog.php'
                  }
                );
                Und der Aufruf auch:

                Code:
                addRssLog(content=>'Raffstore runter', tags=>'raffstores', debug=>0);
                Viel Spaß,
                Micha

                Kommentar


                  Hallo!

                  Ich habe ein komisches Verhalten, bei dem ich etwas Hilfe brauche. Ich nutze den Logikprozessor u.a. um die Jalousie beim Herunter-Befehl erstmal auf 80% zu fahren, nochmaliges drücken, fährt dann komplett herunter.

                  Funktionieren tut das Ganze, allerdings bekomme ich seit dem aktivieren unheimlich viel Traffic auf den Bus, den ich mir nicht erklären kann (siehe Anhang).

                  Hier die Logik und die Beschreibung der GA:

                  1/1/11 Jalousie_Arbeiten_AufAb
                  1/1/13 Jalousie_Arbeiten_Position

                  Code:
                  Jalousie_Arbeiten_80zu => { receive=>['1/1/11'], fetch=>['1/1/13'], transmit=>'1/1/13', transmit_changes_only => 1, translate =>  sub { return unless int($input->[0]) == 1 && int($input->[1]) < 75 ; 80}, debug=>1},

                  Auszug aus dem eib.log:

                  Code:
                  2014-03-27 08:20:39.506,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:40.744,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:42.232,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:43.479,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:44.820,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:46.063,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:47.523,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:48.760,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:50.103,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:51.348,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:52.733,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:54.393,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:55.653,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:56.898,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:58.242,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:20:59.689,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:01.057,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:02.360,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:03.702,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:04.945,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:06.293,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:07.533,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:08.773,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:10.025,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:11.262,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:12.506,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:13.743,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:15.295,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:16.743,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:17.999,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2014-03-27 08:21:19.340,A_GroupValue_Read,1.1.241,1/1/13,00,0.0,,5.001,0,low,7,T_DATA_XXX_REQ,0
                  Hat jemand eine Erklärung dafür, warum der Bustraffic so hoch ist (siehe Anhang)?

                  Danke und Grüße
                  David
                  Angehängte Dateien

                  Kommentar


                    Was sagt denn das wiregate_plugin.log? Wie oft wird deine Logik aufgerufen?
                    Ist das gepostete eib.log gefiltert nach der '1/1/13' ? Ändert sich der Wert für '1/1/11' wenn du auf '1/1/13' etwas sendest?

                    VG
                    Micha

                    Kommentar


                      Zitat von mivola Beitrag anzeigen
                      Was sagt denn das wiregate_plugin.log? Wie oft wird deine Logik aufgerufen?
                      Ist das gepostete eib.log gefiltert nach der '1/1/13' ? Ändert sich der Wert für '1/1/11' wenn du auf '1/1/13' etwas sendest?

                      VG
                      Micha
                      Ja, eib.log war auf 1/1/13 gefiltert, der Wert für 1/1/11 ändert sich aber nicht.

                      Hier der Auszug aus dem Plugin Log:
                      Code:
                      2014-03-27 07:18:03.465,logikprozessor.pl,1/1/11:0 -> $logic->{Jalousie_Arbeiten_80zu}{receive}(Logik) -> nichts zu senden;  ,1.2s,
                      Wundern tut mich:
                      1. warum sind das alles Lese Telegramme, die Logik hat doch nur einen "Fetch" Eintrag
                      2. der Traffic startet beim öffnen der Jalousie heute morgen, also eigentlich dann, wenn die Logik garnichts tun soll.

                      Danke und Grüße
                      David

                      Kommentar


                        Wie viele Einträge von "Jalousie_Arbeiten_80zu" siehst du im Log?
                        Die Fetch-Angabe führt zweifelos zu read-Telegrammen - wenn der Logikprozesser den Wert nicht aus dem Cache lesen kann. Such hier im Thread mal nach "cache" - Fry hatte dazu mal was geschrieben.

                        VG
                        Micha

                        Kommentar


                          Zitat von mivola Beitrag anzeigen
                          Wie viele Einträge von "Jalousie_Arbeiten_80zu" siehst du im Log?
                          Die Fetch-Angabe führt zweifelos zu read-Telegrammen - wenn der Logikprozesser den Wert nicht aus dem Cache lesen kann. Such hier im Thread mal nach "cache" - Fry hatte dazu mal was geschrieben.

                          VG
                          Micha
                          Ich sehe nur einen "Jalousie_Arbeiten_80zu" Eintrag im Log, das ist ja das komische. Ich bin auch bisher davon ausgegangen, dass das Fetch (=Read) nur ausgeführt wird, wenn ein Telegram auf der Receive kommt...

                          Ich hab jetzt mal die Einträge um "eibd_cache=>300" ergänzt, mal sehen, ob es was bringt.

                          Danke schonmal vorab und Grüße
                          David

                          Kommentar


                            Zitat von kingolli Beitrag anzeigen
                            Ich hab jetzt mal die Einträge um "eibd_cache=>300" ergänzt, mal sehen, ob es was bringt.
                            Ergebnis: negativ (siehe Anhang), gleiches Phänomen wie vorher, eine Adresse liest sich tot (jetzt eine andere Jalousie, aber es war auch vorher nicht immer die Gleiche).

                            Hat noch jemand eine Idee?

                            Danke und Grüße
                            David
                            Angehängte Dateien

                            Kommentar


                              Zitat von kingolli Beitrag anzeigen
                              Hat noch jemand eine Idee?
                              Nicht wirklich. Kannst du wirklich ausschließen dass es nicht an anderen Plugins bzw Regeln im Logikprozessor (oder deren Zusammenspiel) liegt? Kannst du mal alle Plugins deaktivieren und nur eine dieser Regeln zum Logikprozessor aktivieren?

                              VG
                              Micha

                              Kommentar


                                Zitat von mivola Beitrag anzeigen
                                Nicht wirklich. Kannst du wirklich ausschließen dass es nicht an anderen Plugins bzw Regeln im Logikprozessor (oder deren Zusammenspiel) liegt? Kannst du mal alle Plugins deaktivieren und nur eine dieser Regeln zum Logikprozessor aktivieren?

                                VG
                                Micha
                                Ja, andere Plugins spielen keine Rolle! Wenn ich die erwähnten Jalousie Logiken auskommentiere, ist Ruhe auf dem Bus.

                                Ich habe jetzt mal die Cache Zeit auf 86400 (=24 Stunden) erhöht, weil ja die Position der Jalousie normalerweise nur gemeldet wird, wenn sie auch in Bewegung war und das sollte mindestens einmal am Tag sein. Mal sehen, ob es was bringt.

                                Ich werde berichten.

                                Grüße
                                David

                                Kommentar

                                Lädt...
                                X