Das Script ist von unserem User "Sakaschi", Danke dafür 👍️
Moin Leute ich will hier euch mein Script zur überwachung der IoBroker Adapter vorstellen.
Dieser Script besteht aus 2 Teile. Den Javascript Code, den ihr nicht verändern müsst und den Blockly-Teil, den ihr verändern dürft wie ihr wollt.
Den Javascript Code unbedingt so lassen wie er ist!
Alle Einstellungsmöglichkeiten biete ich euch in Datenpunkte an, die automatisch vom Script erstellt werden.
Eins Vorweg der ursprüngliche Code stammt von hier: https://www.smarthome-tricks.de/soft...oder-telegram/
Bis auf wenige Zeilen, haben die jedoch nichts mehr gemeinsam.
Javascript Code: Update1 Online 8. Dez. 2018 | 18:02 Uhr
var instanzjava = "javascript." + instance;
var version = '1.0.0'
const idInstanzvar = instanzjava + ".Adapterstörung." + "instanz";
const idAdaptervar = instanzjava + ".Adapterstörung." + "adapter";
const idIgnorevar = instanzjava + ".Adapterstörung." + "IgnorierteAdapter";
const idVersionvar = instanzjava + ".Adapterstörung." + "Version";
createState(idInstanzvar,'"leer"', function () {
});
createState(idAdaptervar,'"leer"', function () {
});
createState(idIgnorevar,'"dwd.0 alive","ical.0.alive"' , function () {
});
createState(idVersionvar,version, function () {
});
on({id: /^system.adapter..+.alive$/, change: 'ne', val: false},
function(dp) {
var id = dp.id.split('.');
id = 'system.adapter.' + id[2] + '.' + id[3];
var instance = getObject(id);
var ignoreList= "[" + getState(instanzjava + ".Adapterstörung." + "IgnorierteAdapter").val + "]";
if ( !ignoreList.includes(dp.common.name)) {
if(instance.common.enabled) {
// Adapter name mit instanz und "alive" im array speichern
var notiname = dp.common.name;
var notiarray = notiname.split(".");
// adaptername
var adaptername = notiarray.splice('alive', 1);
var adapternamestring = adaptername.toString();
// instanz
var instanzarray = notiarray.splice('alive', 2);
var instanzstring = instanzarray.toString();
var instanz = instanzstring.substr('alive', instanzstring.length-6);
// muss als string sein!
setState(instanzjava + ".Adapterstörung.adapter", adapternamestring);
setState(instanzjava + ".Adapterstörung.instanz", instanz);
}
}});
Den Code bitte so einfügen und schon mal das Javascript starten.
Blockly ImportCode:
<xml xmlns="http://www.w3.org/1999/xhtml">
<block type="on" id="DSh{Qp6jaDh+~.]Nyxf^" x="88" y="113">
<field name="OID">javascript.0.Adapterstörung.adapter</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION"></field>
<statement name="STATEMENT">
<block type="telegram" id=":LSPJW@vXQisTttA6)v%">
<field name="INSTANCE">.0</field>
<field name="LOG"></field>
<field name="SILENT">FALSE</field>
<field name="PARSEMODE">default</field>
<value name="MESSAGE">
<shadow type="text" id="DT[i^ei,|2%7Mpd%v~%-">
<field name="TEXT">============================</field>
</shadow>
</value>
<next>
<block type="timeouts_settimeout" id="Fz!Bsz2uR0?fm/zm|[+)">
<field name="NAME">timeout</field>
<field name="DELAY">50</field>
<field name="UNIT">ms</field>
<statement name="STATEMENT">
<block type="telegram" id="nM}cP*run+S=%,Qb+jbf">
<field name="INSTANCE">.0</field>
<field name="LOG"></field>
<field name="SILENT">FALSE</field>
<field name="PARSEMODE">default</field>
<value name="MESSAGE">
<shadow type="text" id="eLNekTST=}fn?=vyC5LW">
<field name="TEXT">text</field>
</shadow>
<block type="text_join" id="D8DU49CajZtG(?{;Yk0a">
<mutation items="5"></mutation>
<value name="ADD0">
<block type="text" id="GYqU(zeF@Hgj,*=d7L6P">
<field name="TEXT">Der Adapter </field>
</block>
</value>
<value name="ADD1">
<block type="get_value" id="v]5=sTj6H,z5+9e4DcIf">
<field name="ATTR">val</field>
<field name="OID">javascript.0.Adapterstörung.adapter</field>
</block>
</value>
<value name="ADD2">
<block type="text" id="hM9vnz@nkoseB-BHSVxc">
<field name="TEXT"> ist abgestürzt mit der Instanz </field>
</block>
</value>
<value name="ADD3">
<block type="get_value" id="#c6bo!v?+)wbO3@*,DYG">
<field name="ATTR">val</field>
<field name="OID">javascript.0.Adapterstörung.instanz</field>
</block>
</value>
<value name="ADD4">
<block type="text" id="%9CRAFc2rNIpPUKu?{^E">
<field name="TEXT">. Es wird versucht neu zu starten.</field>
</block>
</value>
</block>
</value>
</block>
</statement>
<next>
<block type="timeouts_settimeout" id="`9_LFcBCO1T9eZZPmoaC">
<field name="NAME">timeout2</field>
<field name="DELAY">100</field>
<field name="UNIT">ms</field>
<statement name="STATEMENT">
<block type="telegram" id="jmq`OC]WM^hxvAM`UdkX">
<field name="INSTANCE">.0</field>
<field name="LOG"></field>
<field name="SILENT">FALSE</field>
<field name="PARSEMODE">default</field>
<value name="MESSAGE">
<shadow type="text" id="eLNekTST=}fn?=vyC5LW">
<field name="TEXT">============================</field>
</shadow>
</value>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</xml>
Den Blockly Code könnt ihr so einfügen und schauen was der macht.
Wo bekommt man nun die Datenpunkte her?
Ganz einfach, die Datenpunkte liegen unter: javascript.instanz.Adapterstörung
instanz = die zahl wo ihr das script laufen lasst.
Bei mir somit: javascript.0.Adapterstörung.
Welche Datenpunkte gibt es?
Es gibt folgende Datenpunkte:
IgnorierteAdapter
Adapter
Instanz
Die Datenpunkte "Adapter" und "Instanz" zeigt euch bei welchen Adapter mit der Instanz wo er lief zuletzt abgestürzt ist.
Bei "IgnorierteAdapter" könnt ihr eintragen welche Adapter ignoriert werden sollen.
bitte Folgendes beachten.
bei "IgnorierteAdapter" müsst ihr Folgende Formation beibehalten. "adaptername.instanz.alive", "adaptername.instanz.alive","adaptername.instanz.alive"
Also wir wollen ical.0, nut.0, und rpi.1 ignorieren dann siehts so aus:
"ical.0.alive", "nut.0.alive","rpi.1.alive"
Beim erstellen der Datenpunkte sind 2 Adapter von Haus aus eingetragen damit ihr es nur noch ändern und ergänzen braucht!
Hier noch paar Bilder:
Falls der Script euch dennoch über ein Adapter benachrichtigt obwohl ihr den ausgenommen habt,
liegt es einfach daran das der Adapter sich nicht ganz an die spielregeln hält, dafür habe ich auch eine Lösung.
Beispiel DWD = Deutscher Wetter Dienst
Dieser Adapter triggert öfters das Script, wegen Cronjob.
DWD ist auf Instanz 0.
Mit dwd.0.alive nehmen wir den aus und der Triggert immer noch!!!
Zwischen dwd.0 und alive einfach ein leerzeichen und keinen punkt machen.
-> dwd.0 alive
sieht dann am ende so aus "rpi.1.alive","dwd.0 alive","nut.0.alive" usw.
Leider habe ich schon paar Adapter gefunden wo man ein Leerzeichen anstelle einen Punkt nehmen muss.
Ist leider so, müsst ihr einfach ausprobieren.
Grüße
Sakaschi