FHEM Forum

FHEM => Sonstiges => Thema gestartet von: accessburn am 11 Januar 2016, 23:26:42

Titel: Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 11 Januar 2016, 23:26:42
Huhu,

ich versuche mir einen kleinen Wecker zu basteln und hab irgendwas verbastelt :-(
Ich finde den Fehler einfach nicht, vielleicht sitz ich zu lange davor. Hat jemand eine Idee wieso nach dem ändern eines Dropdownfeldes der Wert nicht mehr in den Dummy geschrieben wird?

Grüße aus Ffm


# --- Wecker
define Wecker_Radio at *20:47:00 set SRadio PLAY http://streams.ffh.de/ffhchannels/mp3/hq80er.m3u;;set SRadio VOLUME 90%
set Wecker_Radio inactive

define Wecker_Std dummy
attr Wecker_Std room Wecker
attr Wecker_Std group Wecker
attr Wecker_Std setList state:01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23
attr Wecker_Std webCmd state
attr Wecker_Std alias Stunden
attr Wecker_Std webCmd state:06
define irgendwas_Std notify Wecker_Std { my $Uhr_Std =ReadingsVal("Wecker_Std","state","12") }

define Wecker_Min dummy
attr Wecker_Min room Wecker
attr Wecker_Min group Wecker
attr Wecker_Min setList state:00,05,10,15,20,25,30,35,40,45,50,55
attr Wecker_Min webCmd state
attr Wecker_Min alias Minuten
attr Wecker_Min webCmd state:00
define irgendwas_Min notify Wecker_Min { my $Uhr_Min =ReadingsVal("Wecker_Min","state","00") }

define test dummy
attr test room Wecker
attr test group Wecker
attr test setList state:An,Aus
attr test webCmd state
attr test alias An oder Aus
attr test webCmd state:Aus
attr test devStateIcon Aus:general_aus@red An:general_an@green
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: rudolfkoenig am 12 Januar 2016, 09:49:14
Welcher Wert int welcher dummy?
Mir faellt nur auf, dass die notifys "sinnlos" sind, sie Fragen ein Wert ab, ohne etwas zu setzen.
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 09:50:53
Eigentlich will ich eine Variable mit Minuten und eine mit Stunden speichern um daraus den AT-Befehl zu basteln. Aber ich weiß nicht was ich da falsch mache :(
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 09:52:00
define irgendwas_Std notify Wecker_Std { my $Uhr_Std =ReadingsVal("Wecker_Std","state","12") }

notify läuft nins Leere, hier kann nichts gesetzt werden, das = an ReadingsVal, fehlt ein Leerzeichen

oops Rudi war schneller

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 09:54:09
Zeiten im at werden über modifyTimeSpec geändert.
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 09:57:02
Hier mal ein Beispiel von mir, damit wird eine Zeit zum Einschalten der Kaffemaschine über setList vorgewählt:

define Kaffemaschine_an_du dummy
attr Kaffemaschine_an_du DbLogExclude .*
attr Kaffemaschine_an_du alias Kaffeemaschine Einschaltzeit Vorwahl
attr Kaffemaschine_an_du room Kueche
attr Kaffemaschine_an_du setList state:06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00
attr Kaffemaschine_an_du webCmd state
define Kaffee_an at *07:30 set Kaffeemaschine_Sw on
attr Kaffee_an DbLogExclude .*
attr Kaffee_an alias Kaffeemaschine an
attr Kaffee_an room Kueche
define Kaffemasch_nty notify Kaffemaschine_an_du set Kaffee_an modifyTimeSpec $EVENT
attr Kaffemasch_nty DbLogExclude .*
attr Kaffemasch_nty room Unsorted


VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 10:11:14
Das ist ja schon mal suuuuuuuuuuper toll  :P

Das hatte ich irgendwann schonmal so zum laufen gebracht. Was ich jedoch dann wollte ( und somit verbockte ) war die aufteilung von Stunden und minuten in zwei dummys um von 0-23 Stunden und 0-59 Minuten stufenlos zu schalten.

Hilfst du/ihr mir da auch auf die Sprünge?
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 10:36:34
Das wird nicht funktionieren da der timespec ein Ausdruck h:min ist und du das im at nicht getrennt setzen kannst mit modifyTimeSpec.
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 10:38:09
Ich komme halt aus der PHP-Szene, da würde ich das quasi mit
$string = $std . ":" . $Min . ":00";
setzen. Das ist also da nicht möglich. Sehr schade :-(
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 10:43:54
Auf Perl Ebene bestimmt aber ich hab jetzt keine Zeit das zusammen zu knippern. Im Prinzip 2 dummys mit setList einmal für die Stunden und einmal für die Minuten dann mittels regex bei dummy1 die Minuten abschneiden und beim 2. dummy die Stunden und zum schluss beide wieder mit den gewählten h:min zusammensetzen und ins at schreiben.
Obwohl das garantiert auch einfacher gehen wird, seh ich iMo aber nicht  8)

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 10:45:02
Trotzdem danke. Ich schaue mal was ich so zusammen klemptnern kann :-D
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 10:45:53
Oder sieh dir mal WeekdayTimer an, vlt. gehts damit.

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 10:49:06
Ich würde zwei Dummys machen. Einer Stunde einer Minute. Mit setList einfach alle entsprechenden Werte pro Dummy. Also Dummy1 0-12 Dummy2 0-59. Was für ein Aufwand :-)
Dann ein notify auf Dummy2, weil man ja die Minuten zu meist als letztes setzt. In dem notify liest Du denn beide Dummys aus und bastelst daraus Dein string zum setzen des at's


Fertig
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 10:50:44
Zitat von: CoolTux am 12 Januar 2016, 10:49:06
Ich würde zwei Dummys machen.

Würde ich auch, daher mein Eingangsscript ganz oben, in dem das so war, aber nicht funktionierte  :P
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 10:54:13
Hast Du nicht, daher hat es auch nicht funktioniert. Noch mal lesen bitte was ich geschrieben habe.
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 10:55:32
lol, wollte ich aber  ;D
Ich schau mal was sich machen lässt mit dem Wissensstand
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 11:06:28
Perlcode für das notify

my $wakeUpTime = Value("dummy1") . ":" . Value(dummy2);


Voraussetzung ist das die eingestellte Stunde oder Minute im state drin steht.

Sollte das bockmist sein möge sich bitte jemand melden. Ich bin da auch noch nicht so fit beim verketten.


Grüße
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 11:28:29
OOch jetzt warst du schneller, hab gerade mal zwei dummys gebastelt und eine sub welche die Verkettung macht, funktioniert.

sub:
sub
time_set
{
my $tmin = ReadingsVal("Zeit_du_min","state",00);
my $thr = ReadingsVal("Zeit_du_h","state",00);
my $tmin_hr = ($thr . ":" . $tmin);
fhem "set dummy_past $tmin_hr";
}


dummys:

define Zeit_du_h dummy
attr Zeit_du_h DbLogExclude .*
attr Zeit_du_h room Test
attr Zeit_du_h setList state:00,1,2,3,4,5,6,7,8,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
attr Zeit_du_h webCmd state
define Zeit_du_min dummy
attr Zeit_du_min DbLogExclude .*
attr Zeit_du_min room Test
attr Zeit_du_min setList state:5,10,15,20,25,30,35,40,45,50,55,00
attr Zeit_du_min webCmd state
define dummy_past dummy
attr dummy_past DbLogExclude .*
attr dummy_past room Test


Ergebnis steht dann in dummy_past  ;)

notify hab ich nicht gebaut, da ich nur den Grundansatz testen wollte

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 11:46:04
Du musst ihm natürlich gleich wieder das volle Programm geben   ;D
Nee ist schon ok, ich muß gestehen ich weiß nicht ganz ob mein Verketten der Value Ergebnisse so geht. Aber ich habe das aus dem Kopf gemacht. Wollte Code sparen.
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 11:51:02
Das interessiert mich jetzt aber echt mit dem Verketten, baue das gerade mal in meiner Testumgebung ein.      ;D
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 12:00:14
Code getestet. Geht wie Bombe, bin doch nicht ganz so vergesslich wie ich dachte


my $wakeUpTime = Value( "dummy1" ) . ':' . Value( "dummy2" );


Damit hast Du in $wakeUpTime den kompletten String den Du für das modify Deines at's brauchst.




Grüße
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 12:07:45
Hat er in dummy_past auch  :) :) ;)

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 12:21:16
Ihr seit ja krass  ;D
So schnell kann ich garnicht verinnerlichen was da abgeht :-)


Bevor ich aber den Faden verliere. Einen zusätzlichen Ein/Aus-Schalter hab ich vordefiniert. Basierend auf dem Kaffeemaschinen-Script von eben.
Will aber irgendwie nicht. Ich tendiere dazu das ich hier den selben Fehler mache wie eben schon.
Mögt ihr mal schauen?


define Wecker_an_aus dummy
attr Wecker_an_aus alias Wecker Ein-/Ausschalten
attr Wecker_an_aus devStateIcon Aus:general_aus@red An:general_an@green
attr Wecker_an_aus group Wecker
attr Wecker_an_aus room Wecker
attr Wecker_an_aus setList state:An,Aus
attr Wecker_an_aus webCmd state:Aus
define Wecker_an_aus_nty_an notify Wecker_an_aus {\
my $OG = Value("Wecker_an_aus")\
if ( $OG == "An" ) {fhem ("set Kaffee_an active")}\
if ( $OG == "Aus") {fhem ("set Kaffee_an inactive")}\
}
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 12:28:12
@Frank

Ja hat er auch, mir geht es bei meinem Code immer auch darum nichts doppelt zu haben und Code zu sparen. Deswegen mein Versuch. Also nichts gegen Deine Lösung, welche für einen Anfänger sicherlich verständlicher ist.

@accessburn
Nö mag ich nicht. Wir haben Dir Ansätze gegeben womit Du Deine Ursprungsanfrage lösen kannst.
Ausserdem sieht das aus wie direkt in der fhem.cfg editiert, da kann ich eh nicht helfen. Ich mache alles über das Frontend


Grüße
Leon
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 12:30:45
Na gut.
Dann teste ich halt weiter. Irgendwann krieg ich es schon hin.
Die Stunden und Minuten werde ich dann mal umbauen in euere Lösung und das mit dem zusätzlichen Schalter krieg ich auch hin irgendwie  8)
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 12:48:15
Stichwort numerische und String Vergleiche, Stichwort zwei: trigger vom notify, sooo und jetzt ein Perl Buch aufschlagen  ;)
https://wiki.selfhtml.org/wiki/Perl/Operatoren
@CoolTux
ZitatIch mache alles über das Frontend

Genau, dann würden solch gravierende Syntax Fehler auch nicht passieren

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 12:56:12

define Wecker_an_aus_nty_an notify Wecker_an_aus.* {
                                                  my $OG = Value("Wecker_an_aus");
                                                  fhem "set Kaffee_an active" if( $OG eq "An" );
                                                  fhem "set Kaffee_an inactive" if( $OG eq "Aus" );
                                   }



define Wecker_an_aus_nty_an notify Wecker_an_aus.* {
                              my $OG = Value("Wecker_an_aus");
                              if ( $OG eq "An" ) {
                                                  fhem "set Kaffee_an active";
                              } else {
                                                  fhem "set Kaffee_an inactive";
                              }
               }


Wenn es nicht geht, nicht meine Schuld   :)
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: Puschel74 am 12 Januar 2016, 12:59:47
ZitatWenn es nicht geht, nicht meine Schuld
So lässt sich das ganze aber nicht 1:1 übers Frontend eingeben  ;)
Aber zum bearbeiten dessen gibt es ja schon jede Menge Beiträge  8)
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 13:00:36
@CoolTux
OOch, jetzt hast du alles verraten und ihm das lesen erspart  ::)

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: CoolTux am 12 Januar 2016, 13:02:22
Ich hege Hoffnung das er sich über den Code informiert und daran reift. Also der Anfragende, nicht der Code    ;D
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 13:03:10
Zitatnicht der Code

;D ;D
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 13:12:31
Leicht off :p

Aber ein Bücherwurm bin ich nicht, ich (vorsicht neues Adjektiv) autodidakte!
Ich probiere, blättere nach und probiere erneut... Irgendwann klappt es:

define Kaffemaschine_an_du dummy
attr Kaffemaschine_an_du alias Kaffeemaschine Einschaltzeit Vorwahl
attr Kaffemaschine_an_du room Wecker
attr Kaffemaschine_an_du setList state:06:00,06:30,07:00,07:30,08:00,08:30,09:00,09:30,10:00
attr Kaffemaschine_an_du webCmd state
define Kaffee_an at *07:30 set Kaffeemaschine_Sw on
attr Kaffee_an alias Kaffeemaschine an
attr Kaffee_an room Wecker
define Kaffemasch_nty notify Kaffemaschine_an_du set Kaffee_an modifyTimeSpec $EVENT
attr Kaffemasch_nty room Wecker

define Wecker_an_aus dummy
attr Wecker_an_aus alias Wecker Ein-/Ausschalten
attr Wecker_an_aus devStateIcon on:general_aus@red off:general_an@green
attr Wecker_an_aus group Wecker
attr Wecker_an_aus room Wecker
attr Wecker_an_aus eventMap on:An off:Aus
attr Wecker_an_aus webCmd An:Aus
define Wecker_an_aus_nty_on notify Wecker_an_aus.on  { fhem ("set Kaffee_an active") }
define Wecker_an_aus_nty_of notify Wecker_an_aus.off { fhem ("set Kaffee_an inactive") }


Nur das mit dem trennen von Stunden und Minuten muss noch
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: franky08 am 12 Januar 2016, 13:15:01
Was macht meine Kaffeemaschine jetzt in deinem Code  :o

VG
Frank
Titel: Antw:Finde den Fehler nicht bei Weckerbastelei
Beitrag von: accessburn am 12 Januar 2016, 13:16:32
Leider nicht viel, Kaffee wäre was gutes jetzt.

Die testet bis ich fertig bin. Anschließend (wenn alles funktioniert) degradiere ich deine Kaffeemaschine wieder zum Wecker  :)