Diskussions-Thread zum RSS-Workshop

Begonnen von betateilchen, 15 April 2014, 19:54:33

Vorheriges Thema - Nächstes Thema

Michi240281

Zitat von: betateilchen am 03 Februar 2015, 16:06:47
Vergleichen kannst Du das am Besten in einer Funktion in Deiner 99_myUtils.pm.

Timestamp der letzten Mitternacht =


time_str2num(undef) - secondsSinceMidnight();


Jede Uhrzeitangabe läßt sich in einen timestamp (Sekunden) umwandeln. Schau mal in die Datei 99_Utils.pm., dort sind verschiedene Konvertierungsfunktionen enthalten.

Also ist jeder Anruf, dessen  timestamp  größer ist als der timestamp der letzten Mitternacht "heute" passiert.


sub secondsSinceMidnight(){
my @time = localtime();
return (($time[2] * 3600) + ($time[1] * 60) + $time[0]);
}
sub secondsToMidnight(){
return 86400 - secondsSinceMidnight();
}


Hallo Betateilchen,

erstmal vielen Dank für den Code bzgl. der Wochentagsformatierungen. Habe das angepasst/vervollständigt und funktioniert! SUPER!! :)

Mit dem timestamp komme ich jedoch nicht klar. Habe den Code, den du freundlicherweise gepostet hast, in die 99_myUtils eingefügt. Nur wie mach ich jetzt weiter? Ich müsste ja 3 Dinge machen:

1. Die secondssincemidnight irgendwo abspeichern --> dummy?
2. Die timestamps der eingehenden Anrufe "auslesen" (?)
3. Beide miteinander vergleichen (wie? In der rss.layout?)

FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michi240281

Nachdenken ist nicht das Problem, leider jedoch die fehlende Kenntnis der Programmiersprache! :(

Ich denke mal, ich muss irgendwie die Berechnung aus dem sub in einen dummy schreiben. Ein "set Sekunden_seit_Mitternacht secondsSinceMidnight()" funzt nicht. KA wie die Syntax lauten muss. :(

Habe noch ne andere Frage, die ich leider in dem entsprechenden thread nicht stellen kann, weil er offensichtlich geschlossen wurde:

Habe gerade das GDS Modul eingebaut. Habe alle erforderlichen Module installiert. Leider habe ich dasselbe Problem wie die User, die zum Ende des threads geschrieben haben: Ich kann kein "get gdsname condition" durchführen. Dort steht überall nur "please_use_rereadcfg_first" in den DropDowns. Irgendwie passiert da nichts. Kannste mir da n Tipp geben? (offensichtlich hast du die Lust an Fhem ja seit dem Sommer wieder gefunden!  ;))
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

betateilchen

Du musst die Berechnung doch überhaupt nirgends hinschreiben. Was willst Du denn mit einem Dummy?


  • Timestamp des Anrufs in Sekunden umwandeln (ich hab doch keine Ahnung, wie der aussieht und ich kann nicht hellsehen!)
  • if ((time_str2num(undef) - anrufTimestamp) <= secondsSinceMidnight()) {Anruf war heute}

Ob Du das Ausrechnen in einer eigenen Funktion in der 99_myUtils machst und das Ergebnis zurücklieferst oder direkt in einer condition im Layout hängt von Deiner Anwendung ab.

zu GDS: es funktioniert einwandfrei. Bei mir auf mindestens drei Systemen ohne jeglichen manuellen Eingriff. Es ist mir völlig unklar, was da auf Anwenderseite schiefgehen soll, dass keine Daten kommen. Deshalb habe ich da auch keinen anderen Tipp für Dich.



Zitat von: moonsorrox am 02 Februar 2015, 14:52:45
zu deinem "refresh 60" das mußt du in der html Datei eintragen die dein Rss.png darstellt so in der Art und ja das sind Sekunden..

Dafür gibt es das Attribut "refresh" direkt im RSS Device. Und 60 Sekunden ist der default Wert, wenn das Attribut nicht existiert. Wenn man also das von 02_RSS erzeugte html verwendet, muss man gar nichts tun.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michi240281

Hier mal ein "Teil"-list des FB callmonitors:

Internals:
   DEF        192.168.188.1:1012
   DeviceName 192.168.188.1:1012
   FD         36
   NAME       my_callmonitor
   NR         587
   NTFY_ORDER 50-my_callmonitor
   PARTIAL
   STATE      opened
   TYPE       FB_CALLMONITOR
   Readings:
     2015-02-03 22:22:55   A0              in_connected
     2015-02-03 22:22:55   A1              out_connected
     2015-02-03 22:22:55   A2              in_connected
     2015-02-03 22:22:55   A3              out_connected
     2015-02-03 22:22:55   A4              out_connected
     2015-02-03 22:22:55   B0              22:18:50  3.02.2015
     2015-02-03 22:22:55   B1              18:12:36  2.02.2015
     2015-02-03 22:22:55   B2              16:52:40  1.02.2015
     2015-02-03 22:22:55   B3              16:50:32  1.02.2015
     2015-02-03 22:22:55   B4              17:10:36 31.01.2015


In A0 bis A4 prüfe ich, ob ein Anruf in Abwesenheit stattgefunden hat. Das Reading ist in dem Fall "in_notconnected". B0 bis B4 sind dann die timestamps, richtig? Wie wandele ich diese denn in Sekunden um?

Da ich wie gesagt mit dem Programmieren in der 99_myUtils nicht klarkomme, würde ich die Abfrage dann in der rss.layout durchführen (zumindest versuchen!! ;))!

Zu dem Refresh: Funktioniert einwandfrei. Ich hatte die myrss.jpg offen und da dann auf den refresh gewartet. Dort kam er natürlich nicht (wie ich jetzt weiß!)
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

moonsorrox

nur als Information von mir mal folgendes wir sprechen hier von zwei verschiedenen Modulen..!
Du nutzt nicht den aktualisierten Callmonitor von Elektrolurch (TM) deshalb hast du auch andere Readings...
Bei dir gibt es ein "incoming_noconnect" gar nicht...
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Michi240281

Das weiß ich! Bei mir heißen die nicht "incoming_noconnect" sondern "in_notconnected"!

In dem Beispiel von mir gab es natürlich kein "not", da war kein Anruf in Abwesenheit dabei!

Ich passe das schon an, ich weiß nur nicht, wie ich das mit dem timestamp machen muss! :(
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

hotwebnet

Hallo,
seid Tagen habe ich keine Daten mehr im openweathermap Modul.......wie kann ich das Modul neu Starten habe es schon einmal gelesen aber ich finde diesen Eintrag nicht mehr .....das System habe ich natürlich schon 10 mal neu gestartet......
Danke

betateilchen

Zitat von: Michi240281 am 03 Februar 2015, 22:57:51
Da ich wie gesagt mit dem Programmieren in der 99_myUtils nicht klarkomme, würde ich die Abfrage dann in der rss.layout durchführen (zumindest versuchen!! ;))!

Dir ist hoffentlich klar, dass Du im rss.layout exakt das gleiche Perl benötigst, das auch in die  99_myUtils gehören würde?

Mit der Funktion kannst Du Deine exotischen Timestamps in Sekunden umwandeln.


sub tconvert($)
{
  my ($str) = @_;
  my @a;
  @a = split("[T: \.]", $str);
  return mktime($a[2],$a[1],$a[0],$a[4],$a[5]-1,$a[6]-1900,0,0,-1);
}


Du machst es Dir verdammt einfach mit Deinem Dummstellen - Du brauchst doch nur die Beispiele anschauen, die in der 99_Utils.pm stehen, was ich Dir oben schon geschrieben hatte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: hotwebnet am 04 Februar 2015, 11:04:46
seid Tagen habe ich keine Daten mehr im openweathermap Modul.......

Mit solch einer unspezifischen Fehlermeldung kann Dir niemand weiterhelfen, da niemand weiss, ob Du z.B. überhaupt eine Station gesetzt hast, für die Du Daten haben möchtest.

Eine Notwendigkeit "das Modul neu zu starten" gibt es nicht. Das Modul wird automatisch beim fhem Neustart geladen und in Betrieb genommen, wenn es ein entsprechend angelegtes openweathermap-device gibt.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michi240281

Ich bin einfach zu doof dafür. Ich verstehe noch nicht mal, was in der 99_(my)Utils überhaupt die Definition ist und was vor dem "Gleichheitszeichen" steht. Ich habe jetzt folgendes in der 99_myUtils stehen:

sub tconvert($)
{
  my ($str) = @_;
  my @a;
  @a = split("[T: \.]", $str);
  return mktime($a[2],$a[1],$a[0],$a[4],$a[5]-1,$a[6]-1900,0,0,-1);
}

sub secondsSinceMidnight(){
my @time = localtime();
return (($time[2] * 3600) + ($time[1] * 60) + $time[0]);
}
sub secondsToMidnight(){
return 86400 - secondsSinceMidnight();
}


Dann habe ich in der rss.layout folgende condition:

condition {(ReadingsVal('my_callmonitor','A0','') eq 'in_notconnected' && (time_str2num(undef) - tconvert(B0) <= secondsSinceMidnight()) }

Funktioniert aber nicht.

Das "tconvert" wandelt doch, so wie ich es verstehe nun den timestamp des Anrufs von "05.02.15 19:13:33" in einen Sekundenwert um, richtig? Muss ich dann nicht sagen, auf welches reading er dann tconvert anwenden soll? Weil ich das annehme, habe ich tconvert(B0) geschrieben, wobei B0 die Datums-/Uhrzeitangabe ist, wie sie vom Modul kommt, also z.B. "05.02.15 19:13:33"!

Kann mir hier jmd den entscheidenen Tipp geben?

Auf jeden Fall schonmal vieeeeelen Dank an Betateilchen! Wäre nie soweit gekommen alleine!
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

betateilchen

Zitat von: Michi240281 am 04 Februar 2015, 19:35:24
Das "tconvert" wandelt doch, so wie ich es verstehe nun den timestamp des Anrufs von "05.02.15 19:13:33" in einen Sekundenwert um, richtig?

richtig...

Zitat von: Michi240281 am 04 Februar 2015, 19:35:24
Muss ich dann nicht sagen, auf welches reading er dann tconvert anwenden soll?

auch richtig...

Dann mach das doch einfach auch, wenn Du es schon weißt!

tconvert(ReadingsVal('my_callmonitor','B0',''))

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michi240281

Funktioniert irgendwie nicht:

condition {(ReadingsVal('my_callmonitor','A0','') eq 'in_notconnected' && ((time_str2num(undef) - tconvert(ReadingsVal('my_callmonitor','B0',''))) <= secondsSinceMidnight()) }

Der Anruf von gestern wird dennoch angezeigt...........MAAAAAAAANNNNNNNNNNN!!!!

Klammern müssten richtig sein!
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Michi240281

ES GEEEEEEEEEEEEEEEEEEEEEHT!!!!!!!!!!!!!!!!!!!!!! :):):)

Es fehlte doch noch ne Klammer! Notepad++ hat mich drauf gebracht!

Hier der funktionierende Code, falls es noch jmd brauchen kann:

condition {(ReadingsVal('my_callmonitor','A0','') eq 'in_notconnected') && ((time_str2num(undef) - tconvert(ReadingsVal('my_callmonitor','B0',''))) <= secondsSinceMidnight())}

Jetzt muss ich nur noch der Schildkröte beibringen, wie sie laufen muss, damit da keine Leerzeilen entstehen! Aktuell gehts noch nicht:

#Verpasste Anrufe
pt 18
text 400 270 "Verpasste Anrufe"
line 900 240 900 440
line 370 240 370 440
# 1. Anruf Datum, Zeit, Anrufer, Nummer
condition {(ReadingsVal('my_callmonitor','A0','') eq 'in_notconnected') && ((time_str2num(undef) - tconvert(ReadingsVal('my_callmonitor','B0',''))) <= secondsSinceMidnight())}
moveto 400 300
# Datum
pt 12
text x y { substr((ReadingsVal('my_callmonitor','B0','')),10,22) }
# Zeit
moveby 110 0
text x y { substr((ReadingsVal('my_callmonitor','B0','')),0,5). '  Uhr' }
# Anrufer
moveby 120 0
text x y { ReadingsVal('my_callmonitor','C0','')}
# Nummer
moveby 150 0
text x y { ReadingsVal('my_callmonitor','D0','')}
condition 1

# 2. Anruf Datum, Zeit, Anrufer, Nummer
condition {(ReadingsVal('my_callmonitor','A1','') eq 'in_notconnected') && ((time_str2num(undef) - tconvert(ReadingsVal('my_callmonitor','B1',''))) <= secondsSinceMidnight())}
moveto 400 325
# Datum
pt 12
text x y { substr((ReadingsVal('my_callmonitor','B1','')),10,22) }
# Zeit
moveby 110 0
text x y { substr((ReadingsVal('my_callmonitor','B1','')),0,5). '  Uhr' }
# Anrufer
moveby 120 0
text x y { ReadingsVal('my_callmonitor','C1','')}
# Nummer
moveby 150 0
text x y { ReadingsVal('my_callmonitor','D1','')}
condition 1

# 3. Anruf Datum, Zeit, Anrufer, Nummer
condition {(ReadingsVal('my_callmonitor','A2','') eq 'in_notconnected') && ((time_str2num(undef) - tconvert(ReadingsVal('my_callmonitor','B2',''))) <= secondsSinceMidnight())}
moveto 400 350
# Datum
pt 12
text x y { substr((ReadingsVal('my_callmonitor','B2','')),10,22) }
# Zeit
moveby 110 0
text x y { substr((ReadingsVal('my_callmonitor','B2','')),0,5). '  Uhr' }
# Anrufer
moveby 120 0
text x y { ReadingsVal('my_callmonitor','C2','')}
# Nummer
moveby 150 0
text x y { ReadingsVal('my_callmonitor','D2','')}
condition 1
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

moonsorrox

Zitat von: Michi240281 am 04 Februar 2015, 21:18:48
Jetzt muss ich nur noch der Schildkröte beibringen, wie sie laufen muss, damit da keine Leerzeilen entstehen! Aktuell gehts noch nicht:
ich versuche mich da auch schon dran, weil das Problem dabei ist das die Variablen A0-A4 jeweils auch mit "incoming" oder "AB" befüllt sein könnten und dann rutscht mir immer ein Anruf nach rechts weg..! :-\

Mein Code für die verpassten Anrufe sieht bisher fast genauso aus bis auf die x,y Werte und ich habe schon mit "moveto" und "moveby" hin und her probiert.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM