Hallo!
Offenbar bin ich zu doof für alles ...
Da ich auf das zigfache Splitten ein und desselben Readings in userReadings verzichten will, habe ich das Splitten in ein Notify ausgelagert. So sieht das aus:
Heizung:sHC2.* {
my $hash = $defs{'Heizung'};
my @sHC2 = split(' ', $EVENT);
if (@sHC2 == 17) {
readingsBeginUpdate($hash);
readingsBulkUpdateIfChanged($hash, 'user_vorlaufTempHK2', $sHC2[6], 1);
readingsBulkUpdateIfChanged($hash, 'user_heatSetTempHK2', $sHC2[8], 1);
readingsBulkUpdateIfChanged($hash, 'user_heatTempHK2', $sHC2[10], 1);
readingsEndUpdate($hash, 1);
}
}
Das Ändern der Readings funktioniert.
Leider erzeugt jetzt jedoch nur das Updaten von sHC2 ein Event, nicht aber das Updaten der einzelnen Readings innerhalb des Notify, obwohl ich das doch im Notify (readingsBulkUpdateIfChanged mit viertem Argument) und auch beim Device entsprechend gesetzt hab:
defmod Heizung THZ 172.16.30.17:2303
attr Heizung DbLogInclude user_.*
attr Heizung alias Wärmepumpe
attr Heizung devStateIcon opened:rc_GREEN disconnected:rc_RED
attr Heizung event-min-interval user_outsideTemp.*:450,user_outside_tempFiltered.*:450,user_heatSetTempHK1.*:450,user_flowTempHK1.*:450,user_heatTempHK1.*:450,user_heatSetTempHK2.*:450,user_heatTempHK.2*:450,user_dhwTemp.*:450,user_sHeatingRelPower.*:450,user_hcBoosterStage.*:900,user_heatingCircuitPump*:900,user_sComprRotLimit.*:450,user_sComprRotUnlimit.*:450,user_inputVentilatorPower*:900,user_outputVentilatorPower*:900,user_mainVentilatorPower*:900
attr Heizung event-on-change-reading user_.*,sGlobal.*,sHC.*,sDisplay.*
attr Heizung firmware 5.39
attr Heizung group Verbindungsstatus
attr Heizung icon sani_boiler_temp
attr Heizung interval_sDisplay 120
attr Heizung interval_sGlobal 120
attr Heizung interval_sHC1 120
attr Heizung interval_sHC2 120
attr Heizung interval_sHistory 43200
attr Heizung interval_sLast10errors 7200
attr Heizung nonblocking 1
attr Heizung room Gesamt
attr Heizung userReadings user_service:sDisplay.* {(split ' ',ReadingsVal($name,"sDisplay",0))[25]},\
user_filter:sDisplay.* {max((split ' ',ReadingsVal($name,"sDisplay",0))[11], (split ' ',ReadingsNum($name,"sDisplay",0))[19], (split ' ',ReadingsNum($name,"sDisplay",0))[21])}
Kann mir jemand sagen, wo ich da schon wieder auf dem Schlauch stehe?
Gruß Marco
Bin mir nicht ganz sicher, aber vermutlich kannst du mit dem notify keine Events für den Trigger, also das selbe Device, erzeugen damit keine Endlosschleife entsteht.
Hm ok, dann werd ich mal ein at ausprobieren. Entweder zum Splitten oder zum Triggern, mal schauen.
Danke jedenfalls!
Warum willst du von den userReadings weg?
Genau dafür ist das doch da...
sleep und setreading würde gehen, wenn du unbedingt ein notify dafür haben willst...
Gruß, Joachim
Das "Problem" ist, dass vier Readings in über 30 userReadings aufgeteilt werden und für jedes davon ein split gemacht und genau ein Wert gezogen wird. Das nervt mich, daher will ich das effizienter gestalten.
Es läuft aber ohnehin schon ein periodisches at für drei userReadings, die ich nur über einen get-Befehl erhalten kann, da kommt der Rest jetzt auch mit rein und damit funktioniert's auch.
Vielen Dank nochmal!
Ich würde das in MyUtils auslagern und die Sub über userReadings in der Heizung aufrufen.
In der Sub kannst du mit einen Split alle Devices mit Readings bedienen oder was auch immer du möchtest.
Auch eine gute Idee 👍