05 december 2021, 04:38:28

Toon bijdragen

Deze sectie stelt je in staat om alle bijdragen van dit lid te bekijken. Je kunt alleen de bijdragen zien waar je op dit moment toegang toe hebt.

Berichten - Joost

31
Software om Domoticz 4.11804 (beta) op een Linux-machine te installeren.


Domoticz 4.11804 (Linux) - 21-03-2020
32
Citaat van: Kubra op 13 maart 2020, 13:16:46
Om nu op de rit te komen, zou ik graag vernemen of de gegeven uitleg i.d.d. niet helemaal strookt met de actuele situatie en hoe de inrichting m.b.t. de virtuele devices precies moet zijn. Alvast bedankt.

Er zijn in de loop van de tijd een aantal wijzigingen in het nieuwe script doorgevoerd, waardoor de verwijzing van de regelnummers in de 1e post niet meer overeen kwamen met het script. Dit is nu aangepast.

In het oude script werkt inderdaad gebruik gemaakt van IDX's en in het nieuwe script wordt gebruik gemaakt van de namen van de devices: de naam van een device in het script moet dus exact overeen komen met de naam een device in Domoticz (hoofdletter-gevoelig!).

Het script (en de uitleg) zijn verder actueel en alles werkt perfect!
33
Zet Authentication eens op Basic-Auth en probeer het eens opnieuw...
34
Wat heb je bij Website Protection ingevuld onder Authentication?
Overigens moet Controlicz bij rechten User krijgen i.p.v. Viewer.
35
Citaat van: Dmbo71 op 02 maart 2020, 19:41:01
Zo heb ik ook sensoren die een dauwpunt aangeven...
Maar waarbij in de output geen dauwpunt staat..
Is dit mss mogelijk met een berekening?

Het klopt dat je geen dauwpunttemperatuur ziet, aangezien deze direct afhankelijk is van de luchtvochtigheid (en laat je die laatste er juist uit filteren).

Onderstaand de formule mocht je zelf een script gaan schrijven:

Td = 243.12 * A / (17.62 - A), waarbij A = Log(RH / 100) / Log(2.718282) + (17.62 * Ta / (243.12 + Ta))

- Ta = omgevingtemperatuur in °C
- Td = dauwpunttemperatuur in °C
- RH = relatieve vochtigheid in %
36
LUA / Re: Maak van je Raspberry Pi een weerstation
28 februari 2020, 18:19:01
Citaat van: bobha43 op 27 februari 2020, 18:24:57
Ik heb het (frustrerend) gevoel heel dicht bij een werkend systeem te zijn maar weet absoluut niet hoe ik verder moet. Jammer want het lijkt mij een heel mooi systeem.


Ik zie dat je onderstaande settings gebruikt. Zijn deze juist? Staan de meteo-alarm-weather-warnings bestanden werkelijk op een ander device dan waar het script op draait? Anders zou het webservice_ip = "192.168.2.171.41" moeten zijn (het moet in ieder geval niet het IP van de router zijn).




local domo_ip          = "192.168.171.41:8080"               -- IP adres van Domoticz, inclusief poort  RPi4
local webserver_ip      = "192.168.178.1"                    -- IP adres van webserver      ROUTER



Wat krijg je te zien als je http://192.168.171.41:8080/json.htm?type=settings in de browser opent?
37
LUA / Re: Maak van je Raspberry Pi een weerstation
27 februari 2020, 06:27:50
Citaat van: bobha43 op 26 februari 2020, 19:48:43
Als het niet aan het script ligt, waar moet ik verder kijken?

Ik vermoed dat je geen GPS-coördinaten hebt ingevuld in Domoticz bij Setup > Settings > Location.
38
LUA / Re: Maak van je Raspberry Pi een weerstation
26 februari 2020, 17:40:14
Citaat van: bobha43 op 26 februari 2020, 08:45:24
De Domoticz log geeft "Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_weerstation.lua: /home/pi/domoticz/scripts/lua/script_time_weerstation.lua:132: attempt to index local 'jsonData' (a nil value)" aan.

Ieder 5 minuten staat er ook "Error: EventSystem: Warning!, lua script /home/pi/domoticz/scripts/lua/script_time_weerstation.lua has been running for more than 10 seconds". Heeft dit met SBFspot te maken?

Doe ik iets duidelijk verkeerd? Waar moet ik verder kijken?

Jouw error verwijst naar regel 132 in het script. Het lijkt erop dat je het script niet 1 op 1 overgenomen hebt en dat regelnummers verschoven zijn. De foutmelding heeft nl. niets te maken met "local config=assert(io.popen('curl "http://'..domo_ip..'/json.htm?type=settings"'))".

De 2e melding (....more than 10 seconds) is slechts een melding i.p.v. een error. Het gaat alleen aan dat het script meer dan 10 seconden loopt. Ik verwacht dat deze melding verdwijnt, zodra de (1e) error opgelost is.

Zorg ervoor dat je altijd een script exact overneemt en dat de regels niet verschuiven, anders is het een speld zoeken in een hooiberg. Zodra het eenmaal werkt dan kun je dingen aan gaan passen.
39
LUA / Re: Maak van je Raspberry Pi een weerstation
26 februari 2020, 17:33:35
Citaat van: GerritH op 23 februari 2020, 20:23:04
1) In de map /var/www/html/meteo-alarm-weather-warnings-1.1/src heb ik staan de bestanden "Warning.php", "Warnings.php" en "warnings.php". Is dat juist?

Ja, dat is juist!

Citaat van: GerritH op 23 februari 2020, 20:23:04
2) Bij het Lua-script kan ik nog een Trigger instellen, met keuze All/Device/Security/Time/User variable. Welke te kiezen?

Dit script is time-based.

Citaat van: GerritH op 23 februari 2020, 20:23:04
3) ik krijg sinds vanmiddag de foutmelding: 2020-02-23 22:20:04.718 Error: EventSystem: in Weerstation: [string "--[[..."]:144: attempt to index field 'currently' (a nil value)
In de code is dit net na regel 143: if jsonData ~= nil then  -- dit gebeurt soms rond middernacht.
Weet iemand wat hier fout gaat?

Dan is de data bij DarkSky/Buienradar (even) niet beschikbaar/bereikbaar.
40
LUA / Re: Maak van je Raspberry Pi een weerstation
22 februari 2020, 18:06:13
@bobha43, je gebruikt nog oude scripts (en waarschijnlijk een de oude devices). Alle oude scripts kun je verwijderen. Hier staat de nieuwe versie van het weer-script: https://domoticaboard.nl/index.php?topic=42.msg44#msg44
41
Heb je alleen bij visibility soms deze foutmelding? Zo ja, dan kun je onderstaande regel:

if jsonData ~= nil then  -- dit gebeurt soms rond

wijzigen in:

if jsonData.jsonData.currently.visibility ~= nil then

Door deze wijziging, mits je visibility van DarkSky haalt, loopt een deel van het script alleen als visibility een waarde heeft.


Jouw bedachte functie zou je ook kunnen proberen. Ik krijg nooit foutmeldingen, dus kan 'm niet eenvoudig voor je testen.
42
Onderstaand dzVents-script geeft je een waarschuwing als er iets fout is met de (Domoticz) sqlite database. Je ontvangt een push-notificatie en/of een email.


--[[ -- DB check
       
        Will give you a warning when something is wrong with the (domoticz) sqlite database
        requires sqlite3
            install command on linux:    sudo apt install sqlite3
            install command on openwrt:  opkg install sqlite3-cli
            install command on synology: sudo /opt/bin/opkg install sqlite3-cli
           
            History:
            20190125: first public release 
            20190228: Include official sqlite3 error messages on failure
            20190808: Include optional trigger of follow up OS command
            20191005: add Telegram as notification option
            20191005: Include optional set of an Alert device with result of check         
            20191019: Include RC message in alert device
            20200108; Fixed bug(ss) in aftersucces / afterSuccess (case matters and double s also ! )

]]--
return {
            on =    { 
                        timer   =   {
                                        "at 20:07",             -- change to a time that suits you
                                        "at 10:07",
                                    },           
                    },
   
        logging =   { 
                        level     =   domoticz.LOG_DEBUG,       -- change to LOG_ERROR after you tested  the script
                        marker    =   "DB check"
                    },

    execute = function(dz)
        -- =======================  Settings below this line =================
        local email               = true                        -- set to false if you don't want an Email when something wrong with database
        local notify              = true                        -- set to false if you don't want a notification when something wrong with database
        local afterSuccessCommand = '/bashdir/copyDB.sh'        -- set to full qualified path of your followUp script or false if you don't need a followUp after success
        local afterFailCommand    = false                       -- set to full qualified path of your followUp script or false if you don't need a followUp after fail
     
        local followUpAfterFail   = false                       -- set to false if you don't need a followUpAfterFail
       
        local alert = {
                        active   = false,                             -- set to false if you don't want an Alert device set.
                        device   = "dbCheck result",                 -- Name of your alert device (only needed when you set active = true )
                        failText = "Problem in database",
                        OKText   = "Database OK",   
                      }
                     
        local subject             = "Domoticz database check"   -- Free text
        local emailaddress        = "yourName@gmail.com"        -- Your Email address
        local path                = "/home/pi/domoticz/"            -- full qualified path to your database
        local database            = "domoticz.db"               -- database filename + extension
        -- local database         = "corrupt.db"                -- test database filename + extension
                                                                    -- you can corrupt a test database by just load it in an editor
                                                                    -- and remove a couple of bytes
        local sqlite              = "/usr/bin/sqlite3"          -- location of your sqlite3 tool (use the command 'which sqlite3' to find location)
 
        local myNotificationTable     =     {
                                             -- table with one or more notification systems.
                                             -- uncomment the notification systems that you want to be used
                                             -- Can be one or more of
                                             
                                             dz.NSS_GOOGLE_CLOUD_MESSAGING,
                                             -- dz.NSS_HTTP,
                                             -- dz.NSS_KODI,
                                             -- dz.NSS_LOGITECH_MEDIASERVER,
                                             -- dz.NSS_NMA,
                                             -- dz.NSS_PROWL,
                                             -- dz.NSS_PUSHALOT,
                                             -- dz.NSS_PUSHBULLET,
                                             dz.NSS_PUSHOVER,
                                             -- dz.NSS_PUSHSAFER,
                                             dz.NSS_TELEGRAM,
                                            }
        -- =======================  No modification needed below this line ==================

         local function logWrite(str,level)             -- Support function for shorthand debug log statements
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
   
        local space                   = " "
        local baseCommand             = "sudo" .. space .. sqlite .. space .. path .. database .. space
        local checks                  = {}
              checks                  = {
                                                  "\'select count(id) from deviceStatus;\'",
                                                   "\'.schema\'",
                                                  "\'pragma integrity_check;\'",
                                                  "\'pragma foreign_key_check;\'",
                                        }

        local function rc2Text(rc)
            local errorMessages =   {
                                          [0] = "Database OK",
                                          [1] = "Generic error",
                                          [2] = "Internal logic error in SQLite",
                                          [3] = "Access permission denied",
                                          [4] = "Callback routine requested an abort",
                                          [5] = "The database file is locked",
                                          [6] = "A table in the database is locked",
                                          [7] = "Memory allocation failed",
                                          [8] = "Attempt to write a readonly database",
                                          [9] = "Operation terminated by sqlite3_interrupt",
                                         [10] = "Some kind of disk I/O error occurred",
                                         [11] = "The database disk image is malformed",
                                         [12] = "Unknown opcode in sqlite3_file_control",
                                         [13] = "Insertion failed because database is full",
                                         [14] = "Unable to open the database file",
                                         [15] = "Database lock protocol error",
                                         [16] = "Internal use only",
                                         [17] = "The database schema changed",
                                         [18] = "String or BLOB exceeds size limit",
                                         [19] = "Abort due to constraint violation",
                                         [20] = "Data type mismatch",
                                         [21] = "Library used incorrectly",
                                         [22] = "Uses OS features not supported on host",
                                         [23] = "Authorization denied",
                                         [24] = "Not used",
                                         [25] = "2nd parameter to sqlite3_bind out of range",
                                         [26] = "File opened that is not a database file",
                                     }
            return(errorMessages[rc] or "Unknown error")
        end

        local function followUp(cmd)
            os.execute('sudo ' .. cmd ..' &')
        end

        local function osExecute(base,check)
            local fileHandle     = assert(io.popen(base .. check, 'r'))
            local commandOutput  = assert(fileHandle:read('*a'))
            local returnTable    = {fileHandle:close()}
            check = check:gsub("'","") .." result ==>> " ..  ( returnTable[3] ~= 0 and "Failed: " .. rc2Text(returnTable[3]) .. commandOutput .. " (".. returnTable[3] .. ")" or true and "OK" )
            logWrite("Command " .. check )
            return check,returnTable[3]            -- rc[3] contains returnCode
        end

        local function checkDatabase()
            if dz.utils.fileExists(path .. database) then
                if dz.utils.fileExists(sqlite) then
                    for _,check in ipairs (checks) do
                        local result,rc = osExecute(baseCommand,check)
                        if rc ~= 0 then
                            return rc, result 
                        end
                    end
                else
                    return -1,"sqlite3 not installed"
                end
            else
                return -1,"Wrong path to database"
            end
            return 0
        end

        local function updateAlert(rc)
            if alert and alert.active then
                local now = dz.time.rawDate .. ', ' .. dz.time.rawTime .. ': '
                local alertLevel = dz.ALERTLEVEL_RED
                if rc == 0 then  alertLevel = dz.ALERTLEVEL_GREEN end
                dz.devices(alert.device).updateAlertSensor(alertLevel, now .. rc2Text(rc))
            end
        end

        -- main program
        local rc, result = checkDatabase()
        if rc ~= 0 then
            logWrite(result,dz.LOG_ERROR)
            if email then dz.email(subject,result,emailaddress) end
            if notify then
                dz.notify(subject, result or "Dbase check encountered unknown error", dz.PRIORITY_NORMAL, dz.SOUND_INTERMISSION,"",  myNotificationTable )
            end
            if afterFailCommand and ( rc > 0 ) then followUp(afterFailCommand) end
        else
            if afterSuccessCommand then followUp(afterSuccessCommand) end
        end
        updateAlert(rc)
    end
}


Auteur: leecollings
43
Citaat van: Nvbgm op 12 januari 2020, 08:53:14
Aha en die zie ik dus niet in mijn JSON   rara

Even openen in Firefox (of een plugin/add-on installeren voor de browser die je gebruikt).
44
Citaat van: Nvbgm op 10 januari 2020, 18:14:31
Heb inmiddels de verschillen en foutjes zoals hierboven aangegeven gevonden en opgelost.
Het blijkt dat de waarden die Darksky presenteerde toch iets anders zijn dan die van buienradar.
Zo word de plaatselijke Temp uit de data ven Darksky gehaald en niet uit de stadiongegevens van buienradar.

Dat is geen foutje, maar een bewuste keuze  ;). Ik vind sommige waarden van DarkSky beter dan die van Buitenradar.

Citaat van: Nvbgm op 11 januari 2020, 11:56:03
@Joost

Ik ben er nog steeds niet achter hoe jij in het script bepaald welk station je moet halen uit de json van buienradar.
Je geeft als variabele 'Weerstation' = xx op maar dat is niet het ID van het weerstation zo te zien.
Kun je aangeven hoe je dan het juiste station uit de json haalt ??

Als je de json van Buienradar bekijken dan zie je iets als onderstaande.
Block 0 (onder stationsmeasurements) is weerstation 1, block 1 is weerstation 2, etc.
45
De data van Buienradar wordt inderdaad bepaald door het gekozen weerstation en de data van DarkSky a.d.h.v. de GPS-coördinaten in Domoticz.

Kun je aangeven wat het kleine foutje is?