Klik HIER om een account aan te maken, zodat je alle scripts en posts kunt bekijken!

Recente berichten

Pagina's: [1] 2 3 ... 10
1
LUA / Re: Maak van je Raspberry Pi een weerstation
« Laatste bericht door cweegels Gepost op 08 april 2021, 09:40:18 »
Het verwonderde mij altijd, dat ik van de weer-alerts een e-mail ontvanging, met daarin platte tekst, maar ook html en e-mail headers, of zulke dingen als MIME-type.
Nooit kunnen vinden wat de oorzaak was, tot ik deze week zocht.
Het script dat ik gebruik staat in de 1e post: https://domoticaboard.nl/index.php?topic=42.msg44#msg44

Fout staat naar mijn idee in het stukje code (boven devices updaten):
Code
if val_AlertLevelNow ~= val_AlertLevel_Today then
  commandArray['SendNotification'] = "Code "..val_AlertColour_Today.."\n " .."\n"..val_AlertToday
end

De regel van de commandArray, het scheidingsteken is een hekje (#), zie https://www.domoticz.com/wiki/Events#CommandArray_Examples

Code
commandArray['SendNotification']='subject#body#0'

Dus ik heb de regel als volgt aangepast:

Code
commandArray['SendNotification'] = "Weeralarm: Code "..val_AlertColour_Today.."#"..val_AlertToday.."#0"

De eerste mail gisteren of code groen, zag er wel goed uit. Ik houd even in de gaten, of dat in de toekomst met alerts ook goed gaat.
2
LUA / Is er iemand thuis voor iPhone bezitters
« Laatste bericht door Dickey Gepost op 27 maart 2021, 14:57:05 »
Bij het zoeken naar bruikbare scripts kwam ik deze tegen, die aan de hand van de locatie van een iPhone kan bepalen of er iemand thuis is of niet. Voorwaarde is wel dat alle huisgenoten over een iPhone beschikken.

Op regel 5 kun je de interval invullen. Let wel op: 5 minuten is redelijk, lager gaat ten koste van je iPhone batterij. -:)
Vul de Apple account gegevens in op regel 13. Device naam moet exact overeenkomen met de naam van je toestel.

Op regel 17 de long. en latitude opgeven. Klik even op google maps om je thuis locatie te vinden.
De radius heb ik op 0,5 staan (500 meter), dit voldoet prima.

Voeg een dummy device toe voor elke telefoon die je wilt volgen.
Optioneel kun je een extra device toevoegen, die checkt of alle telefoons weg zijn waarna vervolgens de door jou gewenste actie kan worden uitgevoerd.

Code
-- Script to check the location of multiple iPhones every X minutes,
-- test if they are "home" and represent this using virtual switches

commandArray = {}
-- polling interval in minutes (1-59), setting this too low may drain the phones' batteries
interval = 5
local m = os.date('%M')
if (m % interval == 0) then

  json = require('json')

  -- Array of users to be checked
  users = {
            Name1 = {username = "Name1@gmail.com" ; password = "*********" ; devicename = "iPhone Name1"};
            Name2 = {username = "Name2@gmail.com" ; password = "*********" ; devicename = "iPhone Name2"};
          }
  -- The latitude and longitude of your house (use Google Maps or similar to find this)
  homelongitude = *.*****
  homelatitude = *.*****
  -- Radius (in km) which will be used to determine if a device is at home
  radius = 0.5
 
  for user,credentials in pairs(users) do
    stage1command = "curl -sk -X POST -D - -o /dev/null -L -u '" .. credentials.username .. ":" .. credentials.password .. "' -H 'Content-Type: application/json; charset=utf-8' -H 'X-Apple-Find-Api-Ver: 2.0' -H 'X-Apple-Authscheme: UserIdGuest' -H 'X-Apple-Realm-Support: 1.0' -H 'User-agent: Find iPhone/1.3 MeKit (iPad: iPhone OS/4.2.1)' -H 'X-Client-Name: iPad' -H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' -H 'Accept-Language: en-us' -H 'Connection: keep-alive' https://fmipmobile.icloud.com/fmipservice/device/" .. credentials.username .."/initClient"
    local handle = io.popen(stage1command)
    local result = handle:read("*a")
    handle:close()

--    stage2server = string.match(result, "X%-Apple%-MMe%-Host%:%s(.*%.icloud%.com)")
    stage2server = "p43-fmipmobile.icloud.com"
    stage2command = "curl -sk -X POST -L -u '" .. credentials.username .. ":" .. credentials.password .. "' -H 'Content-Type: application/json; charset=utf-8' -H 'X-Apple-Find-Api-Ver: 2.0' -H 'X-Apple-Authscheme: UserIdGuest' -H 'X-Apple-Realm-Support: 1.0' -H 'User-agent: Find iPhone/1.3 MeKit (iPad: iPhone OS/4.2.1)' -H 'X-Client-Name: iPad' -H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' -H 'Accept-Language: en-us' -H 'Connection: keep-alive' https://" .. stage2server .. "/fmipservice/device/" .. credentials.username .."/initClient"
    local handle = io.popen(stage2command)
    local result = handle:read("*a")
    handle:close()


    output = json:decode(result)

    for key,value in pairs(output.content) do
      if value.name == credentials.devicename then
        lon = value.location.longitude
        lat = value.location.latitude
        bat = value.batteryLevel * 100 / 1
        powerstateval = value.batteryStatus
        table.insert(commandArray,{['UpdateDevice'] = otherdevices_idx['Iphone battery ' .. user] .. '|0|' .. bat})
        distance = math.sqrt(((lon - homelongitude) * 111.320 * math.cos(math.rad(lat)))^2 + ((lat - homelatitude) * 110.547)^2)  -- approximation
        table.insert(commandArray,{['UpdateDevice'] = otherdevices_idx['Positie ' .. user] .. '|0|' .. math.floor(distance*100+0.5)/100})
        print('iPhone ' .. user .. ': ' .. math.floor(distance*100+0.5)/100 .. ' km from home')
        if distance < radius  then
          if otherdevices['Iphone ' .. user] == 'Off' then
            commandArray['Iphone ' .. user] = 'On'
            -- table.insert(commandArray, {['SendNotification'] = 'Presence update#' .. user .. ' komt thuis'})
          end
        else
          if otherdevices['Iphone ' .. user] == 'On' then
            commandArray['Iphone ' .. user] = 'Off'
            -- table.insert(commandArray, {['SendNotification'] = 'Presence update#' .. user .. ' gaat van huis'})
          end
        end
      end
    end
  end

end

return commandArray
  [/font][/size]
3
PHP / Notificatie voor het ophalen van het oud papier
« Laatste bericht door Joost Gepost op 20 maart 2021, 08:17:23 »
Vergeet je ook wel eens het oud papier op tijd aan de straat te zetten? Met onderstaand PHP-script zal dat niet meer gebeuren.
Bij ons wordt het oud papier op de eerste zaterdag van de maand opgehaald. Is dat bij jou op een andere dag? Vervang dan "first saturday", door iets anders, bijvoorbeeld "third wednesday",  "last monday", "fourth friday", etc.

Het script kun je uit laten voeren door een cronjob, maar ik gebruik zelf een container-script via Domoticz.

Code
<?php
include("/home/pi/domoticz/scripts/php/functions.php");
include("/home/pi/domoticz/scripts/php/settings.php");

// Saturday this month
$thisMonthStart = mktime(0,0,0,date('m')+0,0,date('Y'));
$saturday = date("d.m.Y",strtotime("first saturday", $thisMonthStart ));

//Saturday next month
$nextMonthStart = mktime(0,0,0,date('m')+1,1,date('Y'));
$first_saturday = date("d.m.Y",strtotime("first saturday", $nextMonthStart));

$tomorrow = date("d.m.Y",strtotime("+1 day"));

if (($tomorrow == $saturday) || ($tomorrow == $first_saturday)) {
Telegram("Papier wordt morgenochtend opgehaald!",false,1);
}
?>
4
PHP / Overzicht van alle devices in Domoticz
« Laatste bericht door Joost Gepost op 14 maart 2021, 10:09:55 »
Code
<?php
include("/home/pi/domoticz/scripts/php/functions.php");
include("/home/pi/domoticz/scripts/php/settings.php");

unlink( "/home/pi/domoticz/scripts/php/alldevices.txt");

$url = $domoticz_url.'json.htm?type=devices';
$contents = file_get_contents($url);
$contents=json_decode($contents);

foreach ($contents->result as $item) {
$naam = $item->Name;
$id = $item->idx;

$myfile = fopen("/home/pi/domoticz/scripts/php/alldevices.txt", "a") or die("Unable to open file!");
fwrite($myfile, $id.' // '.$naam.PHP_EOL);
fclose($myfile);

}
?>
5
PHP / Settings.php - Bestand met settings voor PHP-scripts
« Laatste bericht door Joost Gepost op 14 maart 2021, 09:58:51 »
Code
 <?php
$domoticz_url='http://192.168.2.62:8080/'; //URL met poortnummer
$toon_ip = '192.168.2.59';
$telegrambot1 = '645272674:AAGsNuR5l4KHgKcYu60-gY-7O73Z2LFx2A8'; //Telegram Bot 1
$telegrambot2 = '1439630098:AAF_5cIii8yqy1g-tyNkiksA3hyhtmsI5JQ'; //Telegram Bot 1
$telegrambot3 = '19302673250:AAGhHEe4gYK8HF55DHbTwFIBLQYQo49_uQs'; //Telegram Bot 3
$telegrambot4 = '1479652902:AAHAXBjuKTGWCXU4BYtoMjOiSt0dLckNsSw'; //Telegram Bot 4
$telegrambot5 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Telegram Bot 5,niet in gebruik
$telegrambot6 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Telegram Bot 6,niet in gebruik
$telegrambot7 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Telegram Bot 7,niet in gebruik
$telegrambot8 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Telegram Bot 8,niet in gebruik
$telegrambot9 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //Telegram Bot 9,niet in gebruik
$chatID1 = '385821761';
$chatID2 = array('385821761','1644279431');
$price_elec_high = 0.21098;
$price_elec_low = 0.19585;
$price_elec = 0.203415;

// Alle Domoticz devices met het IDX-nummer
$idx1=1; // ToonBoilerTempSetpoint // Temp // LaCrosse TX3
$idx2=2; // ToonBranderInfo // Light/Switch // Selector Switch
$idx4=4; // ToonIP // General // Text
$idx5=5; // ToonThermostat // Thermostat // SetPoint
$idx6=6; // Temperatuur Binnen // Temp // LaCrosse TX3
$idx7=7; // Toon Scenes // Light/Switch // Selector Switch
$idx8=8; // ToonAutoProgram // Light/Switch // Selector Switch
$idx9=9; // ToonProgramInformation // General // Text
$idx10=10; // Temperatuur Boiler In // Temp // LaCrosse TX3
$idx11=11; // Temperatuur Boiler Uit // Temp // LaCrosse TX3
$idx12=12; // Boilerdruk // General // Pressure
$idx13=13; // Boiler_Modulation_level // General // Percentage
$idx14=14; // Switch Meterkast // Light/Switch // Switch
$idx15=15; // Alarm Type Meterkast // Light/Switch // Switch
$idx16=16; // Alarm Level Meterkast // Light/Switch // Switch
$idx17=17; // Power Management Meterkast // Light/Switch // Switch
$idx18=18; // kWh Meter Meterkast // General // kWh
$idx19=19; // Watt Meterkast // Usage // Electric
$idx20=20; // Voltage Meterkast // General // Voltage
// Etc.
?>
6
PHP / Functions.php - Bestand met functies voor PHP-scripts
« Laatste bericht door Joost Gepost op 14 maart 2021, 09:52:16 »
Code
<?php 
include("/home/pi/domoticz/scripts/php/settings.php");

// *** FUNCTIONS TO RETRIEVE DATA *** //
// *** FUNCTIONS TO RETRIEVE DATA *** //

//Retrieves status On/Off switch
function Status($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$stat = $parsed_json['Status'];
return $stat;
}

//Retrieves level status
function Level($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$level = trim($parsed_json['Level']);
return $level;
}

//Retrieves temperature
function Temperature($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$temp = trim($parsed_json['Temp']);
return $temp;
}

//Retrieves pressure
function Pressure($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$pressure = trim($parsed_json['Pressure']);
return $pressure;
}

//Retrieves percentage
function Percentage($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$percentage = trim($parsed_json['Data']);
$percentage = substr($percentage, 0, -1);
return $percentage;
}

//Retrieves setpoint
function Setpoint($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$setpoint = trim($parsed_json['SetPoint']);
return $setpoint;
}

//Retrieves value from text device
function Text($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$text = trim($parsed_json['Data']);
return $text;
}

//Retrieves value from user variable
function Variable($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=command&param=getuservariable&idx='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$value = $parsed_json['Value'];
return $value;
}


// *** FUNCTIONS TO UPDATE DEVICES *** //
// *** FUNCTIONS TO UPDATE DEVICES *** //

//Switches idx On or Off
function SwitchDevice($idx,$cmd) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=switchlight&idx='.$idx.'&switchcmd='.$cmd),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

//Activates scene
function SwitchScene($idx) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=switchscene&idx='.$idx.'&switchcmd=On'),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

//Sets a dimlevel to a dimmer
function SetLevel($idx,$level) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=switchlight&idx='.$idx.'&switchcmd=Set%20Level&level='.$level),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

// Updates the nvalue and svalue of a device. Setpoint are set this way.
function Updatedevice($idx, $nvalue, $svalue) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue='.$nvalue.'&svalue='.$svalue),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

// Writes a text to the domoticz logfile
function Domlog($msg) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=addlogmessage&message='.$msg),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

// Switch light white color
function LightOn($idx,$brightness) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=setcolbrightnessvalue&idx='.$idx.'&color={"m":2,"t":154,"r":0,"g":0,"b":0,"cw":101,"ww":154}&brightness='.$brightness),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

// Switch light alarm-color
function LightOnAlarm($idx,$brightness) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=setcolbrightnessvalue&idx='.$idx.'&color={"m":3,"t":0,"r":255,"g":122,"b":76,"cw":0,"ww":0}&brightness='.$brightness),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

function Past($idx) {
global $domoticz_url;
$json_string = file_get_contents($domoticz_url.'json.htm?type=devices&rid='.$idx);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$time = $parsed_json['LastUpdate'];
return $time;
}

function UpdateVariable($UserVariableName,$UserVariableType,$UserVariableValue) {
  global $domoticz_url;
  $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=updateuservariable&vname='.$UserVariableName.'&vtype='.$UserVariableType.'&vvalue='.$UserVariableValue),true);
  if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
  return $reply;
}

// *** FUNCTIONS TO SEND NOTIFICATIONS AND WRITE TO LOG *** //
// *** FUNCTIONS TO SEND NOTIFICATIONS AND WRITE TO LOG *** //

// Send notification to via Settings in Domoticz
function Notification($subject,$thebody) {
   global $domoticz_url;
    $reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=sendnotification&subject='.$subject.'&body='.$thebody),true);
   if($reply['status']=='OK') $reply='OK';else $reply='ERROR';
   return $reply;
}

function Telegram($msg,$silent,$to){
global $telegrambot1;
global $telegrambot2;
global $telegrambot3;
global $telegrambot4;
global $telegrambot5;
global $telegrambot6;
global $telegrambot7;
global $telegrambot8;
global $telegrambot9;
global $chatID1;
global $chatID2;
if ($to==1){ //Bot 1
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot1.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==2){ //Bot 2
foreach($chatID2 as $chatIDs) {
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot2.'/sendMessage?chat_id='.$chatIDs.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
}
if ($to==3){ //Bot 3
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot3.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==4){ //Bot 4
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot4.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==5){ //Bot 5
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot5.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==6){ //Bot 6
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot6.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==7){ //Bot 7
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot7.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==8){ //Bot 8
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot8.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
if ($to==9){ //Bot 9
$result=json_decode(file_get_contents('https://api.telegram.org/bot'.$telegrambot9.'/sendMessage?chat_id='.$chatID1.'&text='.urlencode($msg).'&disable_notification='.$silent));
}
}

$LogFile = '/tmp/log/domoticz.log';
function Logwrite($msg3,$msg2 = NULL) {
global $LogFile;
$time    = microtime(true);
$dFormat = "Y-m-d H:i:s";
$mSecs   =  $time - floor($time);
$mSecs   =  substr(number_format($mSecs,3),1);
$fp = fopen($LogFile,"a+");
fwrite($fp, sprintf("%s%s %s %s\r\n", date($dFormat), $mSecs, $msg3, $msg2));
fclose($fp);
}
?>
7
Raspberry / Re: Gasverbruik uploaden naar MinderGas.nl
« Laatste bericht door Joost Gepost op 09 januari 2021, 12:08:01 »
In het script moet https://www.mindergas.nl/api/gas_meter_readings vervangen worden door https://www.mindergas.nl/api/meter_readings. De oude url zal binnenkort nl. niet meer werken.
8
dzVents / Re: Gasverbruik uploaden naar MinderGas.nl
« Laatste bericht door Joost Gepost op 09 januari 2021, 12:07:38 »
In het script moet https://www.mindergas.nl/api/gas_meter_readings vervangen worden door https://www.mindergas.nl/api/meter_readings.
De oude url zal binnenkort nl. niet meer werken.
9
Vragen / Discussies over scripts / Re: WUS: Function math.pow(x, y) has been deprecated in Lua 5.3.
« Laatste bericht door innovator Gepost op 15 november 2020, 17:22:02 »
Tip; zie
https://github.com/russandol-sarl/dz-solarData/commit/ef92ff14288b634e6de2c1c579a81e2eda4abbc9
Met de regels die in het script gewijzigd moeten worden om van de melding af te komen.

10
LUA / Re: Maak van je Raspberry Pi een weerstation
« Laatste bericht door edje1205 Gepost op 15 oktober 2020, 11:47:48 »
Mag ik dit weer even aanzwengelen ? Graag !

Gebruik de laatste (?) versie dit script

Klopt het dat ik sinds maandag 13 oktober geen updates meer krijg van

Temperatuur Gevoel

(ApparentTemp)
TempApparent - (dev_TempApparent)

ApparentTemp is aanwezig in darksky data
https://api.darksky.net/forecast/4fab336d9aef8d6089141a3e2588dd98/52.393754,4.938093

Temperatuur Dauwpunt
(DewPoint) en
dev_DewPoint (aanwezig in script)

maar niets te vinden met DewPoint, Dew en / of Point  in
https://data.buienradar.nl/2.0/feed/json


zowel 'print' als 'update' aanwezig in script.
Geen errors overigens te zien

Bedankt zover (ook voor dit script)


edit screenshot


Pagina's: [1] 2 3 ... 10