Ergebnis von Sunset mit Zeit vom Dummy vergleichen

Begonnen von MacDad, 28 Januar 2016, 19:38:44

Vorheriges Thema - Nächstes Thema

MacDad

Moin,

ich stehe gerade etwas auf´m Schlauch und komme irgendwie nicht weiter.

Zur Ausgangssituation:
Mit nachstehendem CODE
*00:10:00 {
my $Sonnenaufgang = sunrise();
my $Sonnenuntergang = sunset();
fhem("set Sonnenaufgang $Sonnenaufgang");
fhem("set Sonnenuntergang $Sonnenuntergang");
}

lasse ich mir die Zeiten für sunrise und sunset in jeweils ein Dummy schreiben, funktioniert auch ohne Probleme.

Jetzt habe ich einen weiteren Dummy_XY, wo ich über eine setList Uhrzeiten eintrage
state: 05:00,05:10,05:20 ... 08:00 ... usw.

Wie kann ich jetzt prüfen, ob die Zeit von sunrise (Dummy Sonnenaufgang) größer als die vorgegeben Zeit des Dummy_XY ist.
Beispiel:
sunrise liefert die Uhrzeit 07:32:22
Dummy_XY hat 08:00 Uhr hinterlegt.

Wenn Sonnenaufgang > Dummy_XY dann mach das sonst mach dieses.

Wenn ich diese Wenn-Formel in ein DOIF packe, bekomme ich folgende Meldung im Log.
PERL WARNING: Argument "07:32:22" isn't numeric in numeric gt (>) at (eval 83800) line 1.

Auch die Änderung von userReadings
state {substr((ReadingsVal( "dummy_XY", "state","")),0,5)}
auf 07:32 hat keine Lösung gebraucht.

Kann mir hier jemand helfen?

Danke., Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

betateilchen

Sowohl

{ "20:10:20" < "21:00:00" }

als auch

{ "20:10:20" lt "21:00:00" }

in der fhem-Kommandozeile liefern bei mir korrekt eine 1 zurück.

Ansonsten würde ich timestamps direkt vergleichen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MacDad

Moin betateilchen,

ja, wenn ich es so wie von Dir beschrieben in die Kommandozeile eintrage, bekomme ich auch ein Ergebnis.
Mein Problem sind die Dummys die nicht wollen.

Die Abfrage im DOIF sieht z.Z. so aus:
([?Sonnenaufgang] > [[dummy_XY]]) (set Lichtan)
DOELSE
(Set ...usw..)

Relevant ist hier nur die ERSTE Abfrage.

Auch wenn in Deiner Signatur DOIF freie Zone! steht, kannst Du mit weiter helfen?

Danke, Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

betateilchen

Zitat von: MacDad am 28 Januar 2016, 20:22:23
Auch wenn in Deiner Signatur DOIF freie Zone! steht, kannst Du mit weiter helfen?

Grundsätzlich könnte ich Dir schon helfen, die Aufgabe in perl und fhem zu lösen - aber leider nicht mit DOIF (ich hab DOIF nie kapiert). Dafür gibts hier im Forum andere Spezialisten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MacDad

Zitat von: betateilchen am 28 Januar 2016, 20:24:31
Grundsätzlich könnte ich Dir schon helfen ... aber leider nicht mit DOIF ...
OK, Danke betateilchen.

Da ich gerade dabei bin mich mit DOIF etwas mehr zu beschäftigen, würde ich eine entsprechende Lösung über DOIF natürlich bevorzugen :)

Dann versuche ich mal weiter mein Glück.

Schönen Abend, Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

Sunny

Moin Dirk,

Zitat von: MacDad am 28 Januar 2016, 20:22:23
...Abfrage im DOIF sieht z.Z. so aus:
([?Sonnenaufgang] > [[dummy_XY]]) (set Lichtan)
DOELSE
(Set ...usw..)

Schon mal:
(([Sonnenaufgang]) > ([?dummy_XY])) (set Lichtan)
DOELSE
(Set ...usw..)

getestet.
Ich vermute, das sich bei Dir hauptsächlich (täglich) der Sonnenaufgang ändert.  ;)
Durch das Fragezeichen hast Du dem DOIF "gesagt", das es nicht auf Sonnenaufgang triggern soll, sondern auf dummy_XY.

Vielleicht hilft es Dir für den Einstieg in DOIF.
Vermute aber, das das was Du möchtest eventuell einfacher funktioniert.
Bin aber auch noch eher Anfänger.

Viele Grüße
Sunny
FHEM 6.0 (RPi's 1b-4,CeleronM,Odroid C1+)
1-Wire (DS18B20,DS2406) |miniCUL|miniCUL868WLAN|HM|IT(-1500,LR-3500) |FB6591,FB7490,FB7580|DECT200|Powerline546E|520E|openwrt
Anfänger: Linux,FHEM+Perl

Ellert

#6
ZitatPERL WARNING: Argument "07:32:22" isn't numeric in numeric gt (>) at (eval 83800) line 1.

Wie schon fast täglich in irgend einer Antwort angemerkt: Es ist nur eine Warnung.

Wenn Du versuchst den Text zu verstehen, dann erfährst Du dass "07:32:22" keine Zahl ist (sondern eine Zeichenkette) und du sie in einem numerischen Vergleich benutzt.

Das könnte Dich dazu veranlassen, statt eines numerischen Vergleichsoperator einen Zeichenkettenvergleichsoperator zu verwenden, also gt statt >.

Du solltest Dir aber über die Wirkungsweise von gt im Klaren sein, denn {"99" gt "100"} ist 1.

Im DOIF müsste es dann so aussehen:
([?Sonnenaufgang] gt [dummy_XY])
aber was sollte hier triggern?

Ich würde es so versuchen:
([{(max([Sonnenaufgang],[dummy_XY]))}]) oder falls es eine Fehlermeldung gibt ([{(max("[Sonnenaufgang]","[dummy_XY]"))}])

{} ergänzt

MacDad

Moin,

nach einem FHEM freien Familientag, kann ich mich jetzt wieder meinem Hobby widmen  :) Danke für Eure Beiträge.

@Ellert
Mir ist schon bewusst, das es sich hier "nur" um eine Warnung handelt und der Vergleich nicht 100 prozentig ist  ;)
Daher ja auch meine Fragestellung bzgl. Verbesserung  :)

Da ich hier ja mit Indirekten Zeitangaben hantiere, konnte meine Variante aus #2 auch nicht Funktionieren.
[?Sonnenaufgang] geändert in [[Sonnenaufgang]] und schon kommt ein Ergebnis.

([[dum_Sonnenaufgang]] > [[dummy_XY]]) (set dum_Licht Licht an durch dummy_XY)
DOELSE
(set dum_Licht Licht an durch dum_Sonnenaufgang)


Diese Variante ...
Zitat von: Ellert am 29 Januar 2016, 13:46:26

Ich würde es so versuchen:
([{(max([Sonnenaufgang],[dummy_XY]))}]) oder falls es eine Fehlermeldung gibt ([{(max("[Sonnenaufgang]","[dummy_XY]"))}])
... kannte ich noch nicht, werde ich aber mal testen ... könnte genau das sein, was ich brauche  :)

@Sunny
Zitat von: Sunny am 29 Januar 2016, 12:46:28
... Vermute aber, das das was Du möchtest eventuell einfacher funktioniert.

Da könntest Du eventuell recht haben  ;D

Mein Ziel in Worte gefasst:
Wenn die Uhrzeit vom Sonnenaufgang (07:30) größer als die Uhrzeit vom  dummy_XY (06:30) ist
dann soll das Licht mit der Uhrzeit vom dummy_XY (06:30) angehen,
sonst mit der Uhrzeit vom Sonnenaufgang (07:30)

Alle Klarheiten beseitigt  :D

Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

MacDad

Moin Ellert,

Deine Max-Variante bekomme ich bei mir einfach nicht ans laufen.
Über die SUFU bekomme ich leider immer nur Treffer vom Max System, aber nicht von der Funktion Max in FHEM.

Kannst Du mir bitte mal einen Link posten, wo ich mehr Infos über Min/Max in FHEM nachlesen kann.

Vielen Dank, Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

betateilchen

Zitat von: MacDad am 31 Januar 2016, 13:15:21
Kannst Du mir bitte mal einen Link posten, wo ich mehr Infos über Min/Max in FHEM nachlesen kann.

commandref, what else? http://fhem.de/commandref.html#Utils
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MacDad

Danke betateilchen,

aber glaube mir, ich hätte diese Frage nicht gestellt, wenn ich im www etwas gefunden hätte, was mich weiter bringt.

Gib mal Google fhem commandref Funktion max ein und Du wirst dich wundern, was Du nicht findest.
Kein Hinweis auf die von dir verlinkte Seite.

Auch wenn ich jetzt die Hinweise aus der commandref lese,
Zitatmax(str1, str2, ...)
returns the highest value from a given list (sorted alphanumeric)
maxNum(num1, num2, ...)
returns the highest value from a given list (sorted numeric)
hilft es mir aktuell nicht weiter.
Ich bekomme den Max-Wert nicht ausgewiesen, mein Brett vorm Kopf ist glaube ich eine Eiche, ich könnte k....  >:(

Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

Ellert

ZitatIch bekomme den Max-Wert nicht ausgewiesen

Wie sieht Dein Code aus?

betateilchen

Zitat von: MacDad am 28 Januar 2016, 20:50:26
würde ich eine entsprechende Lösung über DOIF natürlich bevorzugen :)

Ich werde nie verstehen, warum sich Leute das Leben unnötig schwer machen. Mit DOIF sollte man (wenn es wirklich sein muss) meiner Meinung erst anfangen, wenn man sich die einfachsten Grundlagen von perl, beispielsweise den Unterschied von numerischen und alphanumerischen Werten und den zugehörigen Operatoren, angeeignet und verstanden hat.

Zitat von: MacDad am 31 Januar 2016, 14:04:03
Gib mal Google fhem commandref Funktion max ein

warum sollte ich einen solchen völlig sinnlosen Suchbegriff in google eingeben?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MacDad

@Ellert
Zitat von: Ellert am 31 Januar 2016, 14:24:25
Wie sieht Dein Code aus?
Ich hatte es mit den Varianten von Dir versucht. Da es so (bei mir) nicht funktionierte, habe ich versucht diese Anzupassen.
(Klamme Setzung, nur mit "Werten" ohne Dummy usw.) Leider ohne Erfolg.
Nach zahlreichen Änderungsversuchen lief mein LOG mit "Warnmeldungen" voll und ich habe alles wieder gelöscht.

@betateilchen
Zitat von: betateilchen am 31 Januar 2016, 14:40:03
Ich werde nie verstehen, warum sich Leute das Leben unnötig schwer machen ...
Ich programmiere viel mit/in Excel-VBA, auch alles learning by doing aber diese "max" Geschichte in FHEM bringt mich noch zur Verzweiflung.

Gruß Dirk
RPI 2 mit FHEM 5.8
FB 7390 OS 6.83 | Synology DS 214+ DSM
VU+: 1 x Solo4k & 2 Solo2 VTi 11.xx.xx
SONOS: BRIDGE | 8x PLAY:1 | 1x PLAY:5 | 1x SUB Vers. 8.1.1
HMLAN: HM-Sec-SC-2 |-Sec-RHS |-CC-RT-DN |-LC-Bl1PBU-FM |-LC-Sw1PBU-FM |-LC-Sw1-FM |-ES-PMSw1-Pl |-WDS10-TH-O |-PBI-4-F

Ellert

#14
Zitatsunrise liefert die Uhrzeit 07:32:22
Dummy_XY hat 08:00 Uhr hinterlegt.

Zitat{max("07:32:22","06:00")}
funktioniert das bei Dir nicht?

Habs gerade probiert, das funktioniert:
([({max([d2:hms1],[d2:hms2])})]) ()

[d2:hms1] = 08:00
[d2:hms2] = 07:32:22