Closed schurgan closed 1 year ago
zu 1) Ich habe die Ausgabe jetzt auf Debug umgestellt, da gehört sie auch hin. Sprich sofern du in der Konfiguration nicht den Debug mode an hast, sollte diese Ausgabe nicht mehr auftauchen
2)
Mit Blockly habe ich mich noch nicht wirklich befasst. Schreibe dann doch eher schnell ein Python-Skript. Aber die Alert-Devices findest Du unter Utility. Wenn man Glück hat sollte man dann einfach gegen den nValue prüfen können.
Hier die Alarmlevel
Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
if delta.days <= 1:
level = 4
elif delta.days == 2:
level = 3
elif delta.days == 3:
level = 2
else:
level = 0
Ansonsten bleibt nur ein Prüfen gegen den Text. Hier der Text der gesetzt wird
if delta.days == 2:
smallerTxt = '{} ({})'.format(smallerTxt, "Übermorgen")
elif delta.days == 1:
smallerTxt = '{} ({}!)'.format(smallerTxt, "Morgen")
elif delta.days == 0:
smallerTxt = '{} ({}!!!)'.format(smallerTxt, "Heute")
else:
Für E-Mail, Telegram oder Signal gibt es auch andere Möglichkeiten.
Danke, zu 1. Jetzt ist die Meldung raus, danke, großartig
zu 2. Level Abfrage funktioniert nicht, ich habe mit allen möglichen Blockly Bausteinen versucht, geht nicht. Auf Text zu prüfen geht auch nicht, warum auch immer. Kann man vielleicht anstatt Typ Alert lieber Selector Switch machen mit einsprechenden Werten. So ein Gerät ist ja einfacher abzufragen. Wie machst du die Abfrage, oder schaust du einfach hin, ohne benachrichtigt zu werden?
Bei der Ansicht 'Zähler' beim jeweiligen Geräte Benachrichtigungen
auswählen. Und dann z. B. folgendes einstellen:
Für E-Mail muss vorher in den Einrichtung > Einstellungen > E-Mail hinterlegt werden. Dazu habe ich dann noch Signal laufen.
Das habe ich noch nicht getestet. Ich lasse mir auch vieles von Alexa sagen bzw. mich an etwas erinnern mit hilfe eines Skripts. Bei dieser Variante mit "Benachrichtigungen" geht es leider nicht.
Gibt es im Blockly ggf. auch die Möglichkeit "Einsatz" abzufragen?
Keine Ahnung, wie meinst du das mit dem Einsatz. Ich hab dort auf jeden Fall alles durchgetestet und konnte mit keinem "if" Baustein einen "do set =" auslösen lassen. Man kann ja bei Blokly nur mit einem "do set =" Baustein ein Skript starten.
Müsste es dann nicht in etwa so gehen - sprich als Wert einfach eine Zahl ohne "".
Nein, geht leider nicht.
Kommisch. Ich bekomme mit der o.g. Einstellung jetzt eine E-Mail, wenn die Bedingung erfüllt ist, sonst nicht. Der allgemeine Auslöser ist Einrichtungen > Einstellungen > Benachrichtigung nach unten scrollen und dort bei Sensoren das gewünschte Intervall einstellen. Sollte dann eher bei 1min oder so liegen.
Ansonsten würde ich vorschlagen, erstmal E-Mail-Benachrichtigung einstellen und wenn es dann passt ein weiteres Skript für Alexa. Du kannst gerne auch mal Dein Blocky teilen.
Ich kann auch noch gerne mal eine API Aufruf bereitstellen, um den BSR Alarm-Sensor hin und her zuschalten.
Warum machst du größer 2, soll es nicht bei grau gleich 0 sein? Vielleicht ist das ein Verständnisproblem von mir?
Jetzt geht es plötzlich, keine Ahnung woran das lag. Ich teste das ganze bis Mittwoch (an dem Tag wird Müll abgeholt), und lass mich dann jeden Tag benachrichtigen und gebe dir dann bescheid. Danke
Also 3 würde dann für übermorgen und 4 für morgen stehen?
Genau. Die 4 schließt aber "heute" noch mit ein. Damit ich morgens noch ne Chance habe :) Um 12.oo geht das Plugin dann auf den nächsten Termin.
Sehr schön, danke dir.
Also bis jetzt kein Erfolg bei der Abfrage. Im Protokoll, nach jedem Aktualisieren/Neustarten vom Plugin, habe ich folgendes entdeckt:
2021-04-27 14:02:13.741 BSR: (BSR) BLZ: Updated to: 28.04.2021 Wed: Hausmüll 2021-04-27 14:02:13.741 05.05.2021 Wed: Wertstoffe (Abholung durch ALBA) 2021-04-27 14:02:13.741 value: 4
Obwohl value: 4 dort zu sehen ist, reagiert mein Blokly Skript darauf nicht. Komisch finde ich dass der Wert ohne Angabe zur Zugehörigkeit zu einem Plugin oder sonst was da ist, also Datum Zeit und halt der Wert. Vielleicht ist das das Problem? Außerdem würde value: 4 auch nicht zu "Übermorgen" passen, oder?
Schade.
Um die Zeile 370 in Plugin.py findest Du
Domoticz.Log("BLZ: Updated to: {} value: {}".format(alarmData, alarmLevel))
Ich vermute, dass alarmData eine Zeilenumbruch oder so enthält und es deswegen so komisch im Log aussieht.
Kannst Du in Deinem Blocky-Skript noch ein Debug:Write to Log einbauen. Sollte dann als Status im Log auftauche. Bei mir wird das Blocky übrigns durch ein Update des Devices getriggert, und nicht wie ich erst annahme via Einstellungen. Sprich einfach Hardware /Plugin Aktualisieren und dann wird das Blocky angestoßen.
Bei mir funktioniert übrings nur das einfach If
(nicht das mit dem Zahnrad) zuverläßig. Siehe unten
Geht nicht, keine Ahnung was ich noch machen kann. Warum machst du > 4. Soll es nicht = 4 heißen? Bei >4 kommt die Meldung, zumindest heute, also Müllabfuhr ist morgen. Gerade getestet, bei >5 kommt die auch. Sehr komisch
Wo genau mache ich >4?
In meinen Test-Skript war es > 2. War oben aber abgeschnitten. Ansonsten nutze ich >=
3
btw: via http:/<host:8080>/json.htm?type=devices&rid=<index>
werden die Details angezeigt. Sprich wenn morgen der Müll abgeholt wird, sollte dort bei Level 4 stehen.
Ich habe mir einen neuen Eintrag angelegt, der auch morgen abgeholt wird. An dem hängen keine weiteren Benachrichtigungen. Bei Aktualisierung via Hardware-Menü erscheinen folgende Einträge im Log - EventSystem: Event triggered: test blocky_1
2021-04-27 19:26:08.268 (Müll) BLZ: Updated to: 28.04.2021 Wed: Hausmüll
2021-04-27 19:26:08.268 value: 4
2021-04-27 19:26:08.268 (Müll) next poll: 2021-04-27 20:26:06.915161
2021-04-27 19:26:08.268 (Müll) ----------------------------------------------------
2021-04-27 19:26:08.255 Status: Achtung wert uberschritten
2021-04-27 19:26:10.823 Status: Notification sent (Email)
Zu dem habe ich testweise bei mir im Plugin.py die Beschränkung auf 6 Stunden rausgenommen, um jetzte alle Stunden ein Update auszuführen. Wobei ich mir nicht sicher bin, ob ich jedes mal ein Update mache, wenn der Wert sich nicht ändert?!
Test Skript bei mir:
Naja, vielleicht >2 oder >3. Mir geht es um das Zeichen und nicht um die Zahl. Mache doch = Zeichen und du wirst sehen, es kommt keine Meldung
Der Alarmlevel steigt mit Abnahme der Tage bis zur Leerung. Ich will ab Level 3, Sprich zwei Tage davor aka 'Wenn Leerung Übermorgen' informiert werden. Damit habe ich dann auch die 4 sprich "Leerung Morgen" und "Leerung heute" mit abgedeckt.
Wenn meine Versuchsreihe durch ist, stelle ich es auch gerne mal auf = 4
um und Prüfe ob was passiert.
Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
if delta.days <= 1:
level = 4
elif delta.days == 2:
level = 3
elif delta.days == 3:
level = 2
else:
level = 0
Ok, mache bitte testweise größer 5 (darf ja keine Meldung kommen) und schau was passiert, die Meldung kommt bestimmt wieder.
Zwischenergebnis:
> 3
kommt die Meldung im Log und die E-Mail= 4
passiert nichts. Obwohl das Level ja vier ist.>= 4
kommt Meldung> 5
kommt MeldungAlso ich glaube mit Blocky kommt man derzeit nicht weit. Alles was ich gefunden hatte, macht dann den Umweg über benutzerdefinierte Variablen. Ist aber auch nicht schön.
Alternative wäre unter Einrichtung > Einstellungen > Benachrichtigung eine Benutzerdefinierte Aktion anzulegen.
Da kannst du auch dein Alexa-Skript hinterlegen
script:///home/domoticz/domoticz/plugins/domoticz-Alexa.sh -d Wohnzimmer -e speak:"#MESSAGE"
Und dann bei dem Gerät die Benachrichtigung allgemein einschalten, http aktivieren und den gewünschten Text eingeben. Es gibt auch einige Parameter wie $name
und glaube $value
die dann in der Message einbetten kannst z. B. Bitte daran denken $name
. Ergebniss sollte dann "Bitte daran denken: Hausmüll (Morgen)" sein.
Danke, ich teste das heute abend
Ich habe jetzt eine neue Version bereitgestellt. Mit Blocky bin ich nicht weiter gekommen. Als alternative für die allgemeine Benachrichtigung unten noch dzEvent-Script. In Zeile 17 IDX
mit dem echten Index ersetzen.
Ich würde den Issue sonst schließen.
return {
on = {
timer =
{
'at 09:34',
'at 19:00',
},
},
logging =
{
level = domoticz.LOG_DEBUG, -- set to domoticz.LOG_ERROR when OK
marker = 'BSR',
},
execute = function(dz)
local bsr = dz.devices(IDX) --- replace with index of bsr device
local nValue = bsr.nValue
--dz.log(bsr.name .. ' measures a alarm level ' .. nValue .. ' ',dz.LOG_ERROR)
if nValue >= 3 then
dz.notify('BSR', 'Muell wird faellig',dz.PRIORITY_NORMAL)
--dz.email('BSR' .. bsr.name, 'Muell ...' .. bsr.name, 'you@fooo.bar')
else
dz.log('BSR: noch Zeit (' .. nValue .. ') ',dz.LOG_DEBUG)
end
end
}
Hallo, vielen Dank für deine Arbeit. Ich bin immer noch nicht zum Testen gekommen, hab zurzeit viel um die Ohren. Werde aber irgend wann das vornehmen. Danke noch Mal...
Anbei noch eine Alternative die direkt mit dem Status Orange,Red arbeitet und nicht mit 1,..5. XXX muss mit dem echten device index ergänzt werden.
Ansonsten würde ich das Alexa Skript bei Domoticz unter Einstellung > Benachrichtigung > Benutzerdefiniertes HTTP/Aktion hinterlegen. Dann kann jede Benachrichtigung / Überwachung davon profitieren.
`return { on = { timer = {'at 21:57'}, }, data = {}, logging = {}, execute = function(domoticz, item) if item.isTimer then domoticz.log('BLZ: Muell checking ', domoticz.LOG_INFO) dv=domoticz.devices(XXX) if dv.nValue == domoticz.ALERTLEVEL_ORANGE then domoticz.notify('Muell', 'An den Muell denken' .. dv.text, domoticz.PRIORITY_EMERGENCY) elseif dv.nValue == domoticz.ALERTLEVEL_RED then domoticz.notify('Muell', 'Dringend an den Muell denken' .. dv.text, domoticz.PRIORITY_EMERGENCY) else domoticz.log('BLZ: Muell is nt red ' .. dv.nValue, domoticz.LOG_INFO) end end
end
} `
Domoticz Version: 2021.1 Python Version: 3.7.3
Hallo, ich hoffe es ist ok wenn ich hier auf deutsch schreibe. Ich habe ein kleines Problem.