<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://revspace.nl/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sam</id>
	<title>RevSpace - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://revspace.nl/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sam"/>
	<link rel="alternate" type="text/html" href="https://revspace.nl/Special:Contributions/Sam"/>
	<updated>2026-05-13T21:21:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Groepsaankoop_treinnokkensleutels&amp;diff=33587</id>
		<title>Groepsaankoop treinnokkensleutels</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Groepsaankoop_treinnokkensleutels&amp;diff=33587"/>
		<updated>2025-02-12T15:41:22Z</updated>

		<summary type="html">&lt;p&gt;Sam: Created page with &amp;quot;  {{Project    |Name=Groepsaankoop treinnokkensleutels    |Picture=Nokkensleutel_foto_tbv_projectpagina.jpg    |Omschrijving=NS trein/nokken/driehoekssleutels in een groepje bestellen want verzending is duur    |Status=In progress    |Contact=Sam   }}  Sommigen hier hebben uit Treinonderdelen een aantal noodremtrekkers en deurpanelen gekocht. Nu is het leuk om daar ook een goed bijpassende sleutel te hebben.  JLCPCB kan met een SLM-proces in RVS 3d-printen. Het kost...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  {{Project&lt;br /&gt;
   |Name=Groepsaankoop treinnokkensleutels&lt;br /&gt;
   |Picture=Nokkensleutel_foto_tbv_projectpagina.jpg&lt;br /&gt;
   |Omschrijving=NS trein/nokken/driehoekssleutels in een groepje bestellen want verzending is duur&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=Sam&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
Sommigen hier hebben uit [[Treinonderdelen]] een aantal noodremtrekkers en deurpanelen gekocht. Nu is het leuk om daar ook een goed bijpassende sleutel te hebben.&lt;br /&gt;
&lt;br /&gt;
JLCPCB kan met een SLM-proces in RVS 3d-printen. Het kost ongeveer 24 USD per stuk. De verzending is alleen prijzig, de goedkoopste IOSS (dus geen postnl invoerrechten/belasting gezeik) optie is 35USD.&lt;br /&gt;
&lt;br /&gt;
Wie wilt er ook eentje? Aflevering bij RevSpace, Bitlair of Hackalot of in overleg. Je mag je ook inschrijven door nokkensleutel apenstaartje sam punkt ax te emailen als je geen wikiaccount hebt.&lt;br /&gt;
&lt;br /&gt;
Je betaalt (aantal * stukprijs) + (verzendkosten / aantal deelnemers). Als je je inschrijft, ga ik er vanuit dat je snel kunt betalen als ik dit vraag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Inschrijflijstje&lt;br /&gt;
|-&lt;br /&gt;
! Wie? !! Hoeveel? !! Waar? (leeg = revspace) || Hoe te bereiken? (mail, IRC, signal etc)&lt;br /&gt;
|-&lt;br /&gt;
| Sam || 1 || || Ja&lt;br /&gt;
|-&lt;br /&gt;
| You? || 42 || ergens || per postduif&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=File:Nokkensleutel_foto_tbv_projectpagina.jpg&amp;diff=33586</id>
		<title>File:Nokkensleutel foto tbv projectpagina.jpg</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=File:Nokkensleutel_foto_tbv_projectpagina.jpg&amp;diff=33586"/>
		<updated>2025-02-12T15:41:20Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Bambu_Lab_X1_Carbon&amp;diff=32701</id>
		<title>Bambu Lab X1 Carbon</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Bambu_Lab_X1_Carbon&amp;diff=32701"/>
		<updated>2024-07-11T14:45:08Z</updated>

		<summary type="html">&lt;p&gt;Sam: linkje naar Bambu Studio github releases pagina tbv appimages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1 €/uur ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Printen met 1 soort filament is gratis.&#039;&#039;&#039; Voor het filament zelf geldt het gebruikelijke [[fair use]]-beleid.&lt;br /&gt;
&lt;br /&gt;
Voor het printen met &#039;&#039;&#039;meerdere filamenten&#039;&#039;&#039; rekenen we &#039;&#039;&#039;1 €/uur&#039;&#039;&#039;, te betalen via [[revbank]] middels het commando &amp;lt;tt&amp;gt;4x uur&amp;lt;/tt&amp;gt; in RevBank, waarbij je de 4 vervangt door het aantal uren, afgerond naar boven. Je betaalt voor de volledige tijd dat je de machine gebruikt, dus ook voor mislukte prints.&lt;br /&gt;
&lt;br /&gt;
Dit doen we omdat printen met meerdere filamenten veel langer duurt en heel veel filament gebruikt; het tarief ontmoedigt en dekt de kosten.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Dit is een Bambu Lab X1 Carbon, met standaard de 0.4mm nozzle en de textured PEI buildplate. We hebben ook een 0.8mm nozzle maar vervangen is [https://wiki.bambulab.com/en/x1/maintenance/replace-complete-hotend vaak meer werk dan dat het printtijd scheelt].&lt;br /&gt;
&lt;br /&gt;
== Monitoren ==&lt;br /&gt;
&lt;br /&gt;
Als de printer voor jou aan het werk is, moet je &#039;m ook in de gaten houden en blussen als ie in de fik vliegt, ook al is de kans waarschijnlijk klein. Je mag er best bij weglopen, maar blijf op de space en hou een oogje in het zeil (bijv. via de camera).&lt;br /&gt;
&lt;br /&gt;
Als je een zeer langdurige print wilt doen, zul je iemand moeten vinden die de wacht kan houden terwijl jij naar huis gaat om te slapen. Diverse deelnemers zijn daarvoor om te kopen met pizza&#039;s, club mate, appeltaart, etcetera.&lt;br /&gt;
&lt;br /&gt;
== LAN only ==&lt;br /&gt;
&lt;br /&gt;
We gebruiken de printer in LAN-only-modus. Daardoor zijn diverse functies, waaronder de smartphone-app &amp;quot;Bambu Handy&amp;quot;, niet beschikbaar. &amp;quot;LAN only&amp;quot; betekent dat we de cloud-functionaliteit niet gebruiken, maar sluit het gebruik van de microSD-kaart niet uit. Je kunt dus ook gcode-bestanden vanaf de geheugenkaart printen.&lt;br /&gt;
&lt;br /&gt;
De printer wordt herkend door Bambu Studio via UDP broadcast-pakketjes (poort 2021) die door de printer worden gestuurd; het is (nog) niet mogelijk om handmatig een IP-adres op te geven.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Download via https://bambulab.com/en/download/studio - Installeren via Flatpak is het makkelijkst onder Linux, maar je kan AppImages vanaf de [https://github.com/bambulab/BambuStudio/releases/latest GitHub releases-pagina] downloaden.&lt;br /&gt;
&lt;br /&gt;
Om de printer via het netwerk te gebruiken moet je de &amp;quot;access code&amp;quot; hebben. De access code kun je van het schermpje van de printer krijgen, en staat opzettelijk niet op de wiki.&lt;br /&gt;
&lt;br /&gt;
Voor de slicer instellingen is het handig om te weten dat de buildplate &amp;quot;Textured PEI&amp;quot; is en het materiaal &amp;quot;Bambu PLA Basic or Matte&amp;quot;, dubbel check dit nog even voor je print.&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&lt;br /&gt;
De camera viewer van Bambu Studio doet &#039;t voor geen meter, althans onder Linux.&lt;br /&gt;
&lt;br /&gt;
Streamen via mpv werkt wel goed: &amp;lt;tt&amp;gt;mpv rtsps://bblp:12345678@10.42.43.171:322/streaming/live/1&amp;lt;/tt&amp;gt;, waarbij je 12345678 vervangt door de access code die je via de machine verkrijgt.&lt;br /&gt;
&lt;br /&gt;
De camera is ook als https://revspace.nl/cam1 openbaar beschikbaar, maar net als de andere webcams met een zeer lage resolutie en framerate (dat is opzettelijk!). Onderaan in beeld staat de naam van de print, en een indicatie van de voortgang.&lt;br /&gt;
&lt;br /&gt;
== Snelheid ==&lt;br /&gt;
&lt;br /&gt;
Deze printer is ontzettend snel, maar het starten van een print kost zo&#039;n 6 minuten én de printer pauzeert na de eerste laag om die visueel te inspecteren. Voor een heel klein printje kun je dus net zo goed de oude [[Prusa i3 MK3S]] of [[Artillery Genius]] gebruiken.&lt;br /&gt;
&lt;br /&gt;
Bovendien is alle snelheidswinst weg (and then some) als je met filamentwissels werkt. Voor het gebruiken van die optie rekenen we 1 €/uur.&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Hoera14,5jaar&amp;diff=32673</id>
		<title>Hoera14,5jaar</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Hoera14,5jaar&amp;diff=32673"/>
		<updated>2024-07-04T16:25:58Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Event&lt;br /&gt;
 |Name=Verjaardag 14½&amp;lt;sup&amp;gt;e&amp;lt;/sup&amp;gt; jaar&lt;br /&gt;
 |DateStart=6 Jul 2024&lt;br /&gt;
 |DateEnd=6 Jul 2024&lt;br /&gt;
 |InfoLocation=Revspace!&lt;br /&gt;
 |InfoOpen=17:00&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Feest! ==&lt;br /&gt;
&lt;br /&gt;
Traditioneel vieren wij de verjaardag van RevSpace (tevens HSNL-nieuwjaarsborrel) de zaterdag vóór FOSDEM. Dit keer niet! We vieren ons 14½jarig jubileum!&lt;br /&gt;
&lt;br /&gt;
Het feestje begint om 17:00. Als je eerder komt, word je geacht mee te helpen met voorbereidingen!&lt;br /&gt;
&lt;br /&gt;
Nederland speelt die avond om 21:00 tegen Turkije in het EK voetbal. Dit kan gevolgen hebben voor je &#039;&#039;&#039;terugreis&#039;&#039;&#039;, dus houd rekening met afgesloten wegen en omleidingen in het OV. (vooral als je weer hartje Den Haag in moet, de snelweg en CS zullen weinig problemen geven)&lt;br /&gt;
&lt;br /&gt;
== Activiteiten, talks en demo&#039;s ==&lt;br /&gt;
Wil je iets doen/presenteren/demonstreren? Gooi maar op de lijst:&lt;br /&gt;
* Ding - Wie &lt;br /&gt;
&lt;br /&gt;
== BBQ ==&lt;br /&gt;
&lt;br /&gt;
Bij onze traditie hoort ook dat we bij het feestje een winter-BBQ doen. Dat is best lastig in de zomer, dus misschien moeten we improviseren.&lt;br /&gt;
&lt;br /&gt;
== Crew ==&lt;br /&gt;
&lt;br /&gt;
Wil je helpen? De taakverdeling (denk aan opbouw, afwas, afbouw, etc.) vullen we later nog in.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
| Inkopen || fk&lt;br /&gt;
|-&lt;br /&gt;
| Opbouw || [[Crashjuh]], [[supakeen]], [[Wheeze_NL]]&lt;br /&gt;
|-&lt;br /&gt;
| Sla-guru ||  [[Renze]]&lt;br /&gt;
|-&lt;br /&gt;
| Broodfluisteraar || [[Peetz0r]], [[f0x]]&lt;br /&gt;
|-&lt;br /&gt;
| Grillmeister(s/innen) || Bas, Zawadi, Glu&lt;br /&gt;
|-&lt;br /&gt;
| Afruimen || [[CH23]], bamidiscus&lt;br /&gt;
|-&lt;br /&gt;
| Afwassers || Juerd, sam&lt;br /&gt;
|-&lt;br /&gt;
| Afdrogers || eightdot, Maxell, Molenaar&lt;br /&gt;
|-&lt;br /&gt;
| Space opruimers || Jij?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inschrijving ==&lt;br /&gt;
Bij &amp;quot;vlees&amp;quot; en &amp;quot;vega(n)&amp;quot; graag het aantal mee-eters vermelden, als je vegaN wilt hebben, zet het erbij, anders krijg je vegA.  &lt;br /&gt;
&lt;br /&gt;
Kosten voor het eten: 10 € per persoon. &lt;br /&gt;
&lt;br /&gt;
* We gaan tot maximaal 84 aanmeldingen voor het avondprogramma (bbq + feest).&lt;br /&gt;
* &#039;&#039;&#039;Inschrijven kan tot vrijdagavond 18:30 (daarna misschien in overleg)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Zonder wiki-account aanmelden kan ook. Vraag op [[IRC]] of iemand je wil toevoegen, of e-mail via https://revspace.nl/Contact&lt;br /&gt;
&lt;br /&gt;
NB: graag alleen jezelf en partner(s) inschrijven, geen groepen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;animation: spin 10s ease infinite&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;transform-origin: top left; transform:rotate(-.7deg) scale(1.0837, 1.05)&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border:40px inset rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4); box-shadow: 0 0 0 5px rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4);;&amp;quot;   &lt;br /&gt;
! Naam/Nick !! VleesBBQ !! Vega(n)BBQ !! Opmerkingen&lt;br /&gt;
{{BBQParticipant|Participant=[[Sebastius]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Juerd]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[polyfloyd]]|Vlees=2|Opmerking=1p Lactose intolerant}}&lt;br /&gt;
{{BBQParticipant|Participant=[[supakeen]]|Vlees=2|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[dmitrijus]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Roosted]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Eightdot]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Wheeze_NL]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Jelle]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Homski]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Glu]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Zawadi]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Techwolf12]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Peetz0r]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Crashjuh]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Renze]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Boekenwuurm]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Pepman]]|Vlees=3|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[CH23]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Okarin]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Iron]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Xesxen]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[F0x]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Molenaar]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Sam]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[bamidiscus]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Amir]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Maxell]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Muad-Dib]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[BlackDragon]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[SynQ]]|Vlees=1|Opmerking=}}&lt;br /&gt;
&amp;lt;!-- Tof dat je je inschrijft! Overweeg alsjeblieft om je naam ook bij de takenlijst te zetten. Zo&#039;n feestje is best veel werk en we zoeken altijd meer vrijwilligers! --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Subtotaal || {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|limit=999|format=sum}} ||{{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVega|limit=999|format=sum}} ||&lt;br /&gt;
|-&lt;br /&gt;
! Totaal ||colspan=&amp;quot;2&amp;quot;| {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=84|format=sum}} || max: 84&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Heb je geen account op de wiki en wil je je wel inschrijven voor het feestje? Vraag iemand anders om je naam in de tabel te zetten :)&lt;br /&gt;
&lt;br /&gt;
(als het totaal niet klopt, klik [https://revspace.nl/wiki/index.php?title=Hoera14,5jaar&amp;amp;action=purge hier] en op de OK-knop)&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=User:Sam/test&amp;diff=32672</id>
		<title>User:Sam/test</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=User:Sam/test&amp;diff=32672"/>
		<updated>2024-07-04T16:17:59Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border:40px inset rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4); box-shadow: 0 0 0 5px rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4);;&amp;quot;   &lt;br /&gt;
! Naam/Nick !! VleesBBQ !! Vega(n)BBQ !! Opmerkingen&lt;br /&gt;
{{BBQParticipant|Participant=[[BarbequeDeelnemer1]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[BarbequeDeelnemer2]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=BarbequeDeelnemer3|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=BarbequeDeelnemer4|Vlees=2|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=BarbequeDeelnemer5|Vega=3|Opmerking=}}&lt;br /&gt;
|-&lt;br /&gt;
! Subtotaal || {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|limit=999|format=sum}} ||{{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVega|limit=999|format=sum}} ||&lt;br /&gt;
|-&lt;br /&gt;
! Totaal ||colspan=&amp;quot;2&amp;quot;| {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=84|format=sum}} || max: 84&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=User:Sam/test&amp;diff=32671</id>
		<title>User:Sam/test</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=User:Sam/test&amp;diff=32671"/>
		<updated>2024-07-04T16:16:20Z</updated>

		<summary type="html">&lt;p&gt;Sam: testje&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border:40px inset rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4); box-shadow: 0 0 0 5px rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4);;&amp;quot;   &lt;br /&gt;
! Naam/Nick !! VleesBBQ !! Vega(n)BBQ !! Opmerkingen&lt;br /&gt;
{{BBQParticipant|Participant=[[BarbequeDeelnemer1]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[BarbequeDeelnemer2]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=BarbequeDeelnemer3|Vlees=1|Opmerking=}}&lt;br /&gt;
|-&lt;br /&gt;
! Subtotaal || {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|limit=999|format=sum}} ||{{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVega|limit=999|format=sum}} ||&lt;br /&gt;
|-&lt;br /&gt;
! Totaal ||colspan=&amp;quot;2&amp;quot;| {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=84|format=sum}} || max: 84&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Hoera14,5jaar&amp;diff=32652</id>
		<title>Hoera14,5jaar</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Hoera14,5jaar&amp;diff=32652"/>
		<updated>2024-07-01T12:48:08Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Event&lt;br /&gt;
 |Name=Verjaardag 14½&amp;lt;sup&amp;gt;e&amp;lt;/sup&amp;gt; jaar&lt;br /&gt;
 |DateStart=6 Jul 2024&lt;br /&gt;
 |DateEnd=6 Jul 2024&lt;br /&gt;
 |InfoLocation=Revspace!&lt;br /&gt;
 |InfoOpen=17:00&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Feest! ==&lt;br /&gt;
&lt;br /&gt;
Traditioneel vieren wij de verjaardag van RevSpace (tevens HSNL-nieuwjaarsborrel) de zaterdag vóór FOSDEM. Dit keer niet! We vieren ons 14½jarig jubileum!&lt;br /&gt;
&lt;br /&gt;
Het feestje begint om 17:00. Als je eerder komt, word je geacht mee te helpen met voorbereidingen!&lt;br /&gt;
&lt;br /&gt;
== Activiteiten, talks en demo&#039;s ==&lt;br /&gt;
Wil je iets doen/presenteren/demonstreren? Gooi maar op de lijst:&lt;br /&gt;
* Ding - Wie &lt;br /&gt;
&lt;br /&gt;
== BBQ ==&lt;br /&gt;
&lt;br /&gt;
Bij onze traditie hoort ook dat we bij het feestje een winter-BBQ doen. Dat is best lastig in de zomer, dus misschien moeten we improviseren.&lt;br /&gt;
&lt;br /&gt;
== Crew ==&lt;br /&gt;
&lt;br /&gt;
Wil je helpen? De taakverdeling (denk aan opbouw, afwas, afbouw, etc.) vullen we later nog in.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
| Inkopen || Jij?&lt;br /&gt;
|-&lt;br /&gt;
| Huur BBQ/statafels/etc || Jij?&lt;br /&gt;
|-&lt;br /&gt;
| Opbouw || [[Crashjuh]], [[supakeen]], [[Wheeze_NL]]&lt;br /&gt;
|-&lt;br /&gt;
| Sla-guru ||  [[Renze]]&lt;br /&gt;
|-&lt;br /&gt;
| Broodfluisteraar || [[Peetz0r]], [[f0x]]&lt;br /&gt;
|-&lt;br /&gt;
| Grillmeister(s/innen) || Bas, jij?&lt;br /&gt;
|-&lt;br /&gt;
| Afruimen || [[CH23]], bamidiscus&lt;br /&gt;
|-&lt;br /&gt;
| Afwassers || Juerd, sam, jij?&lt;br /&gt;
|-&lt;br /&gt;
| Afdrogers || eightdot, Jij?&lt;br /&gt;
|-&lt;br /&gt;
| Space opruimers || Jij?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inschrijving ==&lt;br /&gt;
Bij &amp;quot;vlees&amp;quot; en &amp;quot;vega(n)&amp;quot; graag het aantal mee-eters vermelden, als je vegaN wilt hebben, zet het erbij, anders krijg je vegA.  &lt;br /&gt;
&lt;br /&gt;
Kosten voor het eten: 10 € per persoon. &lt;br /&gt;
&lt;br /&gt;
* We gaan tot maximaal 84 aanmeldingen voor het avondprogramma (bbq + feest).&lt;br /&gt;
&lt;br /&gt;
Zonder wiki-account aanmelden kan ook. Vraag op [[IRC]] of iemand je wil toevoegen, of e-mail via https://revspace.nl/Contact&lt;br /&gt;
&lt;br /&gt;
NB: graag alleen jezelf en partner(s) inschrijven, geen groepen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;animation: spin 10s ease infinite&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;transform-origin: top left; transform:rotate(-.7deg) scale(1.0837, 1.05)&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border:40px inset rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4); box-shadow: 0 0 0 5px rgba(calc({{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}} * 2),calc((100 - {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=999|format=sum}}) * 2), 0,0.4);;&amp;quot;   &lt;br /&gt;
! Naam/Nick !! VleesBBQ !! Vega(n)BBQ !! Opmerkingen&lt;br /&gt;
{{BBQParticipant|Participant=[[Sebastius]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Juerd]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[polyfloyd]]|Vlees=2|Opmerking=1p Lactose intolerant}}&lt;br /&gt;
{{BBQParticipant|Participant=[[supakeen]]|Vlees=2|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[dmitrijus]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Roosted]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Eightdot]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Wheeze_NL]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Jelle]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Homski]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Glu]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Zawadi]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Eloy]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Techwolf12]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Peetz0r]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Crashjuh]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Renze]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Boekenwuurm]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Pepman]]|Vlees=3|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[CH23]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Okarin]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Iron]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Xesxen]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[F0x]]|Vega=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=[[Molenaar]]|Vlees=1|Opmerking=}}&lt;br /&gt;
{{BBQParticipant|Participant=Sam|Vlees=1|Opmerking=}}&lt;br /&gt;
&amp;lt;!-- He jij daar, tof dat je je inschrijft! Overweeg alsjeblieft om je naam ook bij de takenlijst te zetten. Zo&#039;n feestje is best veel werk en we zoeken altijd meer vrijwilligers! --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Subtotaal || {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|limit=999|format=sum}} ||{{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVega|limit=999|format=sum}} ||&lt;br /&gt;
|-&lt;br /&gt;
! Totaal ||colspan=&amp;quot;2&amp;quot;| {{#ask:[[-Has subobject::{{FULLPAGENAME}}]]|?BBQVlees|?BBQVega|limit=84|format=sum}} || max: 84&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Heb je geen account op de wiki en wil je je wel inschrijven voor het feestje? Vraag iemand anders om je naam in de tabel te zetten :)&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=MQTT&amp;diff=32071</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=MQTT&amp;diff=32071"/>
		<updated>2024-01-27T21:50:20Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Brokers ==&lt;br /&gt;
&lt;br /&gt;
In MQTT-land heet een server een &amp;quot;broker&amp;quot; en een verbinding tussen twee servers heet een &amp;quot;bridge&amp;quot;. We gebruiken 4 brokers (allemaal mosquitto) met daartussen bridges:&lt;br /&gt;
&lt;br /&gt;
=== intern: mosquitto.space.revspace.nl (op gateway) ===&lt;br /&gt;
&lt;br /&gt;
Op de server gateway draait de primaire broker. Alle payloads worden hierop gepublisht, en dan met uitgaande en inkomende bridge-verbindingen met brokers gedeeld. Vrijwel alle scripts zouden deze server moeten gebruiken, zowel voor subscriben als voor publishen.&lt;br /&gt;
&lt;br /&gt;
Toegestane topics zijn:&lt;br /&gt;
; revspace/#&lt;br /&gt;
: Vergaarbak van allerhande sensors, knopjes, etc. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen en buiten het RevSpace-LAN.&lt;br /&gt;
; revspace-local/#&lt;br /&gt;
: Dingen die lokaal moeten blijven ivm privacy. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen het RevSpace-LAN.&lt;br /&gt;
; shellies/#&lt;br /&gt;
: In apparaatjes van het merk Shelly dit helaas hardcoded. We gebruiken scripts om de data te boetseren en te her-publishen naar handigere dingen onder revspace/#.&lt;br /&gt;
; revdebug/#, zandbak/#&lt;br /&gt;
: Bruikbaar voor debugdumps en projecten in test- of aanklootfase&lt;br /&gt;
; zigbee2mqtt/#&lt;br /&gt;
: In gebruik voor zigbee2mqtt. Deze dingen spreken een eigen JSON-gebaseerd protocol. Dit topic is read-only voor anonieme users om totale chaos te voorkomen&lt;br /&gt;
&lt;br /&gt;
=== intern: ledbanner ===&lt;br /&gt;
&lt;br /&gt;
De mosquitto op ledbanner maakt een enkele uitgaande bridge-verbinding naar gateway, zodat alle scripts op de Raspberry Pi gewoon met localhost kunnen verbinden. Dat gaat sneller en werkt ook als de ledbanner op reis is (gebeurt vrijwel niet meer) en dus niet in het RevSpace-LAN zit.&lt;br /&gt;
&lt;br /&gt;
=== extern: revspace.nl ===&lt;br /&gt;
&lt;br /&gt;
Krijgt een inkomende verbinding vanaf gateway en geeft openbaar readonly toegang op revspace/# zodat iedereen kan meegenieten. Draait ook mqtt2web voor wat dynamische aanduidingen op de wiki.&lt;br /&gt;
&lt;br /&gt;
=== extern: test.mosquitto.org ===&lt;br /&gt;
&lt;br /&gt;
Krijgt een inkomende verbinding vanaf gateway en geeft ook toegang op revspace/#, omdat het kan. Er is geen enkele zinnige reden om dit te doen, anders dan bijdragen aan de continue praktijktest van het mosquitto-project. Voor extern uitlezen van onze sensors e.d. kun je beter niet deze server gebruiken, hoewel het voor een totaal yoloding met een heleboel baggerdata erop een verbazingwekkend goede uptime heeft.&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
&lt;br /&gt;
Subscribers alleen vermelden als het voor spacegebruik relevant is. Grafiekjes kunnen hier worden weggelaten.&lt;br /&gt;
&lt;br /&gt;
Deze lijst is incompleet; graag aanvullen :)&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! topic !! publishers/subscribers !! omschrijving&lt;br /&gt;
|-&lt;br /&gt;
| revspace/telefoon || pub: [[Telefoon2.0]] (revphone.flimpie.net)&amp;lt;br&amp;gt;sub: [[ledbanner]] || kondigt telefoonnummer aan van beller naar de spacetelefoon, altijd icm cam4-censuur&lt;br /&gt;
|-&lt;br /&gt;
| revspace/bank/+ || pub: bar@gateway:plugins/revspace_mqtt || verkoopteller per revbank product_id&lt;br /&gt;
|-&lt;br /&gt;
| revspace/button/doorbell || pub: deurbel-esp op basis van 24V AC input&amp;lt;br&amp;gt;sub: mqtt2irc@gateway, [[ledspace]], [[ledbanner]] || deurbel bij gagaredeur&lt;br /&gt;
|-&lt;br /&gt;
| revspace/button/nomz || pub: nomzknop-esp&#039;s&amp;lt;br&amp;gt;sub: mqtt2irc@gateway, [[ledspace]], [[ledbanner]] || aan tafel!&lt;br /&gt;
|-&lt;br /&gt;
| revspace/button/skip, stop, shuffle, vol_up, vol_down || pub: skipknop&amp;lt;br&amp;gt;sub: ? || afstandbediening voor muzieksysteem&lt;br /&gt;
|-&lt;br /&gt;
| revspace/cams || pub: count-mqtt@pov&amp;lt;br&amp;gt;sub: [[ledspace]] || spatiegescheiden aantal kijkers, [0] is totaal, [1] is cam1, etc.&lt;br /&gt;
|-&lt;br /&gt;
| revspace/doorduino || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: mqtt2irc@gateway || &amp;quot;$deur unlocked by $naam&amp;quot;-berichten, [[Doorduino opt-in|gepseudonimiseerd]] waar nodig. NB: ledbanner gebruikt een andere!&lt;br /&gt;
|-&lt;br /&gt;
| revspace/doorduino/checked-in || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: mqtt2irc@gateway, [[revfan]], [[extradoei]], [[doorduino]], [[vollamp]] || aantal ingecheckte mensen&lt;br /&gt;
|-&lt;br /&gt;
| revspace/doorduino/count, count-since, last, unique || pub: doorduino-mqtt@gateway || &lt;br /&gt;
|-&lt;br /&gt;
| revspace/fan || pub: [[revfan]] || of de fan vindt dat ie aanstaat&lt;br /&gt;
|-&lt;br /&gt;
| revspace/flipdot || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: [[flipdot]] || flipdot laat zien wat je hier publisht&lt;br /&gt;
|-&lt;br /&gt;
| revspace/intakefan/state || pub: [[intakefancontroller]] || of de fan vindt dat ie aanstaat&lt;br /&gt;
|-&lt;br /&gt;
| revspace/lasercutter || pub: lasercutter-pc&amp;lt;br&amp;gt;sub: &amp;lt;s&amp;gt;[[revfan]]&amp;lt;/s&amp;gt; || of de lasercutter aanstaat (wordt dit nog gebruikt?)&lt;br /&gt;
|-&lt;br /&gt;
| revspace/lichtgordijn || pub: lichtgordijn&amp;lt;br&amp;gt;sub: mqtt2irc@gateway || bewegingsdetectie bij garagedeur&lt;br /&gt;
|-&lt;br /&gt;
| revspace/lightstate/+ || pub: [https://github.com/revspace/lichtknop diverse esp&#039;s] &amp;lt;br&amp;gt;sub: power-mqtt@gateway:powerconverter, licht-mqtt@gateway || of het licht aan staat, &amp;quot;on&amp;quot;/&amp;quot;off&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| revspace/lightstate/hoofdruimte_{bar,tv}/set || pub: licht-mqtt@gateway&amp;lt;br&amp;gt;sub: esp bij lichtsysteem || zet licht aan/uit&lt;br /&gt;
|-&lt;br /&gt;
| revspace/lightstate/minderlicht + /set || psub: licht-mqtt@gateway&amp;lt;br&amp;gt;spub: zigbee-minderlicht@gateway || ledlamp hoofdruimte&lt;br /&gt;
|-&lt;br /&gt;
| revspace/n_max || pub: juerd@gateway:static_max_n.pl (cron) &amp;lt;br&amp;gt;sub: [[vollamp]], pi@doorduino:max_n || huidig maximum aantal toegestane mensen op de space&lt;br /&gt;
|-&lt;br /&gt;
| revspace/photo || pub: photos2mqtt@mediaserver&amp;lt;br&amp;gt;sub: mqtt2irc@gateway || URL van nieuwste kiekje&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/ac/frequency || pub: ? || ongeveer 50 Hz&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/bliksem/+/bliksem, status || pub: [[bliksem]] || bliksemdetectie&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/co2/+ || pub: diverse esp&#039;s, operames || CO2-concentratie div. ruimtes&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/co2 || pub: [[CO2MeterHacking]]&amp;lt;br&amp;gt;sub: [[revfan]] || CO2-concentratie hoofdruimte volgens de oude voltcraftmeter&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/geiger || pub: [[geigercounter]] || aantal geigers per minuut :P&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/humidity || pub: [[CO2MeterHacking]] || luchtvochtigheid hoofdruimte&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/netvuil/peak, peak_time || pub: ? || &lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/power/# || pub: power-mqtt@gateway:powerconverter || re-published data op basis van shellies/# en revspace/lightstate/+&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/pir/+ || pub: zigbee-alarm@gateway&amp;lt;br&amp;gt;sub: mqtt2irc@gateway || bewegingssensors&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/snuffelaar/+/# || pub: div. [[snuffelaar]] || luchtkwaliteit in div. ruimtes, soms ook CO2&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/temperature/+/+ || pub: [[spaceloop]] || temperatuur, veelal op onhandige plaatsen gemeten&lt;br /&gt;
|-&lt;br /&gt;
| revspace/sensors/temperature || pub: [[CO2MeterHacking]] || temperatuur hoofdruimte&lt;br /&gt;
|-&lt;br /&gt;
| revspace/state || pub: spaceloop@gateway:slmonitor&amp;lt;br&amp;gt;sub: heel erg veel || of de space open of dicht is; scriptje monitort seriële output van arduino die spanning van de [[space state|schakelaar]] krijgt.&lt;br /&gt;
|-&lt;br /&gt;
| revspace/weather/clouds, code || pub: ? || &lt;br /&gt;
|-&lt;br /&gt;
| revspace/wifi/# || pub: ? || wifi-statistieken&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/checked-in || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: pi@doorduino:max_n || spatiegescheiden nicknames, met evt diverse prefixes&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino-checked-in/unixtime || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: [[doei]] || spatiegescheiden afgewisseld nickname en tijdstip van inchecken&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/autodoei/unlocked || pub: doorduino-mqtt@gateway || bericht bevat nickname&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/extradoei/+/unlocked || pub: [[extradoei]]&amp;lt;br&amp;gt;sub: doorduino-mqtt@gateway || topic bevat id van extradoei, bericht bevat id van ibutton&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/extradoei/unlocked || pub: doorduino-mqtt@gateway || bericht bevat nickname&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/opt-in/unlock || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: pi@doorduino:unlock-via-mqtt || om groen ledje te laten branden&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/opt-out/unlock || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: pi@doorduino:unlock-via-mqtt || om groen ledje te laten branden&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/doorduino/+/unlocked || pub: pi@[[doorduino]]:granted.d&amp;lt;br&amp;gt;sub: doorduino-mqtt@gateway || topic bevat naam van deur, bericht bevat nickname&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/ledbanner/doorduino || pub: doorduino-mqtt@gateway&amp;lt;br&amp;gt;sub: [[ledbanner]], constatus@pov || net als revspace/doorduino, maar dan zonder pseudonimisatie, en met opt-in-aanduiding&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/ledbanner/cam4overlay || pub: [[ledbanner]]&amp;lt;br&amp;gt;sub: constatus@pov || activeert overlay op cam4 om ledbanner af te dekken bij doorduinomelding van iemand zonder opt-in&lt;br /&gt;
|-&lt;br /&gt;
| revspace-local/spacevredebreuk/# || pub: zigbee-alarm@gateway&amp;lt;br&amp;gt;sub: ledbanner, ledspace, mediaplayer || [[alarm]]&lt;br /&gt;
|-&lt;br /&gt;
| shellies/# || pub: [[elektra|Shelly 3EM]]&amp;lt;br&amp;gt;sub: power-mqtt@revgateway:powerconverter || rauwe data van shelly device(s)&lt;br /&gt;
|-&lt;br /&gt;
| zigbee2mqtt/# || pub: zigbee2mqtt raspberry pi&amp;lt;br&amp;gt;sub: zigbee@revgateway:trv-guard || o.a. verwarming&lt;br /&gt;
|-&lt;br /&gt;
| zigbee2mqtt/#/set || pub: zigbee@revgateway:trv-setpoint || o.a. verwarming&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Live sensortjes gluren ==&lt;br /&gt;
&lt;br /&gt;
https://revspace.nl/maquette/&lt;br /&gt;
&lt;br /&gt;
== How to ==&lt;br /&gt;
&lt;br /&gt;
To receive/subscribe to these messages, install mqtt-simple using &amp;quot;cpan Net::MQTT::Simple&amp;quot; or &amp;quot;yum install perl-Net-MQTT-Simple&amp;quot;, or download mosquitto-clients, or another MQTT library and write your own client.&lt;br /&gt;
&lt;br /&gt;
For mosquitto-clients, use:&lt;br /&gt;
  (public server)&lt;br /&gt;
  mqtt-simple -h revspace.nl -s &amp;quot;revspace/#&amp;quot;&lt;br /&gt;
  # Alternatively: mosquitto_sub -h revspace.nl -t &amp;quot;revspace/#&amp;quot; -v&lt;br /&gt;
or:&lt;br /&gt;
  (revspace internal or ipv6 server)&lt;br /&gt;
  mqtt-simple -h mosquitto.space.revspace.nl -s &amp;quot;revspace/#&amp;quot;&lt;br /&gt;
  # Alternatively: mosquitto_sub -h mosquitto.space.revspace.nl -t &amp;quot;revspace/#&amp;quot; -v&lt;br /&gt;
&lt;br /&gt;
== Server Side Events ==&lt;br /&gt;
&lt;br /&gt;
JavaScript example, see for example https://bewaar.me/mqtt/#&lt;br /&gt;
&lt;br /&gt;
 var stream = new EventSource(&#039;https://revspace.nl/mqtt?revspace%2F%23=&#039;);&lt;br /&gt;
 stream.onmessage = function(e) {&lt;br /&gt;
   var data = JSON.parse(e.data);&lt;br /&gt;
   if (data.length !== 3) throw &#039;invalid data&#039;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
* The power monitoring script is &#039;powerconverter&#039; and runs as &#039;power-mqtt&#039; user on gateway&lt;br /&gt;
* The music related events come from &#039;/home/bar/squeezen/now-playing.pl&#039; running as &#039;spaceloop&#039; on gateway (klopt dit nog?)&lt;br /&gt;
* The spacestate messages come from &#039;slmonitor&#039;, running as &#039;spaceloop&#039; on gateway&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32070</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32070"/>
		<updated>2024-01-27T20:50:29Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN (de ingaande CID bevat landcode, als je dus een gemiste oproep wilt terugbellen bel je inclusief landcode uit)&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
112 is expres niet in het dialplan, volgens A&amp;amp;A gaan calls naar 112 altijd via de eigenaar van de GSM-mast en niet via hun infra of de infra aan onze zijde. Mochten er een keer andere (vaste) toestellen aangesloten worden dan is het een goed idee om hier een regel voor te maken.&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== ledbanner ===&lt;br /&gt;
&lt;br /&gt;
==== aankondiging van gesprekken ====&lt;br /&gt;
&lt;br /&gt;
De CID wordt op de ledbanner getoond (inclusief censuuroverlay op de camera, zoals voor doorduino opt-outs) als er in wordt gebeld&lt;br /&gt;
&lt;br /&gt;
=== shell-bullseye ===&lt;br /&gt;
&lt;br /&gt;
==== ssh-tunnel ====&lt;br /&gt;
&lt;br /&gt;
De Asterisk-bak kan niet in het Revspace-net draaien omdat CheapConnect geen IPv6 doet, dus is er voor een hetzner bak gekozen dus moet er een tunnel draaien.&lt;br /&gt;
&lt;br /&gt;
===== /home/flimpie/.local/share/systemd/user/tunnel.service =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Unit]&lt;br /&gt;
Description=Tunnel revspace MQTT to revphone.flimpie.net&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/usr/bin/ssh -vvvv -p 20422 -i /home/flimpie/.ssh/id_rsa -NT -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 127.0.0.1:41883:mosquitto.space.revspace.nl:1883 portforward@revphone.flimpie.net&lt;br /&gt;
&lt;br /&gt;
# Restart every &amp;gt;2 seconds to avoid StartLimitInterval failure&lt;br /&gt;
RestartSec=5&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
==== ssh-tunnel ====&lt;br /&gt;
&lt;br /&gt;
===== /etc/ssh/sshd_config =====&lt;br /&gt;
&lt;br /&gt;
(alleen het relevante deel om de portforward user te sperren)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Match User portforward&lt;br /&gt;
  AllowTcpForwarding yes&lt;br /&gt;
  X11Forwarding no&lt;br /&gt;
  AllowAgentForwarding no&lt;br /&gt;
  ForceCommand /bin/false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ledbanner-scriptje ====&lt;br /&gt;
&lt;br /&gt;
===== /usr/local/bin/banner-cid.sh ===== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
NUMBER=$1&lt;br /&gt;
mosquitto_pub -h &amp;quot;127.0.0.1&amp;quot; -p 41883 -t &amp;quot;revspace/telefoon&amp;quot; -m &amp;quot;telefoon: $NUMBER&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== asterisk ====&lt;br /&gt;
&lt;br /&gt;
===== extensions.conf =====&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,System(/usr/bin/bash /usr/local/bin/banner-cid.sh ${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== pjsip.conf =====&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== /var/lib/asterisk/agi-bin/revspace-state.sh =====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32069</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32069"/>
		<updated>2024-01-27T20:46:34Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== ledbanner ===&lt;br /&gt;
&lt;br /&gt;
==== aankondiging van gesprekken ====&lt;br /&gt;
&lt;br /&gt;
De CID wordt op de ledbanner getoond (inclusief censuuroverlay op de camera, zoals voor doorduino opt-outs) als er in wordt gebeld&lt;br /&gt;
&lt;br /&gt;
=== shell-bullseye ===&lt;br /&gt;
&lt;br /&gt;
==== ssh-tunnel ====&lt;br /&gt;
&lt;br /&gt;
De Asterisk-bak kan niet in het Revspace-net draaien omdat CheapConnect geen IPv6 doet, dus is er voor een hetzner bak gekozen dus moet er een tunnel draaien.&lt;br /&gt;
&lt;br /&gt;
===== /home/flimpie/.local/share/systemd/user/tunnel.service =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Unit]&lt;br /&gt;
Description=Tunnel revspace MQTT to revphone.flimpie.net&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/usr/bin/ssh -vvvv -p 20422 -i /home/flimpie/.ssh/id_rsa -NT -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 127.0.0.1:41883:mosquitto.space.revspace.nl:1883 portforward@revphone.flimpie.net&lt;br /&gt;
&lt;br /&gt;
# Restart every &amp;gt;2 seconds to avoid StartLimitInterval failure&lt;br /&gt;
RestartSec=5&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
==== ssh-tunnel ====&lt;br /&gt;
&lt;br /&gt;
===== /etc/ssh/sshd_config =====&lt;br /&gt;
&lt;br /&gt;
(alleen het relevante deel om de portforward user te sperren)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Match User portforward&lt;br /&gt;
  AllowTcpForwarding yes&lt;br /&gt;
  X11Forwarding no&lt;br /&gt;
  AllowAgentForwarding no&lt;br /&gt;
  ForceCommand /bin/false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ledbanner-scriptje ====&lt;br /&gt;
&lt;br /&gt;
===== /usr/local/bin/banner-cid.sh ===== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
NUMBER=$1&lt;br /&gt;
mosquitto_pub -h &amp;quot;127.0.0.1&amp;quot; -p 41883 -t &amp;quot;revspace/telefoon&amp;quot; -m &amp;quot;telefoon: $NUMBER&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== asterisk ====&lt;br /&gt;
&lt;br /&gt;
===== extensions.conf =====&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,System(/usr/bin/bash /usr/local/bin/banner-cid.sh ${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== pjsip.conf =====&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== /var/lib/asterisk/agi-bin/revspace-state.sh =====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32068</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32068"/>
		<updated>2024-01-27T20:31:31Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== shell-bullseye ===&lt;br /&gt;
&lt;br /&gt;
==== ssh-tunnel ====&lt;br /&gt;
&lt;br /&gt;
De Asterisk-bak kan niet in het Revspace-net draaien omdat CheapConnect geen IPv6 doet, dus is er voor een hetzner bak gekozen dus moet er een tunnel draaien.&lt;br /&gt;
&lt;br /&gt;
===== /home/flimpie/.local/share/systemd/user/tunnel.service =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Unit]&lt;br /&gt;
Description=Tunnel revspace MQTT to revphone.flimpie.net&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/usr/bin/ssh -vvvv -p 20422 -i /home/flimpie/.ssh/id_rsa -NT -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 127.0.0.1:41883:mosquitto.space.revspace.nl:1883 portforward@revphone.flimpie.net&lt;br /&gt;
&lt;br /&gt;
# Restart every &amp;gt;2 seconds to avoid StartLimitInterval failure&lt;br /&gt;
RestartSec=5&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
==== asterisk ====&lt;br /&gt;
&lt;br /&gt;
===== extensions.conf =====&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== pjsip.conf =====&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== /var/lib/asterisk/agi-bin/revspace-state.sh =====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32067</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32067"/>
		<updated>2024-01-27T19:56:06Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
==== extensions.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pjsip.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== /var/lib/asterisk/agi-bin/revspace-state.sh ====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== test =====&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32066</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32066"/>
		<updated>2024-01-27T19:40:24Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
==== extensions.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pjsip.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== /var/lib/asterisk/agi-bin/revspace-state.sh ====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32065</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32065"/>
		<updated>2024-01-27T19:40:11Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
==== extensions.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== pjsip.conf ====&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /var/lib/asterisk/agi-bin/revspace-state.sh ===&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32064</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32064"/>
		<updated>2024-01-27T17:30:05Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuratie ==&lt;br /&gt;
&lt;br /&gt;
=== extensions.conf ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[inbound]&lt;br /&gt;
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call &#039;inbound&#039; using Gosub&lt;br /&gt;
exten =&amp;gt; s,1,NoOp()&lt;br /&gt;
exten =&amp;gt; s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)})&lt;br /&gt;
exten =&amp;gt; s,n,Answer()&lt;br /&gt;
exten =&amp;gt; s,n,AGI(revspace-state.sh)&lt;br /&gt;
exten =&amp;gt; s,n,Verbose(result is: ${open})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${open}&amp;quot; = &amp;quot;0&amp;quot;]?closed) ; jump to &amp;quot;sorry, nobody is available to take your call&amp;quot; if the space is closed&lt;br /&gt;
exten =&amp;gt; s,n,Ringing()&lt;br /&gt;
exten =&amp;gt; s,n,Dial(PJSIP/sip2sim,30)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
exten =&amp;gt; s,n(closed),Playback(sorry)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(nbdy-avail-to-take-call)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_epvpn]&lt;br /&gt;
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it&#039;s from the EPVPN DID rewrite it to a proper public phone number&lt;br /&gt;
rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; 7380,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
; if the caller number starts with 0000, it&#039;s from the DID, rerite the number&lt;br /&gt;
; if it doesnt start with 0000, it&#039;s internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones)&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot; != &amp;quot;0000&amp;quot;]?set(CALLERID(num)=00491999${CALLERID(num:1)}))&lt;br /&gt;
same = n,ExecIf($[&amp;quot;${CALLERID(NUM):0:4}&amp;quot;  = &amp;quot;0000&amp;quot;]?set(CALLERID(all)=&amp;lt;00${CALLERID(num):4}&amp;gt;))&lt;br /&gt;
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
same = n,Gosub(inbound,s,1)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
[inbound_pstn]&lt;br /&gt;
; rewrite CID before handling as normal inbound call&lt;br /&gt;
exten =&amp;gt; s,1,Set(OLDCID=${CALLERID(all)})&lt;br /&gt;
exten =&amp;gt; s,2,Set(OLDNUM=${CALLERID(num)})&lt;br /&gt;
&lt;br /&gt;
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don&#039;t know how A&amp;amp;A expects anonymous numbers)&lt;br /&gt;
exten =&amp;gt; s,3,ExecIf($[&amp;quot;${CALLERID(NUM):0:2}&amp;quot; != &amp;quot;00&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;&amp;quot;]?ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot;  != &amp;quot;anonymous&amp;quot;]?set(CALLERID(num)=0031${CALLERID(num):1}))))&lt;br /&gt;
exten =&amp;gt; s,4,ExecIf($[&amp;quot;${CALLERID(NUM)}&amp;quot; = &amp;quot;anonymous&amp;quot;]?set(CALLERID(all)=+3197999999999))&lt;br /&gt;
; another pain: numbers starting with + aren&#039;t handled properly&lt;br /&gt;
exten =&amp;gt; s,5,ExecIf($[&amp;quot;${OLDNUM:0:1}&amp;quot; = &amp;quot;+&amp;quot;]?set(CALLERID(num)=00${OLDNUM:1})))&lt;br /&gt;
exten =&amp;gt; s,6,Log(NOTICE, ${OLDNUM:0:1})&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to &amp;lt;${CALLERID(all)}&amp;gt;)&lt;br /&gt;
exten =&amp;gt; s,8,Gosub(inbound,s,1)&lt;br /&gt;
exten =&amp;gt; s,9,Hangup()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[phones]&lt;br /&gt;
;toestellen&lt;br /&gt;
exten =&amp;gt; 0198123456,1,Answer(500)&lt;br /&gt;
same = n,Playback(hello-world)&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN)&lt;br /&gt;
same = n,Set(CALLERID(all)=RevSpace&amp;lt;7380&amp;gt;)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45)&lt;br /&gt;
;same = n,Goto(s-${DIALSTATUS},1)&lt;br /&gt;
same = n,Log(NOTICE,${DIALSTATUS})&lt;br /&gt;
same = n,Hangup()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network)&lt;br /&gt;
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45)&lt;br /&gt;
same = n,HangUp()&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!)&lt;br /&gt;
same = n,Answer()&lt;br /&gt;
same = n,Playback(invalid)&lt;br /&gt;
same = n,Hangup()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pjsip.conf ===&lt;br /&gt;
&amp;lt;pre&amp;gt;[transport-udp-internet-v4]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=49.13.171.67:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[transport-udp-internet-v6]&lt;br /&gt;
type=transport&lt;br /&gt;
bind=[2a01:4f8:1c1b:56aa::1]:45060&lt;br /&gt;
protocol=udp&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=endpoint&lt;br /&gt;
transport=transport-udp-internet-v6&lt;br /&gt;
context=phones&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=alaw&lt;br /&gt;
aors=sip2sim&lt;br /&gt;
auth=sip2sim&lt;br /&gt;
direct_media=no&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=auth&lt;br /&gt;
auth_type=userpass&lt;br /&gt;
username=geheim&lt;br /&gt;
password=geheim&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=identify&lt;br /&gt;
endpoint=sip2sim&lt;br /&gt;
match=81.187.30.111 &lt;br /&gt;
match=81.187.30.113&lt;br /&gt;
match=2001:8b0:0:30:5060::1&lt;br /&gt;
match=2001:8b0:0:30:5060::3&lt;br /&gt;
match=81.187.30.112  &lt;br /&gt;
match=81.187.30.114 &lt;br /&gt;
match=2001:8b0:0:30:5060::2&lt;br /&gt;
match=2001:8b0:0:30:5060::4&lt;br /&gt;
&lt;br /&gt;
[sip2sim]&lt;br /&gt;
type=aor&lt;br /&gt;
max_contacts=1&lt;br /&gt;
&lt;br /&gt;
[epvpn]&lt;br /&gt;
type = registration&lt;br /&gt;
contact_user = 7380&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
server_uri = sip:hg.eventphone.de:5060&lt;br /&gt;
client_uri = sip:7380@hg.eventphone.de:5060&lt;br /&gt;
&lt;br /&gt;
[epvpn_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 7380&lt;br /&gt;
&lt;br /&gt;
[epvpn_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = epvpn_aor&lt;br /&gt;
context = inbound_epvpn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = epvpn_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = epvpn_endpoint&lt;br /&gt;
match=hg.eventphone.de&lt;br /&gt;
&lt;br /&gt;
[epvpn_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:hg.eventphone.de:5060&lt;br /&gt;
qualify_frequency = 30&lt;br /&gt;
&lt;br /&gt;
[cheapconnect]&lt;br /&gt;
type = registration&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
server_uri = sip:voip.cheapconnect.net:5060&lt;br /&gt;
client_uri = sip:31705690105@voip.cheapconnect.net:5060&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_auth]&lt;br /&gt;
type = auth&lt;br /&gt;
auth_type = userpass&lt;br /&gt;
password = geheim&lt;br /&gt;
username = 31705690105&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_endpoint]&lt;br /&gt;
type = endpoint&lt;br /&gt;
transport = transport-udp-internet-v4&lt;br /&gt;
aors = cheapconnect_aor&lt;br /&gt;
context = inbound_pstn&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = alaw&lt;br /&gt;
outbound_auth = cheapconnect_auth&lt;br /&gt;
direct_media = no&lt;br /&gt;
from_domain = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_identify]&lt;br /&gt;
type = identify&lt;br /&gt;
endpoint = cheapconnect_endpoint&lt;br /&gt;
match = voip.cheapconnect.net&lt;br /&gt;
&lt;br /&gt;
[cheapconnect_aor]&lt;br /&gt;
type = aor&lt;br /&gt;
contact = sip:voip.cheapconnect.net:5060&lt;br /&gt;
qualify_frequency = 30&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /var/lib/asterisk/agi-bin/revspace-state.sh ===&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open`&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]; then&lt;br /&gt;
  if [ &amp;quot;$STATE&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
    echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&lt;br /&gt;
    exit&lt;br /&gt;
  fi&lt;br /&gt;
  echo &#039;SET VARIABLE open &amp;quot;0&amp;quot;&#039;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# something went wrong when getting the spacestate, assume it is open (fail-safe)&lt;br /&gt;
echo &#039;SET VARIABLE open &amp;quot;1&amp;quot;&#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32063</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32063"/>
		<updated>2024-01-26T18:46:31Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh&#039;en naar poort 20422&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32062</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32062"/>
		<updated>2024-01-26T18:44:42Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=In progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang.&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32061</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32061"/>
		<updated>2024-01-26T18:43:41Z</updated>

		<summary type="html">&lt;p&gt;Sam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=eternally in progress&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang.&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32060</id>
		<title>Telefoon2.0</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Telefoon2.0&amp;diff=32060"/>
		<updated>2024-01-26T18:43:28Z</updated>

		<summary type="html">&lt;p&gt;Sam: Created page with &amp;quot;{{Project    |Name=Telefoon2.0    |Picture=Telefoon.jpg    |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)    |Status=Completed    |Contact=flimpie / eloy }}  Om voor in de...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Project&lt;br /&gt;
   |Name=Telefoon2.0&lt;br /&gt;
   |Picture=Telefoon.jpg&lt;br /&gt;
   |Omschrijving=+31 70 569 0105 / EPVPN REV0 (7380)&lt;br /&gt;
   |Status=Completed&lt;br /&gt;
   |Contact=flimpie / eloy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)&lt;br /&gt;
&lt;br /&gt;
== Gebruik ==&lt;br /&gt;
&lt;br /&gt;
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.&lt;br /&gt;
&lt;br /&gt;
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)&lt;br /&gt;
&lt;br /&gt;
== Dialplan (op volgorde) ==&lt;br /&gt;
&lt;br /&gt;
* `01999.`: naar EPVPN&lt;br /&gt;
* `+491999.`: naar EPVPN&lt;br /&gt;
* `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)&lt;br /&gt;
* terugvallen naar een &#039;dit mag je niet bellen&#039; recording&lt;br /&gt;
&lt;br /&gt;
== Bijbehorende infra ==&lt;br /&gt;
&lt;br /&gt;
=== revphone.flimpie.net ===&lt;br /&gt;
&lt;br /&gt;
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang.&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://revspace.nl/wiki/index.php?title=Treinonderdelen&amp;diff=23429</id>
		<title>Treinonderdelen</title>
		<link rel="alternate" type="text/html" href="https://revspace.nl/wiki/index.php?title=Treinonderdelen&amp;diff=23429"/>
		<updated>2019-11-18T18:55:26Z</updated>

		<summary type="html">&lt;p&gt;Sam: added extra thinga for myself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  {{Project&lt;br /&gt;
   |Name=Treinonderdelen&lt;br /&gt;
   |Status=Initializing&lt;br /&gt;
   |Picture=Schermafbeelding 2019-11-16 om 18.05.47.png&lt;br /&gt;
   |Contact=Sebastius&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
We kunnen als groep mogelijk treinonderdelen kopen.&lt;br /&gt;
=Catalogus=&lt;br /&gt;
[[:File:Oogstkaarten SGM-NS-Nov 2019.pdf]]&lt;br /&gt;
=Coordinatie=&lt;br /&gt;
Sebastius neemt de coordinatie op zich en de financiele afhandeling. Als dit lukt is er wel vervoer nodig, dus een flinke bus of meerdere auto&#039;s, naar een nog onbekende bestemming op een nog onbekende datum ergens in Nederland. &lt;br /&gt;
&lt;br /&gt;
=Inschrijflijst=&lt;br /&gt;
We gaan er van uit dat je commit. Dus inschrijven == betalen en meedoen/meehelpen. Wat ons betreft kunnen we voor elk onderdeel wel een aanmeldtabel maken, maar we beginnen met de displays. We moeten een bod doen. Het kan dus zomaar zijn dat ons bod te laag is of dat we overboden worden. Dan komen we er op terug. &lt;br /&gt;
&lt;br /&gt;
==Treindisplay intern==&lt;br /&gt;
Minimumafname 100 stuks, a 35 euro per stuk (dat is het minimale bod per unit). &lt;br /&gt;
&lt;br /&gt;
[[File:Schermafbeelding 2019-11-16 om 18.05.47.png|right|400px]]&lt;br /&gt;
* Beschikbaarheid  &lt;br /&gt;
**   Totale aantal: 1908 Afname mogelijk: 492 Frequentie: Per tranche   &lt;br /&gt;
** Min. afname: 100 stuks Locatie: n.t.b.  &lt;br /&gt;
* Specificaties  &lt;br /&gt;
**  Materiaal: Aluminium, PC, RVS  &lt;br /&gt;
** Lengte: 707 mm Breedte: 121 mm Diepte:60 mm  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nickname !! Hackerspace !! How to contact !! Number of units&lt;br /&gt;
|-&lt;br /&gt;
| Sebastius || Revspace || IRC #revspace Sebastius || 3&lt;br /&gt;
|-&lt;br /&gt;
| Jolo || Bitlair || TBA (via polyfloyd) || 1&lt;br /&gt;
|-&lt;br /&gt;
| h3x4d3c1m4l || Revspace || Telegram @h3x4d3c1m4l || 2&lt;br /&gt;
|-&lt;br /&gt;
| minicom || Revspace || IRC minicom || 1&lt;br /&gt;
|-&lt;br /&gt;
| Niels || via minicom || IRC minicom || 1&lt;br /&gt;
|-&lt;br /&gt;
| PBX || Revspace || PBX || 1&lt;br /&gt;
|-&lt;br /&gt;
| Bef0re || Revspace || bef0re || 3&lt;br /&gt;
|-&lt;br /&gt;
| Martian || TkkrLab / Hackalot || IRC #tkkrlab martian || 1&lt;br /&gt;
|-&lt;br /&gt;
| Archels || Hack42|| Archels in #hack42 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Boots || nurdspace || IRC #nurds Boots  || 1&lt;br /&gt;
|-&lt;br /&gt;
| thomas || Revspace || IRC #revspace thomastheo || 1&lt;br /&gt;
|-&lt;br /&gt;
| pietdv || Revspace || piet_at_devae.re || 2&lt;br /&gt;
|-&lt;br /&gt;
| rad0 || TechInc || ? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Wizzup || TechInc || ? || 1&lt;br /&gt;
|-&lt;br /&gt;
| eightdot || Bitlair || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| Wheeze_NL || RevSpace || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| Xesxen || Hackalot || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Flimpie || via Polyfloyd || Telegram @flippylosaurus || 4&lt;br /&gt;
|-&lt;br /&gt;
| Bix || Hack42 || IRC || 4&lt;br /&gt;
|-&lt;br /&gt;
| CrazyA || Frack || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Dreamer || NurdSpace || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Stoneshop || Hack42 || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| qguv || Revspace || IRC qguv@freenode || 1&lt;br /&gt;
|-&lt;br /&gt;
| Gopper || Bitlair || Telegram @robmans || 2&lt;br /&gt;
|-&lt;br /&gt;
| XNDR || RevSpace || Phone || 8&lt;br /&gt;
|-&lt;br /&gt;
| FooBar || Revspace || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| Sake Blok || badge.team || telegram @kolbekas || 1&lt;br /&gt;
|-&lt;br /&gt;
| Kevin || via minicom || Telegram @GKHill || 1&lt;br /&gt;
|-&lt;br /&gt;
| You? || ? || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Current Total ||  ||  || 50&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Noodremhandel==&lt;br /&gt;
[[File:Schermafbeelding 2019-11-16 om 22.37.12.png|right|400px]]&lt;br /&gt;
Minimale afname: 50 stuks a 10 euro per stuk (marge om een bod te kunnen doen)&lt;br /&gt;
*Beschikbaarheid&lt;br /&gt;
**Totale aantal: 1329 Afname mogelijk: 740 Frequentie: Per tranche &lt;br /&gt;
**Min. afname:50 stuks Locatie: nntb&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nickname !! Hackerspace !! How to contact !! Number of units&lt;br /&gt;
|-&lt;br /&gt;
| Sebastius || Revspace || ? || 2&lt;br /&gt;
|-&lt;br /&gt;
| Benadski || Revspace || ? || 4&lt;br /&gt;
|-&lt;br /&gt;
| Boekenwuurm || Revspace || ? || 2&lt;br /&gt;
|-&lt;br /&gt;
| Juerd || Revspace || ? || 1&lt;br /&gt;
|-&lt;br /&gt;
| PBX || Revspace || ? || 2&lt;br /&gt;
|-&lt;br /&gt;
| Lucanator || Revspace || ? || 1&lt;br /&gt;
|-&lt;br /&gt;
| minicom || Revspace || IRC minicom || 1&lt;br /&gt;
|-&lt;br /&gt;
| Niels || via minicom || IRC minicom || 1&lt;br /&gt;
|-&lt;br /&gt;
| Quint (not qguv) || via minicom || IRC minicom || 1&lt;br /&gt;
|-&lt;br /&gt;
| H3x&amp;lt;tab&amp;gt;|| Revspace || ? || 2&lt;br /&gt;
|-&lt;br /&gt;
| thomas || Revspace || ? || 2&lt;br /&gt;
|-&lt;br /&gt;
| cmpxchg || Revspace || ? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Martian || TkkrLab / Hackalot || IRC #tkkrlab martian || 2&lt;br /&gt;
|-&lt;br /&gt;
| Archels || Hack42|| Archels in #hack42 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Muse || TechInc|| userpage op techinc wiki || 4&lt;br /&gt;
|-&lt;br /&gt;
| polyfloyd || Bitlair || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| rowan8k || Revspace || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| eightdot || Bitlair || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| forseti || Bitlair || IRC #bitlair || 2&lt;br /&gt;
|-&lt;br /&gt;
| effractuur || ? || IRC || 10&lt;br /&gt;
|-&lt;br /&gt;
| bertrik || Revspace || IRC #revspace || 1&lt;br /&gt;
|-&lt;br /&gt;
| Xesxen || Hackalot || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| jelly || Revspace || IRC #revspace || 1&lt;br /&gt;
|-&lt;br /&gt;
| Stoneshop || Hack42 || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| Dreamer || Nurdspace || IRC || 3&lt;br /&gt;
|-&lt;br /&gt;
| Kartoffel || Revspace || IRC #revspace || 1&lt;br /&gt;
|-&lt;br /&gt;
| Anus || Revspace || IRC #revspace || 1&lt;br /&gt;
|-&lt;br /&gt;
| Katje || TechInc || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Renze || Tkkrlab || Telegram @r3nz3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| Ultratux || Techinc || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Molenaar || Revspace || e-mail/wiki || 2&lt;br /&gt;
|-&lt;br /&gt;
| Gopper || Bitlair || Telegram @robmans || 2&lt;br /&gt;
|-&lt;br /&gt;
| Linor || Bitlair || IRC #bitlair || 1&lt;br /&gt;
|-&lt;br /&gt;
| Sake Blok || badge.team || telegram @kolbekas || 1&lt;br /&gt;
|-&lt;br /&gt;
| Pwuts || Revspace || IRC || 4&lt;br /&gt;
|-&lt;br /&gt;
| Braldt || via minicom || Telegram @Braldt || 1&lt;br /&gt;
|-&lt;br /&gt;
| Hans || via minicom || ? || 1&lt;br /&gt;
|-&lt;br /&gt;
| Casper || via minicom || Telegram @MrSnowman || 1&lt;br /&gt;
|-&lt;br /&gt;
| Kevin || via minicom || Telegram @GKHill || 1&lt;br /&gt;
|-&lt;br /&gt;
| Flimpie || via PolyFloyd || Telegram @flippylosaurus || 1&lt;br /&gt;
|-&lt;br /&gt;
| You? || ? || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Current Total ||  ||  || 73&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Deurbedieningspaneel==&lt;br /&gt;
minimale afname 50 stuk, bod 10,- p/s&lt;br /&gt;
[[File:Screenshot_2019-11-17_Oogstkaarten_SGM_-_Oogstkaarten_SGM-NS-Nov_2019_pdf.png|right|400px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nickname !! Hackerspace !! How to contact !! Number of units&lt;br /&gt;
|-&lt;br /&gt;
| webmind || techinc || irc || 2&lt;br /&gt;
|-&lt;br /&gt;
| Wizzup || techinc || irc || 3&lt;br /&gt;
|-&lt;br /&gt;
| polyfloyd || Bitlair || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| eightdot || Bitlair || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| effractuur || ? || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| minicom + Niels || RevSpace || irc || 2&lt;br /&gt;
|-&lt;br /&gt;
| Wheeze_NL || RevSpace || irc || 2&lt;br /&gt;
|-&lt;br /&gt;
| Xesxen || Hackalot || irc || 2&lt;br /&gt;
|-&lt;br /&gt;
| Stoneshop || Hack42 || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Anus || Revspace || IRC #revspace || 1&lt;br /&gt;
|-&lt;br /&gt;
| Katje || TechInc || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Ultratux || Techinc || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| Boekenwuurm || Hackalot || irc || 1&lt;br /&gt;
|-&lt;br /&gt;
| Gopper || Bitlair || Telegram @robmans || 2&lt;br /&gt;
|-&lt;br /&gt;
| Linor || Bitlair || IRC #bitlair || 2&lt;br /&gt;
|-&lt;br /&gt;
| Pwuts || Revspace || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Braldt || via minicom || Telegram @Braldt || 1&lt;br /&gt;
|-&lt;br /&gt;
| holysn0w || via minicom || Telegram @holysn0w || 1&lt;br /&gt;
|-&lt;br /&gt;
| Casper || via minicom || Telegram @MrSnowman || 1&lt;br /&gt;
|-&lt;br /&gt;
| Kevin || via minicom || Telegram @GKHill || 2&lt;br /&gt;
|-&lt;br /&gt;
| Flimpie || via PolyFloyd || Telegram @flippylosaurus || 2&lt;br /&gt;
|-&lt;br /&gt;
| Current Total ||  ||  || 31&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Treindisplay extern (It&#039;s bigger!)==&lt;br /&gt;
Minimumafname 60 stuks, a 25 euro per stuk (dat is het minimale bod per unit met een beetje marge). &lt;br /&gt;
[[File:Treindisplay extern.png|thumb|right|400px]]&lt;br /&gt;
* Beschikbaarheid  &lt;br /&gt;
**   Totale aantal: 348 Afname mogelijk: 200 Frequentie: Per tranche   &lt;br /&gt;
** Min. afname: 60 stuks Locatie: n.t.b.  &lt;br /&gt;
* Specificaties  &lt;br /&gt;
**  Materiaal: Aluminium, PC, RVS  &lt;br /&gt;
** Lengte: 1002 mm Breedte: 206 mm Diepte: 66,5 mm  &lt;br /&gt;
** Display: 160,7 x 948 mm&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nickname !! Hackerspace !! How to contact !! Number of units&lt;br /&gt;
|-&lt;br /&gt;
| Wheeze_NL || RevSpace || IRC || 2&lt;br /&gt;
|-&lt;br /&gt;
| minicom (Niels) || RevSpace || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| Dreamer || Nurdspace || IRC || 1&lt;br /&gt;
|-&lt;br /&gt;
| h3x4d3c1m4l || RevSpace || Telegram @h3x4d3c1m4l || 2&lt;br /&gt;
|-&lt;br /&gt;
| Meathur || via f0x || Telegram @Meathur || 1&lt;br /&gt;
|-&lt;br /&gt;
| Eightdot || Bitlair || IRC || 2 &lt;br /&gt;
|-&lt;br /&gt;
| Flimpie || via PolyFloyd || Telegram @flippylosaurus || 2&lt;br /&gt;
|-&lt;br /&gt;
| You? || ? || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Current Total ||  ||  || 9&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
</feed>