Moin,
irgendwie stelle ich mich mit setReading etwas blöd an, oder verwende den falschen Befehl. Vielleicht kann mir wer weiterhelfen.
Ich habe ein DOIF, das eine Lampe steuert. Wenn das DOIF die Lampe anschaltet, soll im DOIF ein Reading "lastActivationType" auf "auto" gesetzt werden. Schaltet man die Lampe selbst ein oder aus, dann soll das Reading "manuell" enthalten. Das DOIF wertet das Reading aus, um selbst entsprechend anders zu reagieren, je nachdem, ob die Lampe eben manuell oder automatisch geschaltet wurde.
Ich setze den Wert des Reading innerhalb des DOIF mit
setReading $SELF lastActivationType manuell
Und bekomme im Log stets eine Fehlermeldung. Anführungszeichen um das "manuell" haben nichts geholfen, ich komme hier nicht weiter. Wie kann ich denn das Reading korrekt befüllen?
Danke
Michael
Zitat von: MichaelO am 26 Juli 2017, 08:59:44
Und bekomme im Log stets eine Fehlermeldung.
Hast du die Fehlermeldung denn verstanden?
Hier mal der Link zur commandref (https://fhem.de/commandref.html#setreading)
Zitat von: igami am 26 Juli 2017, 09:22:00
Hast du die Fehlermeldung denn verstanden?
Nein, sonst hätte ich das Problem ja selbst lösen oder meine Frage genauer eingrenzen können. Die commandref habe ich auch bereits angeschaut, ich komme jedoch mit der Beschreibung des setReading-Befehls dahingehend nicht zurecht, dass ich nicht erkennen kann, was bei mir falsch sein könnte.
Die Fehlermeldung im Logfile lautet
2017.07.26 08:48:40 2: di_WZ_DekobeleuchtungAutomatik: setReading di_WZ_DekobeleuchtungAutomatik lastActivationType auto: Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
where <devspec> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
<readingspec> can be a single reading name, a list separated by comma (,) or a regexp.
Da wird mir doch auch nur erklärt, wie denn der Befehl aufgebaut ist. Was genau ich nun falsch gemacht hab, steht da nicht. Oder hab ich was übersehen?
Gruß
Michael
Hallo Michael,
an dem setreading Befehl selbst ist nichts falsch, ich nehme an der Syntax innerhalb Deines DOIF stimmt nicht. Er macht doch offenbar etwas anderes als setreading
Führe doch den Befehl einfach mal in der Kommandozeile von FHEM aus.
Gruß Otto
setReading != setreading
Commandref hätte geholfen
Zitat von: CoolTux am 26 Juli 2017, 10:26:10
setReading != setreading
Commandref hätte geholfen
Aber != ist doch kein Textvergleich, dann kommt nur sowas wie PERL WARNING: Argument "setReading" isn't numeric in numeric :P
Wenn schon dann "setReading" ne "setreading"
Und FHEM cmds sind nicht case sensitive, kann man mit "DEFINE test dummy" testen, sonst müsste man ja auch immer wissen wie das Modul geschrieben wurde, Dummy, dummy oder DUMMY.
Die Fehlermeldung ist aber nicht wirklich aussagekräftig.
Poste mal bitte ein List von dem device NACHDEM der Fehler auftritt.
tatsächlich. man kann den Befehl auch Groß klein schreiben.
Ist jetzt nur geraten, aber wenn ich das
Zitat von: MichaelO am 26 Juli 2017, 09:27:04
Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
hiermit vergleiche
Zitat von: MichaelO am 26 Juli 2017, 08:59:44
setReading $SELF lastActivationType manuell
würde ich für denkbar halten, daß da einfach ein "=" fehlt.Edit: Falsch geraten, wie die commandref zeigt.
Zitat von: MichaelO am 26 Juli 2017, 09:27:04
Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
where <devspec> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
<readingspec> can be a single reading name, a list separated by comma (,) or a regexp.
fehlermeldung kommt denke ich hierher: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/Unit.pm#L4510
wie das mit DOIF bzw. dem Logeintrag zusammenhängt, kann ich leider nicht beantworten :-\
So, dank Eurer Hinweise hab ich den Befehl ersteinmal in die Kommandozeile getippt, und bekam dieselbe Fehlermeldung - auch, wenn ich statt "auto" dort eine Zahl eingebe. Mit einem "=" war es auch nix.
Aaaaber... es scheint tatsächlich die verdammte Schreibweise gewesen zu sein. Wenn ich setreading statt setReading schreibe, kommt keine Fehlermeldung und das Reading nimmt den gewünschten Wert an. Sowas doofes aber auch... kommt davon, wenn man zu viele unterschiedliche Systeme beackert - ich schreibe beim Programmieren bei Namen von Prozeduren/Variablen immer das erste Wort klein und dann jedes neue, zusammengesetzte groß.
Allerdings ist die Fehlermeldung (wenn es das wirklich war) nicht besonders toll...
Werde das jetzt mal korrigieren und sehen, was die Automatik macht, sobald das DOIF scharf geht.
Gruß
Michael
Hallo Michael,
kann nicht sein, ich weiß nicht was Du da auf welcher Kommandozeile eingetippt hast.
Ich habe einen dummy Test
Ob ich setReading Test lastActivationType auto
oder
setreading Test lastActivationType auto
eintippe ist völlig egal. Es funktioniert in beiden Fällen.
Wie er aus setreading -> setreadingdesc macht ist mir noch unklar :-[
Es kann sein, weil Du es im DOIF aufrufst, oder das es an $SELF liegt. Aber $SELF wird eigentlich korrekt aufgelöst wie die Fehlermeldung zeigt.
Gruß Otto
Das ist ja echt komisch, ich habe es gerade nochmal getestet...
Kommandozeile
setreading di_WZ_DekobeleuchtungAutomatik lastActivationType auto
Keine Fehlermeldung, das Reading wird korrekt gesetzt
Kommandozeile
setReading di_WZ_DekobeleuchtungAutomatik lastActivationType auto
Fehlermeldung wie gehabt
Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
where <devspec> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
<readingspec> can be a single reading name, a list separated by comma (,) or a regexp.
Das soll wer verstehen
hast Du eine besondere FHEM Version? Was sagt version?
Gruß Otto
Eigentlich mache ich recht regelmäßig Updates...
Latest Revision: 14773
Sehr komisch.
Ich habe gerade nochmal auch ein DOIF probiert, es ist völlig egal wie ich setreading schreibe, ob groß klein komplett groß - geht alles.
Was sagt denn list TYPE=cmdalias
Gruß Otto
poste doch auch mal ein list von deinem DOIF
Hier das ganze DOIF, mit setreading jetzt komplett kleingeschrieben:
Internals:
DEF ## Dekobeleuchtung an, wenn es dunkel ist, der Rolladen offen, eine Deko existiert
## die Deko noch aus ist jeweils morgens und abends:
( [?dy_WZ_Dekobeleuchtung] ne "keine" and
[?WZ_ZS_Fenster] eq "off" and
[RS_WZ_Rolladen:position] > 60 and
[AU_Sonnensensor:Helligkeit] < [dy_SchwellwertLichtZimmerVorne] and
( [?05:00-09:00] or [?15:30-22:30] )
)
(set WZ_ZS_Fenster on,
setreading $SELF lastActivationType auto)
DOELSEIF
## Dekobeleuchtung aus wenn Deko existiert und die Automatik sie auch eingeschaltet hat,
## der Rolladen zu geht und die Leistungsaufnahme des Entertainment unter 30 Watt ist,
## oder es hell wird
( [?dy_WZ_Dekobeleuchtung] ne "keine" and [?$SELF:lastActivationType] eq "auto" and
( ([RS_WZ_Rolladen:position] < 40 and [?WZ_ZS_Entertainment:power:d] < 30) or
([RS_WZ_Rolladen:position] > 39 and [AU_Sonnensensor:Helligkeit] > [dy_SchwellwertLichtZimmerVorne])
)
)
(set WZ_ZS_Fenster off,
setreading $SELF lastActivationType manual)
DOELSEIF
## Dekobeleuchtung an wenn Deko existiert, abends der Rolladen zu ist
## und die Leistungsaufnahme des Entertainment über 30 Watt ist.
## lastActivationType auf manual, weil ja jetzt wer im Raum ist
( [?dy_WZ_Dekobeleuchtung] ne "keine" and
[RS_WZ_Rolladen:position] < 10 and
[WZ_ZS_Entertainment:power:d] > 30
)
(set WZ_ZS_Fenster on,
setreading $SELF lastActivationType manual)
DOELSEIF
## Dekobeleuchtung nach 3 Minuten aus wenn sie an ist, abends der Rolladen zu ist
## und die Leistungsaufnahme des Entertainment unter 30 Watt fällt.
## lastActivationType auf manual, weil ja jetzt wer im Raum ist
( [?dy_WZ_Dekobeleuchtung] ne "keine" and
[RS_WZ_Rolladen:position] < 10 and
[?17:00-02:00] and
[WZ_ZS_Entertainment:power:d] < 30
)
(set WZ_ZS_Fenster off,
setreading $SELF lastActivationType manual)
NAME di_WZ_DekobeleuchtungAutomatik
NR 92
NTFY_ORDER 50-di_WZ_DekobeleuchtungAutomatik
STATE initialized
TYPE DOIF
READINGS:
2017-07-27 10:43:34 Device AU_Sonnensensor
2017-07-27 10:43:03 cmd 0
2017-07-27 10:43:34 e_AU_Sonnensensor_Helligkeit 3521
2017-07-27 08:52:44 lastActivationType manual
2017-07-27 10:43:03 state initialized
2017-07-27 10:43:03 timer_01_c01 28.07.2017 05:00:00
2017-07-27 10:43:03 timer_02_c01 28.07.2017 09:00:00
2017-07-27 10:43:03 timer_03_c01 27.07.2017 15:30:00
2017-07-27 10:43:03 timer_04_c01 27.07.2017 22:30:00
2017-07-27 10:43:04 timer_05_c04 27.07.2017 17:00:00
2017-07-27 10:43:04 timer_06_c04 28.07.2017 02:00:00
condition:
0 InternalDoIf($hash,'dy_WZ_Dekobeleuchtung','STATE') ne "keine" and InternalDoIf($hash,'WZ_ZS_Fenster','STATE') eq "off" and ReadingValDoIf($hash,'RS_WZ_Rolladen','position') > 60 and ReadingValDoIf($hash,'AU_Sonnensensor','Helligkeit') < InternalDoIf($hash,'dy_SchwellwertLichtZimmerVorne','STATE') and ( DOIF_time($hash,0,1,$wday,$hms) or DOIF_time($hash,2,3,$wday,$hms) )
1 InternalDoIf($hash,'dy_WZ_Dekobeleuchtung','STATE') ne "keine" and ReadingValDoIf($hash,'di_WZ_DekobeleuchtungAutomatik','lastActivationType') eq "auto" and ( (ReadingValDoIf($hash,'RS_WZ_Rolladen','position') < 40 and ReadingValDoIf($hash,'WZ_ZS_Entertainment','power','','d') < 30) or (ReadingValDoIf($hash,'RS_WZ_Rolladen','position') > 39 and ReadingValDoIf($hash,'AU_Sonnensensor','Helligkeit') > InternalDoIf($hash,'dy_SchwellwertLichtZimmerVorne','STATE')) )
2 InternalDoIf($hash,'dy_WZ_Dekobeleuchtung','STATE') ne "keine" and ReadingValDoIf($hash,'RS_WZ_Rolladen','position') < 10 and ReadingValDoIf($hash,'WZ_ZS_Entertainment','power','','d') > 30
3 InternalDoIf($hash,'dy_WZ_Dekobeleuchtung','STATE') ne "keine" and ReadingValDoIf($hash,'RS_WZ_Rolladen','position') < 10 and DOIF_time($hash,4,5,$wday,$hms) and ReadingValDoIf($hash,'WZ_ZS_Entertainment','power','','d') < 30
days:
devices:
0 RS_WZ_Rolladen AU_Sonnensensor dy_SchwellwertLichtZimmerVorne
1 RS_WZ_Rolladen AU_Sonnensensor dy_SchwellwertLichtZimmerVorne
2 RS_WZ_Rolladen WZ_ZS_Entertainment
3 RS_WZ_Rolladen WZ_ZS_Entertainment
all RS_WZ_Rolladen AU_Sonnensensor dy_SchwellwertLichtZimmerVorne WZ_ZS_Entertainment
do:
0:
0 set WZ_ZS_Fenster on, setreading di_WZ_DekobeleuchtungAutomatik lastActivationType auto
1:
0 set WZ_ZS_Fenster off, setreading di_WZ_DekobeleuchtungAutomatik lastActivationType manual
2:
0 set WZ_ZS_Fenster on, setreading di_WZ_DekobeleuchtungAutomatik lastActivationType manual
3:
0 set WZ_ZS_Fenster off, setreading di_WZ_DekobeleuchtungAutomatik lastActivationType manual
4:
helper:
event VAD: 0.07,VDD: 5.1,vis: 0.0131814,temperature: 22.7188,Helligkeit: 3521,Einstrahlung: 229.35636
globalinit 1
last_timer 6
sleeptimer -1
triggerDev AU_Sonnensensor
triggerEvents:
VAD: 0.07
VDD: 5.1
vis: 0.0131814
temperature: 22.7188
Helligkeit: 3521
Einstrahlung: 229.35636
triggerEventsState:
VAD: 0.07
VDD: 5.1
vis: 0.0131814
temperature: 22.7188
Helligkeit: 3521
Einstrahlung: 229.35636
internals:
0 dy_WZ_Dekobeleuchtung:STATE WZ_ZS_Fenster:STATE dy_SchwellwertLichtZimmerVorne:STATE
1 dy_WZ_Dekobeleuchtung:STATE dy_SchwellwertLichtZimmerVorne:STATE
2 dy_WZ_Dekobeleuchtung:STATE
3 dy_WZ_Dekobeleuchtung:STATE
all dy_WZ_Dekobeleuchtung:STATE WZ_ZS_Fenster:STATE dy_SchwellwertLichtZimmerVorne:STATE
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
itimer:
localtime:
0 1501210800
1 1501225200
2 1501162200
3 1501187400
4 1501167600
5 1501200000
readings:
0 RS_WZ_Rolladen:position AU_Sonnensensor:Helligkeit
1 RS_WZ_Rolladen:position AU_Sonnensensor:Helligkeit
2 RS_WZ_Rolladen:position WZ_ZS_Entertainment:power
3 RS_WZ_Rolladen:position WZ_ZS_Entertainment:power
all RS_WZ_Rolladen:position AU_Sonnensensor:Helligkeit WZ_ZS_Entertainment:power
readingsDesc:
Device:
lastActivationType 2
cmd:
lastActivationType 2
e_AU_Sonnensensor_Helligkeit:
lastActivationType 2
lastActivationType:
lastActivationType 2
state:
lastActivationType 2
timer_01_c01:
lastActivationType 2
timer_02_c01:
lastActivationType 2
timer_03_c01:
lastActivationType 2
timer_04_c01:
lastActivationType 2
timer_05_c01:
lastActivationType 2
timer_06_c04:
lastActivationType 2
timer_07_c04:
lastActivationType 2
realtime:
0 05:00:00
1 09:00:00
2 15:30:00
3 22:30:00
4 17:00:00
5 02:00:00
regexp:
0:
1:
2:
3:
all:
state:
STATE:
time:
0 05:00:00
1 09:00:00
2 15:30:00
3 22:30:00
4 17:00:00
5 02:00:00
timeCond:
0 0
1 0
2 0
3 0
4 3
5 3
timer:
0 0
1 0
2 0
3 0
4 0
5 0
trigger:
triggertime:
1501162200:
localtime 1501162200
hash:
1501167600:
localtime 1501167600
hash:
1501187400:
localtime 1501187400
hash:
1501200000:
localtime 1501200000
hash:
1501210800:
localtime 1501210800
hash:
1501225200:
localtime 1501225200
hash:
Attributes:
disable 0
room 9.1.1_Skript
userReadings lastActivationType
wait 10:10:5:180
Ist das das Problem: ???
ZitatuserReadings lastActivationType
Warum hast Du das gemacht? Das brauchst Du nicht. Reading setzen kannst Du ohne userReadings
Das userReadings hat eigentlich eine andere Funktion.
Gruß Otto
Zitat von: Otto123 am 27 Juli 2017, 14:12:18
Ist das das Problem: ???Warum hast Du das gemacht? Das brauchst Du nicht. Reading setzen kannst Du ohne userReadings
Das userReadings hat eigentlich eine andere Funktion.
Gruß Otto
Da hast Du recht, das muss noch aus älteren Versuchen drin gewesen sein. Ich habe gelöscht, das Verhalten ist aber gleich. Gebe ich in der Kommandozeile setReading ein, mault fhem rum, schreibe ich alles klein, läuft es.
Ich hab keine Ahnung, was da los ist, aber wenigstens konnte ich so rausfinden, wie ich die Fehlermeldung weg bekomme.
Erstmal danke allen!
Was bekommst Du für eine Fehler Meldung wenn Du in der Kommanozeile bloß folgendes eingibst:
setreading
setReading
SETREADING
Bei mir gibt es immer diese hier:
ZitatUsage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
setreading:
Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
setReading und SETREADING (wie gehabt):
Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
where <devspec> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
<readingspec> can be a single reading name, a list separated by comma (,) or a regexp.
geht das auch bei anderen Befehlen? Also alles klein: ordentlicher Hilfetext, ein Buchstabe groß ein ganz andere "Hilfetext"?
Ich weiß noch nicht genau was wir hier untersuchen :) aber offenbar schlägt bei Dir etwas zu wenn der Befehl nicht komplett klein geschrieben ist.
starte doch mal fhem mit der demo cfg.
nicht das irgendwas dazwischenhaut. :o
Ui, ich hoffe, da hab ich nix falsches eingetippt...
deletereading
Usage: deletereading <name> <reading>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
und dann deleteReading
Removed timer_07_c04 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed timer_03_c01 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed timer_05_c01 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed lastActivationType lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed e_AU_Sonnensensor_Helligkeit lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed timer_04_c01 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed cmd lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed state lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed timer_06_c04 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed Device lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed timer_02_c01 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Removed timer_01_c01 lastActivationType=2 from attribute di_WZ_DekobeleuchtungAutomatik readingsDesc
Komischerweise ist das alles was von dem Reading, das mir die Kopfzerbrechen bereitet. :o
Ich hab deleteReading danach wiederholt, da kommt nix mehr, keine Fehlermeldung, der Browser macht einen Refresh und das wars.
bei
deletereading
landest du hier:
https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl#L2167
bei
deleteReading
da:
https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/Unit.pm#L4582
bzw. https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/Unit.pm#L4404 am ende der sub kommt die ausgabe
eigentlich schon so ähnlich wie ich hier vermutet habe
Zitat von: nils_ am 26 Juli 2017, 14:59:39
fehlermeldung kommt denke ich hierher: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/Unit.pm#L4510
wie das mit DOIF bzw. dem Logeintrag zusammenhängt, kann ich leider nicht beantworten :-\
Zitat von: MichaelO am 27 Juli 2017, 14:53:16
Komischerweise ist das alles was von dem Reading, das mir die Kopfzerbrechen bereitet. :o
Ich hab deleteReading danach wiederholt, da kommt nix mehr, keine Fehlermeldung, der Browser macht einen Refresh und das wars.
das nix mehr kommt, könnte daran liegen weil er alles entfernt hat.
Das klingt nach "etwas" was auf groß geschrieben Reading anspringt - ich habe immer noch keine Vorstellung.
Wenn ich deleteReading eingebe kommt:
ZitatUsage: deletereading <name> <reading>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
Er hat sicher das gelöscht:
readingsDesc:
Device:
lastActivationType 2
cmd:
lastActivationType 2
e_AU_Sonnensensor_Helligkeit:
lastActivationType 2
lastActivationType:
lastActivationType 2
state:
lastActivationType 2
timer_01_c01:
lastActivationType 2
timer_02_c01:
lastActivationType 2
timer_03_c01:
lastActivationType 2
timer_04_c01:
lastActivationType 2
timer_05_c01:
lastActivationType 2
timer_06_c04:
lastActivationType 2
timer_07_c04:
lastActivationType 2
Gruß Otto
Also da bin ich raus... soll ich das hier mal woanders posten, damit wer draufschauen kann, der tiefere Einblicke hat? Ich weiß nur weder wo, noch wer...
Zitat von: MichaelO am 27 Juli 2017, 15:16:02
Also da bin ich raus... soll ich das hier mal woanders posten, damit wer draufhauen kann, der tiefere Einblicke hat? Ich weiß nur weder wo, noch wer...
gute frage....
da es bei dir im Zusammenhang mit DOIF war, wäre evtl. Damian der Ansprechpartner.
falls es nicht an DOIF liegt, müsstest du "weitersuchen". -> Unit.pm maintainer
und als letzte Instanz dann rudi :o :o
//edit:
nochmal ein bisschen gesucht
https://forum.fhem.de/index.php/topic,60285.msg521255.html
und speziell https://forum.fhem.de/index.php/topic,60285.msg521255.html#msg521255
steht was zu 'showUnits=1'.
habt ihr beide da evtl. einen unterschied??
ansonsten bin ich auch erstmal raus, das ist alles zu tiefgehend und da habe ich absolut die ganzen zusammenhänge noch nicht verstanden.